Spaces:
Running
Running
// this action (https://svelte.dev/tutorial/actions) allows us to | |
// progressively enhance a <form> that already works without JS | |
export function enhance(form, { pending, error, result }) { | |
let current_token; | |
async function handle_submit(e) { | |
const token = (current_token = {}); | |
e.preventDefault(); | |
const body = new FormData(form); | |
if (pending) pending(body, form); | |
try { | |
const res = await fetch(form.action, { | |
method: form.method, | |
headers: { | |
accept: 'application/json' | |
}, | |
body | |
}); | |
if (token !== current_token) return; | |
if (res.ok) { | |
result(res, form); | |
} else if (error) { | |
error(res, null, form); | |
} else { | |
console.error(await res.text()); | |
} | |
} catch (e) { | |
if (error) { | |
error(null, e, form); | |
} else { | |
throw e; | |
} | |
} | |
} | |
form.addEventListener('submit', handle_submit); | |
return { | |
destroy() { | |
form.removeEventListener('submit', handle_submit); | |
} | |
}; | |
} | |