@bgscore/react-form 1.0.13 → 1.0.15
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 +26 -6
- package/dist/index.d.ts +26 -6
- package/dist/index.js +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var J=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 J__default=/*#__PURE__*/_interopDefault(J);var M=J.createContext(void 0);function h(){let e=J.useContext(M);return e||{}}function v({children:e,controller:r,onSubmit:t,onFieldChange:p=()=>{}}){let n=J.useRef([]),o=J.useCallback(a=>{let d=n.current.findIndex(m=>m.id===a.id);if(d>-1){let m=[...n.current];m[d]=a,n.current=[...m];}else n.current.push(a);},[n]),l=J.useCallback(a=>{n.current=n.current.filter(d=>d.id!==a);},[]),u=async(a,d)=>{r.setIsSubmit(true);let m=d?await r.formControl.trigger():true,f=r.getData();m&&t&&t({...f,...a},{...r});},s={...r,registerItem:o,unregisterItem:l,items:n.current,triggerSubmit:u,onFieldChange:p};return jsxRuntime.jsx(M.Provider,{value:s,children:e})}var w=new WeakMap;function N(e){return w.has(e)||w.set(e,reactCore.createStore({})),w.get(e)}function A(e){if(typeof e!="object"||e===null||Array.isArray(e))return e;let r={};for(let[t,p]of Object.entries(e))if(t.includes(".")){let n=t.split("."),o=r;for(let l=0;l<n.length;l++){let u=n[l];l===n.length-1?o[u]=A(p):((!o[u]||typeof o[u]!="object")&&(o[u]={}),o=o[u]);}}else r[t]=A(p);return r}var D=(e,r)=>{e||(e={}),e=A(e);let t=J.useRef(null),[p,n]=J.useState(false),o=reactHookForm.useForm({...r,reValidateMode:"onSubmit",mode:"all",defaultValues:e}),l=N(o),u=J.useMemo(()=>reactCore.generateUUID(),[]),s=m=>m?reactCore.getFieldValue(reactCore.mappingUndefinedtoNull(o.getValues()),m):reactCore.mappingUndefinedtoNull(o.getValues()),d={...o,ref:t,reset:m=>{m?typeof m=="string"?o.resetField(m,{}):typeof m=="object"&&reactCore.isArray(m,0)&&m.forEach(f=>o.resetField(f)):o.reset();},updateData:m=>{let f=s();o.reset(A({...f,...m}));},getData:s,formControl:o,useFieldArray:m=>reactHookForm.useFieldArray({control:o.control,name:m}),useWatch:m=>reactHookForm.useWatch({control:o.control,name:m}),isSubmit:p,formId:u,setIsSubmit:n,useSelected:m=>l.useStore(f=>reactCore.getFieldValue(f,m)),setSelected:l.setState};return [d,d]};var Pe=({onSubmit:e,onChange:r,onInvalid:t,onFieldChange:p,formData:n,controller:o,children:l,...u})=>{n&&(n=A(n));let s=o??D(),[a]=Array.isArray(s)?s:[s],d=J.useRef(void 0),m=async f=>{f.preventDefault(),f.stopPropagation(),a.setIsSubmit(true);let g=await a.formControl.trigger(),y=a.getData();g?e&&e({...y},{...a}):t&&t(a.formControl.formState.errors);};return J.useEffect(()=>{n&&reactCore.diffJson(d.current||{},n)&&(a.formControl.reset(n),d.current=n);},[n,a.formControl.reset]),J.useEffect(()=>{if(!r)return;let f=a.formControl.watch((g,y)=>r(g,y,a));return ()=>f.unsubscribe()},[]),jsxRuntime.jsx(jsxRuntime.Fragment,{children:jsxRuntime.jsx(v,{controller:{...a,disabled:u?.disabled,readOnly:u?.readOnly},onSubmit:e,onFieldChange:p,children:jsxRuntime.jsx("form",{...u,id:a.formId,ref:a.ref,onSubmit:m,children:l})})})},z=Pe;var j=J.createContext(void 0);function O(){let e=J.useContext(j);return e||{}}function G({children:e,...r}){return jsxRuntime.jsx(j.Provider,{value:r,children:e})}var Z=e=>{let r=h(),t=reactHookForm.useFieldArray({control:r.control,name:e}),n={formArrayId:J.useMemo(()=>reactCore.generateUUID(),[]),...t,...r};return [n,n]};var X=({name:e,defaultData:r,controller:t,children:p})=>{let n=t??Z(e),[o]=Array.isArray(n)?n:[n];return J.useEffect(()=>{typeof r=="boolean"&&r?o.append({}):typeof r=="number"&&r>0?o.append([...Array(r).fill(null).map(()=>({}))]):typeof r=="object"&&r&&o.append(r);},[]),jsxRuntime.jsx(jsxRuntime.Fragment,{children:o.fields.map((l,u)=>{let s=`${e}.${u}.`,a={...o,index:u,fieldId:l.id,name:s,countFields:o.fields.length,removeItem:()=>o.remove(u),watchItem:d=>o.watch(d?`${s}${d}`:s.slice(0,-1)),setValueItem:(d,m)=>o.setValue(`${s}${d}`,m),useSelectedItem:d=>o.useSelected(`${s}${d}`)};return jsxRuntime.jsx(J__default.default.Fragment,{children:jsxRuntime.jsx(G,{...a,children:reactCore.renderChildren(p,a)})},l.id)})})};X.displayName="BgsFormArray";var ke=X;J__default.default.memo(({children:e,props:r})=>jsxRuntime.jsx(jsxRuntime.Fragment,{children:reactCore.renderChildren(e,r)}));var Q=J.createContext(void 0);function W(){let e=J.useContext(Q);return e||{}}function E({children:e,...r}){return jsxRuntime.jsx(Q.Provider,{value:r,children:e})}var ee=({children:e,...r})=>{let t=h(),p=J.useMemo(()=>reactCore.generateUUID(),[]);return jsxRuntime.jsx(jsxRuntime.Fragment,{children:jsxRuntime.jsx(E,{...t,...r,formGroupId:p,children:e})})};ee.displayName="BgsFormGroup";var De=ee;var re=J.createContext(void 0);function te(){let e=J.useContext(re);return e||{}}function oe({children:e,...r}){return jsxRuntime.jsx(re.Provider,{value:r,children:e})}var Je=/^(([^<>()[\]\\.,;:\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 k({validationRules:e,label:r}){let{formControl:t,getData:p}=h(),n=[];return e&&(typeof e=="string"?ne(e,true,r,t,p,{}).forEach(o=>n.push(o)):typeof e=="object"&&Object.keys(e).forEach(o=>{let{validate:l}=n.find(s=>s.validate)||{};if(["minLength","maxLength","min","max","match","diff","regexp","pattern","required","email"].includes(o)){let s=e[o],a="";["match","diff"].includes(o)&&typeof s=="object"&&(s=e[o].dataField,a=e[o].label),s!=null&&ne(o,s,r,t,p,l,a).forEach(d=>n.push(d));}else if(typeof e[o]=="object"){let s=e[o];n.push({validate:{...l,[o]:a=>s.validation(a)||s.message&&(typeof s.message=="string"?s.message:s.message(r))}});}})),Object.assign({},...n)}var ne=(e,r,t,p,n,o,l)=>{let u=[],{validationMessage:s}=te(),{required:a,minLength:d,maxLength:m,min:f,max:g,email:y,match:T,diff:U,pattern:c}=s||{},F={required:i=>{if(!r)return true;let x=a?a(t):`${t} is required`;return typeof i=="string"&&!i.trim()||i==null?x:true},minLength:{value:r,message:d?d(t,r):`${t} must be at least ${r} characters long`},maxLength:{value:r,message:m?m(t,r):`${t} cannot be more than ${r} characters long`},min:{value:Number(r),message:f?f(t,r):`${t} should be at least ${r}`},max:{value:Number(r),message:g?g(t,r):`${t} should be at most ${r}`},regexp:(i="")=>i?new RegExp(r.regexp).test(i)||`${t} ${r.message}`:true,email:(i="")=>!r||!i?true:Je.test(i)||(y?y(t):`${t} must be type email`),match:(i="")=>i?i===(n&&n(r))||(T?T(t,l||reactCore.labelFormatter.changeAll(r)):`${t} must be same with ${l||reactCore.labelFormatter.changeAll(r)}`):true,diff:(i="")=>i?i!==(n&&n(r))||(U?U(t,l||reactCore.labelFormatter.changeAll(r)):`${t} must be different with ${l||reactCore.labelFormatter.changeAll(r)}`):true,pattern:{alphabet:(i="")=>!!i&&new RegExp("^[A-Za-z ]*$").test(i)||(c?.alphabet?c?.alphabet(t):`${t} must be format Alphabet`),alphanumber:(i="")=>!!i&&new RegExp("^[A-Za-z0-9 ]*$").test(i)||(c?.alphanumber?c?.alphanumber(t):`${t} must be format Alphabet or Number`),number:(i="")=>!!i&&new RegExp("^[0-9]*$").test(i)||(c?.number?c?.number(t):`${t} must be format Number`),lowercase:(i="")=>!!i&&new RegExp("^[a-z0-9 ]*$").test(i)||(c?.lowercase?c?.lowercase(t):`${t} must be format Lowercase`),url:(i="")=>!!i&&/^(ftp|http|https):\/\/[^ "]+$/.test(i)||(c?.url?c?.url(t):`${t} must be a valid URL`),uppercase:(i="")=>!!i&&new RegExp("^[A-Z0-9 ]*$").test(i)||(c?.uppercase?c?.uppercase(t):`${t} must be format Uppercase`),mixedcase:(i="")=>!!i&&/[a-z]/.test(i)&&/[A-Z]/.test(i)||(c?.mixedcase?c?.mixedcase(t):`${t} must be mixed case`),specialcharacters:(i="")=>!!i&&/[^a-zA-Z0-9\s]/.test(i)||(c?.specialcharacters?c?.specialcharacters(t):`${t} must contain special characters`)}}[e];if(F){let{validate:i}=u.find(x=>x.validate)||{};typeof F=="function"?u.push({validate:{...i,...o,[e]:F}}):e==="pattern"?u.push({validate:{...i,...o,[`${e}${r}`]:F[r]}}):u.push({[e]:F});}return u};var pt=e=>{let r=J.useMemo(()=>reactCore.generateUUID(),[]),t=h(),{registerItem:p,unregisterItem:n,control:o,disabled:l,readOnly:u,formId:s,setSelected:a,useSelected:d,onFieldChange:m}=t,{name:f,formId:g,...y}=W(),{name:T,formId:U}=O(),c=J.useMemo(()=>{let b=e.dataField;return e.disabledHierarchy||(T&&s===U&&(b=`${T}${b}`),f&&s===g&&(b=`${f}${b}`)),b},[T,s,U,e.dataField,f,g,e.disabledHierarchy]),C=J.useMemo(()=>{if(e.label)return e.label;if(!e.noLabel)return reactCore.labelFormatter.changeAll(c)},[e.label,e.noLabel,c]);J.useEffect(()=>(p({id:r,...e,dataField:c,label:C}),()=>{n(r);}),[r,e,c,C]);let F=false;typeof e.disabled=="boolean"?F=e.disabled:typeof y.disabled=="boolean"?F=y.disabled:F=!!l;let i=false;typeof e.readOnly=="boolean"?i=e.readOnly:typeof y.readOnly=="boolean"?i=y.readOnly:i=!!u;let x=false;typeof e.hidden=="boolean"&&(x=e.hidden);let R=e.validationRules;typeof e.required=="boolean"&&(typeof e.validationRules>"u"?R={required:e.required}:typeof e.validationRules=="string"&&e.validationRules==="email"?R={email:true,required:e.required}:typeof e.validationRules=="object"&&(R={...e.validationRules,required:e.required}));let se=F||i||x?{required:false}:k({...e,validationRules:R,label:C}),I=reactHookForm.useController({name:c,control:o,disabled:F,defaultValue:e.defaultValue,shouldUnregister:e.shouldUnregister,rules:se}),ie=I.fieldState.invalid,ae=I.fieldState.error?.message,me=reactHookForm.useWatch({name:c,control:o,defaultValue:e.defaultValue}),le=J.useMemo(()=>reactCore.debounce(b=>a(ce=>({...ce,[c]:b||null}))),[a,c]),de=d(c),ue=R?.required;return {...e,setSelectedField:le,label:C,dataField:c,controller:I,invalid:ie,messageError:ae,selectedField:de,value:me,required:ue,onChange:b=>{I.field.onChange(b),m?.(c,b,t);}}};var Ft=()=>{let{formControl:e,items:r}=h(),t=(n,o,l,u=0)=>{let s=[];if(Array.isArray(l))l.forEach((a,d)=>{let m=Object.entries(a||{}).map(([f,g])=>t(`${n}.${d}.${f}`,`${o}[]${f}`,g,l.length>1?d+1:0)).flat();s=[...s,...m];});else if(l&&typeof l=="object"&&!Array.isArray(l)&&!l?.ref)Object.entries(l).map(([a,d])=>{let m=t(`${n}.${a}`,`${n}.${a}`,d);s=[...s,...m];});else {let a=l?.message||"",d=r.find(m=>m.dataField===o)?.label;s.push({label:`${d||""}${u>0?` ${u}`:""}`,message:a,dataField:n});}return s};return Object.entries(e.formState.errors||{}).map(([n,o])=>t(n,n,o)).flat()};var rr=(s=>(s.alphabet="alphabet",s.alphaNumber="alphanumber",s.number="number",s.lowercase="lowercase",s.url="url",s.uppercase="uppercase",s.mixedCase="mixedcase",s.specialCharacters="specialcharacters",s))(rr||{});var At=z;exports.BgsFormArray=ke;exports.BgsFormGroup=De;exports.BgsReactFormProvider=oe;exports.PatternTypeEnum=rr;exports.default=At;exports.useBgsController=pt;exports.useBgsForm=h;exports.useBgsFormArray=O;exports.useBgsFormArrayInit=Z;exports.useBgsFormGroup=W;exports.useBgsFormInit=D;exports.useSummaryValidation=Ft;
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var Q=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 Q__default=/*#__PURE__*/_interopDefault(Q);var k=Q.createContext(void 0);function h(){let e=Q.useContext(k);return e||{}}function D({children:e,controller:r,onSubmit:t,onFieldChange:p=()=>{}}){let o=Q.useRef([]),n=Q.useCallback(l=>{let s=o.current.findIndex(c=>c.id===l.id);if(s>-1){let c=[...o.current];c[s]=l,o.current=[...c];}else o.current.push(l);},[o]),m=Q.useCallback(l=>{o.current=o.current.filter(s=>s.id!==l);},[]),f=async(l,s)=>{r.setIsSubmit(true);let c=s?await r.formControl.trigger():true,d=r.getData();c&&t&&t({...d,...l},{...r});},i={...r,registerItem:n,unregisterItem:m,items:o.current,triggerSubmit:f,onFieldChange:p};return jsxRuntime.jsx(k.Provider,{value:i,children:e})}var $=new WeakMap;function q(e){return $.has(e)||$.set(e,reactCore.createStore({})),$.get(e)}function C(e){if(typeof e!="object"||e===null||Array.isArray(e))return e;let r={};for(let[t,p]of Object.entries(e))if(t.includes(".")){let o=t.split("."),n=r;for(let m=0;m<o.length;m++){let f=o[m];m===o.length-1?n[f]=C(p):((!n[f]||typeof n[f]!="object")&&(n[f]={}),n=n[f]);}}else r[t]=C(p);return r}function w(){return reactCore.createTable({name:"draft",primaryKey:"field_1731131919872_aj29d"})}function B(){return reactCore.createDatabase({dbName:"bgs-react-form",table:{draft:w()}})}function j(e){let r=B(),t=reactCore.useDbLiveFlag(r.draft.detail,{key:e}),p=async(m,f)=>{let l={...await n(),...m};Object.keys(l).forEach(d=>{reactCore.isNotEmpty(l[d])||delete l[d];});let s=Object.keys(l);if(s.length===1&&s[0]==="field_1731131919872_aj29d")return o();s.some(d=>d!=="field_1731131919872_aj29d"&&l[d]!==reactCore.getFieldValue(f,d))?await r.draft.put(e,l):await o();},o=async()=>{await r.draft.remove(e);},n=async()=>await r.draft.detail(e);return {isDraft:t,saveDraft:p,removeDraft:o,getDataDraft:n}}var _=(e={})=>{e.defaultValues||(e.defaultValues={}),e.defaultValues=C(e.defaultValues);let r=Q.useRef(null),[t,p]=Q.useState(false),o=e?.draftKey,n=o?j(o):void 0,m=reactHookForm.useForm({reValidateMode:"onSubmit",mode:"all",...e}),f=q(m),i=Q.useMemo(()=>reactCore.generateUUID(),[]),l=d=>d?reactCore.getFieldValue(reactCore.mappingUndefinedtoNull(m.getValues()),d):reactCore.mappingUndefinedtoNull(m.getValues()),s=d=>{d?typeof d=="string"?m.resetField(d,{}):typeof d=="object"&&reactCore.isArray(d,0)&&d.forEach(F=>m.resetField(F)):m.reset();},c={...m,ref:r,reset:s,updateData:d=>{let F=l();m.reset(C({...F,...d}));},getData:l,formControl:m,useFieldArray:d=>reactHookForm.useFieldArray({control:m.control,name:d}),useWatch:d=>reactHookForm.useWatch({control:m.control,name:d}),isSubmit:t,formId:i,setIsSubmit:p,useSelected:d=>f.useStore(F=>reactCore.getFieldValue(F,d)),setSelected:f.setState,isDraft:!!n?.isDraft,removeDraft:()=>{n?.removeDraft?.();},resetDraft:()=>{n?.removeDraft?.(),s();},saveDraft:(...d)=>n?.saveDraft?.(...d),getDataDraft:()=>n?.getDataDraft?.(),draftKey:o};return [c,c]};var Ee=({onSubmit:e,onChange:r,onInvalid:t,onFieldChange:p,formData:o,controller:n,children:m,...f})=>{o&&(o=C(o));let i=f.draftKey,l=n??_({draftKey:i}),[s]=Array.isArray(l)?l:[l],c=Q.useRef(true),d=Q.useRef(void 0),F=async u=>{u.preventDefault(),u.stopPropagation(),s.setIsSubmit(true);let y=await s.formControl.trigger(),g=s.getData();y?e&&e({...g},{...s}):t&&t(s.formControl.formState.errors);};Q.useEffect(()=>{o&&reactCore.diffJson(d.current||{},o)&&(s.formControl.reset(o),d.current=o);},[o,s.formControl.reset]),Q.useEffect(()=>{if(!r)return;let u=s.formControl.watch((y,g)=>r(y,g,s));return ()=>u.unsubscribe()},[]);let T=async()=>{if(s?.isDraft){c.current=false;let u=await s.getDataDraft();u&&Object.entries(u).forEach(([y,g])=>{y==="field_1731131919872_aj29d"||!reactCore.isNotEmpty(g)||(s.setValue(y,g),s.trigger(y));});}};Q.useEffect(()=>{c.current&&T();},[s.isDraft,c.current]);let x=async(u,y,g)=>{p?.(u,y,g),g?.saveDraft?.({[u]:y},o);},A={...f};return delete A?.draftKey,jsxRuntime.jsx(jsxRuntime.Fragment,{children:jsxRuntime.jsx(D,{controller:{...s,disabled:f?.disabled,readOnly:f?.readOnly},onSubmit:e,onFieldChange:x,children:jsxRuntime.jsx("form",{...A,id:s.formId,ref:s.ref,onSubmit:F,children:m})})})},Z=Ee;var J=Q.createContext(void 0);function G(){let e=Q.useContext(J);return e||{}}function E({children:e,...r}){return jsxRuntime.jsx(J.Provider,{value:r,children:e})}var X=e=>{let r=h(),t=reactHookForm.useFieldArray({control:r.control,name:e}),o={formArrayId:Q.useMemo(()=>reactCore.generateUUID(),[]),...t,...r};return [o,o]};var ee=({name:e,defaultData:r,controller:t,children:p})=>{let o=t??X(e),[n]=Array.isArray(o)?o:[o];return Q.useEffect(()=>{typeof r=="boolean"&&r?n.append({}):typeof r=="number"&&r>0?n.append([...Array(r).fill(null).map(()=>({}))]):typeof r=="object"&&r&&n.append(r);},[]),jsxRuntime.jsx(jsxRuntime.Fragment,{children:n.fields.map((m,f)=>{let i=`${e}.${f}.`,l={...n,index:f,fieldId:m.id,name:i,countFields:n.fields.length,removeItem:()=>n.remove(f),watchItem:s=>n.watch(s?`${i}${s}`:i.slice(0,-1)),setValueItem:(s,c)=>n.setValue(`${i}${s}`,c),useSelectedItem:s=>n.useSelected(`${i}${s}`)};return jsxRuntime.jsx(Q__default.default.Fragment,{children:jsxRuntime.jsx(E,{...l,children:reactCore.renderChildren(p,l)})},m.id)})})};ee.displayName="BgsFormArray";var He=ee;Q__default.default.memo(({children:e,props:r})=>jsxRuntime.jsx(jsxRuntime.Fragment,{children:reactCore.renderChildren(e,r)}));var te=Q.createContext(void 0);function K(){let e=Q.useContext(te);return e||{}}function N({children:e,...r}){return jsxRuntime.jsx(te.Provider,{value:r,children:e})}var ne=({children:e,...r})=>{let t=h(),p=Q.useMemo(()=>reactCore.generateUUID(),[]);return jsxRuntime.jsx(jsxRuntime.Fragment,{children:jsxRuntime.jsx(N,{...t,...r,formGroupId:p,children:e})})};ne.displayName="BgsFormGroup";var Qe=ne;var se=Q.createContext(void 0);function ae(){let e=Q.useContext(se);return e||{}}function ie({children:e,...r}){return jsxRuntime.jsx(se.Provider,{value:r,children:e})}var or=/^(([^<>()[\]\\.,;:\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:r}){let{formControl:t,getData:p}=h(),o=[];return e&&(typeof e=="string"?me(e,true,r,t,p,{}).forEach(n=>o.push(n)):typeof e=="object"&&Object.keys(e).forEach(n=>{let{validate:m}=o.find(i=>i.validate)||{};if(["minLength","maxLength","min","max","match","diff","regexp","pattern","required","email"].includes(n)){let i=e[n],l="";["match","diff"].includes(n)&&typeof i=="object"&&(i=e[n].dataField,l=e[n].label),i!=null&&me(n,i,r,t,p,m,l).forEach(s=>o.push(s));}else if(typeof e[n]=="object"){let i=e[n];o.push({validate:{...m,[n]:l=>i.validation(l)||i.message&&(typeof i.message=="string"?i.message:i.message(r))}});}})),Object.assign({},...o)}var me=(e,r,t,p,o,n,m)=>{let f=[],{validationMessage:i}=ae(),{required:l,minLength:s,maxLength:c,min:d,max:F,email:T,match:x,diff:A,pattern:u}=i||{},g={required:a=>{if(!r)return true;let U=l?l(t):`${t} is required`;return typeof a=="string"&&!a.trim()||a==null?U:true},minLength:{value:r,message:s?s(t,r):`${t} must be at least ${r} characters long`},maxLength:{value:r,message:c?c(t,r):`${t} cannot be more than ${r} characters long`},min:{value:Number(r),message:d?d(t,r):`${t} should be at least ${r}`},max:{value:Number(r),message:F?F(t,r):`${t} should be at most ${r}`},regexp:(a="")=>a?new RegExp(r.regexp).test(a)||`${t} ${r.message}`:true,email:(a="")=>!r||!a?true:or.test(a)||(T?T(t):`${t} must be type email`),match:(a="")=>a?a===(o&&o(r))||(x?x(t,m||reactCore.labelFormatter.changeAll(r)):`${t} must be same with ${m||reactCore.labelFormatter.changeAll(r)}`):true,diff:(a="")=>a?a!==(o&&o(r))||(A?A(t,m||reactCore.labelFormatter.changeAll(r)):`${t} must be different with ${m||reactCore.labelFormatter.changeAll(r)}`):true,pattern:{alphabet:(a="")=>!!a&&new RegExp("^[A-Za-z ]*$").test(a)||(u?.alphabet?u?.alphabet(t):`${t} must be format Alphabet`),alphanumber:(a="")=>!!a&&new RegExp("^[A-Za-z0-9 ]*$").test(a)||(u?.alphanumber?u?.alphanumber(t):`${t} must be format Alphabet or Number`),number:(a="")=>!!a&&new RegExp("^[0-9]*$").test(a)||(u?.number?u?.number(t):`${t} must be format Number`),lowercase:(a="")=>!!a&&new RegExp("^[a-z0-9 ]*$").test(a)||(u?.lowercase?u?.lowercase(t):`${t} must be format Lowercase`),url:(a="")=>!!a&&/^(ftp|http|https):\/\/[^ "]+$/.test(a)||(u?.url?u?.url(t):`${t} must be a valid URL`),uppercase:(a="")=>!!a&&new RegExp("^[A-Z0-9 ]*$").test(a)||(u?.uppercase?u?.uppercase(t):`${t} must be format Uppercase`),mixedcase:(a="")=>!!a&&/[a-z]/.test(a)&&/[A-Z]/.test(a)||(u?.mixedcase?u?.mixedcase(t):`${t} must be mixed case`),specialcharacters:(a="")=>!!a&&/[^a-zA-Z0-9\s]/.test(a)||(u?.specialcharacters?u?.specialcharacters(t):`${t} must contain special characters`)}}[e];if(g){let{validate:a}=f.find(U=>U.validate)||{};typeof g=="function"?f.push({validate:{...a,...n,[e]:g}}):e==="pattern"?f.push({validate:{...a,...n,[`${e}${r}`]:g[r]}}):f.push({[e]:g});}return f};var wt=e=>{let r=Q.useMemo(()=>reactCore.generateUUID(),[]),t=h(),{registerItem:p,unregisterItem:o,control:n,disabled:m,readOnly:f,formId:i,setSelected:l,useSelected:s,onFieldChange:c}=t,{name:d,formId:F,...T}=K(),{name:x,formId:A}=G(),u=Q.useMemo(()=>{let b=e.dataField;return e.disabledHierarchy||(x&&i===A&&(b=`${x}${b}`),d&&i===F&&(b=`${d}${b}`)),b},[x,i,A,e.dataField,d,F,e.disabledHierarchy]),y=Q.useMemo(()=>{if(e.label)return e.label;if(!e.noLabel)return reactCore.labelFormatter.changeAll(u)},[e.label,e.noLabel,u]);Q.useEffect(()=>(p({id:r,...e,dataField:u,label:y}),()=>{o(r);}),[r,e,u,y]);let g=false;typeof e.disabled=="boolean"?g=e.disabled:typeof T.disabled=="boolean"?g=T.disabled:g=!!m;let a=false;typeof e.readOnly=="boolean"?a=e.readOnly:typeof T.readOnly=="boolean"?a=T.readOnly:a=!!f;let U=false;typeof e.hidden=="boolean"&&(U=e.hidden);let R=e.validationRules;typeof e.required=="boolean"&&(typeof e.validationRules>"u"?R={required:e.required}:typeof e.validationRules=="string"&&e.validationRules==="email"?R={email:true,required:e.required}:typeof e.validationRules=="object"&&(R={...e.validationRules,required:e.required}));let le=g||a||U?{required:false}:L({...e,validationRules:R,label:y}),I=reactHookForm.useController({name:u,control:n,disabled:g,defaultValue:e.defaultValue,shouldUnregister:e.shouldUnregister,rules:le}),de=I.fieldState.invalid,ue=I.fieldState.error?.message,fe=reactHookForm.useWatch({name:u,control:n,defaultValue:e.defaultValue}),ce=Q.useMemo(()=>reactCore.debounce(b=>l(ye=>({...ye,[u]:b||null}))),[l,u]),pe=s(u),ge=R?.required;return {...e,setSelectedField:ce,label:y,dataField:u,controller:I,invalid:de,messageError:ue,selectedField:pe,value:fe,required:ge,onChange:b=>{I.field.onChange(b),c?.(u,b,t);}}};var Wt=()=>{let{formControl:e,items:r}=h(),t=(o,n,m,f=0)=>{let i=[];if(Array.isArray(m))m.forEach((l,s)=>{let c=Object.entries(l||{}).map(([d,F])=>t(`${o}.${s}.${d}`,`${n}[]${d}`,F,m.length>1?s+1:0)).flat();i=[...i,...c];});else if(m&&typeof m=="object"&&!Array.isArray(m)&&!m?.ref)Object.entries(m).map(([l,s])=>{let c=t(`${o}.${l}`,`${o}.${l}`,s);i=[...i,...c];});else {let l=m?.message||"",s=r.find(c=>c.dataField===n)?.label;i.push({label:`${s||""}${f>0?` ${f}`:""}`,message:l,dataField:o});}return i};return Object.entries(e.formState.errors||{}).map(([o,n])=>t(o,o,n)).flat()};var dr=(i=>(i.alphabet="alphabet",i.alphaNumber="alphanumber",i.number="number",i.lowercase="lowercase",i.url="url",i.uppercase="uppercase",i.mixedCase="mixedcase",i.specialCharacters="specialcharacters",i))(dr||{});var Nt=Z;exports.BgsFormArray=He;exports.BgsFormGroup=Qe;exports.BgsReactFormProvider=ie;exports.PatternTypeEnum=dr;exports.default=Nt;exports.useBgsController=wt;exports.useBgsForm=h;exports.useBgsFormArray=G;exports.useBgsFormArrayInit=X;exports.useBgsFormGroup=K;exports.useBgsFormInit=_;exports.useSummaryValidation=Wt;
|
package/dist/index.d.cts
CHANGED
|
@@ -21,25 +21,39 @@ type NestedKeyOf<T> = T extends object ? T extends Array<infer U> ? `${number}`
|
|
|
21
21
|
[K in keyof T]: T[K] extends Array<infer U> ? `${K & string}` | `${K & string}[${number}]` | `${K & string}[${number}].${NestedKeyOf<U>}` : T[K] extends object ? `${K & string}` | `${K & string}.${NestedKeyOf<T[K]>}` : `${K & string}`;
|
|
22
22
|
}[keyof T] : never;
|
|
23
23
|
|
|
24
|
+
type UseDraftReturn<T> = {
|
|
25
|
+
saveDraft: (values: T, compareData: T) => void;
|
|
26
|
+
removeDraft: () => void;
|
|
27
|
+
isDraft: boolean;
|
|
28
|
+
getDataDraft: () => Promise<T | undefined>;
|
|
29
|
+
};
|
|
30
|
+
|
|
24
31
|
type OnSubmit<T = any> = (values: T, options: UseFormInitReturn<T>) => void;
|
|
25
32
|
type TriggerSubmit<T = unknown> = (addValues?: T, validate?: boolean) => void;
|
|
26
33
|
type UseSelected<T> = <K>(key: NestedKeyOf<T>) => K | undefined;
|
|
27
34
|
type SelectedNested<T> = Partial<Record<NestedKeyOf<T>, any>>;
|
|
28
|
-
type
|
|
35
|
+
type WithDraftKey<T> = T & {
|
|
36
|
+
draftKey?: string;
|
|
37
|
+
};
|
|
38
|
+
type FormPropsBase<T> = Omit<React.FormHTMLAttributes<HTMLFormElement>, "onSubmit" | "onChange"> & FormDefaultProps & {
|
|
29
39
|
formData?: Partial<T> | null;
|
|
30
|
-
controller?: UseFormInitReturn<T> | UseFormInitReturn<T>[];
|
|
31
40
|
onSubmit?: OnSubmit<T>;
|
|
32
41
|
onChange?: OnChange<T>;
|
|
33
42
|
onFieldChange?: OnFieldChange<T>;
|
|
34
43
|
onInvalid?: (errors: FieldErrors) => void;
|
|
35
44
|
};
|
|
45
|
+
type FormProps<T = unknown> = (FormPropsBase<T> & {
|
|
46
|
+
controller: UseFormInitReturn<T> | UseFormInitReturn<T>[];
|
|
47
|
+
}) | (FormPropsBase<T> & {
|
|
48
|
+
controller?: undefined;
|
|
49
|
+
}) & WithDraftKey<{}>;
|
|
36
50
|
type OnChange<T = unknown> = (values: T, event: {
|
|
37
51
|
name?: string | undefined;
|
|
38
52
|
type?: EventType | undefined;
|
|
39
53
|
}, controller: UseFormInitReturn<T>) => void;
|
|
40
54
|
type OnFieldChange<T = unknown> = (dataField: string, value: T, controller: UseFormInitReturn<T>) => void;
|
|
41
55
|
type SetSelectedFn<T> = (newState: SelectedNested<T> | ((prev: SelectedNested<T>) => SelectedNested<T>)) => void;
|
|
42
|
-
interface UseFormInitReturn<T = unknown> extends FormDefaultProps, Omit<UseFormReturn, "reset"> {
|
|
56
|
+
interface UseFormInitReturn<T = unknown> extends FormDefaultProps, Omit<UseFormReturn, "reset">, UseDraftReturn<T> {
|
|
43
57
|
reset: (field?: string | string[]) => void;
|
|
44
58
|
updateData: (values: Partial<T>) => void;
|
|
45
59
|
getData: (field?: string) => T;
|
|
@@ -53,6 +67,8 @@ interface UseFormInitReturn<T = unknown> extends FormDefaultProps, Omit<UseFormR
|
|
|
53
67
|
ref: React.RefObject<HTMLFormElement | null>;
|
|
54
68
|
setSelected: SetSelectedFn<T>;
|
|
55
69
|
useSelected: UseSelected<T>;
|
|
70
|
+
resetDraft: () => void;
|
|
71
|
+
draftKey?: string;
|
|
56
72
|
}
|
|
57
73
|
interface FormArrayProps<T = unknown> {
|
|
58
74
|
name: string;
|
|
@@ -63,7 +79,7 @@ interface FormArrayProps<T = unknown> {
|
|
|
63
79
|
type UseFormArrayInitReturn<T> = UseFieldArrayReturn & UseBgsForm<T> & {
|
|
64
80
|
formArrayId: string;
|
|
65
81
|
};
|
|
66
|
-
type UseBgsForm<T = unknown> = UseFormInitReturn<T> & {
|
|
82
|
+
type UseBgsForm<T = unknown> = UseFormInitReturn<T> & UseDraftReturn<T> & {
|
|
67
83
|
registerItem: (ref: ControllerWithKey) => void;
|
|
68
84
|
unregisterItem: (id: string) => void;
|
|
69
85
|
items: ControllerWithKey[];
|
|
@@ -202,7 +218,11 @@ interface BgsReactFormContextData {
|
|
|
202
218
|
}
|
|
203
219
|
declare function BgsReactFormProvider({ children, ...value }: PropsWithChildren<BgsReactFormContextData>): react_jsx_runtime.JSX.Element;
|
|
204
220
|
|
|
205
|
-
|
|
221
|
+
type OptionsInit<T> = Omit<UseFormProps, "defaultValues"> & {
|
|
222
|
+
draftKey?: string;
|
|
223
|
+
defaultValues?: Partial<T> | undefined;
|
|
224
|
+
};
|
|
225
|
+
declare const useBgsFormInit: <T = unknown>(options?: OptionsInit<T>) => UseFormInitReturn<T>[];
|
|
206
226
|
|
|
207
227
|
declare const useBgsFormArrayInit: <T = unknown>(name: string) => UseFormArrayInitReturn<T>[];
|
|
208
228
|
|
|
@@ -215,4 +235,4 @@ interface SummaryValidation {
|
|
|
215
235
|
}
|
|
216
236
|
declare const useSummaryValidation: () => SummaryValidation[];
|
|
217
237
|
|
|
218
|
-
export { FormArray as BgsFormArray, FormGroup as BgsFormGroup, BgsReactFormProvider, type ControllerProps, type FormArrayProps, type FormGroupProps, type FormProps, type OnChange, type OnFieldChange, type OnSubmit, type PatternType, PatternTypeEnum, 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, useSummaryValidation };
|
|
238
|
+
export { FormArray as BgsFormArray, FormGroup as BgsFormGroup, BgsReactFormProvider, type ControllerProps, type FormArrayProps, type FormGroupProps, type FormProps, type OnChange, type OnFieldChange, type OnSubmit, type OptionsInit, type PatternType, PatternTypeEnum, 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, useSummaryValidation };
|
package/dist/index.d.ts
CHANGED
|
@@ -21,25 +21,39 @@ type NestedKeyOf<T> = T extends object ? T extends Array<infer U> ? `${number}`
|
|
|
21
21
|
[K in keyof T]: T[K] extends Array<infer U> ? `${K & string}` | `${K & string}[${number}]` | `${K & string}[${number}].${NestedKeyOf<U>}` : T[K] extends object ? `${K & string}` | `${K & string}.${NestedKeyOf<T[K]>}` : `${K & string}`;
|
|
22
22
|
}[keyof T] : never;
|
|
23
23
|
|
|
24
|
+
type UseDraftReturn<T> = {
|
|
25
|
+
saveDraft: (values: T, compareData: T) => void;
|
|
26
|
+
removeDraft: () => void;
|
|
27
|
+
isDraft: boolean;
|
|
28
|
+
getDataDraft: () => Promise<T | undefined>;
|
|
29
|
+
};
|
|
30
|
+
|
|
24
31
|
type OnSubmit<T = any> = (values: T, options: UseFormInitReturn<T>) => void;
|
|
25
32
|
type TriggerSubmit<T = unknown> = (addValues?: T, validate?: boolean) => void;
|
|
26
33
|
type UseSelected<T> = <K>(key: NestedKeyOf<T>) => K | undefined;
|
|
27
34
|
type SelectedNested<T> = Partial<Record<NestedKeyOf<T>, any>>;
|
|
28
|
-
type
|
|
35
|
+
type WithDraftKey<T> = T & {
|
|
36
|
+
draftKey?: string;
|
|
37
|
+
};
|
|
38
|
+
type FormPropsBase<T> = Omit<React.FormHTMLAttributes<HTMLFormElement>, "onSubmit" | "onChange"> & FormDefaultProps & {
|
|
29
39
|
formData?: Partial<T> | null;
|
|
30
|
-
controller?: UseFormInitReturn<T> | UseFormInitReturn<T>[];
|
|
31
40
|
onSubmit?: OnSubmit<T>;
|
|
32
41
|
onChange?: OnChange<T>;
|
|
33
42
|
onFieldChange?: OnFieldChange<T>;
|
|
34
43
|
onInvalid?: (errors: FieldErrors) => void;
|
|
35
44
|
};
|
|
45
|
+
type FormProps<T = unknown> = (FormPropsBase<T> & {
|
|
46
|
+
controller: UseFormInitReturn<T> | UseFormInitReturn<T>[];
|
|
47
|
+
}) | (FormPropsBase<T> & {
|
|
48
|
+
controller?: undefined;
|
|
49
|
+
}) & WithDraftKey<{}>;
|
|
36
50
|
type OnChange<T = unknown> = (values: T, event: {
|
|
37
51
|
name?: string | undefined;
|
|
38
52
|
type?: EventType | undefined;
|
|
39
53
|
}, controller: UseFormInitReturn<T>) => void;
|
|
40
54
|
type OnFieldChange<T = unknown> = (dataField: string, value: T, controller: UseFormInitReturn<T>) => void;
|
|
41
55
|
type SetSelectedFn<T> = (newState: SelectedNested<T> | ((prev: SelectedNested<T>) => SelectedNested<T>)) => void;
|
|
42
|
-
interface UseFormInitReturn<T = unknown> extends FormDefaultProps, Omit<UseFormReturn, "reset"> {
|
|
56
|
+
interface UseFormInitReturn<T = unknown> extends FormDefaultProps, Omit<UseFormReturn, "reset">, UseDraftReturn<T> {
|
|
43
57
|
reset: (field?: string | string[]) => void;
|
|
44
58
|
updateData: (values: Partial<T>) => void;
|
|
45
59
|
getData: (field?: string) => T;
|
|
@@ -53,6 +67,8 @@ interface UseFormInitReturn<T = unknown> extends FormDefaultProps, Omit<UseFormR
|
|
|
53
67
|
ref: React.RefObject<HTMLFormElement | null>;
|
|
54
68
|
setSelected: SetSelectedFn<T>;
|
|
55
69
|
useSelected: UseSelected<T>;
|
|
70
|
+
resetDraft: () => void;
|
|
71
|
+
draftKey?: string;
|
|
56
72
|
}
|
|
57
73
|
interface FormArrayProps<T = unknown> {
|
|
58
74
|
name: string;
|
|
@@ -63,7 +79,7 @@ interface FormArrayProps<T = unknown> {
|
|
|
63
79
|
type UseFormArrayInitReturn<T> = UseFieldArrayReturn & UseBgsForm<T> & {
|
|
64
80
|
formArrayId: string;
|
|
65
81
|
};
|
|
66
|
-
type UseBgsForm<T = unknown> = UseFormInitReturn<T> & {
|
|
82
|
+
type UseBgsForm<T = unknown> = UseFormInitReturn<T> & UseDraftReturn<T> & {
|
|
67
83
|
registerItem: (ref: ControllerWithKey) => void;
|
|
68
84
|
unregisterItem: (id: string) => void;
|
|
69
85
|
items: ControllerWithKey[];
|
|
@@ -202,7 +218,11 @@ interface BgsReactFormContextData {
|
|
|
202
218
|
}
|
|
203
219
|
declare function BgsReactFormProvider({ children, ...value }: PropsWithChildren<BgsReactFormContextData>): react_jsx_runtime.JSX.Element;
|
|
204
220
|
|
|
205
|
-
|
|
221
|
+
type OptionsInit<T> = Omit<UseFormProps, "defaultValues"> & {
|
|
222
|
+
draftKey?: string;
|
|
223
|
+
defaultValues?: Partial<T> | undefined;
|
|
224
|
+
};
|
|
225
|
+
declare const useBgsFormInit: <T = unknown>(options?: OptionsInit<T>) => UseFormInitReturn<T>[];
|
|
206
226
|
|
|
207
227
|
declare const useBgsFormArrayInit: <T = unknown>(name: string) => UseFormArrayInitReturn<T>[];
|
|
208
228
|
|
|
@@ -215,4 +235,4 @@ interface SummaryValidation {
|
|
|
215
235
|
}
|
|
216
236
|
declare const useSummaryValidation: () => SummaryValidation[];
|
|
217
237
|
|
|
218
|
-
export { FormArray as BgsFormArray, FormGroup as BgsFormGroup, BgsReactFormProvider, type ControllerProps, type FormArrayProps, type FormGroupProps, type FormProps, type OnChange, type OnFieldChange, type OnSubmit, type PatternType, PatternTypeEnum, 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, useSummaryValidation };
|
|
238
|
+
export { FormArray as BgsFormArray, FormGroup as BgsFormGroup, BgsReactFormProvider, type ControllerProps, type FormArrayProps, type FormGroupProps, type FormProps, type OnChange, type OnFieldChange, type OnSubmit, type OptionsInit, type PatternType, PatternTypeEnum, 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, useSummaryValidation };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import J,{createContext,useContext,useRef,useState,useMemo,useEffect,useCallback}from'react';import {jsx,Fragment}from'react/jsx-runtime';import {renderChildren,generateUUID,getFieldValue,mappingUndefinedtoNull,diffJson,labelFormatter,debounce,isArray,createStore}from'@bgscore/react-core';import {useForm,useWatch,useFieldArray,useController}from'react-hook-form';var M=createContext(void 0);function h(){let e=useContext(M);return e||{}}function v({children:e,controller:r,onSubmit:t,onFieldChange:p=()=>{}}){let n=useRef([]),o=useCallback(a=>{let d=n.current.findIndex(m=>m.id===a.id);if(d>-1){let m=[...n.current];m[d]=a,n.current=[...m];}else n.current.push(a);},[n]),l=useCallback(a=>{n.current=n.current.filter(d=>d.id!==a);},[]),u=async(a,d)=>{r.setIsSubmit(true);let m=d?await r.formControl.trigger():true,f=r.getData();m&&t&&t({...f,...a},{...r});},s={...r,registerItem:o,unregisterItem:l,items:n.current,triggerSubmit:u,onFieldChange:p};return jsx(M.Provider,{value:s,children:e})}var w=new WeakMap;function N(e){return w.has(e)||w.set(e,createStore({})),w.get(e)}function A(e){if(typeof e!="object"||e===null||Array.isArray(e))return e;let r={};for(let[t,p]of Object.entries(e))if(t.includes(".")){let n=t.split("."),o=r;for(let l=0;l<n.length;l++){let u=n[l];l===n.length-1?o[u]=A(p):((!o[u]||typeof o[u]!="object")&&(o[u]={}),o=o[u]);}}else r[t]=A(p);return r}var D=(e,r)=>{e||(e={}),e=A(e);let t=useRef(null),[p,n]=useState(false),o=useForm({...r,reValidateMode:"onSubmit",mode:"all",defaultValues:e}),l=N(o),u=useMemo(()=>generateUUID(),[]),s=m=>m?getFieldValue(mappingUndefinedtoNull(o.getValues()),m):mappingUndefinedtoNull(o.getValues()),d={...o,ref:t,reset:m=>{m?typeof m=="string"?o.resetField(m,{}):typeof m=="object"&&isArray(m,0)&&m.forEach(f=>o.resetField(f)):o.reset();},updateData:m=>{let f=s();o.reset(A({...f,...m}));},getData:s,formControl:o,useFieldArray:m=>useFieldArray({control:o.control,name:m}),useWatch:m=>useWatch({control:o.control,name:m}),isSubmit:p,formId:u,setIsSubmit:n,useSelected:m=>l.useStore(f=>getFieldValue(f,m)),setSelected:l.setState};return [d,d]};var Pe=({onSubmit:e,onChange:r,onInvalid:t,onFieldChange:p,formData:n,controller:o,children:l,...u})=>{n&&(n=A(n));let s=o??D(),[a]=Array.isArray(s)?s:[s],d=useRef(void 0),m=async f=>{f.preventDefault(),f.stopPropagation(),a.setIsSubmit(true);let g=await a.formControl.trigger(),y=a.getData();g?e&&e({...y},{...a}):t&&t(a.formControl.formState.errors);};return useEffect(()=>{n&&diffJson(d.current||{},n)&&(a.formControl.reset(n),d.current=n);},[n,a.formControl.reset]),useEffect(()=>{if(!r)return;let f=a.formControl.watch((g,y)=>r(g,y,a));return ()=>f.unsubscribe()},[]),jsx(Fragment,{children:jsx(v,{controller:{...a,disabled:u?.disabled,readOnly:u?.readOnly},onSubmit:e,onFieldChange:p,children:jsx("form",{...u,id:a.formId,ref:a.ref,onSubmit:m,children:l})})})},z=Pe;var j=createContext(void 0);function O(){let e=useContext(j);return e||{}}function G({children:e,...r}){return jsx(j.Provider,{value:r,children:e})}var Z=e=>{let r=h(),t=useFieldArray({control:r.control,name:e}),n={formArrayId:useMemo(()=>generateUUID(),[]),...t,...r};return [n,n]};var X=({name:e,defaultData:r,controller:t,children:p})=>{let n=t??Z(e),[o]=Array.isArray(n)?n:[n];return useEffect(()=>{typeof r=="boolean"&&r?o.append({}):typeof r=="number"&&r>0?o.append([...Array(r).fill(null).map(()=>({}))]):typeof r=="object"&&r&&o.append(r);},[]),jsx(Fragment,{children:o.fields.map((l,u)=>{let s=`${e}.${u}.`,a={...o,index:u,fieldId:l.id,name:s,countFields:o.fields.length,removeItem:()=>o.remove(u),watchItem:d=>o.watch(d?`${s}${d}`:s.slice(0,-1)),setValueItem:(d,m)=>o.setValue(`${s}${d}`,m),useSelectedItem:d=>o.useSelected(`${s}${d}`)};return jsx(J.Fragment,{children:jsx(G,{...a,children:renderChildren(p,a)})},l.id)})})};X.displayName="BgsFormArray";var ke=X;J.memo(({children:e,props:r})=>jsx(Fragment,{children:renderChildren(e,r)}));var Q=createContext(void 0);function W(){let e=useContext(Q);return e||{}}function E({children:e,...r}){return jsx(Q.Provider,{value:r,children:e})}var ee=({children:e,...r})=>{let t=h(),p=useMemo(()=>generateUUID(),[]);return jsx(Fragment,{children:jsx(E,{...t,...r,formGroupId:p,children:e})})};ee.displayName="BgsFormGroup";var De=ee;var re=createContext(void 0);function te(){let e=useContext(re);return e||{}}function oe({children:e,...r}){return jsx(re.Provider,{value:r,children:e})}var Je=/^(([^<>()[\]\\.,;:\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 k({validationRules:e,label:r}){let{formControl:t,getData:p}=h(),n=[];return e&&(typeof e=="string"?ne(e,true,r,t,p,{}).forEach(o=>n.push(o)):typeof e=="object"&&Object.keys(e).forEach(o=>{let{validate:l}=n.find(s=>s.validate)||{};if(["minLength","maxLength","min","max","match","diff","regexp","pattern","required","email"].includes(o)){let s=e[o],a="";["match","diff"].includes(o)&&typeof s=="object"&&(s=e[o].dataField,a=e[o].label),s!=null&&ne(o,s,r,t,p,l,a).forEach(d=>n.push(d));}else if(typeof e[o]=="object"){let s=e[o];n.push({validate:{...l,[o]:a=>s.validation(a)||s.message&&(typeof s.message=="string"?s.message:s.message(r))}});}})),Object.assign({},...n)}var ne=(e,r,t,p,n,o,l)=>{let u=[],{validationMessage:s}=te(),{required:a,minLength:d,maxLength:m,min:f,max:g,email:y,match:T,diff:U,pattern:c}=s||{},F={required:i=>{if(!r)return true;let x=a?a(t):`${t} is required`;return typeof i=="string"&&!i.trim()||i==null?x:true},minLength:{value:r,message:d?d(t,r):`${t} must be at least ${r} characters long`},maxLength:{value:r,message:m?m(t,r):`${t} cannot be more than ${r} characters long`},min:{value:Number(r),message:f?f(t,r):`${t} should be at least ${r}`},max:{value:Number(r),message:g?g(t,r):`${t} should be at most ${r}`},regexp:(i="")=>i?new RegExp(r.regexp).test(i)||`${t} ${r.message}`:true,email:(i="")=>!r||!i?true:Je.test(i)||(y?y(t):`${t} must be type email`),match:(i="")=>i?i===(n&&n(r))||(T?T(t,l||labelFormatter.changeAll(r)):`${t} must be same with ${l||labelFormatter.changeAll(r)}`):true,diff:(i="")=>i?i!==(n&&n(r))||(U?U(t,l||labelFormatter.changeAll(r)):`${t} must be different with ${l||labelFormatter.changeAll(r)}`):true,pattern:{alphabet:(i="")=>!!i&&new RegExp("^[A-Za-z ]*$").test(i)||(c?.alphabet?c?.alphabet(t):`${t} must be format Alphabet`),alphanumber:(i="")=>!!i&&new RegExp("^[A-Za-z0-9 ]*$").test(i)||(c?.alphanumber?c?.alphanumber(t):`${t} must be format Alphabet or Number`),number:(i="")=>!!i&&new RegExp("^[0-9]*$").test(i)||(c?.number?c?.number(t):`${t} must be format Number`),lowercase:(i="")=>!!i&&new RegExp("^[a-z0-9 ]*$").test(i)||(c?.lowercase?c?.lowercase(t):`${t} must be format Lowercase`),url:(i="")=>!!i&&/^(ftp|http|https):\/\/[^ "]+$/.test(i)||(c?.url?c?.url(t):`${t} must be a valid URL`),uppercase:(i="")=>!!i&&new RegExp("^[A-Z0-9 ]*$").test(i)||(c?.uppercase?c?.uppercase(t):`${t} must be format Uppercase`),mixedcase:(i="")=>!!i&&/[a-z]/.test(i)&&/[A-Z]/.test(i)||(c?.mixedcase?c?.mixedcase(t):`${t} must be mixed case`),specialcharacters:(i="")=>!!i&&/[^a-zA-Z0-9\s]/.test(i)||(c?.specialcharacters?c?.specialcharacters(t):`${t} must contain special characters`)}}[e];if(F){let{validate:i}=u.find(x=>x.validate)||{};typeof F=="function"?u.push({validate:{...i,...o,[e]:F}}):e==="pattern"?u.push({validate:{...i,...o,[`${e}${r}`]:F[r]}}):u.push({[e]:F});}return u};var pt=e=>{let r=useMemo(()=>generateUUID(),[]),t=h(),{registerItem:p,unregisterItem:n,control:o,disabled:l,readOnly:u,formId:s,setSelected:a,useSelected:d,onFieldChange:m}=t,{name:f,formId:g,...y}=W(),{name:T,formId:U}=O(),c=useMemo(()=>{let b=e.dataField;return e.disabledHierarchy||(T&&s===U&&(b=`${T}${b}`),f&&s===g&&(b=`${f}${b}`)),b},[T,s,U,e.dataField,f,g,e.disabledHierarchy]),C=useMemo(()=>{if(e.label)return e.label;if(!e.noLabel)return labelFormatter.changeAll(c)},[e.label,e.noLabel,c]);useEffect(()=>(p({id:r,...e,dataField:c,label:C}),()=>{n(r);}),[r,e,c,C]);let F=false;typeof e.disabled=="boolean"?F=e.disabled:typeof y.disabled=="boolean"?F=y.disabled:F=!!l;let i=false;typeof e.readOnly=="boolean"?i=e.readOnly:typeof y.readOnly=="boolean"?i=y.readOnly:i=!!u;let x=false;typeof e.hidden=="boolean"&&(x=e.hidden);let R=e.validationRules;typeof e.required=="boolean"&&(typeof e.validationRules>"u"?R={required:e.required}:typeof e.validationRules=="string"&&e.validationRules==="email"?R={email:true,required:e.required}:typeof e.validationRules=="object"&&(R={...e.validationRules,required:e.required}));let se=F||i||x?{required:false}:k({...e,validationRules:R,label:C}),I=useController({name:c,control:o,disabled:F,defaultValue:e.defaultValue,shouldUnregister:e.shouldUnregister,rules:se}),ie=I.fieldState.invalid,ae=I.fieldState.error?.message,me=useWatch({name:c,control:o,defaultValue:e.defaultValue}),le=useMemo(()=>debounce(b=>a(ce=>({...ce,[c]:b||null}))),[a,c]),de=d(c),ue=R?.required;return {...e,setSelectedField:le,label:C,dataField:c,controller:I,invalid:ie,messageError:ae,selectedField:de,value:me,required:ue,onChange:b=>{I.field.onChange(b),m?.(c,b,t);}}};var Ft=()=>{let{formControl:e,items:r}=h(),t=(n,o,l,u=0)=>{let s=[];if(Array.isArray(l))l.forEach((a,d)=>{let m=Object.entries(a||{}).map(([f,g])=>t(`${n}.${d}.${f}`,`${o}[]${f}`,g,l.length>1?d+1:0)).flat();s=[...s,...m];});else if(l&&typeof l=="object"&&!Array.isArray(l)&&!l?.ref)Object.entries(l).map(([a,d])=>{let m=t(`${n}.${a}`,`${n}.${a}`,d);s=[...s,...m];});else {let a=l?.message||"",d=r.find(m=>m.dataField===o)?.label;s.push({label:`${d||""}${u>0?` ${u}`:""}`,message:a,dataField:n});}return s};return Object.entries(e.formState.errors||{}).map(([n,o])=>t(n,n,o)).flat()};var rr=(s=>(s.alphabet="alphabet",s.alphaNumber="alphanumber",s.number="number",s.lowercase="lowercase",s.url="url",s.uppercase="uppercase",s.mixedCase="mixedcase",s.specialCharacters="specialcharacters",s))(rr||{});var At=z;export{ke as BgsFormArray,De as BgsFormGroup,oe as BgsReactFormProvider,rr as PatternTypeEnum,At as default,pt as useBgsController,h as useBgsForm,O as useBgsFormArray,Z as useBgsFormArrayInit,W as useBgsFormGroup,D as useBgsFormInit,Ft as useSummaryValidation};
|
|
1
|
+
import Q,{createContext,useContext,useRef,useState,useMemo,useEffect,useCallback}from'react';import {jsx,Fragment}from'react/jsx-runtime';import {renderChildren,generateUUID,getFieldValue,mappingUndefinedtoNull,diffJson,labelFormatter,debounce,isNotEmpty,isArray,useDbLiveFlag,createStore,createDatabase,createTable}from'@bgscore/react-core';import {useForm,useWatch,useFieldArray,useController}from'react-hook-form';var k=createContext(void 0);function h(){let e=useContext(k);return e||{}}function D({children:e,controller:r,onSubmit:t,onFieldChange:p=()=>{}}){let o=useRef([]),n=useCallback(l=>{let s=o.current.findIndex(c=>c.id===l.id);if(s>-1){let c=[...o.current];c[s]=l,o.current=[...c];}else o.current.push(l);},[o]),m=useCallback(l=>{o.current=o.current.filter(s=>s.id!==l);},[]),f=async(l,s)=>{r.setIsSubmit(true);let c=s?await r.formControl.trigger():true,d=r.getData();c&&t&&t({...d,...l},{...r});},i={...r,registerItem:n,unregisterItem:m,items:o.current,triggerSubmit:f,onFieldChange:p};return jsx(k.Provider,{value:i,children:e})}var $=new WeakMap;function q(e){return $.has(e)||$.set(e,createStore({})),$.get(e)}function C(e){if(typeof e!="object"||e===null||Array.isArray(e))return e;let r={};for(let[t,p]of Object.entries(e))if(t.includes(".")){let o=t.split("."),n=r;for(let m=0;m<o.length;m++){let f=o[m];m===o.length-1?n[f]=C(p):((!n[f]||typeof n[f]!="object")&&(n[f]={}),n=n[f]);}}else r[t]=C(p);return r}function w(){return createTable({name:"draft",primaryKey:"field_1731131919872_aj29d"})}function B(){return createDatabase({dbName:"bgs-react-form",table:{draft:w()}})}function j(e){let r=B(),t=useDbLiveFlag(r.draft.detail,{key:e}),p=async(m,f)=>{let l={...await n(),...m};Object.keys(l).forEach(d=>{isNotEmpty(l[d])||delete l[d];});let s=Object.keys(l);if(s.length===1&&s[0]==="field_1731131919872_aj29d")return o();s.some(d=>d!=="field_1731131919872_aj29d"&&l[d]!==getFieldValue(f,d))?await r.draft.put(e,l):await o();},o=async()=>{await r.draft.remove(e);},n=async()=>await r.draft.detail(e);return {isDraft:t,saveDraft:p,removeDraft:o,getDataDraft:n}}var _=(e={})=>{e.defaultValues||(e.defaultValues={}),e.defaultValues=C(e.defaultValues);let r=useRef(null),[t,p]=useState(false),o=e?.draftKey,n=o?j(o):void 0,m=useForm({reValidateMode:"onSubmit",mode:"all",...e}),f=q(m),i=useMemo(()=>generateUUID(),[]),l=d=>d?getFieldValue(mappingUndefinedtoNull(m.getValues()),d):mappingUndefinedtoNull(m.getValues()),s=d=>{d?typeof d=="string"?m.resetField(d,{}):typeof d=="object"&&isArray(d,0)&&d.forEach(F=>m.resetField(F)):m.reset();},c={...m,ref:r,reset:s,updateData:d=>{let F=l();m.reset(C({...F,...d}));},getData:l,formControl:m,useFieldArray:d=>useFieldArray({control:m.control,name:d}),useWatch:d=>useWatch({control:m.control,name:d}),isSubmit:t,formId:i,setIsSubmit:p,useSelected:d=>f.useStore(F=>getFieldValue(F,d)),setSelected:f.setState,isDraft:!!n?.isDraft,removeDraft:()=>{n?.removeDraft?.();},resetDraft:()=>{n?.removeDraft?.(),s();},saveDraft:(...d)=>n?.saveDraft?.(...d),getDataDraft:()=>n?.getDataDraft?.(),draftKey:o};return [c,c]};var Ee=({onSubmit:e,onChange:r,onInvalid:t,onFieldChange:p,formData:o,controller:n,children:m,...f})=>{o&&(o=C(o));let i=f.draftKey,l=n??_({draftKey:i}),[s]=Array.isArray(l)?l:[l],c=useRef(true),d=useRef(void 0),F=async u=>{u.preventDefault(),u.stopPropagation(),s.setIsSubmit(true);let y=await s.formControl.trigger(),g=s.getData();y?e&&e({...g},{...s}):t&&t(s.formControl.formState.errors);};useEffect(()=>{o&&diffJson(d.current||{},o)&&(s.formControl.reset(o),d.current=o);},[o,s.formControl.reset]),useEffect(()=>{if(!r)return;let u=s.formControl.watch((y,g)=>r(y,g,s));return ()=>u.unsubscribe()},[]);let T=async()=>{if(s?.isDraft){c.current=false;let u=await s.getDataDraft();u&&Object.entries(u).forEach(([y,g])=>{y==="field_1731131919872_aj29d"||!isNotEmpty(g)||(s.setValue(y,g),s.trigger(y));});}};useEffect(()=>{c.current&&T();},[s.isDraft,c.current]);let x=async(u,y,g)=>{p?.(u,y,g),g?.saveDraft?.({[u]:y},o);},A={...f};return delete A?.draftKey,jsx(Fragment,{children:jsx(D,{controller:{...s,disabled:f?.disabled,readOnly:f?.readOnly},onSubmit:e,onFieldChange:x,children:jsx("form",{...A,id:s.formId,ref:s.ref,onSubmit:F,children:m})})})},Z=Ee;var J=createContext(void 0);function G(){let e=useContext(J);return e||{}}function E({children:e,...r}){return jsx(J.Provider,{value:r,children:e})}var X=e=>{let r=h(),t=useFieldArray({control:r.control,name:e}),o={formArrayId:useMemo(()=>generateUUID(),[]),...t,...r};return [o,o]};var ee=({name:e,defaultData:r,controller:t,children:p})=>{let o=t??X(e),[n]=Array.isArray(o)?o:[o];return useEffect(()=>{typeof r=="boolean"&&r?n.append({}):typeof r=="number"&&r>0?n.append([...Array(r).fill(null).map(()=>({}))]):typeof r=="object"&&r&&n.append(r);},[]),jsx(Fragment,{children:n.fields.map((m,f)=>{let i=`${e}.${f}.`,l={...n,index:f,fieldId:m.id,name:i,countFields:n.fields.length,removeItem:()=>n.remove(f),watchItem:s=>n.watch(s?`${i}${s}`:i.slice(0,-1)),setValueItem:(s,c)=>n.setValue(`${i}${s}`,c),useSelectedItem:s=>n.useSelected(`${i}${s}`)};return jsx(Q.Fragment,{children:jsx(E,{...l,children:renderChildren(p,l)})},m.id)})})};ee.displayName="BgsFormArray";var He=ee;Q.memo(({children:e,props:r})=>jsx(Fragment,{children:renderChildren(e,r)}));var te=createContext(void 0);function K(){let e=useContext(te);return e||{}}function N({children:e,...r}){return jsx(te.Provider,{value:r,children:e})}var ne=({children:e,...r})=>{let t=h(),p=useMemo(()=>generateUUID(),[]);return jsx(Fragment,{children:jsx(N,{...t,...r,formGroupId:p,children:e})})};ne.displayName="BgsFormGroup";var Qe=ne;var se=createContext(void 0);function ae(){let e=useContext(se);return e||{}}function ie({children:e,...r}){return jsx(se.Provider,{value:r,children:e})}var or=/^(([^<>()[\]\\.,;:\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:r}){let{formControl:t,getData:p}=h(),o=[];return e&&(typeof e=="string"?me(e,true,r,t,p,{}).forEach(n=>o.push(n)):typeof e=="object"&&Object.keys(e).forEach(n=>{let{validate:m}=o.find(i=>i.validate)||{};if(["minLength","maxLength","min","max","match","diff","regexp","pattern","required","email"].includes(n)){let i=e[n],l="";["match","diff"].includes(n)&&typeof i=="object"&&(i=e[n].dataField,l=e[n].label),i!=null&&me(n,i,r,t,p,m,l).forEach(s=>o.push(s));}else if(typeof e[n]=="object"){let i=e[n];o.push({validate:{...m,[n]:l=>i.validation(l)||i.message&&(typeof i.message=="string"?i.message:i.message(r))}});}})),Object.assign({},...o)}var me=(e,r,t,p,o,n,m)=>{let f=[],{validationMessage:i}=ae(),{required:l,minLength:s,maxLength:c,min:d,max:F,email:T,match:x,diff:A,pattern:u}=i||{},g={required:a=>{if(!r)return true;let U=l?l(t):`${t} is required`;return typeof a=="string"&&!a.trim()||a==null?U:true},minLength:{value:r,message:s?s(t,r):`${t} must be at least ${r} characters long`},maxLength:{value:r,message:c?c(t,r):`${t} cannot be more than ${r} characters long`},min:{value:Number(r),message:d?d(t,r):`${t} should be at least ${r}`},max:{value:Number(r),message:F?F(t,r):`${t} should be at most ${r}`},regexp:(a="")=>a?new RegExp(r.regexp).test(a)||`${t} ${r.message}`:true,email:(a="")=>!r||!a?true:or.test(a)||(T?T(t):`${t} must be type email`),match:(a="")=>a?a===(o&&o(r))||(x?x(t,m||labelFormatter.changeAll(r)):`${t} must be same with ${m||labelFormatter.changeAll(r)}`):true,diff:(a="")=>a?a!==(o&&o(r))||(A?A(t,m||labelFormatter.changeAll(r)):`${t} must be different with ${m||labelFormatter.changeAll(r)}`):true,pattern:{alphabet:(a="")=>!!a&&new RegExp("^[A-Za-z ]*$").test(a)||(u?.alphabet?u?.alphabet(t):`${t} must be format Alphabet`),alphanumber:(a="")=>!!a&&new RegExp("^[A-Za-z0-9 ]*$").test(a)||(u?.alphanumber?u?.alphanumber(t):`${t} must be format Alphabet or Number`),number:(a="")=>!!a&&new RegExp("^[0-9]*$").test(a)||(u?.number?u?.number(t):`${t} must be format Number`),lowercase:(a="")=>!!a&&new RegExp("^[a-z0-9 ]*$").test(a)||(u?.lowercase?u?.lowercase(t):`${t} must be format Lowercase`),url:(a="")=>!!a&&/^(ftp|http|https):\/\/[^ "]+$/.test(a)||(u?.url?u?.url(t):`${t} must be a valid URL`),uppercase:(a="")=>!!a&&new RegExp("^[A-Z0-9 ]*$").test(a)||(u?.uppercase?u?.uppercase(t):`${t} must be format Uppercase`),mixedcase:(a="")=>!!a&&/[a-z]/.test(a)&&/[A-Z]/.test(a)||(u?.mixedcase?u?.mixedcase(t):`${t} must be mixed case`),specialcharacters:(a="")=>!!a&&/[^a-zA-Z0-9\s]/.test(a)||(u?.specialcharacters?u?.specialcharacters(t):`${t} must contain special characters`)}}[e];if(g){let{validate:a}=f.find(U=>U.validate)||{};typeof g=="function"?f.push({validate:{...a,...n,[e]:g}}):e==="pattern"?f.push({validate:{...a,...n,[`${e}${r}`]:g[r]}}):f.push({[e]:g});}return f};var wt=e=>{let r=useMemo(()=>generateUUID(),[]),t=h(),{registerItem:p,unregisterItem:o,control:n,disabled:m,readOnly:f,formId:i,setSelected:l,useSelected:s,onFieldChange:c}=t,{name:d,formId:F,...T}=K(),{name:x,formId:A}=G(),u=useMemo(()=>{let b=e.dataField;return e.disabledHierarchy||(x&&i===A&&(b=`${x}${b}`),d&&i===F&&(b=`${d}${b}`)),b},[x,i,A,e.dataField,d,F,e.disabledHierarchy]),y=useMemo(()=>{if(e.label)return e.label;if(!e.noLabel)return labelFormatter.changeAll(u)},[e.label,e.noLabel,u]);useEffect(()=>(p({id:r,...e,dataField:u,label:y}),()=>{o(r);}),[r,e,u,y]);let g=false;typeof e.disabled=="boolean"?g=e.disabled:typeof T.disabled=="boolean"?g=T.disabled:g=!!m;let a=false;typeof e.readOnly=="boolean"?a=e.readOnly:typeof T.readOnly=="boolean"?a=T.readOnly:a=!!f;let U=false;typeof e.hidden=="boolean"&&(U=e.hidden);let R=e.validationRules;typeof e.required=="boolean"&&(typeof e.validationRules>"u"?R={required:e.required}:typeof e.validationRules=="string"&&e.validationRules==="email"?R={email:true,required:e.required}:typeof e.validationRules=="object"&&(R={...e.validationRules,required:e.required}));let le=g||a||U?{required:false}:L({...e,validationRules:R,label:y}),I=useController({name:u,control:n,disabled:g,defaultValue:e.defaultValue,shouldUnregister:e.shouldUnregister,rules:le}),de=I.fieldState.invalid,ue=I.fieldState.error?.message,fe=useWatch({name:u,control:n,defaultValue:e.defaultValue}),ce=useMemo(()=>debounce(b=>l(ye=>({...ye,[u]:b||null}))),[l,u]),pe=s(u),ge=R?.required;return {...e,setSelectedField:ce,label:y,dataField:u,controller:I,invalid:de,messageError:ue,selectedField:pe,value:fe,required:ge,onChange:b=>{I.field.onChange(b),c?.(u,b,t);}}};var Wt=()=>{let{formControl:e,items:r}=h(),t=(o,n,m,f=0)=>{let i=[];if(Array.isArray(m))m.forEach((l,s)=>{let c=Object.entries(l||{}).map(([d,F])=>t(`${o}.${s}.${d}`,`${n}[]${d}`,F,m.length>1?s+1:0)).flat();i=[...i,...c];});else if(m&&typeof m=="object"&&!Array.isArray(m)&&!m?.ref)Object.entries(m).map(([l,s])=>{let c=t(`${o}.${l}`,`${o}.${l}`,s);i=[...i,...c];});else {let l=m?.message||"",s=r.find(c=>c.dataField===n)?.label;i.push({label:`${s||""}${f>0?` ${f}`:""}`,message:l,dataField:o});}return i};return Object.entries(e.formState.errors||{}).map(([o,n])=>t(o,o,n)).flat()};var dr=(i=>(i.alphabet="alphabet",i.alphaNumber="alphanumber",i.number="number",i.lowercase="lowercase",i.url="url",i.uppercase="uppercase",i.mixedCase="mixedcase",i.specialCharacters="specialcharacters",i))(dr||{});var Nt=Z;export{He as BgsFormArray,Qe as BgsFormGroup,ie as BgsReactFormProvider,dr as PatternTypeEnum,Nt as default,wt as useBgsController,h as useBgsForm,G as useBgsFormArray,X as useBgsFormArrayInit,K as useBgsFormGroup,_ as useBgsFormInit,Wt as useSummaryValidation};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bgscore/react-form",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.15",
|
|
4
4
|
"description": "React form component library using context and react-hook-form with dynamic arrays, groups, and validations.",
|
|
5
5
|
"main": "dist/index.cjs",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"author": "Andry Bagus Dharmawan",
|
|
29
29
|
"license": "MIT",
|
|
30
30
|
"peerDependencies": {
|
|
31
|
-
"@bgscore/react-core": ">=
|
|
31
|
+
"@bgscore/react-core": ">=1.0.17",
|
|
32
32
|
"react": ">=17.0.0",
|
|
33
33
|
"react-dom": ">=17.0.0"
|
|
34
34
|
},
|