@bgscore/react-form 1.0.10 → 1.0.11

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 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 $e=({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=$e;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 Le=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 He=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 Ve=/^(([^<>()[\]\\.,;:\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:Ve.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 gt=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(fe=>({...fe,[c]:b||null}))),[a,c]),de=d(c),ue=R?.required,ce=I.field.onChange;return I.field.onChange=b=>{ce(b),m?.(c,b,t);},{...e,setSelectedField:le,label:C,dataField:c,controller:I,invalid:ie,messageError:ae,selectedField:de,value:me,required:ue}};var ht=()=>{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 tr=(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))(tr||{});var Tt=z;exports.BgsFormArray=Le;exports.BgsFormGroup=He;exports.BgsReactFormProvider=oe;exports.PatternTypeEnum=tr;exports.default=Tt;exports.useBgsController=gt;exports.useBgsForm=h;exports.useBgsFormArray=O;exports.useBgsFormArrayInit=Z;exports.useBgsFormGroup=W;exports.useBgsFormInit=D;exports.useSummaryValidation=ht;
1
+ 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var V=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 V__default=/*#__PURE__*/_interopDefault(V);var N=V.createContext(void 0);function h(){let e=V.useContext(N);return e||{}}function w({children:e,controller:r,onSubmit:t,onFieldChange:p=()=>{}}){let n=V.useRef([]),o=V.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=V.useCallback(a=>{n.current=n.current.filter(d=>d.id!==a);},[]),c=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:c,onFieldChange:p};return jsxRuntime.jsx(N.Provider,{value:s,children:e})}var B=new WeakMap;function q(e){return B.has(e)||B.set(e,reactCore.createStore({})),B.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 c=n[l];l===n.length-1?o[c]=A(p):((!o[c]||typeof o[c]!="object")&&(o[c]={}),o=o[c]);}}else r[t]=A(p);return r}var H=(e,r)=>{e||(e={}),e=A(e);let t=V.useRef(null),[p,n]=V.useState(false),o=reactHookForm.useForm({...r,reValidateMode:"onSubmit",mode:"all",defaultValues:e}),l=q(o),c=V.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:c,setIsSubmit:n,useSelected:m=>l.useStore(f=>reactCore.getFieldValue(f,m)),setSelected:l.setState};return [d,d]};var $e=({onSubmit:e,onChange:r,onInvalid:t,onFieldChange:p,formData:n,controller:o,children:l,...c})=>{n&&(n=A(n));let s=o??H(),[a]=Array.isArray(s)?s:[s],d=V.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 V.useEffect(()=>{n&&reactCore.diffJson(d.current||{},n)&&(a.formControl.reset(n),d.current=n);},[n,a.formControl.reset]),V.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(w,{controller:{...a,disabled:c?.disabled,readOnly:c?.readOnly},onSubmit:e,onFieldChange:p,children:jsxRuntime.jsx("form",{...c,id:a.formId,ref:a.ref,onSubmit:m,children:l})})})},j=$e;var Z=V.createContext(void 0);function G(){let e=V.useContext(Z);return e||{}}function W({children:e,...r}){return jsxRuntime.jsx(Z.Provider,{value:r,children:e})}var J=e=>{let r=h(),t=reactHookForm.useFieldArray({control:r.control,name:e}),n={formArrayId:V.useMemo(()=>reactCore.generateUUID(),[]),...t,...r};return [n,n]};var _=({name:e,defaultData:r,controller:t,children:p})=>{let n=t??J(e),[o]=Array.isArray(n)?n:[n];return V.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,c)=>{let s=`${e}.${c}.`,a={...o,index:c,fieldId:l.id,name:s,countFields:o.fields.length,removeItem:()=>o.remove(c),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(V__default.default.Fragment,{children:jsxRuntime.jsx(W,{...a,children:reactCore.renderChildren(p,a)})},l.id)})})};_.displayName="BgsFormArray";var Le=_;V__default.default.memo(({children:e,props:r})=>jsxRuntime.jsx(jsxRuntime.Fragment,{children:reactCore.renderChildren(e,r)}));var Y=V.createContext(void 0);function E(){let e=V.useContext(Y);return e||{}}function k({children:e,...r}){return jsxRuntime.jsx(Y.Provider,{value:r,children:e})}var re=({children:e,...r})=>{let t=h(),p=V.useMemo(()=>reactCore.generateUUID(),[]);return jsxRuntime.jsx(jsxRuntime.Fragment,{children:jsxRuntime.jsx(k,{...t,...r,formGroupId:p,children:e})})};re.displayName="BgsFormGroup";var He=re;var te=V.createContext(void 0);function oe(){let e=V.useContext(te);return e||{}}function ne({children:e,...r}){return jsxRuntime.jsx(te.Provider,{value:r,children:e})}var Ve=/^(([^<>()[\]\\.,;:\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(),n=[];return e&&(typeof e=="string"?se(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&&se(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 se=(e,r,t,p,n,o,l)=>{let c=[],{validationMessage:s}=oe(),{required:a,minLength:d,maxLength:m,min:f,max:g,email:y,match:T,diff:C,pattern:u}=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:Ve.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))||(C?C(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)||(u?.alphabet?u?.alphabet(t):`${t} must be format Alphabet`),alphanumber:(i="")=>!!i&&new RegExp("^[A-Za-z0-9 ]*$").test(i)||(u?.alphanumber?u?.alphanumber(t):`${t} must be format Alphabet or Number`),number:(i="")=>!!i&&new RegExp("^[0-9]*$").test(i)||(u?.number?u?.number(t):`${t} must be format Number`),lowercase:(i="")=>!!i&&new RegExp("^[a-z0-9 ]*$").test(i)||(u?.lowercase?u?.lowercase(t):`${t} must be format Lowercase`),url:(i="")=>!!i&&/^(ftp|http|https):\/\/[^ "]+$/.test(i)||(u?.url?u?.url(t):`${t} must be a valid URL`),uppercase:(i="")=>!!i&&new RegExp("^[A-Z0-9 ]*$").test(i)||(u?.uppercase?u?.uppercase(t):`${t} must be format Uppercase`),mixedcase:(i="")=>!!i&&/[a-z]/.test(i)&&/[A-Z]/.test(i)||(u?.mixedcase?u?.mixedcase(t):`${t} must be mixed case`),specialcharacters:(i="")=>!!i&&/[^a-zA-Z0-9\s]/.test(i)||(u?.specialcharacters?u?.specialcharacters(t):`${t} must contain special characters`)}}[e];if(F){let{validate:i}=c.find(x=>x.validate)||{};typeof F=="function"?c.push({validate:{...i,...o,[e]:F}}):e==="pattern"?c.push({validate:{...i,...o,[`${e}${r}`]:F[r]}}):c.push({[e]:F});}return c};var pt=e=>{let r=V.useMemo(()=>reactCore.generateUUID(),[]),t=h(),{registerItem:p,unregisterItem:n,control:o,disabled:l,readOnly:c,formId:s,setSelected:a,useSelected:d,onFieldChange:m}=t,{name:f,formId:g,...y}=E(),{name:T,formId:C}=G(),u=V.useMemo(()=>{let b=e.dataField;return e.disabledHierarchy||(T&&s===C&&(b=`${T}${b}`),f&&s===g&&(b=`${f}${b}`)),b},[T,s,C,e.dataField,f,g,e.disabledHierarchy]),R=V.useMemo(()=>{if(e.label)return e.label;if(!e.noLabel)return reactCore.labelFormatter.changeAll(u)},[e.label,e.noLabel,u]);V.useEffect(()=>(p({id:r,...e,dataField:u,label:R}),()=>{n(r);}),[r,e,u,R]);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=!!c;let x=false;typeof e.hidden=="boolean"&&(x=e.hidden);let I=e.validationRules;typeof e.required=="boolean"&&(typeof e.validationRules>"u"?I={required:e.required}:typeof e.validationRules=="string"&&e.validationRules==="email"?I={email:true,required:e.required}:typeof e.validationRules=="object"&&(I={...e.validationRules,required:e.required}));let ae=F||i||x?{required:false}:L({...e,validationRules:I,label:R}),U=reactHookForm.useController({name:u,control:o,disabled:F,defaultValue:e.defaultValue,shouldUnregister:e.shouldUnregister,rules:ae}),me=U.fieldState.invalid,le=U.fieldState.error?.message,de=reactHookForm.useWatch({name:u,control:o,defaultValue:e.defaultValue}),ue=V.useMemo(()=>reactCore.debounce(b=>a(S=>({...S,[u]:b||null}))),[a,u]),ce=d(u),fe=I?.required;return V.useEffect(()=>{let b=U.field.onChange;U.field.onChange=(...S)=>{b(...S),m?.(u,S[0],t);};},[U,u,m,t]),{...e,setSelectedField:ue,label:R,dataField:u,controller:U,invalid:me,messageError:le,selectedField:ce,value:de,required:fe}};var Ft=()=>{let{formControl:e,items:r}=h(),t=(n,o,l,c=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||""}${c>0?` ${c}`:""}`,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=j;exports.BgsFormArray=Le;exports.BgsFormGroup=He;exports.BgsReactFormProvider=ne;exports.PatternTypeEnum=rr;exports.default=At;exports.useBgsController=pt;exports.useBgsForm=h;exports.useBgsFormArray=G;exports.useBgsFormArrayInit=J;exports.useBgsFormGroup=E;exports.useBgsFormInit=H;exports.useSummaryValidation=Ft;
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 $e=({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=$e;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 Le=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 He=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 Ve=/^(([^<>()[\]\\.,;:\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:Ve.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 gt=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(fe=>({...fe,[c]:b||null}))),[a,c]),de=d(c),ue=R?.required,ce=I.field.onChange;return I.field.onChange=b=>{ce(b),m?.(c,b,t);},{...e,setSelectedField:le,label:C,dataField:c,controller:I,invalid:ie,messageError:ae,selectedField:de,value:me,required:ue}};var ht=()=>{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 tr=(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))(tr||{});var Tt=z;export{Le as BgsFormArray,He as BgsFormGroup,oe as BgsReactFormProvider,tr as PatternTypeEnum,Tt as default,gt as useBgsController,h as useBgsForm,O as useBgsFormArray,Z as useBgsFormArrayInit,W as useBgsFormGroup,D as useBgsFormInit,ht as useSummaryValidation};
1
+ import V,{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 N=createContext(void 0);function h(){let e=useContext(N);return e||{}}function w({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);},[]),c=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:c,onFieldChange:p};return jsx(N.Provider,{value:s,children:e})}var B=new WeakMap;function q(e){return B.has(e)||B.set(e,createStore({})),B.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 c=n[l];l===n.length-1?o[c]=A(p):((!o[c]||typeof o[c]!="object")&&(o[c]={}),o=o[c]);}}else r[t]=A(p);return r}var H=(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=q(o),c=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:c,setIsSubmit:n,useSelected:m=>l.useStore(f=>getFieldValue(f,m)),setSelected:l.setState};return [d,d]};var $e=({onSubmit:e,onChange:r,onInvalid:t,onFieldChange:p,formData:n,controller:o,children:l,...c})=>{n&&(n=A(n));let s=o??H(),[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(w,{controller:{...a,disabled:c?.disabled,readOnly:c?.readOnly},onSubmit:e,onFieldChange:p,children:jsx("form",{...c,id:a.formId,ref:a.ref,onSubmit:m,children:l})})})},j=$e;var Z=createContext(void 0);function G(){let e=useContext(Z);return e||{}}function W({children:e,...r}){return jsx(Z.Provider,{value:r,children:e})}var J=e=>{let r=h(),t=useFieldArray({control:r.control,name:e}),n={formArrayId:useMemo(()=>generateUUID(),[]),...t,...r};return [n,n]};var _=({name:e,defaultData:r,controller:t,children:p})=>{let n=t??J(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,c)=>{let s=`${e}.${c}.`,a={...o,index:c,fieldId:l.id,name:s,countFields:o.fields.length,removeItem:()=>o.remove(c),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(V.Fragment,{children:jsx(W,{...a,children:renderChildren(p,a)})},l.id)})})};_.displayName="BgsFormArray";var Le=_;V.memo(({children:e,props:r})=>jsx(Fragment,{children:renderChildren(e,r)}));var Y=createContext(void 0);function E(){let e=useContext(Y);return e||{}}function k({children:e,...r}){return jsx(Y.Provider,{value:r,children:e})}var re=({children:e,...r})=>{let t=h(),p=useMemo(()=>generateUUID(),[]);return jsx(Fragment,{children:jsx(k,{...t,...r,formGroupId:p,children:e})})};re.displayName="BgsFormGroup";var He=re;var te=createContext(void 0);function oe(){let e=useContext(te);return e||{}}function ne({children:e,...r}){return jsx(te.Provider,{value:r,children:e})}var Ve=/^(([^<>()[\]\\.,;:\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(),n=[];return e&&(typeof e=="string"?se(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&&se(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 se=(e,r,t,p,n,o,l)=>{let c=[],{validationMessage:s}=oe(),{required:a,minLength:d,maxLength:m,min:f,max:g,email:y,match:T,diff:C,pattern:u}=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:Ve.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))||(C?C(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)||(u?.alphabet?u?.alphabet(t):`${t} must be format Alphabet`),alphanumber:(i="")=>!!i&&new RegExp("^[A-Za-z0-9 ]*$").test(i)||(u?.alphanumber?u?.alphanumber(t):`${t} must be format Alphabet or Number`),number:(i="")=>!!i&&new RegExp("^[0-9]*$").test(i)||(u?.number?u?.number(t):`${t} must be format Number`),lowercase:(i="")=>!!i&&new RegExp("^[a-z0-9 ]*$").test(i)||(u?.lowercase?u?.lowercase(t):`${t} must be format Lowercase`),url:(i="")=>!!i&&/^(ftp|http|https):\/\/[^ "]+$/.test(i)||(u?.url?u?.url(t):`${t} must be a valid URL`),uppercase:(i="")=>!!i&&new RegExp("^[A-Z0-9 ]*$").test(i)||(u?.uppercase?u?.uppercase(t):`${t} must be format Uppercase`),mixedcase:(i="")=>!!i&&/[a-z]/.test(i)&&/[A-Z]/.test(i)||(u?.mixedcase?u?.mixedcase(t):`${t} must be mixed case`),specialcharacters:(i="")=>!!i&&/[^a-zA-Z0-9\s]/.test(i)||(u?.specialcharacters?u?.specialcharacters(t):`${t} must contain special characters`)}}[e];if(F){let{validate:i}=c.find(x=>x.validate)||{};typeof F=="function"?c.push({validate:{...i,...o,[e]:F}}):e==="pattern"?c.push({validate:{...i,...o,[`${e}${r}`]:F[r]}}):c.push({[e]:F});}return c};var pt=e=>{let r=useMemo(()=>generateUUID(),[]),t=h(),{registerItem:p,unregisterItem:n,control:o,disabled:l,readOnly:c,formId:s,setSelected:a,useSelected:d,onFieldChange:m}=t,{name:f,formId:g,...y}=E(),{name:T,formId:C}=G(),u=useMemo(()=>{let b=e.dataField;return e.disabledHierarchy||(T&&s===C&&(b=`${T}${b}`),f&&s===g&&(b=`${f}${b}`)),b},[T,s,C,e.dataField,f,g,e.disabledHierarchy]),R=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:R}),()=>{n(r);}),[r,e,u,R]);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=!!c;let x=false;typeof e.hidden=="boolean"&&(x=e.hidden);let I=e.validationRules;typeof e.required=="boolean"&&(typeof e.validationRules>"u"?I={required:e.required}:typeof e.validationRules=="string"&&e.validationRules==="email"?I={email:true,required:e.required}:typeof e.validationRules=="object"&&(I={...e.validationRules,required:e.required}));let ae=F||i||x?{required:false}:L({...e,validationRules:I,label:R}),U=useController({name:u,control:o,disabled:F,defaultValue:e.defaultValue,shouldUnregister:e.shouldUnregister,rules:ae}),me=U.fieldState.invalid,le=U.fieldState.error?.message,de=useWatch({name:u,control:o,defaultValue:e.defaultValue}),ue=useMemo(()=>debounce(b=>a(S=>({...S,[u]:b||null}))),[a,u]),ce=d(u),fe=I?.required;return useEffect(()=>{let b=U.field.onChange;U.field.onChange=(...S)=>{b(...S),m?.(u,S[0],t);};},[U,u,m,t]),{...e,setSelectedField:ue,label:R,dataField:u,controller:U,invalid:me,messageError:le,selectedField:ce,value:de,required:fe}};var Ft=()=>{let{formControl:e,items:r}=h(),t=(n,o,l,c=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||""}${c>0?` ${c}`:""}`,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=j;export{Le as BgsFormArray,He as BgsFormGroup,ne as BgsReactFormProvider,rr as PatternTypeEnum,At as default,pt as useBgsController,h as useBgsForm,G as useBgsFormArray,J as useBgsFormArrayInit,E as useBgsFormGroup,H as useBgsFormInit,Ft as useSummaryValidation};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bgscore/react-form",
3
- "version": "1.0.10",
3
+ "version": "1.0.11",
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",