UNPKG

react-box-tools

Version:

Box tools react components, utils and hooks

2 lines (1 loc) 2.81 kB
"use strict";var I=Object.defineProperty;var O=(r,t,o)=>t in r?I(r,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[t]=o;var a=(r,t,o)=>O(r,typeof t!="symbol"?t+"":t,o);const C=require("react/jsx-runtime"),d=require("react"),E=require("./useUpdateEffect-DyqkA7tm.cjs"),y=require("./object-DiX8vFow.cjs"),D=require("./service-DqbdAacn.cjs"),k=r=>{const{validation:{schema:t,delay:o=100,initOnMount:f},initValues:u}=r,[e,i]=d.useState({values:u,error:{},touchedFields:[],ok:!1,isValid:!1,isSubmitting:!1}),{touchedFields:n,isValid:v,isSubmitting:m}=e,F=y.deepCopy(u),{culture:P}=D.useI18n(),h=new S;let b=0;function R(s){return{"field-name":s}}function N(s){return s["field-name"]}const T=async(s,V)=>(clearTimeout(b),new Promise(l=>{b=setTimeout(async()=>{n.includes(s)||(e.touchedFields=[...n,s]);try{e.values={...e.values,[s]:V};const c=await t.validate(e.values);c.ok?(e.isValid=!0,e.error={},e.values=c.data,e.ok||(e.ok=!0,i({...e}))):(e.isValid&&(e.isValid=!1,e.ok&&(e.ok=!1,i({...e}))),e.error=c.validation.getFieldError(n))}catch{e.error={}}l({name:s,error:y.getObjPropertyValue(e.error,s)})},o)})),U=async s=>{e.isSubmitting=!0,i({...e}),await s(e.values,{reset:x,clear:p}),e.isSubmitting=!1,i({...e})},x=()=>{e.values={...F},w(),h.resetNotify()},p=()=>{e.values={...y.deepClear(F)},w(),h.clearNotify()},w=()=>{e.ok=!1,e.touchedFields=[],e.error={},f&&g(),i({...e})},g=s=>{const V=setTimeout(async()=>{const l=await t.validate(e.values);l.ok?(e.isValid=!0,e.error={},e.values=l.data):(e.isValid=!1,e.error=l.validation.getFieldError()),i({...e}),clearTimeout(V)},s??o);return e};return E.useUpdateEffect(()=>{f&&g()},[]),E.useUpdateEffect(()=>{n.length>0&&g(0)},[P]),{validateField:T,initValues:F,values:e.values,error:e.error,isValid:v,isSubmitting:m,event:h,submit:U,reset:x,clear:p,registerField:R,getRegisteredField:N}};class S{constructor(){a(this,"clears",new Set);a(this,"resets",new Set);a(this,"onClear",t=>{this.clears.add(t)});a(this,"clearNotify",()=>{this.clears.forEach(t=>{t()}),console.log(this.clears)});a(this,"onReset",t=>(this.resets.add(t),()=>this.clears.delete(t)));a(this,"resetNotify",()=>{this.resets.forEach(t=>{t()})})}}const j={registerField:()=>({"field-name":""}),validateField:()=>new Promise(()=>{}),getRegisteredField:()=>"",clear:()=>{},reset:()=>{},error:{},initValues:{},values:{},isValid:!1,isSubmitting:!1,event:new S},q=d.createContext(j);function H(){return d.useContext(q)??j}function M(r){const{children:t,innerRef:o,initValues:f,onSubmit:u,...e}=r,i=k({...r});d.useImperativeHandle(o,()=>({...i}));const n=async m=>{m.preventDefault(),await i.submit(u)},v={...i};return C.jsx(q.Provider,{value:v,children:C.jsx("form",{autoComplete:"off",...e,onSubmit:n,children:t})})}exports.Form=M;exports.FormEventService=S;exports.useForm=k;exports.useFormContext=H;