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