UNPKG

@steveesamson/microform

Version:

`microform` is a tiny library for managing forms in `svelte/sveltekit`.

49 lines (48 loc) 1.43 kB
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;