use-state-validate
Version:
Clean featherweight state validation
1 lines • 3.21 kB
JavaScript
;var __rest=this&&this.__rest||function(e,r){var t={};for(a in e)Object.prototype.hasOwnProperty.call(e,a)&&r.indexOf(a)<0&&(t[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var l=0,a=Object.getOwnPropertySymbols(e);l<a.length;l++)r.indexOf(a[l])<0&&Object.prototype.propertyIsEnumerable.call(e,a[l])&&(t[a[l]]=e[a[l]]);return t};Object.defineProperty(exports,"__esModule",{value:!0}),exports.defineConfig=exports.ruleZip=exports.rulePhone=exports.ruleNumeric=exports.ruleMatch=exports.ruleLength=exports.ruleEnum=exports.ruleEmail=exports.fieldBagTraverse=exports.fieldBagReduceToValues=exports.fieldBagValid=exports.fieldBagChanged=exports.useStateValidate=void 0;const react_1=require("react"),useStateValidate=(t,l)=>{const[e,r]=(0,react_1.useState)(deriveFieldObject(t,t,l)),a=(0,react_1.useRef)(e),u=(0,react_1.useRef)(!1);let i=(0,react_1.useRef)();const s=()=>clearTimeout(i.current),c=e=>{a.current=Object.assign(Object.assign({},a.current),e),r(a.current)},d=()=>{s(),c(deriveFieldObject(t,t,l))},o=e=>{s(),c({cue:e,cueInvalid:e&&!a.current.valid})};return(0,react_1.useEffect)(()=>{u.current&&c(deriveFieldObject(t,e.value,l,a.current.cue))},l.deps||[]),(0,react_1.useEffect)(()=>(u.current&&d(),u.current=!0,s),[t]),Object.assign(Object.assign({},e),{restore:d,setCue:o,setValue:e=>{s();let r=a.current["cue"];0===l.cueDelay?r=!0:l.cueDelay&&(r=!1,i.current=setTimeout(()=>{o(!0)},l.cueDelay)),c(deriveFieldObject(t,e,l,r))}})},deriveFieldObject=(exports.useStateValidate=useStateValidate,(e,r,t,l)=>{var{label:a,required:u,rules:i}=t,t=__rest(t,["cueDelay","deps","label","required","rules"]),i=(void 0===l&&(l=!1),validate(r,{label:a,required:u,rules:i})),s=0===i.length;return Object.assign({changed:e!==r,cue:l,cueInvalid:l&&!s,errors:i,label:a||"",required:!!u,valid:s,value:r},t)}),validate=(t,r)=>{const l=r.label||"Field";return[[e=>!r.required||0===e||!!e,"boolean"!=typeof r.required&&r.required||l+" is required"],...r.rules||[]].map(([e,r])=>!e(t)&&(r||l+" is invalid")).filter(Boolean)},fieldBagChanged=e=>Object.values(e).every(({changed:e})=>e),fieldBagValid=(exports.fieldBagChanged=fieldBagChanged,e=>Object.values(e).every(({valid:e})=>e)),fieldBagReduceToValues=(exports.fieldBagValid=fieldBagValid,e=>Object.entries(e).reduce((e,[r,t])=>(e[r]=t.value,e),{})),fieldBagTraverse=(exports.fieldBagReduceToValues=fieldBagReduceToValues,(e,r)=>Object.values(e).forEach(r)),ruleEmail=(exports.fieldBagTraverse=fieldBagTraverse,()=>e=>/^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/.test(e)),ruleEnum=(exports.ruleEmail=ruleEmail,r=>e=>-1<r.indexOf(e)),ruleLength=(exports.ruleEnum=ruleEnum,({min:r,max:t})=>e=>(r||0)<=e.length&&e.length<=(t||Number.MAX_SAFE_INTEGER)),ruleMatch=(exports.ruleLength=ruleLength,r=>e=>r.test(e)),ruleNumeric=(exports.ruleMatch=ruleMatch,()=>e=>!isNaN(e)),rulePhone=(exports.ruleNumeric=ruleNumeric,()=>(0,exports.ruleMatch)(/^[\+]?[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}$/)),ruleZip=(exports.rulePhone=rulePhone,()=>(0,exports.ruleMatch)(/^[0-9]{5}(?:-[0-9]{4})?$/)),defineConfig=(exports.ruleZip=ruleZip,e=>e);exports.defineConfig=defineConfig,exports.default=exports.useStateValidate;