koval-ui
Version:
React components collection with minimalistic design. Supports theming, layout, and input validation.
3 lines (2 loc) • 1.96 kB
JavaScript
"use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react"),x=require("awesome-debounce-promise"),u=require("./ValidationProps.cjs"),k=require("./defaultValidator.cjs"),q=require("./useHandleFormReset.cjs"),m=require("./getFormState.cjs"),S=(e,a)=>a==="interactive"?e.target.checked:e.target.value,F=({validatorFn:e,reportValidity:a,setValidity:y})=>{const i=s.useCallback((c,t)=>{const o=S(t,c),V=m.getFormState(t.target.form),l=e?.(o,t.target.validity,V);t.target.setCustomValidity(l),a(t)},[e,a]),d=s.useCallback(()=>{},[]),n=s.useCallback(x(e,1e3),[e]),g=s.useCallback(async(c,t)=>{t.target.setCustomValidity("");const o=S(t,c),V=m.getFormState(t.target.form);y(u.ValidationState.inProgress);let l="";try{l=await n(o,t.target.validity,V)}catch(r){t.target.setCustomValidity(r)}t.target.setCustomValidity(l),a(t)},[y,n,a]);return{createValidatorSync:i,createValidatorAsync:g,createValidatorExternal:d}},p=e=>typeof e=="function"?e:k.defaultValidator,w=e=>e?.constructor.name==="AsyncFunction"?"async":typeof e=="string"?"external":"sync",A=({validation:e,hasValidators:a})=>{const y=p(e),i=w(e),[d,n]=s.useState(u.ValidationState.pristine);q.useHandleFormReset(n);const g=s.useCallback(r=>{const f=r.target.reportValidity(),b=a?u.ValidationState.valid:u.ValidationState.pristine,C=f?b:u.ValidationState.error;(a||d===u.ValidationState.error)&&n(C)},[a,d]),{createValidatorAsync:c,createValidatorSync:t,createValidatorExternal:o}=F({validatorFn:y,reportValidity:g,setValidity:n}),V=s.useCallback(r=>{switch(i){case"sync":return t("interactive",r);case"async":return c("interactive",r);case"external":return o()}},[c,o,t,i]),l=s.useCallback(r=>{switch(i){case"sync":return t("textual",r);case"async":return c("textual",r);case"external":return o()}},[i,t,c,o]);return{validateInteractive:V,validateTextual:l,validity:d,setValidity:n}};exports.useValidation=A;
//# sourceMappingURL=useValidation.cjs.map