@bgscore/react-form 1.0.31 → 1.0.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +10 -7
- package/dist/index.d.ts +10 -7
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var ne=require('react'),jsxRuntime=require('react/jsx-runtime'),reactCore=require('@bgscore/react-core'),reactHookForm=require('react-hook-form');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var ne__default=/*#__PURE__*/_interopDefault(ne);var q=ne.createContext(void 0);function v(){let e=ne.useContext(q);return e||{}}function B({children:e,controller:n,onSubmit:o,onFieldChange:s=()=>{}}){let l={...n,triggerSubmit:async(i,m)=>{n.setIsSubmit(true);let d=m?await n.formControl.trigger():true,r=n.getData();d&&o&&o({...r,...i},{...n});},onFieldChange:s};return jsxRuntime.jsx(q.Provider,{value:l,children:e})}var O=new WeakMap;function V(e){return O.has(e)||O.set(e,reactCore.createStore({})),O.get(e)}function U(e){if(typeof e!="object"||e===null||Array.isArray(e))return e;let n={};for(let[o,s]of Object.entries(e))if(o.includes(".")){let u=o.split("."),l=n;for(let i=0;i<u.length;i++){let m=u[i];i===u.length-1?l[m]=U(s):((!l[m]||typeof l[m]!="object")&&(l[m]={}),l=l[m]);}}else n[o]=U(s);return n}function K(){return reactCore.createTable({name:"draft",primaryKey:"field_1731131919872_aj29d"})}var Q=ne.createContext(void 0);function A(){let e=ne.useContext(Q);return e||{}}function H({children:e,value:n}){return jsxRuntime.jsx(Q.Provider,{value:n,children:e})}function W(){let{dbName:e="bgs-react-form"}=A();return reactCore.createDatabase({dbName:e,table:{draft:K()}})}function _(e){let n=W(),o=reactCore.useDbLiveFlag(n.draft.detail,{key:e}),s=async(i,m)=>{let r={...await l(),...i};Object.keys(r).forEach(g=>{reactCore.isNotEmpty(r[g])||delete r[g];});let a=Object.keys(r);if(a.length===1&&a[0]==="field_1731131919872_aj29d")return u();a.some(g=>g!=="field_1731131919872_aj29d"&&r[g]!==reactCore.getFieldValue(m,g))?await n.draft.put(e,r):await u();},u=async()=>{await n.draft.remove(e);},l=async()=>await n.draft.detail(e);return {isDraft:o,saveDraft:s,removeDraft:u,getDataDraft:l}}var Y=(e={})=>{e.defaultValues||(e.defaultValues={}),e.defaultValues=U(e.defaultValues);let n=ne.useRef(null),[o,s]=ne.useState(false),u=e?.draftKey,l=u?_(u):void 0,i=ne.useRef([]),m=ne.useCallback(f=>{let F=i.current.findIndex(p=>p.id===f.id);if(F>-1){let p=[...i.current];p[F]=f,i.current=[...p];}else i.current.push(f);},[i]),d=ne.useCallback(f=>{i.current=i.current.filter(F=>F.id!==f);},[]),r=reactHookForm.useForm({reValidateMode:"onSubmit",mode:"all",...e}),a=V(r),c=ne.useMemo(()=>reactCore.generateUUID(),[]),g=f=>f?reactCore.getFieldValue(reactCore.mappingUndefinedtoNull(r.getValues()),f):reactCore.mappingUndefinedtoNull(r.getValues()),b=f=>{f?typeof f=="string"?r.resetField(f,{}):typeof f=="object"&&reactCore.isArray(f,0)&&f.forEach(F=>r.resetField(F)):r.reset();},P={...r,ref:n,reset:b,updateData:(f,F)=>{let p=g();r.reset(U({...p,...f}),F);},getData:g,formControl:r,useFieldArray:f=>reactHookForm.useFieldArray({control:r.control,name:f}),useWatch:f=>reactHookForm.useWatch({control:r.control,name:f}),isSubmit:o,formId:c,setIsSubmit:s,useSelected:f=>a.useStore(F=>reactCore.getFieldValue(F,f)),setSelected:a.setState,isDraft:!!l?.isDraft,removeDraft:()=>{l?.removeDraft?.();},resetDraft:()=>{l?.removeDraft?.(),b();},saveDraft:(...f)=>l?.saveDraft?.(...f),getDataDraft:()=>l?.getDataDraft?.(),draftKey:u,registerItem:m,unregisterItem:d,items:i.current,getItems:()=>i.current};return [P,P]};var je=({onSubmit:e,onChange:n,onInvalid:o,onFieldChange:s,formData:u,controller:l,children:i,...m})=>{u&&(u=U(u));let d=l??Y({draftKey:m.draftKey}),[r]=Array.isArray(d)?d:[d],a=r.draftKey,c=ne.useRef(true),g=ne.useRef(void 0),{autoSaveDelay:b=.5}=A(),P=async t=>{t.preventDefault(),t.stopPropagation(),r.setIsSubmit(true);let y=await r.formControl.trigger(),x=r.getData();y?e&&e({...x},{...r}):o&&o(r.formControl.formState.errors);},f=async()=>{if(!a)return;let t=await r.getDataDraft();t&&Object.entries(t).forEach(([y,x])=>{y==="field_1731131919872_aj29d"||!reactCore.isNotEmpty(x)||(r.setValue(y,x),r.trigger(y));});},F=()=>{if(u){let t={...u};reactCore.diffJson(g.current||{},t)&&(r.updateData(t),g.current=t,setTimeout(f,0));}};ne.useEffect(()=>{F();},[u,r.formControl.reset]),ne.useEffect(()=>{if(!n)return;let t=r.formControl.watch((y,x)=>n(y,x,r));return ()=>t.unsubscribe()},[]),ne.useEffect(()=>{c.current=true;},[a]),ne.useEffect(()=>{c.current&&r?.isDraft&&(c.current=false,f());},[r.isDraft,a]);let p=ne.useMemo(()=>reactCore.debounce((t,y,x)=>{x?.saveDraft?.({[t]:y},u);},b),[u,b]),h=async(t,y,x)=>{s?.(t,y,x),p(t,y,x);},T={...m};return delete T?.draftKey,jsxRuntime.jsx(jsxRuntime.Fragment,{children:jsxRuntime.jsx(B,{controller:{...r,disabled:m?.disabled,readOnly:m?.readOnly},onSubmit:e,onFieldChange:h,children:jsxRuntime.jsx("form",{...T,id:r.formId,ref:r.ref,onSubmit:P,children:i})})})},re=je;var te=ne.createContext(void 0);function G(){let e=ne.useContext(te);return e||{}}function N({children:e,...n}){return jsxRuntime.jsx(te.Provider,{value:n,children:e})}var oe=e=>{let n=v(),o=reactHookForm.useFieldArray({control:n.control,name:e}),u={formArrayId:ne.useMemo(()=>reactCore.generateUUID(),[]),...o,...n};return [u,u]};var ae=({name:e,defaultData:n,controller:o,children:s})=>{let u=o??oe(e),[l]=Array.isArray(u)?u:[u];return ne.useEffect(()=>{typeof n=="boolean"&&n?l.append({}):typeof n=="number"&&n>0?l.append([...Array(n).fill(null).map(()=>({}))]):typeof n=="object"&&n&&l.append(n);},[]),jsxRuntime.jsx(jsxRuntime.Fragment,{children:l.fields.map((i,m)=>{let d=`${e}.${m}.`,r={...l,index:m,fieldId:i.id,name:d,countFields:l.fields.length,removeItem:()=>l.remove(m),watchItem:a=>l.watch(a?`${d}${a}`:d.slice(0,-1)),setValueItem:(a,c)=>l.setValue(`${d}${a}`,c),useSelectedItem:a=>l.useSelected(`${d}${a}`)};return jsxRuntime.jsx(ne__default.default.Fragment,{children:jsxRuntime.jsx(N,{...r,children:reactCore.renderChildren(s,r)})},i.id)})})};ae.displayName="BgsFormArray";var Xe=ae;ne__default.default.memo(({children:e,props:n})=>jsxRuntime.jsx(jsxRuntime.Fragment,{children:reactCore.renderChildren(e,n)}));var me=ne.createContext(void 0);function k(){let e=ne.useContext(me);return e||{}}function M({children:e,...n}){return jsxRuntime.jsx(me.Provider,{value:n,children:e})}var le=({children:e,...n})=>{let o=v(),s=ne.useMemo(()=>reactCore.generateUUID(),[]);return jsxRuntime.jsx(jsxRuntime.Fragment,{children:jsxRuntime.jsx(M,{...o,...n,formGroupId:s,children:e})})};le.displayName="BgsFormGroup";var nr=le;var ar=/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;function L({validationRules:e,label:n},o,s){let{formControl:u,getData:l}=o,i=[];return e&&(typeof e=="string"?ue(s,e,true,n,u,l,{}).forEach(m=>i.push(m)):typeof e=="object"&&Object.keys(e).forEach(m=>{let{validate:d}=i.find(a=>a.validate)||{};if(["minLength","maxLength","min","max","match","diff","regexp","pattern","required","email"].includes(m)){let a=e[m],c="";["match","diff"].includes(m)&&typeof a=="object"&&(a=e[m].dataField,c=e[m].label),a!=null&&ue(s,m,a,n,u,l,d,c).forEach(g=>i.push(g));}else if(typeof e[m]=="object"){let a=e[m];i.push({validate:{...d,[m]:c=>a.validation(c)||a.message&&(typeof a.message=="string"?a.message:a.message(n))}});}})),Object.assign({},...i)}var ue=(e,n,o,s,u,l,i,m)=>{let d=[],{required:r,minLength:a,maxLength:c,min:g,max:b,email:P,match:f,diff:F,pattern:p}=e||{},T={required:t=>{if(!o)return true;let y=r?r(s):`${s} is required`;return typeof t=="string"&&!t.trim()||t==null?y:true},minLength:{value:o,message:a?a(s,o):`${s} must be at least ${o} characters long`},maxLength:{value:o,message:c?c(s,o):`${s} cannot be more than ${o} characters long`},min:{value:Number(o),message:g?g(s,o):`${s} should be at least ${o}`},max:{value:Number(o),message:b?b(s,o):`${s} should be at most ${o}`},regexp:(t="")=>t?new RegExp(o.regexp).test(t)||`${s} ${o.message}`:true,email:(t="")=>!o||!t?true:ar.test(t)||(P?P(s):`${s} must be type email`),match:(t="")=>t?t===(l&&l(o))||(f?f(s,m||reactCore.labelFormatter.changeAll(o)):`${s} must be same with ${m||reactCore.labelFormatter.changeAll(o)}`):true,diff:(t="")=>t?t!==(l&&l(o))||(F?F(s,m||reactCore.labelFormatter.changeAll(o)):`${s} must be different with ${m||reactCore.labelFormatter.changeAll(o)}`):true,pattern:{alphabet:(t="")=>!!t&&new RegExp("^[A-Za-z ]*$").test(t)||(p?.alphabet?p?.alphabet(s):`${s} must be format Alphabet`),alphanumber:(t="")=>!!t&&new RegExp("^[A-Za-z0-9 ]*$").test(t)||(p?.alphanumber?p?.alphanumber(s):`${s} must be format Alphabet or Number`),number:(t="")=>!!t&&new RegExp("^[0-9]*$").test(t)||(p?.number?p?.number(s):`${s} must be format Number`),lowercase:(t="")=>!!t&&new RegExp("^[a-z0-9 ]*$").test(t)||(p?.lowercase?p?.lowercase(s):`${s} must be format Lowercase`),url:(t="")=>!!t&&/^(ftp|http|https):\/\/[^ "]+$/.test(t)||(p?.url?p?.url(s):`${s} must be a valid URL`),uppercase:(t="")=>!!t&&new RegExp("^[A-Z0-9 ]*$").test(t)||(p?.uppercase?p?.uppercase(s):`${s} must be format Uppercase`),mixedcase:(t="")=>!!t&&/[a-z]/.test(t)&&/[A-Z]/.test(t)||(p?.mixedcase?p?.mixedcase(s):`${s} must be mixed case`),specialcharacters:(t="")=>!!t&&/[^a-zA-Z0-9\s]/.test(t)||(p?.specialcharacters?p?.specialcharacters(s):`${s} must contain special characters`)}}[n];if(T){let{validate:t}=d.find(y=>y.validate)||{};typeof T=="function"?d.push({validate:{...t,...i,[n]:T}}):n==="pattern"?d.push({validate:{...t,...i,[`${n}${o}`]:T[o]}}):d.push({[n]:T});}return d};var Nt=e=>{let n=ne.useMemo(()=>reactCore.generateUUID(),[]),o=v(),{validationMessage:s}=A(),{registerItem:u,unregisterItem:l,control:i,disabled:m,readOnly:d,formId:r,setSelected:a,useSelected:c,onFieldChange:g}=o,{name:b,formId:P,...f}=k(),{name:F,formId:p}=G(),h=ne.useMemo(()=>{let R=e.dataField;return e.disabledHierarchy||(F&&r===p&&(R=`${F}${R}`),b&&r===P&&(R=`${b}${R}`)),R},[F,r,p,e.dataField,b,P,e.disabledHierarchy]),T=ne.useMemo(()=>{if(e.label)return e.label;if(!e.noLabel)return reactCore.labelFormatter.changeAll(h)},[e.label,e.noLabel,h]);ne.useEffect(()=>(u({id:n,...e,dataField:h,label:T}),()=>{l(n);}),[n,e,h,T]);let t=ne.useMemo(()=>typeof e.disabled=="boolean"?e.disabled:typeof f.disabled=="boolean"?f.disabled:!!m,[e.disabled,f.disabled,m]),y=ne.useMemo(()=>typeof e.readOnly=="boolean"?e.readOnly:typeof f.readOnly=="boolean"?f.readOnly:!!d,[e.readOnly,f.readOnly,d]),x=ne.useMemo(()=>typeof e.hidden=="boolean"?e.hidden:false,[e.hidden]),w=ne.useMemo(()=>{if(typeof e.required=="boolean"){if(typeof e.validationRules>"u")return {required:e.required};if(typeof e.validationRules=="string"&&e.validationRules==="email")return {email:true,required:e.required};if(typeof e.validationRules=="object")return {...e.validationRules,required:e.required}}return e.validationRules},[e.validationRules,e.required]),fe=ne.useMemo(()=>t||y||x?{required:false}:L({validationRules:w,label:T},o,s),[t,y,x,w,T,h,o,s]),I=reactHookForm.useController({name:h,control:i,disabled:t,defaultValue:e.defaultValue,shouldUnregister:e.shouldUnregister,rules:fe}),ce=I.fieldState.invalid,pe=I.fieldState.error?.message,ge=reactHookForm.useWatch({name:h,control:i,defaultValue:e.defaultValue}),ye=ne.useMemo(()=>reactCore.debounce(R=>a(be=>({...be,[h]:R||null}))),[a,h]),Fe=c(h),he=w?.required;return {...e,setSelectedField:ye,label:T,dataField:h,controller:I,invalid:ce,messageError:pe,selectedField:Fe,value:ge,required:he,onChange:R=>{I.field.onChange(R),g?.(h,R,o);}}};var Lt=()=>{let{formControl:e,items:n}=v(),o=(u,l,i,m=0)=>{let d=[];if(Array.isArray(i))i.forEach((r,a)=>{let c=Object.entries(r||{}).map(([g,b])=>o(`${u}.${a}.${g}`,`${l}[]${g}`,b,i.length>1?a+1:0)).flat();d=[...d,...c];});else if(i&&typeof i=="object"&&!Array.isArray(i)&&!i?.ref)Object.entries(i).map(([r,a])=>{let c=o(`${u}.${r}`,`${u}.${r}`,a);d=[...d,...c];});else {let r=i?.message||"",a=n.find(c=>c.dataField===l)?.label;d.push({label:`${a||""}${m>0?` ${m}`:""}`,message:r,dataField:u});}return d};return Object.entries(e.formState.errors||{}).map(([u,l])=>o(u,u,l)).flat()};function Qt(e){let{watch:n}=v(),o=ne.useMemo(()=>{let i=new Set,m=d=>{if(d)for(let[r,a]of Object.entries(d)){if(r==="and"||r==="or"){a?.forEach(m);continue}a&&typeof a=="object"&&"fromField"in a&&typeof a.fromField=="string"&&i.add(a.fromField);}};return m(e),Array.from(i)},[e]),s=o.length?n(o):[],u=ne.useMemo(()=>{let i={};return o.forEach((m,d)=>{i[m]=s?.[d];}),i},[o,s]),l=ne.useCallback(i=>{if(!i)return i;let m={};for(let[d,r]of Object.entries(i)){if(d==="and"||d==="or"){m[d]=r?.map(a=>l(a))??r;continue}if(r&&typeof r=="object"&&"fromField"in r){let a=r,c={...a},g=a.fromField;g&&g in u?c.value=u[g]:c.value=a.value,delete c.fromField,m[d]=c;}else m[d]=r;}return m},[u]);return ne.useMemo(()=>l(e)??{},[e,l])}var pr=(d=>(d.alphabet="alphabet",d.alphaNumber="alphanumber",d.number="number",d.lowercase="lowercase",d.url="url",d.uppercase="uppercase",d.mixedCase="mixedcase",d.specialCharacters="specialcharacters",d))(pr||{});var Zt=re;exports.BgsFormArray=Xe;exports.BgsFormGroup=nr;exports.BgsReactFormProvider=H;exports.PatternTypeEnum=pr;exports.default=Zt;exports.useBgsController=Nt;exports.useBgsForm=v;exports.useBgsFormArray=G;exports.useBgsFormArrayInit=oe;exports.useBgsFormGroup=k;exports.useBgsFormInit=Y;exports.useResolvedQuery=Qt;exports.useSummaryValidation=Lt;
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var ne=require('react'),jsxRuntime=require('react/jsx-runtime'),reactCore=require('@bgscore/react-core'),reactHookForm=require('react-hook-form');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var ne__default=/*#__PURE__*/_interopDefault(ne);var q=ne.createContext(void 0);function P(){let e=ne.useContext(q);return e||{}}function w({children:e,controller:i,onSubmit:o,onFieldChange:n=()=>{}}){let l={...i,triggerSubmit:async(s,m)=>{i.setIsSubmit(true);let d=m?await i.formControl.trigger():true,r=i.getData();d&&o&&o({...r,...s},{...i});},onFieldChange:n};return jsxRuntime.jsx(q.Provider,{value:l,children:e})}var O=new WeakMap;function V(e){return O.has(e)||O.set(e,reactCore.createStore({})),O.get(e)}function C(e){if(typeof e!="object"||e===null||Array.isArray(e))return e;let i={};for(let[o,n]of Object.entries(e))if(o.includes(".")){let u=o.split("."),l=i;for(let s=0;s<u.length;s++){let m=u[s];s===u.length-1?l[m]=C(n):((!l[m]||typeof l[m]!="object")&&(l[m]={}),l=l[m]);}}else i[o]=C(n);return i}function W(){return reactCore.createTable({name:"draft",primaryKey:"field_1731131919872_aj29d"})}var Q=ne.createContext(void 0);function U(){let e=ne.useContext(Q);return e||{}}function H({children:e,value:i}){return jsxRuntime.jsx(Q.Provider,{value:i,children:e})}function K(){let{dbName:e="bgs-react-form"}=U();return reactCore.createDatabase({dbName:e,table:{draft:W()}})}function _(e){let i=K(),o=reactCore.useDbLiveFlag(i.draft.detail,{key:e}),n=async(s,m)=>{let r={...await l(),...s};Object.keys(r).forEach(p=>{reactCore.isNotEmpty(r[p])||delete r[p];});let a=Object.keys(r);if(a.length===1&&a[0]==="field_1731131919872_aj29d")return u();a.some(p=>p!=="field_1731131919872_aj29d"&&r[p]!==reactCore.getFieldValue(m,p))?await i.draft.put(e,r):await u();},u=async()=>{await i.draft.remove(e);},l=async()=>await i.draft.detail(e);return {isDraft:o,saveDraft:n,removeDraft:u,getDataDraft:l}}var Y=(e={})=>{e.defaultValues||(e.defaultValues={}),e.defaultValues=C(e.defaultValues);let i=ne.useRef(null),[o,n]=ne.useState(false),u=e?.draftKey,l=u?_(u):void 0,s=ne.useRef([]),m=ne.useCallback(f=>{let F=s.current.findIndex(g=>g.id===f.id);if(F>-1){let g=[...s.current];g[F]=f,s.current=[...g];}else s.current.push(f);},[s]),d=ne.useCallback(f=>{s.current=s.current.filter(F=>F.id!==f);},[]),r=reactHookForm.useForm({reValidateMode:"onSubmit",mode:"all",...e}),a=V(r),c=ne.useMemo(()=>reactCore.generateUUID(),[]),p=f=>f?reactCore.getFieldValue(reactCore.mappingUndefinedtoNull(r.getValues()),f):reactCore.mappingUndefinedtoNull(r.getValues()),b=f=>{f?typeof f=="string"?r.resetField(f,{}):typeof f=="object"&&reactCore.isArray(f,0)&&f.forEach(F=>r.resetField(F)):r.reset();},v={...r,ref:i,reset:b,updateData:(f,F)=>{let g=p();r.reset(C({...g,...f}),F);},getData:p,formControl:r,useFieldArray:f=>reactHookForm.useFieldArray({control:r.control,name:f}),useWatch:f=>reactHookForm.useWatch({control:r.control,name:f}),isSubmit:o,formId:c,setIsSubmit:n,useSelected:f=>a.useStore(F=>reactCore.getFieldValue(F,f)),setSelected:a.setState,isDraft:!!l?.isDraft,removeDraft:()=>{l?.removeDraft?.();},resetDraft:()=>{l?.removeDraft?.(),b();},saveDraft:(...f)=>l?.saveDraft?.(...f),getDataDraft:()=>l?.getDataDraft?.(),draftKey:u,registerItem:m,unregisterItem:d,items:s.current,getItems:()=>s.current};return [v,v]};var je=({onSubmit:e,onChange:i,onInvalid:o,onFieldChange:n,formData:u,controller:l,children:s,...m})=>{u&&(u=C(u));let d=l??Y({draftKey:m.draftKey}),[r]=Array.isArray(d)?d:[d],a=r.draftKey,c=ne.useRef(true),p=ne.useRef(void 0),{autoSaveDelay:b=.5}=U(),v=async t=>{t.preventDefault(),t.stopPropagation(),r.setIsSubmit(true);let y=await r.formControl.trigger(),x=r.getData();y?e&&e({...x},{...r}):o&&o(r.formControl.formState.errors);},f=async()=>{if(!a)return;let t=await r.getDataDraft();t&&Object.entries(t).forEach(([y,x])=>{y==="field_1731131919872_aj29d"||!reactCore.isNotEmpty(x)||(r.setValue(y,x),r.trigger(y));});},F=()=>{if(u){let t={...u};reactCore.diffJson(p.current||{},t)&&(r.updateData(t),p.current=t,setTimeout(f,0));}};ne.useEffect(()=>{F();},[u,r.formControl.reset]),ne.useEffect(()=>{if(!i)return;let t=r.formControl.watch((y,x)=>i(y,x,r));return ()=>t.unsubscribe()},[]),ne.useEffect(()=>{c.current=true;},[a]),ne.useEffect(()=>{c.current&&r?.isDraft&&(c.current=false,f());},[r.isDraft,a]);let g=ne.useMemo(()=>reactCore.debounce((t,y,x)=>{x?.saveDraft?.({[t]:y},u);},b),[u,b]),h=async(t,y,x)=>{n?.(t,y,x),g(t,y,x);},T={...m};return delete T?.draftKey,jsxRuntime.jsx(jsxRuntime.Fragment,{children:jsxRuntime.jsx(w,{controller:{...r,disabled:m?.disabled,readOnly:m?.readOnly},onSubmit:e,onFieldChange:h,children:jsxRuntime.jsx("form",{...T,id:r.formId,ref:r.ref,onSubmit:v,children:s})})})},re=je;var te=ne.createContext(void 0);function G(){let e=ne.useContext(te);return e||{}}function N({children:e,...i}){return jsxRuntime.jsx(te.Provider,{value:i,children:e})}var oe=e=>{let i=P(),o=reactHookForm.useFieldArray({control:i.control,name:e}),u={formArrayId:ne.useMemo(()=>reactCore.generateUUID(),[]),...o,...i};return [u,u]};var ae=({defaultData:e,controller:i,children:o,...n})=>{let u=i??oe(n?.name),[l]=Array.isArray(u)?u:[u],s=l.name;return ne.useEffect(()=>{typeof e=="boolean"&&e?l.append({}):typeof e=="number"&&e>0?l.append([...Array(e).fill(null).map(()=>({}))]):typeof e=="object"&&e&&l.append(e);},[]),jsxRuntime.jsx(jsxRuntime.Fragment,{children:l.fields.map((m,d)=>{let r=`${s}.${d}.`,a={...l,index:d,fieldId:m.id,name:r,countFields:l.fields.length,removeItem:()=>l.remove(d),watchItem:c=>l.watch(c?`${r}${c}`:r.slice(0,-1)),setValueItem:(c,p)=>l.setValue(`${r}${c}`,p),useSelectedItem:c=>l.useSelected(`${r}${c}`)};return jsxRuntime.jsx(ne__default.default.Fragment,{children:jsxRuntime.jsx(N,{...a,children:reactCore.renderChildren(o,a)})},m.id)})})};ae.displayName="BgsFormArray";var Xe=ae;ne__default.default.memo(({children:e,props:i})=>jsxRuntime.jsx(jsxRuntime.Fragment,{children:reactCore.renderChildren(e,i)}));var me=ne.createContext(void 0);function k(){let e=ne.useContext(me);return e||{}}function M({children:e,...i}){return jsxRuntime.jsx(me.Provider,{value:i,children:e})}var le=({children:e,...i})=>{let o=P(),n=ne.useMemo(()=>reactCore.generateUUID(),[]);return jsxRuntime.jsx(jsxRuntime.Fragment,{children:jsxRuntime.jsx(M,{...o,...i,formGroupId:n,children:e})})};le.displayName="BgsFormGroup";var nr=le;var ar=/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;function L({validationRules:e,label:i},o,n){let{formControl:u,getData:l}=o,s=[];return e&&(typeof e=="string"?ue(n,e,true,i,u,l,{}).forEach(m=>s.push(m)):typeof e=="object"&&Object.keys(e).forEach(m=>{let{validate:d}=s.find(a=>a.validate)||{};if(["minLength","maxLength","min","max","match","diff","regexp","pattern","required","email"].includes(m)){let a=e[m],c="";["match","diff"].includes(m)&&typeof a=="object"&&(a=e[m].dataField,c=e[m].label),a!=null&&ue(n,m,a,i,u,l,d,c).forEach(p=>s.push(p));}else if(typeof e[m]=="object"){let a=e[m];s.push({validate:{...d,[m]:c=>a.validation(c)||a.message&&(typeof a.message=="string"?a.message:a.message(i))}});}})),Object.assign({},...s)}var ue=(e,i,o,n,u,l,s,m)=>{let d=[],{required:r,minLength:a,maxLength:c,min:p,max:b,email:v,match:f,diff:F,pattern:g}=e||{},T={required:t=>{if(!o)return true;let y=r?r(n):`${n} is required`;return typeof t=="string"&&!t.trim()||t==null?y:true},minLength:{value:o,message:a?a(n,o):`${n} must be at least ${o} characters long`},maxLength:{value:o,message:c?c(n,o):`${n} cannot be more than ${o} characters long`},min:{value:Number(o),message:p?p(n,o):`${n} should be at least ${o}`},max:{value:Number(o),message:b?b(n,o):`${n} should be at most ${o}`},regexp:(t="")=>t?new RegExp(o.regexp).test(t)||`${n} ${o.message}`:true,email:(t="")=>!o||!t?true:ar.test(t)||(v?v(n):`${n} must be type email`),match:(t="")=>t?t===(l&&l(o))||(f?f(n,m||reactCore.labelFormatter.changeAll(o)):`${n} must be same with ${m||reactCore.labelFormatter.changeAll(o)}`):true,diff:(t="")=>t?t!==(l&&l(o))||(F?F(n,m||reactCore.labelFormatter.changeAll(o)):`${n} must be different with ${m||reactCore.labelFormatter.changeAll(o)}`):true,pattern:{alphabet:(t="")=>!!t&&new RegExp("^[A-Za-z ]*$").test(t)||(g?.alphabet?g?.alphabet(n):`${n} must be format Alphabet`),alphanumber:(t="")=>!!t&&new RegExp("^[A-Za-z0-9 ]*$").test(t)||(g?.alphanumber?g?.alphanumber(n):`${n} must be format Alphabet or Number`),number:(t="")=>!!t&&new RegExp("^[0-9]*$").test(t)||(g?.number?g?.number(n):`${n} must be format Number`),lowercase:(t="")=>!!t&&new RegExp("^[a-z0-9 ]*$").test(t)||(g?.lowercase?g?.lowercase(n):`${n} must be format Lowercase`),url:(t="")=>!!t&&/^(ftp|http|https):\/\/[^ "]+$/.test(t)||(g?.url?g?.url(n):`${n} must be a valid URL`),uppercase:(t="")=>!!t&&new RegExp("^[A-Z0-9 ]*$").test(t)||(g?.uppercase?g?.uppercase(n):`${n} must be format Uppercase`),mixedcase:(t="")=>!!t&&/[a-z]/.test(t)&&/[A-Z]/.test(t)||(g?.mixedcase?g?.mixedcase(n):`${n} must be mixed case`),specialcharacters:(t="")=>!!t&&/[^a-zA-Z0-9\s]/.test(t)||(g?.specialcharacters?g?.specialcharacters(n):`${n} must contain special characters`)}}[i];if(T){let{validate:t}=d.find(y=>y.validate)||{};typeof T=="function"?d.push({validate:{...t,...s,[i]:T}}):i==="pattern"?d.push({validate:{...t,...s,[`${i}${o}`]:T[o]}}):d.push({[i]:T});}return d};var Nt=e=>{let i=ne.useMemo(()=>reactCore.generateUUID(),[]),o=P(),{validationMessage:n}=U(),{registerItem:u,unregisterItem:l,control:s,disabled:m,readOnly:d,formId:r,setSelected:a,useSelected:c,onFieldChange:p}=o,{name:b,formId:v,...f}=k(),{name:F,formId:g}=G(),h=ne.useMemo(()=>{let A=e.dataField;return e.disabledHierarchy||(F&&r===g&&(A=`${F}${A}`),b&&r===v&&(A=`${b}${A}`)),A},[F,r,g,e.dataField,b,v,e.disabledHierarchy]),T=ne.useMemo(()=>{if(e.label)return e.label;if(!e.noLabel)return reactCore.labelFormatter.changeAll(h)},[e.label,e.noLabel,h]);ne.useEffect(()=>(u({id:i,...e,dataField:h,label:T}),()=>{l(i);}),[i,e,h,T]);let t=ne.useMemo(()=>typeof e.disabled=="boolean"?e.disabled:typeof f.disabled=="boolean"?f.disabled:!!m,[e.disabled,f.disabled,m]),y=ne.useMemo(()=>typeof e.readOnly=="boolean"?e.readOnly:typeof f.readOnly=="boolean"?f.readOnly:!!d,[e.readOnly,f.readOnly,d]),x=ne.useMemo(()=>typeof e.hidden=="boolean"?e.hidden:false,[e.hidden]),$=ne.useMemo(()=>{if(typeof e.required=="boolean"){if(typeof e.validationRules>"u")return {required:e.required};if(typeof e.validationRules=="string"&&e.validationRules==="email")return {email:true,required:e.required};if(typeof e.validationRules=="object")return {...e.validationRules,required:e.required}}return e.validationRules},[e.validationRules,e.required]),fe=ne.useMemo(()=>t||y||x?{required:false}:L({validationRules:$,label:T},o,n),[t,y,x,$,T,h,o,n]),I=reactHookForm.useController({name:h,control:s,disabled:t,defaultValue:e.defaultValue,shouldUnregister:e.shouldUnregister,rules:fe}),ce=I.fieldState.invalid,pe=I.fieldState.error?.message,ge=reactHookForm.useWatch({name:h,control:s,defaultValue:e.defaultValue}),ye=ne.useMemo(()=>reactCore.debounce(A=>a(be=>({...be,[h]:A||null}))),[a,h]),Fe=c(h),he=$?.required;return {...e,setSelectedField:ye,label:T,dataField:h,controller:I,invalid:ce,messageError:pe,selectedField:Fe,value:ge,required:he,onChange:A=>{I.field.onChange(A),p?.(h,A,o);}}};var Lt=()=>{let{formControl:e,items:i}=P(),o=(u,l,s,m=0)=>{let d=[];if(Array.isArray(s))s.forEach((r,a)=>{let c=Object.entries(r||{}).map(([p,b])=>o(`${u}.${a}.${p}`,`${l}[]${p}`,b,s.length>1?a+1:0)).flat();d=[...d,...c];});else if(s&&typeof s=="object"&&!Array.isArray(s)&&!s?.ref)Object.entries(s).map(([r,a])=>{let c=o(`${u}.${r}`,`${u}.${r}`,a);d=[...d,...c];});else {let r=s?.message||"",a=i.find(c=>c.dataField===l)?.label;d.push({label:`${a||""}${m>0?` ${m}`:""}`,message:r,dataField:u});}return d};return Object.entries(e.formState.errors||{}).map(([u,l])=>o(u,u,l)).flat()};function Qt(e){let{watch:i}=P(),o=ne.useMemo(()=>{let s=new Set,m=d=>{if(d)for(let[r,a]of Object.entries(d)){if(r==="and"||r==="or"){a?.forEach(m);continue}a&&typeof a=="object"&&"fromField"in a&&typeof a.fromField=="string"&&s.add(a.fromField);}};return m(e),Array.from(s)},[e]),n=o.length?i(o):[],u=ne.useMemo(()=>{let s={};return o.forEach((m,d)=>{s[m]=n?.[d];}),s},[o,n]),l=ne.useCallback(s=>{if(!s)return s;let m={};for(let[d,r]of Object.entries(s)){if(d==="and"||d==="or"){m[d]=r?.map(a=>l(a))??r;continue}if(r&&typeof r=="object"&&"fromField"in r){let a=r,c={...a},p=a.fromField;p&&p in u?c.value=u[p]:c.value=a.value,delete c.fromField,m[d]=c;}else m[d]=r;}return m},[u]);return ne.useMemo(()=>l(e)??{},[e,l])}var pr=(d=>(d.alphabet="alphabet",d.alphaNumber="alphanumber",d.number="number",d.lowercase="lowercase",d.url="url",d.uppercase="uppercase",d.mixedCase="mixedcase",d.specialCharacters="specialcharacters",d))(pr||{});var Zt=re;exports.BgsFormArray=Xe;exports.BgsFormGroup=nr;exports.BgsReactFormProvider=H;exports.PatternTypeEnum=pr;exports.default=Zt;exports.useBgsController=Nt;exports.useBgsForm=P;exports.useBgsFormArray=G;exports.useBgsFormArrayInit=oe;exports.useBgsFormGroup=k;exports.useBgsFormInit=Y;exports.useResolvedQuery=Qt;exports.useSummaryValidation=Lt;
|
package/dist/index.d.cts
CHANGED
|
@@ -11,8 +11,6 @@ interface FormDefaultProps {
|
|
|
11
11
|
readOnly?: boolean;
|
|
12
12
|
name?: string;
|
|
13
13
|
}
|
|
14
|
-
type Children<T = unknown> = ChildFunction<T> | React.ReactNode;
|
|
15
|
-
type ChildFunction<T = unknown> = (props: T) => Children<T>;
|
|
16
14
|
interface Controller {
|
|
17
15
|
field: ControllerRenderProps<FieldValues, string>;
|
|
18
16
|
fieldState: ControllerFieldState;
|
|
@@ -75,11 +73,16 @@ interface UseFormInitReturn<T = unknown> extends FormDefaultProps, Omit<UseFormR
|
|
|
75
73
|
items: ControllerWithKey[];
|
|
76
74
|
getItems: () => ControllerWithKey[];
|
|
77
75
|
}
|
|
78
|
-
|
|
76
|
+
type ArrayWithName<T> = T & {
|
|
79
77
|
name: string;
|
|
78
|
+
};
|
|
79
|
+
type FormArrayProps<T = unknown> = (ArrayFormPropsBase<T> & {
|
|
80
|
+
controller: UseFormArrayInitReturn<T> | UseFormArrayInitReturn<T>[];
|
|
81
|
+
}) | (ArrayFormPropsBase<T> & {
|
|
82
|
+
controller?: undefined;
|
|
83
|
+
}) & ArrayWithName<{}>;
|
|
84
|
+
interface ArrayFormPropsBase<T> {
|
|
80
85
|
defaultData?: T | T[] | boolean | number;
|
|
81
|
-
controller?: UseFormArrayInitReturn<T> | UseFormArrayInitReturn<T>[];
|
|
82
|
-
children?: Children<T>;
|
|
83
86
|
}
|
|
84
87
|
type UseFormArrayInitReturn<T> = UseFieldArrayReturn & UseBgsForm<T> & {
|
|
85
88
|
formArrayId: string;
|
|
@@ -178,7 +181,7 @@ type UseController<T> = ControllerProps<T> & {
|
|
|
178
181
|
declare const BgsForm: <T>({ onSubmit, onChange, onInvalid, onFieldChange, formData, controller: controllerProps, children, ...others }: PropsWithChildren<FormProps<T>>) => react_jsx_runtime.JSX.Element;
|
|
179
182
|
|
|
180
183
|
declare const FormArray: {
|
|
181
|
-
<T>({
|
|
184
|
+
<T>({ defaultData, controller: controllerProps, children, ...others }: PropsWithChildren<FormArrayProps<T>>): react_jsx_runtime.JSX.Element;
|
|
182
185
|
displayName: string;
|
|
183
186
|
};
|
|
184
187
|
|
|
@@ -256,4 +259,4 @@ type ResolvedQueryCondition<T> = {
|
|
|
256
259
|
};
|
|
257
260
|
declare function useResolvedQuery<T>(condition?: ResolvedQueryCondition<T>): ResolvedQueryCondition<T>;
|
|
258
261
|
|
|
259
|
-
export { FormArray as BgsFormArray, FormGroup as BgsFormGroup, type BgsFormProviderProps, BgsReactFormProvider, type ControllerProps, type FormArrayProps, type FormGroupProps, type FormProps, type OnChange, type OnFieldChange, type OnSubmit, type OptionsInit, type PatternType, PatternTypeEnum, type ResolvedQueryCondition, type ResolvedQueryFilterOption, type SelectedNested, type TriggerSubmit, type UseBgsForm, type UseController, type UseFormArray, type UseFormArrayInitReturn, type UseFormInitReturn, type UseSelected, type ValidationCallback, type ValidationOptions, type ValidationRules, BgsForm as default, useBgsController, useForm as useBgsForm, useFormArray as useBgsFormArray, useBgsFormArrayInit, useFormGroup as useBgsFormGroup, useBgsFormInit, useResolvedQuery, useSummaryValidation };
|
|
262
|
+
export { type ArrayFormPropsBase, FormArray as BgsFormArray, FormGroup as BgsFormGroup, type BgsFormProviderProps, BgsReactFormProvider, type ControllerProps, type FormArrayProps, type FormGroupProps, type FormProps, type OnChange, type OnFieldChange, type OnSubmit, type OptionsInit, type PatternType, PatternTypeEnum, type ResolvedQueryCondition, type ResolvedQueryFilterOption, type SelectedNested, type TriggerSubmit, type UseBgsForm, type UseController, type UseFormArray, type UseFormArrayInitReturn, type UseFormInitReturn, type UseSelected, type ValidationCallback, type ValidationOptions, type ValidationRules, BgsForm as default, useBgsController, useForm as useBgsForm, useFormArray as useBgsFormArray, useBgsFormArrayInit, useFormGroup as useBgsFormGroup, useBgsFormInit, useResolvedQuery, useSummaryValidation };
|
package/dist/index.d.ts
CHANGED
|
@@ -11,8 +11,6 @@ interface FormDefaultProps {
|
|
|
11
11
|
readOnly?: boolean;
|
|
12
12
|
name?: string;
|
|
13
13
|
}
|
|
14
|
-
type Children<T = unknown> = ChildFunction<T> | React.ReactNode;
|
|
15
|
-
type ChildFunction<T = unknown> = (props: T) => Children<T>;
|
|
16
14
|
interface Controller {
|
|
17
15
|
field: ControllerRenderProps<FieldValues, string>;
|
|
18
16
|
fieldState: ControllerFieldState;
|
|
@@ -75,11 +73,16 @@ interface UseFormInitReturn<T = unknown> extends FormDefaultProps, Omit<UseFormR
|
|
|
75
73
|
items: ControllerWithKey[];
|
|
76
74
|
getItems: () => ControllerWithKey[];
|
|
77
75
|
}
|
|
78
|
-
|
|
76
|
+
type ArrayWithName<T> = T & {
|
|
79
77
|
name: string;
|
|
78
|
+
};
|
|
79
|
+
type FormArrayProps<T = unknown> = (ArrayFormPropsBase<T> & {
|
|
80
|
+
controller: UseFormArrayInitReturn<T> | UseFormArrayInitReturn<T>[];
|
|
81
|
+
}) | (ArrayFormPropsBase<T> & {
|
|
82
|
+
controller?: undefined;
|
|
83
|
+
}) & ArrayWithName<{}>;
|
|
84
|
+
interface ArrayFormPropsBase<T> {
|
|
80
85
|
defaultData?: T | T[] | boolean | number;
|
|
81
|
-
controller?: UseFormArrayInitReturn<T> | UseFormArrayInitReturn<T>[];
|
|
82
|
-
children?: Children<T>;
|
|
83
86
|
}
|
|
84
87
|
type UseFormArrayInitReturn<T> = UseFieldArrayReturn & UseBgsForm<T> & {
|
|
85
88
|
formArrayId: string;
|
|
@@ -178,7 +181,7 @@ type UseController<T> = ControllerProps<T> & {
|
|
|
178
181
|
declare const BgsForm: <T>({ onSubmit, onChange, onInvalid, onFieldChange, formData, controller: controllerProps, children, ...others }: PropsWithChildren<FormProps<T>>) => react_jsx_runtime.JSX.Element;
|
|
179
182
|
|
|
180
183
|
declare const FormArray: {
|
|
181
|
-
<T>({
|
|
184
|
+
<T>({ defaultData, controller: controllerProps, children, ...others }: PropsWithChildren<FormArrayProps<T>>): react_jsx_runtime.JSX.Element;
|
|
182
185
|
displayName: string;
|
|
183
186
|
};
|
|
184
187
|
|
|
@@ -256,4 +259,4 @@ type ResolvedQueryCondition<T> = {
|
|
|
256
259
|
};
|
|
257
260
|
declare function useResolvedQuery<T>(condition?: ResolvedQueryCondition<T>): ResolvedQueryCondition<T>;
|
|
258
261
|
|
|
259
|
-
export { FormArray as BgsFormArray, FormGroup as BgsFormGroup, type BgsFormProviderProps, BgsReactFormProvider, type ControllerProps, type FormArrayProps, type FormGroupProps, type FormProps, type OnChange, type OnFieldChange, type OnSubmit, type OptionsInit, type PatternType, PatternTypeEnum, type ResolvedQueryCondition, type ResolvedQueryFilterOption, type SelectedNested, type TriggerSubmit, type UseBgsForm, type UseController, type UseFormArray, type UseFormArrayInitReturn, type UseFormInitReturn, type UseSelected, type ValidationCallback, type ValidationOptions, type ValidationRules, BgsForm as default, useBgsController, useForm as useBgsForm, useFormArray as useBgsFormArray, useBgsFormArrayInit, useFormGroup as useBgsFormGroup, useBgsFormInit, useResolvedQuery, useSummaryValidation };
|
|
262
|
+
export { type ArrayFormPropsBase, FormArray as BgsFormArray, FormGroup as BgsFormGroup, type BgsFormProviderProps, BgsReactFormProvider, type ControllerProps, type FormArrayProps, type FormGroupProps, type FormProps, type OnChange, type OnFieldChange, type OnSubmit, type OptionsInit, type PatternType, PatternTypeEnum, type ResolvedQueryCondition, type ResolvedQueryFilterOption, type SelectedNested, type TriggerSubmit, type UseBgsForm, type UseController, type UseFormArray, type UseFormArrayInitReturn, type UseFormInitReturn, type UseSelected, type ValidationCallback, type ValidationOptions, type ValidationRules, BgsForm as default, useBgsController, useForm as useBgsForm, useFormArray as useBgsFormArray, useBgsFormArrayInit, useFormGroup as useBgsFormGroup, useBgsFormInit, useResolvedQuery, useSummaryValidation };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import ne,{createContext,useContext,useRef,useState,useCallback,useMemo,useEffect}from'react';import {jsx,Fragment}from'react/jsx-runtime';import {renderChildren,generateUUID,getFieldValue,mappingUndefinedtoNull,debounce,labelFormatter,isNotEmpty,diffJson,isArray,useDbLiveFlag,createStore,createDatabase,createTable}from'@bgscore/react-core';import {useForm,useWatch,useFieldArray,useController}from'react-hook-form';var q=createContext(void 0);function v(){let e=useContext(q);return e||{}}function B({children:e,controller:n,onSubmit:o,onFieldChange:s=()=>{}}){let l={...n,triggerSubmit:async(i,m)=>{n.setIsSubmit(true);let d=m?await n.formControl.trigger():true,r=n.getData();d&&o&&o({...r,...i},{...n});},onFieldChange:s};return jsx(q.Provider,{value:l,children:e})}var O=new WeakMap;function V(e){return O.has(e)||O.set(e,createStore({})),O.get(e)}function U(e){if(typeof e!="object"||e===null||Array.isArray(e))return e;let n={};for(let[o,s]of Object.entries(e))if(o.includes(".")){let u=o.split("."),l=n;for(let i=0;i<u.length;i++){let m=u[i];i===u.length-1?l[m]=U(s):((!l[m]||typeof l[m]!="object")&&(l[m]={}),l=l[m]);}}else n[o]=U(s);return n}function K(){return createTable({name:"draft",primaryKey:"field_1731131919872_aj29d"})}var Q=createContext(void 0);function A(){let e=useContext(Q);return e||{}}function H({children:e,value:n}){return jsx(Q.Provider,{value:n,children:e})}function W(){let{dbName:e="bgs-react-form"}=A();return createDatabase({dbName:e,table:{draft:K()}})}function _(e){let n=W(),o=useDbLiveFlag(n.draft.detail,{key:e}),s=async(i,m)=>{let r={...await l(),...i};Object.keys(r).forEach(g=>{isNotEmpty(r[g])||delete r[g];});let a=Object.keys(r);if(a.length===1&&a[0]==="field_1731131919872_aj29d")return u();a.some(g=>g!=="field_1731131919872_aj29d"&&r[g]!==getFieldValue(m,g))?await n.draft.put(e,r):await u();},u=async()=>{await n.draft.remove(e);},l=async()=>await n.draft.detail(e);return {isDraft:o,saveDraft:s,removeDraft:u,getDataDraft:l}}var Y=(e={})=>{e.defaultValues||(e.defaultValues={}),e.defaultValues=U(e.defaultValues);let n=useRef(null),[o,s]=useState(false),u=e?.draftKey,l=u?_(u):void 0,i=useRef([]),m=useCallback(f=>{let F=i.current.findIndex(p=>p.id===f.id);if(F>-1){let p=[...i.current];p[F]=f,i.current=[...p];}else i.current.push(f);},[i]),d=useCallback(f=>{i.current=i.current.filter(F=>F.id!==f);},[]),r=useForm({reValidateMode:"onSubmit",mode:"all",...e}),a=V(r),c=useMemo(()=>generateUUID(),[]),g=f=>f?getFieldValue(mappingUndefinedtoNull(r.getValues()),f):mappingUndefinedtoNull(r.getValues()),b=f=>{f?typeof f=="string"?r.resetField(f,{}):typeof f=="object"&&isArray(f,0)&&f.forEach(F=>r.resetField(F)):r.reset();},P={...r,ref:n,reset:b,updateData:(f,F)=>{let p=g();r.reset(U({...p,...f}),F);},getData:g,formControl:r,useFieldArray:f=>useFieldArray({control:r.control,name:f}),useWatch:f=>useWatch({control:r.control,name:f}),isSubmit:o,formId:c,setIsSubmit:s,useSelected:f=>a.useStore(F=>getFieldValue(F,f)),setSelected:a.setState,isDraft:!!l?.isDraft,removeDraft:()=>{l?.removeDraft?.();},resetDraft:()=>{l?.removeDraft?.(),b();},saveDraft:(...f)=>l?.saveDraft?.(...f),getDataDraft:()=>l?.getDataDraft?.(),draftKey:u,registerItem:m,unregisterItem:d,items:i.current,getItems:()=>i.current};return [P,P]};var je=({onSubmit:e,onChange:n,onInvalid:o,onFieldChange:s,formData:u,controller:l,children:i,...m})=>{u&&(u=U(u));let d=l??Y({draftKey:m.draftKey}),[r]=Array.isArray(d)?d:[d],a=r.draftKey,c=useRef(true),g=useRef(void 0),{autoSaveDelay:b=.5}=A(),P=async t=>{t.preventDefault(),t.stopPropagation(),r.setIsSubmit(true);let y=await r.formControl.trigger(),x=r.getData();y?e&&e({...x},{...r}):o&&o(r.formControl.formState.errors);},f=async()=>{if(!a)return;let t=await r.getDataDraft();t&&Object.entries(t).forEach(([y,x])=>{y==="field_1731131919872_aj29d"||!isNotEmpty(x)||(r.setValue(y,x),r.trigger(y));});},F=()=>{if(u){let t={...u};diffJson(g.current||{},t)&&(r.updateData(t),g.current=t,setTimeout(f,0));}};useEffect(()=>{F();},[u,r.formControl.reset]),useEffect(()=>{if(!n)return;let t=r.formControl.watch((y,x)=>n(y,x,r));return ()=>t.unsubscribe()},[]),useEffect(()=>{c.current=true;},[a]),useEffect(()=>{c.current&&r?.isDraft&&(c.current=false,f());},[r.isDraft,a]);let p=useMemo(()=>debounce((t,y,x)=>{x?.saveDraft?.({[t]:y},u);},b),[u,b]),h=async(t,y,x)=>{s?.(t,y,x),p(t,y,x);},T={...m};return delete T?.draftKey,jsx(Fragment,{children:jsx(B,{controller:{...r,disabled:m?.disabled,readOnly:m?.readOnly},onSubmit:e,onFieldChange:h,children:jsx("form",{...T,id:r.formId,ref:r.ref,onSubmit:P,children:i})})})},re=je;var te=createContext(void 0);function G(){let e=useContext(te);return e||{}}function N({children:e,...n}){return jsx(te.Provider,{value:n,children:e})}var oe=e=>{let n=v(),o=useFieldArray({control:n.control,name:e}),u={formArrayId:useMemo(()=>generateUUID(),[]),...o,...n};return [u,u]};var ae=({name:e,defaultData:n,controller:o,children:s})=>{let u=o??oe(e),[l]=Array.isArray(u)?u:[u];return useEffect(()=>{typeof n=="boolean"&&n?l.append({}):typeof n=="number"&&n>0?l.append([...Array(n).fill(null).map(()=>({}))]):typeof n=="object"&&n&&l.append(n);},[]),jsx(Fragment,{children:l.fields.map((i,m)=>{let d=`${e}.${m}.`,r={...l,index:m,fieldId:i.id,name:d,countFields:l.fields.length,removeItem:()=>l.remove(m),watchItem:a=>l.watch(a?`${d}${a}`:d.slice(0,-1)),setValueItem:(a,c)=>l.setValue(`${d}${a}`,c),useSelectedItem:a=>l.useSelected(`${d}${a}`)};return jsx(ne.Fragment,{children:jsx(N,{...r,children:renderChildren(s,r)})},i.id)})})};ae.displayName="BgsFormArray";var Xe=ae;ne.memo(({children:e,props:n})=>jsx(Fragment,{children:renderChildren(e,n)}));var me=createContext(void 0);function k(){let e=useContext(me);return e||{}}function M({children:e,...n}){return jsx(me.Provider,{value:n,children:e})}var le=({children:e,...n})=>{let o=v(),s=useMemo(()=>generateUUID(),[]);return jsx(Fragment,{children:jsx(M,{...o,...n,formGroupId:s,children:e})})};le.displayName="BgsFormGroup";var nr=le;var ar=/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;function L({validationRules:e,label:n},o,s){let{formControl:u,getData:l}=o,i=[];return e&&(typeof e=="string"?ue(s,e,true,n,u,l,{}).forEach(m=>i.push(m)):typeof e=="object"&&Object.keys(e).forEach(m=>{let{validate:d}=i.find(a=>a.validate)||{};if(["minLength","maxLength","min","max","match","diff","regexp","pattern","required","email"].includes(m)){let a=e[m],c="";["match","diff"].includes(m)&&typeof a=="object"&&(a=e[m].dataField,c=e[m].label),a!=null&&ue(s,m,a,n,u,l,d,c).forEach(g=>i.push(g));}else if(typeof e[m]=="object"){let a=e[m];i.push({validate:{...d,[m]:c=>a.validation(c)||a.message&&(typeof a.message=="string"?a.message:a.message(n))}});}})),Object.assign({},...i)}var ue=(e,n,o,s,u,l,i,m)=>{let d=[],{required:r,minLength:a,maxLength:c,min:g,max:b,email:P,match:f,diff:F,pattern:p}=e||{},T={required:t=>{if(!o)return true;let y=r?r(s):`${s} is required`;return typeof t=="string"&&!t.trim()||t==null?y:true},minLength:{value:o,message:a?a(s,o):`${s} must be at least ${o} characters long`},maxLength:{value:o,message:c?c(s,o):`${s} cannot be more than ${o} characters long`},min:{value:Number(o),message:g?g(s,o):`${s} should be at least ${o}`},max:{value:Number(o),message:b?b(s,o):`${s} should be at most ${o}`},regexp:(t="")=>t?new RegExp(o.regexp).test(t)||`${s} ${o.message}`:true,email:(t="")=>!o||!t?true:ar.test(t)||(P?P(s):`${s} must be type email`),match:(t="")=>t?t===(l&&l(o))||(f?f(s,m||labelFormatter.changeAll(o)):`${s} must be same with ${m||labelFormatter.changeAll(o)}`):true,diff:(t="")=>t?t!==(l&&l(o))||(F?F(s,m||labelFormatter.changeAll(o)):`${s} must be different with ${m||labelFormatter.changeAll(o)}`):true,pattern:{alphabet:(t="")=>!!t&&new RegExp("^[A-Za-z ]*$").test(t)||(p?.alphabet?p?.alphabet(s):`${s} must be format Alphabet`),alphanumber:(t="")=>!!t&&new RegExp("^[A-Za-z0-9 ]*$").test(t)||(p?.alphanumber?p?.alphanumber(s):`${s} must be format Alphabet or Number`),number:(t="")=>!!t&&new RegExp("^[0-9]*$").test(t)||(p?.number?p?.number(s):`${s} must be format Number`),lowercase:(t="")=>!!t&&new RegExp("^[a-z0-9 ]*$").test(t)||(p?.lowercase?p?.lowercase(s):`${s} must be format Lowercase`),url:(t="")=>!!t&&/^(ftp|http|https):\/\/[^ "]+$/.test(t)||(p?.url?p?.url(s):`${s} must be a valid URL`),uppercase:(t="")=>!!t&&new RegExp("^[A-Z0-9 ]*$").test(t)||(p?.uppercase?p?.uppercase(s):`${s} must be format Uppercase`),mixedcase:(t="")=>!!t&&/[a-z]/.test(t)&&/[A-Z]/.test(t)||(p?.mixedcase?p?.mixedcase(s):`${s} must be mixed case`),specialcharacters:(t="")=>!!t&&/[^a-zA-Z0-9\s]/.test(t)||(p?.specialcharacters?p?.specialcharacters(s):`${s} must contain special characters`)}}[n];if(T){let{validate:t}=d.find(y=>y.validate)||{};typeof T=="function"?d.push({validate:{...t,...i,[n]:T}}):n==="pattern"?d.push({validate:{...t,...i,[`${n}${o}`]:T[o]}}):d.push({[n]:T});}return d};var Nt=e=>{let n=useMemo(()=>generateUUID(),[]),o=v(),{validationMessage:s}=A(),{registerItem:u,unregisterItem:l,control:i,disabled:m,readOnly:d,formId:r,setSelected:a,useSelected:c,onFieldChange:g}=o,{name:b,formId:P,...f}=k(),{name:F,formId:p}=G(),h=useMemo(()=>{let R=e.dataField;return e.disabledHierarchy||(F&&r===p&&(R=`${F}${R}`),b&&r===P&&(R=`${b}${R}`)),R},[F,r,p,e.dataField,b,P,e.disabledHierarchy]),T=useMemo(()=>{if(e.label)return e.label;if(!e.noLabel)return labelFormatter.changeAll(h)},[e.label,e.noLabel,h]);useEffect(()=>(u({id:n,...e,dataField:h,label:T}),()=>{l(n);}),[n,e,h,T]);let t=useMemo(()=>typeof e.disabled=="boolean"?e.disabled:typeof f.disabled=="boolean"?f.disabled:!!m,[e.disabled,f.disabled,m]),y=useMemo(()=>typeof e.readOnly=="boolean"?e.readOnly:typeof f.readOnly=="boolean"?f.readOnly:!!d,[e.readOnly,f.readOnly,d]),x=useMemo(()=>typeof e.hidden=="boolean"?e.hidden:false,[e.hidden]),w=useMemo(()=>{if(typeof e.required=="boolean"){if(typeof e.validationRules>"u")return {required:e.required};if(typeof e.validationRules=="string"&&e.validationRules==="email")return {email:true,required:e.required};if(typeof e.validationRules=="object")return {...e.validationRules,required:e.required}}return e.validationRules},[e.validationRules,e.required]),fe=useMemo(()=>t||y||x?{required:false}:L({validationRules:w,label:T},o,s),[t,y,x,w,T,h,o,s]),I=useController({name:h,control:i,disabled:t,defaultValue:e.defaultValue,shouldUnregister:e.shouldUnregister,rules:fe}),ce=I.fieldState.invalid,pe=I.fieldState.error?.message,ge=useWatch({name:h,control:i,defaultValue:e.defaultValue}),ye=useMemo(()=>debounce(R=>a(be=>({...be,[h]:R||null}))),[a,h]),Fe=c(h),he=w?.required;return {...e,setSelectedField:ye,label:T,dataField:h,controller:I,invalid:ce,messageError:pe,selectedField:Fe,value:ge,required:he,onChange:R=>{I.field.onChange(R),g?.(h,R,o);}}};var Lt=()=>{let{formControl:e,items:n}=v(),o=(u,l,i,m=0)=>{let d=[];if(Array.isArray(i))i.forEach((r,a)=>{let c=Object.entries(r||{}).map(([g,b])=>o(`${u}.${a}.${g}`,`${l}[]${g}`,b,i.length>1?a+1:0)).flat();d=[...d,...c];});else if(i&&typeof i=="object"&&!Array.isArray(i)&&!i?.ref)Object.entries(i).map(([r,a])=>{let c=o(`${u}.${r}`,`${u}.${r}`,a);d=[...d,...c];});else {let r=i?.message||"",a=n.find(c=>c.dataField===l)?.label;d.push({label:`${a||""}${m>0?` ${m}`:""}`,message:r,dataField:u});}return d};return Object.entries(e.formState.errors||{}).map(([u,l])=>o(u,u,l)).flat()};function Qt(e){let{watch:n}=v(),o=useMemo(()=>{let i=new Set,m=d=>{if(d)for(let[r,a]of Object.entries(d)){if(r==="and"||r==="or"){a?.forEach(m);continue}a&&typeof a=="object"&&"fromField"in a&&typeof a.fromField=="string"&&i.add(a.fromField);}};return m(e),Array.from(i)},[e]),s=o.length?n(o):[],u=useMemo(()=>{let i={};return o.forEach((m,d)=>{i[m]=s?.[d];}),i},[o,s]),l=useCallback(i=>{if(!i)return i;let m={};for(let[d,r]of Object.entries(i)){if(d==="and"||d==="or"){m[d]=r?.map(a=>l(a))??r;continue}if(r&&typeof r=="object"&&"fromField"in r){let a=r,c={...a},g=a.fromField;g&&g in u?c.value=u[g]:c.value=a.value,delete c.fromField,m[d]=c;}else m[d]=r;}return m},[u]);return useMemo(()=>l(e)??{},[e,l])}var pr=(d=>(d.alphabet="alphabet",d.alphaNumber="alphanumber",d.number="number",d.lowercase="lowercase",d.url="url",d.uppercase="uppercase",d.mixedCase="mixedcase",d.specialCharacters="specialcharacters",d))(pr||{});var Zt=re;export{Xe as BgsFormArray,nr as BgsFormGroup,H as BgsReactFormProvider,pr as PatternTypeEnum,Zt as default,Nt as useBgsController,v as useBgsForm,G as useBgsFormArray,oe as useBgsFormArrayInit,k as useBgsFormGroup,Y as useBgsFormInit,Qt as useResolvedQuery,Lt as useSummaryValidation};
|
|
1
|
+
import ne,{createContext,useContext,useRef,useState,useCallback,useMemo,useEffect}from'react';import {jsx,Fragment}from'react/jsx-runtime';import {renderChildren,generateUUID,getFieldValue,mappingUndefinedtoNull,debounce,labelFormatter,isNotEmpty,diffJson,isArray,useDbLiveFlag,createStore,createDatabase,createTable}from'@bgscore/react-core';import {useForm,useWatch,useFieldArray,useController}from'react-hook-form';var q=createContext(void 0);function P(){let e=useContext(q);return e||{}}function w({children:e,controller:i,onSubmit:o,onFieldChange:n=()=>{}}){let l={...i,triggerSubmit:async(s,m)=>{i.setIsSubmit(true);let d=m?await i.formControl.trigger():true,r=i.getData();d&&o&&o({...r,...s},{...i});},onFieldChange:n};return jsx(q.Provider,{value:l,children:e})}var O=new WeakMap;function V(e){return O.has(e)||O.set(e,createStore({})),O.get(e)}function C(e){if(typeof e!="object"||e===null||Array.isArray(e))return e;let i={};for(let[o,n]of Object.entries(e))if(o.includes(".")){let u=o.split("."),l=i;for(let s=0;s<u.length;s++){let m=u[s];s===u.length-1?l[m]=C(n):((!l[m]||typeof l[m]!="object")&&(l[m]={}),l=l[m]);}}else i[o]=C(n);return i}function W(){return createTable({name:"draft",primaryKey:"field_1731131919872_aj29d"})}var Q=createContext(void 0);function U(){let e=useContext(Q);return e||{}}function H({children:e,value:i}){return jsx(Q.Provider,{value:i,children:e})}function K(){let{dbName:e="bgs-react-form"}=U();return createDatabase({dbName:e,table:{draft:W()}})}function _(e){let i=K(),o=useDbLiveFlag(i.draft.detail,{key:e}),n=async(s,m)=>{let r={...await l(),...s};Object.keys(r).forEach(p=>{isNotEmpty(r[p])||delete r[p];});let a=Object.keys(r);if(a.length===1&&a[0]==="field_1731131919872_aj29d")return u();a.some(p=>p!=="field_1731131919872_aj29d"&&r[p]!==getFieldValue(m,p))?await i.draft.put(e,r):await u();},u=async()=>{await i.draft.remove(e);},l=async()=>await i.draft.detail(e);return {isDraft:o,saveDraft:n,removeDraft:u,getDataDraft:l}}var Y=(e={})=>{e.defaultValues||(e.defaultValues={}),e.defaultValues=C(e.defaultValues);let i=useRef(null),[o,n]=useState(false),u=e?.draftKey,l=u?_(u):void 0,s=useRef([]),m=useCallback(f=>{let F=s.current.findIndex(g=>g.id===f.id);if(F>-1){let g=[...s.current];g[F]=f,s.current=[...g];}else s.current.push(f);},[s]),d=useCallback(f=>{s.current=s.current.filter(F=>F.id!==f);},[]),r=useForm({reValidateMode:"onSubmit",mode:"all",...e}),a=V(r),c=useMemo(()=>generateUUID(),[]),p=f=>f?getFieldValue(mappingUndefinedtoNull(r.getValues()),f):mappingUndefinedtoNull(r.getValues()),b=f=>{f?typeof f=="string"?r.resetField(f,{}):typeof f=="object"&&isArray(f,0)&&f.forEach(F=>r.resetField(F)):r.reset();},v={...r,ref:i,reset:b,updateData:(f,F)=>{let g=p();r.reset(C({...g,...f}),F);},getData:p,formControl:r,useFieldArray:f=>useFieldArray({control:r.control,name:f}),useWatch:f=>useWatch({control:r.control,name:f}),isSubmit:o,formId:c,setIsSubmit:n,useSelected:f=>a.useStore(F=>getFieldValue(F,f)),setSelected:a.setState,isDraft:!!l?.isDraft,removeDraft:()=>{l?.removeDraft?.();},resetDraft:()=>{l?.removeDraft?.(),b();},saveDraft:(...f)=>l?.saveDraft?.(...f),getDataDraft:()=>l?.getDataDraft?.(),draftKey:u,registerItem:m,unregisterItem:d,items:s.current,getItems:()=>s.current};return [v,v]};var je=({onSubmit:e,onChange:i,onInvalid:o,onFieldChange:n,formData:u,controller:l,children:s,...m})=>{u&&(u=C(u));let d=l??Y({draftKey:m.draftKey}),[r]=Array.isArray(d)?d:[d],a=r.draftKey,c=useRef(true),p=useRef(void 0),{autoSaveDelay:b=.5}=U(),v=async t=>{t.preventDefault(),t.stopPropagation(),r.setIsSubmit(true);let y=await r.formControl.trigger(),x=r.getData();y?e&&e({...x},{...r}):o&&o(r.formControl.formState.errors);},f=async()=>{if(!a)return;let t=await r.getDataDraft();t&&Object.entries(t).forEach(([y,x])=>{y==="field_1731131919872_aj29d"||!isNotEmpty(x)||(r.setValue(y,x),r.trigger(y));});},F=()=>{if(u){let t={...u};diffJson(p.current||{},t)&&(r.updateData(t),p.current=t,setTimeout(f,0));}};useEffect(()=>{F();},[u,r.formControl.reset]),useEffect(()=>{if(!i)return;let t=r.formControl.watch((y,x)=>i(y,x,r));return ()=>t.unsubscribe()},[]),useEffect(()=>{c.current=true;},[a]),useEffect(()=>{c.current&&r?.isDraft&&(c.current=false,f());},[r.isDraft,a]);let g=useMemo(()=>debounce((t,y,x)=>{x?.saveDraft?.({[t]:y},u);},b),[u,b]),h=async(t,y,x)=>{n?.(t,y,x),g(t,y,x);},T={...m};return delete T?.draftKey,jsx(Fragment,{children:jsx(w,{controller:{...r,disabled:m?.disabled,readOnly:m?.readOnly},onSubmit:e,onFieldChange:h,children:jsx("form",{...T,id:r.formId,ref:r.ref,onSubmit:v,children:s})})})},re=je;var te=createContext(void 0);function G(){let e=useContext(te);return e||{}}function N({children:e,...i}){return jsx(te.Provider,{value:i,children:e})}var oe=e=>{let i=P(),o=useFieldArray({control:i.control,name:e}),u={formArrayId:useMemo(()=>generateUUID(),[]),...o,...i};return [u,u]};var ae=({defaultData:e,controller:i,children:o,...n})=>{let u=i??oe(n?.name),[l]=Array.isArray(u)?u:[u],s=l.name;return useEffect(()=>{typeof e=="boolean"&&e?l.append({}):typeof e=="number"&&e>0?l.append([...Array(e).fill(null).map(()=>({}))]):typeof e=="object"&&e&&l.append(e);},[]),jsx(Fragment,{children:l.fields.map((m,d)=>{let r=`${s}.${d}.`,a={...l,index:d,fieldId:m.id,name:r,countFields:l.fields.length,removeItem:()=>l.remove(d),watchItem:c=>l.watch(c?`${r}${c}`:r.slice(0,-1)),setValueItem:(c,p)=>l.setValue(`${r}${c}`,p),useSelectedItem:c=>l.useSelected(`${r}${c}`)};return jsx(ne.Fragment,{children:jsx(N,{...a,children:renderChildren(o,a)})},m.id)})})};ae.displayName="BgsFormArray";var Xe=ae;ne.memo(({children:e,props:i})=>jsx(Fragment,{children:renderChildren(e,i)}));var me=createContext(void 0);function k(){let e=useContext(me);return e||{}}function M({children:e,...i}){return jsx(me.Provider,{value:i,children:e})}var le=({children:e,...i})=>{let o=P(),n=useMemo(()=>generateUUID(),[]);return jsx(Fragment,{children:jsx(M,{...o,...i,formGroupId:n,children:e})})};le.displayName="BgsFormGroup";var nr=le;var ar=/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;function L({validationRules:e,label:i},o,n){let{formControl:u,getData:l}=o,s=[];return e&&(typeof e=="string"?ue(n,e,true,i,u,l,{}).forEach(m=>s.push(m)):typeof e=="object"&&Object.keys(e).forEach(m=>{let{validate:d}=s.find(a=>a.validate)||{};if(["minLength","maxLength","min","max","match","diff","regexp","pattern","required","email"].includes(m)){let a=e[m],c="";["match","diff"].includes(m)&&typeof a=="object"&&(a=e[m].dataField,c=e[m].label),a!=null&&ue(n,m,a,i,u,l,d,c).forEach(p=>s.push(p));}else if(typeof e[m]=="object"){let a=e[m];s.push({validate:{...d,[m]:c=>a.validation(c)||a.message&&(typeof a.message=="string"?a.message:a.message(i))}});}})),Object.assign({},...s)}var ue=(e,i,o,n,u,l,s,m)=>{let d=[],{required:r,minLength:a,maxLength:c,min:p,max:b,email:v,match:f,diff:F,pattern:g}=e||{},T={required:t=>{if(!o)return true;let y=r?r(n):`${n} is required`;return typeof t=="string"&&!t.trim()||t==null?y:true},minLength:{value:o,message:a?a(n,o):`${n} must be at least ${o} characters long`},maxLength:{value:o,message:c?c(n,o):`${n} cannot be more than ${o} characters long`},min:{value:Number(o),message:p?p(n,o):`${n} should be at least ${o}`},max:{value:Number(o),message:b?b(n,o):`${n} should be at most ${o}`},regexp:(t="")=>t?new RegExp(o.regexp).test(t)||`${n} ${o.message}`:true,email:(t="")=>!o||!t?true:ar.test(t)||(v?v(n):`${n} must be type email`),match:(t="")=>t?t===(l&&l(o))||(f?f(n,m||labelFormatter.changeAll(o)):`${n} must be same with ${m||labelFormatter.changeAll(o)}`):true,diff:(t="")=>t?t!==(l&&l(o))||(F?F(n,m||labelFormatter.changeAll(o)):`${n} must be different with ${m||labelFormatter.changeAll(o)}`):true,pattern:{alphabet:(t="")=>!!t&&new RegExp("^[A-Za-z ]*$").test(t)||(g?.alphabet?g?.alphabet(n):`${n} must be format Alphabet`),alphanumber:(t="")=>!!t&&new RegExp("^[A-Za-z0-9 ]*$").test(t)||(g?.alphanumber?g?.alphanumber(n):`${n} must be format Alphabet or Number`),number:(t="")=>!!t&&new RegExp("^[0-9]*$").test(t)||(g?.number?g?.number(n):`${n} must be format Number`),lowercase:(t="")=>!!t&&new RegExp("^[a-z0-9 ]*$").test(t)||(g?.lowercase?g?.lowercase(n):`${n} must be format Lowercase`),url:(t="")=>!!t&&/^(ftp|http|https):\/\/[^ "]+$/.test(t)||(g?.url?g?.url(n):`${n} must be a valid URL`),uppercase:(t="")=>!!t&&new RegExp("^[A-Z0-9 ]*$").test(t)||(g?.uppercase?g?.uppercase(n):`${n} must be format Uppercase`),mixedcase:(t="")=>!!t&&/[a-z]/.test(t)&&/[A-Z]/.test(t)||(g?.mixedcase?g?.mixedcase(n):`${n} must be mixed case`),specialcharacters:(t="")=>!!t&&/[^a-zA-Z0-9\s]/.test(t)||(g?.specialcharacters?g?.specialcharacters(n):`${n} must contain special characters`)}}[i];if(T){let{validate:t}=d.find(y=>y.validate)||{};typeof T=="function"?d.push({validate:{...t,...s,[i]:T}}):i==="pattern"?d.push({validate:{...t,...s,[`${i}${o}`]:T[o]}}):d.push({[i]:T});}return d};var Nt=e=>{let i=useMemo(()=>generateUUID(),[]),o=P(),{validationMessage:n}=U(),{registerItem:u,unregisterItem:l,control:s,disabled:m,readOnly:d,formId:r,setSelected:a,useSelected:c,onFieldChange:p}=o,{name:b,formId:v,...f}=k(),{name:F,formId:g}=G(),h=useMemo(()=>{let A=e.dataField;return e.disabledHierarchy||(F&&r===g&&(A=`${F}${A}`),b&&r===v&&(A=`${b}${A}`)),A},[F,r,g,e.dataField,b,v,e.disabledHierarchy]),T=useMemo(()=>{if(e.label)return e.label;if(!e.noLabel)return labelFormatter.changeAll(h)},[e.label,e.noLabel,h]);useEffect(()=>(u({id:i,...e,dataField:h,label:T}),()=>{l(i);}),[i,e,h,T]);let t=useMemo(()=>typeof e.disabled=="boolean"?e.disabled:typeof f.disabled=="boolean"?f.disabled:!!m,[e.disabled,f.disabled,m]),y=useMemo(()=>typeof e.readOnly=="boolean"?e.readOnly:typeof f.readOnly=="boolean"?f.readOnly:!!d,[e.readOnly,f.readOnly,d]),x=useMemo(()=>typeof e.hidden=="boolean"?e.hidden:false,[e.hidden]),$=useMemo(()=>{if(typeof e.required=="boolean"){if(typeof e.validationRules>"u")return {required:e.required};if(typeof e.validationRules=="string"&&e.validationRules==="email")return {email:true,required:e.required};if(typeof e.validationRules=="object")return {...e.validationRules,required:e.required}}return e.validationRules},[e.validationRules,e.required]),fe=useMemo(()=>t||y||x?{required:false}:L({validationRules:$,label:T},o,n),[t,y,x,$,T,h,o,n]),I=useController({name:h,control:s,disabled:t,defaultValue:e.defaultValue,shouldUnregister:e.shouldUnregister,rules:fe}),ce=I.fieldState.invalid,pe=I.fieldState.error?.message,ge=useWatch({name:h,control:s,defaultValue:e.defaultValue}),ye=useMemo(()=>debounce(A=>a(be=>({...be,[h]:A||null}))),[a,h]),Fe=c(h),he=$?.required;return {...e,setSelectedField:ye,label:T,dataField:h,controller:I,invalid:ce,messageError:pe,selectedField:Fe,value:ge,required:he,onChange:A=>{I.field.onChange(A),p?.(h,A,o);}}};var Lt=()=>{let{formControl:e,items:i}=P(),o=(u,l,s,m=0)=>{let d=[];if(Array.isArray(s))s.forEach((r,a)=>{let c=Object.entries(r||{}).map(([p,b])=>o(`${u}.${a}.${p}`,`${l}[]${p}`,b,s.length>1?a+1:0)).flat();d=[...d,...c];});else if(s&&typeof s=="object"&&!Array.isArray(s)&&!s?.ref)Object.entries(s).map(([r,a])=>{let c=o(`${u}.${r}`,`${u}.${r}`,a);d=[...d,...c];});else {let r=s?.message||"",a=i.find(c=>c.dataField===l)?.label;d.push({label:`${a||""}${m>0?` ${m}`:""}`,message:r,dataField:u});}return d};return Object.entries(e.formState.errors||{}).map(([u,l])=>o(u,u,l)).flat()};function Qt(e){let{watch:i}=P(),o=useMemo(()=>{let s=new Set,m=d=>{if(d)for(let[r,a]of Object.entries(d)){if(r==="and"||r==="or"){a?.forEach(m);continue}a&&typeof a=="object"&&"fromField"in a&&typeof a.fromField=="string"&&s.add(a.fromField);}};return m(e),Array.from(s)},[e]),n=o.length?i(o):[],u=useMemo(()=>{let s={};return o.forEach((m,d)=>{s[m]=n?.[d];}),s},[o,n]),l=useCallback(s=>{if(!s)return s;let m={};for(let[d,r]of Object.entries(s)){if(d==="and"||d==="or"){m[d]=r?.map(a=>l(a))??r;continue}if(r&&typeof r=="object"&&"fromField"in r){let a=r,c={...a},p=a.fromField;p&&p in u?c.value=u[p]:c.value=a.value,delete c.fromField,m[d]=c;}else m[d]=r;}return m},[u]);return useMemo(()=>l(e)??{},[e,l])}var pr=(d=>(d.alphabet="alphabet",d.alphaNumber="alphanumber",d.number="number",d.lowercase="lowercase",d.url="url",d.uppercase="uppercase",d.mixedCase="mixedcase",d.specialCharacters="specialcharacters",d))(pr||{});var Zt=re;export{Xe as BgsFormArray,nr as BgsFormGroup,H as BgsReactFormProvider,pr as PatternTypeEnum,Zt as default,Nt as useBgsController,P as useBgsForm,G as useBgsFormArray,oe as useBgsFormArrayInit,k as useBgsFormGroup,Y as useBgsFormInit,Qt as useResolvedQuery,Lt as useSummaryValidation};
|
package/package.json
CHANGED