@steveesamson/microform
Version:
`microform` is a tiny library for managing forms in `svelte/sveltekit`.
49 lines (48 loc) • 1.43 kB
JavaScript
import { formStore } from './internal.svelte.js';
import { formAction } from './form-action.svelte.js';
const microform = (props) => {
// form default values
const defaultOptions = {
validateEvent: 'blur',
validators: {},
fieldWaitTimeInMilliSecond: 200,
debug: false
};
const { options: userOptions = {}, data = {} } = props || {};
const options = { ...defaultOptions, ...userOptions };
// form state
const { values, errors, unfits, reset, sanity, validationMap } = formStore(data);
const form = formAction(values, errors, unfits, (_sanity) => {
sanity.ok = _sanity;
}, options, validationMap);
const handleSubmit = (e, handler) => {
e.preventDefault();
if (!sanity.ok)
return;
handler({ ...values });
};
const onsubmit = (handler) => {
return (e) => {
handleSubmit(e, handler);
};
};
const submit = (formNode, handler) => {
$effect(() => {
const localHandler = (e) => {
handleSubmit(e, handler);
};
formNode.addEventListener('submit', localHandler);
return () => formNode.removeEventListener('submit', localHandler);
});
};
return {
values,
errors,
sanity,
form,
submit,
onsubmit,
reset
};
};
export default microform;