@bgscore/react-form 1.0.6 → 1.0.7
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 +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var Z=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 Z__default=/*#__PURE__*/_interopDefault(Z);var k=Z.createContext(void 0);function y(){let e=Z.useContext(k);return e||{}}function $({children:e,controller:r,onSubmit:o}){let l=Z.useRef([]),a=Z.useCallback(t=>{let c=l.current.findIndex(d=>d.id===t.id);if(c>-1){let d=[...l.current];d[c]=t,l.current=[...d];}else l.current.push(t);},[l]),n=Z.useCallback(t=>{l.current=l.current.filter(c=>c.id!==t);},[]),m=async(t,c)=>{r.setIsSubmit(true);let d=c?await r.formControl.trigger():true,i=r.getData();d&&o&&o({...i,...t},{...r});},u={...r,registerItem:a,unregisterItem:n,items:l.current,triggerSubmit:m};return jsxRuntime.jsx(k.Provider,{value:u,children:e})}var v=new WeakMap;function M(e){return v.has(e)||v.set(e,reactCore.createStore({})),v.get(e)}function A(e){if(typeof e!="object"||e===null||Array.isArray(e))return e;let r={};for(let[o,l]of Object.entries(e))if(o.includes(".")){let a=o.split("."),n=r;for(let m=0;m<a.length;m++){let u=a[m];m===a.length-1?n[u]=A(l):((!n[u]||typeof n[u]!="object")&&(n[u]={}),n=n[u]);}}else r[o]=A(l);return r}var K=(e,r)=>{e||(e={}),e=A(e);let o=Z.useRef(null),[l,a]=Z.useState(false),n=reactHookForm.useForm({...r,reValidateMode:"onSubmit",mode:"all",defaultValues:e}),m=M(n),u=Z.useMemo(()=>reactCore.generateUUID(),[]),t=i=>i?reactCore.getFieldValue(reactCore.mappingUndefinedtoNull(n.getValues()),i):reactCore.mappingUndefinedtoNull(n.getValues()),d={...n,ref:o,reset:i=>{i?typeof i=="string"?n.resetField(i,{}):typeof i=="object"&&reactCore.isArray(i,0)&&i.forEach(p=>n.resetField(p)):n.reset();},updateData:i=>{let p=t();n.reset(A({...p,...i}));},getData:t,formControl:n,useFieldArray:i=>reactHookForm.useFieldArray({control:n.control,name:i}),useWatch:i=>reactHookForm.useWatch({control:n.control,name:i}),isSubmit:l,formId:u,setIsSubmit:a,useSelected:i=>m.useStore(p=>reactCore.getFieldValue(p,i)),setSelected:m.setState};return [d,d]};var Ie=({onSubmit:e,onChange:r,onInvalid:o,formData:l,controller:a,children:n,...m})=>{l&&(l=A(l));let u=a??K(),[t]=Array.isArray(u)?u:[u],c=Z.useRef(void 0),d=async i=>{i.preventDefault(),i.stopPropagation(),t.setIsSubmit(true);let p=await t.formControl.trigger(),F=t.getData();p?e&&e({...F},{...t}):o&&o(t.formControl.formState.errors);};return Z.useEffect(()=>{l&&reactCore.diffJson(c.current||{},l)&&(t.formControl.reset(l),c.current=l);},[l,t.formControl.reset]),Z.useEffect(()=>{if(!r)return;let i=t.formControl.watch(r);return ()=>i.unsubscribe()},[]),jsxRuntime.jsx(jsxRuntime.Fragment,{children:jsxRuntime.jsx($,{controller:{...t,disabled:m?.disabled,readOnly:m?.readOnly},onSubmit:e,children:jsxRuntime.jsx("form",{...m,id:t.formId,ref:t.ref,onSubmit:d,children:n})})})},H=Ie;var z=Z.createContext(void 0);function B(){let e=Z.useContext(z);return e||{}}function O({children:e,...r}){return jsxRuntime.jsx(z.Provider,{value:r,children:e})}var j=e=>{let r=y(),o=reactHookForm.useFieldArray({control:r.control,name:e}),a={formArrayId:Z.useMemo(()=>reactCore.generateUUID(),[]),...o,...r};return [a,a]};var V=({name:e,defaultData:r,controller:o,children:l})=>{let a=o??j(e),[n]=Array.isArray(a)?a:[a];return Z.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,u)=>{let t=`${e}.${u}.`,c={...n,index:u,fieldId:m.id,name:t,countFields:n.fields.length,removeItem:()=>n.remove(u),watchItem:d=>n.watch(d?`${t}${d}`:t.slice(0,-1)),setValueItem:(d,i)=>n.setValue(`${t}${d}`,i),useSelectedItem:d=>n.useSelected(`${t}${d}`)};return jsxRuntime.jsx(Z__default.default.Fragment,{children:jsxRuntime.jsx(O,{...c,children:reactCore.renderChildren(l,c)})},m.id)})})};V.displayName="BgsFormArray";var We=V;Z__default.default.memo(({children:e,props:r})=>jsxRuntime.jsx(jsxRuntime.Fragment,{children:reactCore.renderChildren(e,r)}));var _=Z.createContext(void 0);function G(){let e=Z.useContext(_);return e||{}}function W({children:e,...r}){return jsxRuntime.jsx(_.Provider,{value:r,children:e})}var Y=({children:e,...r})=>{let o=y(),l=Z.useMemo(()=>reactCore.generateUUID(),[]);return jsxRuntime.jsx(jsxRuntime.Fragment,{children:jsxRuntime.jsx(W,{...o,...r,formGroupId:l,children:e})})};Y.displayName="BgsFormGroup";var qe=Y;var ee=Z.createContext(void 0);function re(){let e=Z.useContext(ee);return e||{}}function te({children:e,...r}){return jsxRuntime.jsx(ee.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 E({validationRules:e,label:r}){let{formControl:o,getData:l}=y(),a=[];return e&&(typeof e=="string"?oe(e,true,r,o,l,{}).forEach(n=>a.push(n)):typeof e=="object"&&Object.keys(e).forEach(n=>{let{validate:m}=a.find(t=>t.validate)||{};if(["minLength","maxLength","min","max","match","diff","regexp","pattern","required","email"].includes(n)){let t=e[n],c="";["match","diff"].includes(n)&&typeof t=="object"&&(t=e[n].dataField,c=e[n].label),t!=null&&oe(n,t,r,o,l,m,c).forEach(d=>a.push(d));}else if(typeof e[n]=="object"){let t=e[n];a.push({validate:{...m,[n]:c=>t.validation(c)||t.message&&(typeof t.message=="string"?t.message:t.message(r))}});}})),Object.assign({},...a)}var oe=(e,r,o,l,a,n,m)=>{let u=[],{validationMessage:t}=re(),{required:c,minLength:d,maxLength:i,min:p,max:F,email:T,match:g,diff:b,pattern:f}=t||{},h={required:s=>{if(!r)return true;let U=c?c(o):`${o} is required`;return typeof s=="string"&&!s.trim()||s==null?U:true},minLength:{value:r,message:d?d(o,r):`${o} must be at least ${r} characters long`},maxLength:{value:r,message:i?i(o,r):`${o} cannot be more than ${r} characters long`},min:{value:Number(r),message:p?p(o,r):`${o} should be at least ${r}`},max:{value:Number(r),message:F?F(o,r):`${o} should be at most ${r}`},regexp:(s="")=>s?new RegExp(r.regexp).test(s)||`${o} ${r.message}`:true,email:(s="")=>!r||!s?true:je.test(s)||(T?T(o):`${o} must be type email`),match:(s="")=>s?s===(a&&a(r))||(g?g(o,m||reactCore.labelFormatter.changeAll(r)):`${o} must be same with ${m||reactCore.labelFormatter.changeAll(r)}`):true,diff:(s="")=>s?s!==(a&&a(r))||(b?b(o,m||reactCore.labelFormatter.changeAll(r)):`${o} must be different with ${m||reactCore.labelFormatter.changeAll(r)}`):true,pattern:{alphabet:(s="")=>!!s&&new RegExp("^[A-Za-z ]*$").test(s)||(f?.alphabet?f?.alphabet(o):`${o} must be format Alphabet`),alphanumber:(s="")=>!!s&&new RegExp("^[A-Za-z0-9 ]*$").test(s)||(f?.alphanumber?f?.alphanumber(o):`${o} must be format Alphabet or Number`),number:(s="")=>!!s&&new RegExp("^[0-9]*$").test(s)||(f?.number?f?.number(o):`${o} must be format Number`),lowercase:(s="")=>!!s&&new RegExp("^[a-z0-9 ]*$").test(s)||(f?.lowercase?f?.lowercase(o):`${o} must be format Lowercase`),url:(s="")=>!!s&&/^(ftp|http|https):\/\/[^ "]+$/.test(s)||(f?.url?f?.url(o):`${o} must be a valid URL`),uppercase:(s="")=>!!s&&new RegExp("^[A-Z0-9 ]*$").test(s)||(f?.uppercase?f?.uppercase(o):`${o} must be format Uppercase`),mixedcase:(s="")=>!!s&&/[a-z]/.test(s)&&/[A-Z]/.test(s)||(f?.mixedcase?f?.mixedcase(o):`${o} must be mixed case`),specialcharacters:(s="")=>!!s&&/[^a-zA-Z0-9\s]/.test(s)||(f?.specialcharacters?f?.specialcharacters(o):`${o} must contain special characters`)}}[e];if(h){let{validate:s}=u.find(U=>U.validate)||{};typeof h=="function"?u.push({validate:{...s,...n,[e]:h}}):e==="pattern"?u.push({validate:{...s,...n,[`${e}${r}`]:h[r]}}):u.push({[e]:h});}return u};var ct=e=>{let r=Z.useMemo(()=>reactCore.generateUUID(),[]),{registerItem:o,unregisterItem:l,control:a,disabled:n,readOnly:m,formId:u,setSelected:t,useSelected:c}=y(),{name:d,formId:i,...p}=G(),{name:F,formId:T}=B(),g=Z.useMemo(()=>{let x=e.dataField;return e.disabledHierarchy||(F&&u===T&&(x=`${F}${x}`),d&&u===i&&(x=`${d}${x}`)),x},[F,u,T,e.dataField,d,i,e.disabledHierarchy]),b=Z.useMemo(()=>{if(e.label)return e.label;if(!e.noLabel)return reactCore.labelFormatter.changeAll(g)},[e.label,e.noLabel,g]);Z.useEffect(()=>(o({id:r,...e,dataField:g,label:b}),()=>{l(r);}),[r,e,g,b]);let f=false;typeof e.disabled=="boolean"?f=e.disabled:typeof p.disabled=="boolean"?f=p.disabled:f=!!n;let R=false;typeof e.readOnly=="boolean"?R=e.readOnly:typeof p.readOnly=="boolean"?R=p.readOnly:R=!!m;let h=false;typeof e.hidden=="boolean"&&(h=e.hidden);let s=e.validationRules;typeof e.required=="boolean"&&(typeof e.validationRules>"u"?s={required:e.required}:typeof e.validationRules=="string"&&e.validationRules==="email"?s={email:true,required:e.required}:typeof e.validationRules=="object"&&(s={...e.validationRules,required:e.required}));let U=f||R||h?{required:false}:E({...e,validationRules:s,label:b}),P=reactHookForm.useController({name:g,control:a,disabled:f,defaultValue:e.defaultValue,shouldUnregister:e.shouldUnregister,rules:U}),ne=P.fieldState.invalid,se=P.fieldState.error?.message,ie=reactHookForm.useWatch({name:g,control:a,defaultValue:e.defaultValue}),ae=Z.useMemo(()=>reactCore.debounce(x=>t(de=>({...de,[g]:x||null}))),[t,g]),me=c(g),le=s?.required;return {...e,setSelectedField:ae,label:b,dataField:g,controller:P,invalid:ne,messageError:se,selectedField:me,value:ie,required:le}};var gt=()=>{let{formControl:e,items:r}=y(),o=(a,n,m,u=0)=>{let t=[];if(Array.isArray(m))m.forEach((c,d)=>{let i=Object.entries(c||{}).map(([p,F])=>o(`${a}.${d}.${p}`,`${n}[]${p}`,F,m.length>1?d+1:0)).flat();t=[...t,...i];});else if(m&&typeof m=="object"&&!Array.isArray(m)&&!m?.ref)Object.entries(m).map(([c,d])=>{let i=o(`${a}.${c}`,`${a}.${c}`,d);t=[...t,...i];});else {let c=m?.message||"",d=r.find(i=>i.dataField===n)?.label;t.push({label:`${d||""}${u>0?` ${u}`:""}`,message:c,dataField:a});}return t};return Object.entries(e.formState.errors||{}).map(([a,n])=>o(a,a,n)).flat()};var Ye=(t=>(t.alphabet="alphabet",t.alphaNumber="alphanumber",t.number="number",t.lowercase="lowercase",t.url="url",t.uppercase="uppercase",t.mixedCase="mixedcase",t.specialCharacters="specialcharacters",t))(Ye||{});var bt=H;exports.BgsFormArray=We;exports.BgsFormGroup=qe;exports.BgsReactFormProvider=te;exports.PatternTypeEnum=Ye;exports.default=bt;exports.useBgsController=ct;exports.useBgsForm=y;exports.useBgsFormArray=B;exports.useBgsFormArrayInit=j;exports.useBgsFormGroup=G;exports.useBgsFormInit=K;exports.useSummaryValidation=gt;
|
|
1
|
+
'use strict';Object.defineProperty(exports,'__esModule',{value:true});var Z=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 Z__default=/*#__PURE__*/_interopDefault(Z);var k=Z.createContext(void 0);function F(){let e=Z.useContext(k);return e||{}}function $({children:e,controller:r,onSubmit:o}){let l=Z.useRef([]),a=Z.useCallback(t=>{let c=l.current.findIndex(d=>d.id===t.id);if(c>-1){let d=[...l.current];d[c]=t,l.current=[...d];}else l.current.push(t);},[l]),n=Z.useCallback(t=>{l.current=l.current.filter(c=>c.id!==t);},[]),m=async(t,c)=>{r.setIsSubmit(true);let d=c?await r.formControl.trigger():true,i=r.getData();d&&o&&o({...i,...t},{...r});},u={...r,registerItem:a,unregisterItem:n,items:l.current,triggerSubmit:m};return jsxRuntime.jsx(k.Provider,{value:u,children:e})}var v=new WeakMap;function M(e){return v.has(e)||v.set(e,reactCore.createStore({})),v.get(e)}function A(e){if(typeof e!="object"||e===null||Array.isArray(e))return e;let r={};for(let[o,l]of Object.entries(e))if(o.includes(".")){let a=o.split("."),n=r;for(let m=0;m<a.length;m++){let u=a[m];m===a.length-1?n[u]=A(l):((!n[u]||typeof n[u]!="object")&&(n[u]={}),n=n[u]);}}else r[o]=A(l);return r}var K=(e,r)=>{e||(e={}),e=A(e);let o=Z.useRef(null),[l,a]=Z.useState(false),n=reactHookForm.useForm({...r,reValidateMode:"onSubmit",mode:"all",defaultValues:e}),m=M(n),u=Z.useMemo(()=>reactCore.generateUUID(),[]),t=i=>i?reactCore.getFieldValue(reactCore.mappingUndefinedtoNull(n.getValues()),i):reactCore.mappingUndefinedtoNull(n.getValues()),d={...n,ref:o,reset:i=>{i?typeof i=="string"?n.resetField(i,{}):typeof i=="object"&&reactCore.isArray(i,0)&&i.forEach(p=>n.resetField(p)):n.reset();},updateData:i=>{let p=t();n.reset(A({...p,...i}));},getData:t,formControl:n,useFieldArray:i=>reactHookForm.useFieldArray({control:n.control,name:i}),useWatch:i=>reactHookForm.useWatch({control:n.control,name:i}),isSubmit:l,formId:u,setIsSubmit:a,useSelected:i=>m.useStore(p=>reactCore.getFieldValue(p,i)),setSelected:m.setState};return [d,d]};var Ie=({onSubmit:e,onChange:r,onInvalid:o,formData:l,controller:a,children:n,...m})=>{l&&(l=A(l));let u=a??K(),[t]=Array.isArray(u)?u:[u],c=Z.useRef(void 0),d=async i=>{i.preventDefault(),i.stopPropagation(),t.setIsSubmit(true);let p=await t.formControl.trigger(),y=t.getData();p?e&&e({...y},{...t}):o&&o(t.formControl.formState.errors);};return Z.useEffect(()=>{l&&reactCore.diffJson(c.current||{},l)&&(t.formControl.reset(l),c.current=l);},[l,t.formControl.reset]),Z.useEffect(()=>{if(!r)return;let i=t.formControl.watch((p,y)=>r(p,y,t));return ()=>i.unsubscribe()},[]),jsxRuntime.jsx(jsxRuntime.Fragment,{children:jsxRuntime.jsx($,{controller:{...t,disabled:m?.disabled,readOnly:m?.readOnly},onSubmit:e,children:jsxRuntime.jsx("form",{...m,id:t.formId,ref:t.ref,onSubmit:d,children:n})})})},H=Ie;var z=Z.createContext(void 0);function B(){let e=Z.useContext(z);return e||{}}function O({children:e,...r}){return jsxRuntime.jsx(z.Provider,{value:r,children:e})}var j=e=>{let r=F(),o=reactHookForm.useFieldArray({control:r.control,name:e}),a={formArrayId:Z.useMemo(()=>reactCore.generateUUID(),[]),...o,...r};return [a,a]};var V=({name:e,defaultData:r,controller:o,children:l})=>{let a=o??j(e),[n]=Array.isArray(a)?a:[a];return Z.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,u)=>{let t=`${e}.${u}.`,c={...n,index:u,fieldId:m.id,name:t,countFields:n.fields.length,removeItem:()=>n.remove(u),watchItem:d=>n.watch(d?`${t}${d}`:t.slice(0,-1)),setValueItem:(d,i)=>n.setValue(`${t}${d}`,i),useSelectedItem:d=>n.useSelected(`${t}${d}`)};return jsxRuntime.jsx(Z__default.default.Fragment,{children:jsxRuntime.jsx(O,{...c,children:reactCore.renderChildren(l,c)})},m.id)})})};V.displayName="BgsFormArray";var We=V;Z__default.default.memo(({children:e,props:r})=>jsxRuntime.jsx(jsxRuntime.Fragment,{children:reactCore.renderChildren(e,r)}));var _=Z.createContext(void 0);function G(){let e=Z.useContext(_);return e||{}}function W({children:e,...r}){return jsxRuntime.jsx(_.Provider,{value:r,children:e})}var Y=({children:e,...r})=>{let o=F(),l=Z.useMemo(()=>reactCore.generateUUID(),[]);return jsxRuntime.jsx(jsxRuntime.Fragment,{children:jsxRuntime.jsx(W,{...o,...r,formGroupId:l,children:e})})};Y.displayName="BgsFormGroup";var qe=Y;var ee=Z.createContext(void 0);function re(){let e=Z.useContext(ee);return e||{}}function te({children:e,...r}){return jsxRuntime.jsx(ee.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 E({validationRules:e,label:r}){let{formControl:o,getData:l}=F(),a=[];return e&&(typeof e=="string"?oe(e,true,r,o,l,{}).forEach(n=>a.push(n)):typeof e=="object"&&Object.keys(e).forEach(n=>{let{validate:m}=a.find(t=>t.validate)||{};if(["minLength","maxLength","min","max","match","diff","regexp","pattern","required","email"].includes(n)){let t=e[n],c="";["match","diff"].includes(n)&&typeof t=="object"&&(t=e[n].dataField,c=e[n].label),t!=null&&oe(n,t,r,o,l,m,c).forEach(d=>a.push(d));}else if(typeof e[n]=="object"){let t=e[n];a.push({validate:{...m,[n]:c=>t.validation(c)||t.message&&(typeof t.message=="string"?t.message:t.message(r))}});}})),Object.assign({},...a)}var oe=(e,r,o,l,a,n,m)=>{let u=[],{validationMessage:t}=re(),{required:c,minLength:d,maxLength:i,min:p,max:y,email:T,match:g,diff:b,pattern:f}=t||{},h={required:s=>{if(!r)return true;let U=c?c(o):`${o} is required`;return typeof s=="string"&&!s.trim()||s==null?U:true},minLength:{value:r,message:d?d(o,r):`${o} must be at least ${r} characters long`},maxLength:{value:r,message:i?i(o,r):`${o} cannot be more than ${r} characters long`},min:{value:Number(r),message:p?p(o,r):`${o} should be at least ${r}`},max:{value:Number(r),message:y?y(o,r):`${o} should be at most ${r}`},regexp:(s="")=>s?new RegExp(r.regexp).test(s)||`${o} ${r.message}`:true,email:(s="")=>!r||!s?true:je.test(s)||(T?T(o):`${o} must be type email`),match:(s="")=>s?s===(a&&a(r))||(g?g(o,m||reactCore.labelFormatter.changeAll(r)):`${o} must be same with ${m||reactCore.labelFormatter.changeAll(r)}`):true,diff:(s="")=>s?s!==(a&&a(r))||(b?b(o,m||reactCore.labelFormatter.changeAll(r)):`${o} must be different with ${m||reactCore.labelFormatter.changeAll(r)}`):true,pattern:{alphabet:(s="")=>!!s&&new RegExp("^[A-Za-z ]*$").test(s)||(f?.alphabet?f?.alphabet(o):`${o} must be format Alphabet`),alphanumber:(s="")=>!!s&&new RegExp("^[A-Za-z0-9 ]*$").test(s)||(f?.alphanumber?f?.alphanumber(o):`${o} must be format Alphabet or Number`),number:(s="")=>!!s&&new RegExp("^[0-9]*$").test(s)||(f?.number?f?.number(o):`${o} must be format Number`),lowercase:(s="")=>!!s&&new RegExp("^[a-z0-9 ]*$").test(s)||(f?.lowercase?f?.lowercase(o):`${o} must be format Lowercase`),url:(s="")=>!!s&&/^(ftp|http|https):\/\/[^ "]+$/.test(s)||(f?.url?f?.url(o):`${o} must be a valid URL`),uppercase:(s="")=>!!s&&new RegExp("^[A-Z0-9 ]*$").test(s)||(f?.uppercase?f?.uppercase(o):`${o} must be format Uppercase`),mixedcase:(s="")=>!!s&&/[a-z]/.test(s)&&/[A-Z]/.test(s)||(f?.mixedcase?f?.mixedcase(o):`${o} must be mixed case`),specialcharacters:(s="")=>!!s&&/[^a-zA-Z0-9\s]/.test(s)||(f?.specialcharacters?f?.specialcharacters(o):`${o} must contain special characters`)}}[e];if(h){let{validate:s}=u.find(U=>U.validate)||{};typeof h=="function"?u.push({validate:{...s,...n,[e]:h}}):e==="pattern"?u.push({validate:{...s,...n,[`${e}${r}`]:h[r]}}):u.push({[e]:h});}return u};var ct=e=>{let r=Z.useMemo(()=>reactCore.generateUUID(),[]),{registerItem:o,unregisterItem:l,control:a,disabled:n,readOnly:m,formId:u,setSelected:t,useSelected:c}=F(),{name:d,formId:i,...p}=G(),{name:y,formId:T}=B(),g=Z.useMemo(()=>{let x=e.dataField;return e.disabledHierarchy||(y&&u===T&&(x=`${y}${x}`),d&&u===i&&(x=`${d}${x}`)),x},[y,u,T,e.dataField,d,i,e.disabledHierarchy]),b=Z.useMemo(()=>{if(e.label)return e.label;if(!e.noLabel)return reactCore.labelFormatter.changeAll(g)},[e.label,e.noLabel,g]);Z.useEffect(()=>(o({id:r,...e,dataField:g,label:b}),()=>{l(r);}),[r,e,g,b]);let f=false;typeof e.disabled=="boolean"?f=e.disabled:typeof p.disabled=="boolean"?f=p.disabled:f=!!n;let R=false;typeof e.readOnly=="boolean"?R=e.readOnly:typeof p.readOnly=="boolean"?R=p.readOnly:R=!!m;let h=false;typeof e.hidden=="boolean"&&(h=e.hidden);let s=e.validationRules;typeof e.required=="boolean"&&(typeof e.validationRules>"u"?s={required:e.required}:typeof e.validationRules=="string"&&e.validationRules==="email"?s={email:true,required:e.required}:typeof e.validationRules=="object"&&(s={...e.validationRules,required:e.required}));let U=f||R||h?{required:false}:E({...e,validationRules:s,label:b}),P=reactHookForm.useController({name:g,control:a,disabled:f,defaultValue:e.defaultValue,shouldUnregister:e.shouldUnregister,rules:U}),ne=P.fieldState.invalid,se=P.fieldState.error?.message,ie=reactHookForm.useWatch({name:g,control:a,defaultValue:e.defaultValue}),ae=Z.useMemo(()=>reactCore.debounce(x=>t(de=>({...de,[g]:x||null}))),[t,g]),me=c(g),le=s?.required;return {...e,setSelectedField:ae,label:b,dataField:g,controller:P,invalid:ne,messageError:se,selectedField:me,value:ie,required:le}};var gt=()=>{let{formControl:e,items:r}=F(),o=(a,n,m,u=0)=>{let t=[];if(Array.isArray(m))m.forEach((c,d)=>{let i=Object.entries(c||{}).map(([p,y])=>o(`${a}.${d}.${p}`,`${n}[]${p}`,y,m.length>1?d+1:0)).flat();t=[...t,...i];});else if(m&&typeof m=="object"&&!Array.isArray(m)&&!m?.ref)Object.entries(m).map(([c,d])=>{let i=o(`${a}.${c}`,`${a}.${c}`,d);t=[...t,...i];});else {let c=m?.message||"",d=r.find(i=>i.dataField===n)?.label;t.push({label:`${d||""}${u>0?` ${u}`:""}`,message:c,dataField:a});}return t};return Object.entries(e.formState.errors||{}).map(([a,n])=>o(a,a,n)).flat()};var Ye=(t=>(t.alphabet="alphabet",t.alphaNumber="alphanumber",t.number="number",t.lowercase="lowercase",t.url="url",t.uppercase="uppercase",t.mixedCase="mixedcase",t.specialCharacters="specialcharacters",t))(Ye||{});var bt=H;exports.BgsFormArray=We;exports.BgsFormGroup=qe;exports.BgsReactFormProvider=te;exports.PatternTypeEnum=Ye;exports.default=bt;exports.useBgsController=ct;exports.useBgsForm=F;exports.useBgsFormArray=B;exports.useBgsFormArrayInit=j;exports.useBgsFormGroup=G;exports.useBgsFormInit=K;exports.useSummaryValidation=gt;
|
package/dist/index.d.cts
CHANGED
|
@@ -35,7 +35,7 @@ type FormProps<T = unknown> = Omit<React.FormHTMLAttributes<HTMLFormElement>, "o
|
|
|
35
35
|
type OnChange<T = unknown> = (values: T, event: {
|
|
36
36
|
name?: string | undefined;
|
|
37
37
|
type?: EventType | undefined;
|
|
38
|
-
}) => void;
|
|
38
|
+
}, controller: UseFormInitReturn<T>) => void;
|
|
39
39
|
type SetSelectedFn<T> = (newState: SelectedNested<T> | ((prev: SelectedNested<T>) => SelectedNested<T>)) => void;
|
|
40
40
|
interface UseFormInitReturn<T = unknown> extends FormDefaultProps, Omit<UseFormReturn, "reset"> {
|
|
41
41
|
reset: (field?: string | string[]) => void;
|
package/dist/index.d.ts
CHANGED
|
@@ -35,7 +35,7 @@ type FormProps<T = unknown> = Omit<React.FormHTMLAttributes<HTMLFormElement>, "o
|
|
|
35
35
|
type OnChange<T = unknown> = (values: T, event: {
|
|
36
36
|
name?: string | undefined;
|
|
37
37
|
type?: EventType | undefined;
|
|
38
|
-
}) => void;
|
|
38
|
+
}, controller: UseFormInitReturn<T>) => void;
|
|
39
39
|
type SetSelectedFn<T> = (newState: SelectedNested<T> | ((prev: SelectedNested<T>) => SelectedNested<T>)) => void;
|
|
40
40
|
interface UseFormInitReturn<T = unknown> extends FormDefaultProps, Omit<UseFormReturn, "reset"> {
|
|
41
41
|
reset: (field?: string | string[]) => void;
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import Z,{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 k=createContext(void 0);function y(){let e=useContext(k);return e||{}}function $({children:e,controller:r,onSubmit:o}){let l=useRef([]),a=useCallback(t=>{let c=l.current.findIndex(d=>d.id===t.id);if(c>-1){let d=[...l.current];d[c]=t,l.current=[...d];}else l.current.push(t);},[l]),n=useCallback(t=>{l.current=l.current.filter(c=>c.id!==t);},[]),m=async(t,c)=>{r.setIsSubmit(true);let d=c?await r.formControl.trigger():true,i=r.getData();d&&o&&o({...i,...t},{...r});},u={...r,registerItem:a,unregisterItem:n,items:l.current,triggerSubmit:m};return jsx(k.Provider,{value:u,children:e})}var v=new WeakMap;function M(e){return v.has(e)||v.set(e,createStore({})),v.get(e)}function A(e){if(typeof e!="object"||e===null||Array.isArray(e))return e;let r={};for(let[o,l]of Object.entries(e))if(o.includes(".")){let a=o.split("."),n=r;for(let m=0;m<a.length;m++){let u=a[m];m===a.length-1?n[u]=A(l):((!n[u]||typeof n[u]!="object")&&(n[u]={}),n=n[u]);}}else r[o]=A(l);return r}var K=(e,r)=>{e||(e={}),e=A(e);let o=useRef(null),[l,a]=useState(false),n=useForm({...r,reValidateMode:"onSubmit",mode:"all",defaultValues:e}),m=M(n),u=useMemo(()=>generateUUID(),[]),t=i=>i?getFieldValue(mappingUndefinedtoNull(n.getValues()),i):mappingUndefinedtoNull(n.getValues()),d={...n,ref:o,reset:i=>{i?typeof i=="string"?n.resetField(i,{}):typeof i=="object"&&isArray(i,0)&&i.forEach(p=>n.resetField(p)):n.reset();},updateData:i=>{let p=t();n.reset(A({...p,...i}));},getData:t,formControl:n,useFieldArray:i=>useFieldArray({control:n.control,name:i}),useWatch:i=>useWatch({control:n.control,name:i}),isSubmit:l,formId:u,setIsSubmit:a,useSelected:i=>m.useStore(p=>getFieldValue(p,i)),setSelected:m.setState};return [d,d]};var Ie=({onSubmit:e,onChange:r,onInvalid:o,formData:l,controller:a,children:n,...m})=>{l&&(l=A(l));let u=a??K(),[t]=Array.isArray(u)?u:[u],c=useRef(void 0),d=async i=>{i.preventDefault(),i.stopPropagation(),t.setIsSubmit(true);let p=await t.formControl.trigger(),F=t.getData();p?e&&e({...F},{...t}):o&&o(t.formControl.formState.errors);};return useEffect(()=>{l&&diffJson(c.current||{},l)&&(t.formControl.reset(l),c.current=l);},[l,t.formControl.reset]),useEffect(()=>{if(!r)return;let i=t.formControl.watch(r);return ()=>i.unsubscribe()},[]),jsx(Fragment,{children:jsx($,{controller:{...t,disabled:m?.disabled,readOnly:m?.readOnly},onSubmit:e,children:jsx("form",{...m,id:t.formId,ref:t.ref,onSubmit:d,children:n})})})},H=Ie;var z=createContext(void 0);function B(){let e=useContext(z);return e||{}}function O({children:e,...r}){return jsx(z.Provider,{value:r,children:e})}var j=e=>{let r=y(),o=useFieldArray({control:r.control,name:e}),a={formArrayId:useMemo(()=>generateUUID(),[]),...o,...r};return [a,a]};var V=({name:e,defaultData:r,controller:o,children:l})=>{let a=o??j(e),[n]=Array.isArray(a)?a:[a];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,u)=>{let t=`${e}.${u}.`,c={...n,index:u,fieldId:m.id,name:t,countFields:n.fields.length,removeItem:()=>n.remove(u),watchItem:d=>n.watch(d?`${t}${d}`:t.slice(0,-1)),setValueItem:(d,i)=>n.setValue(`${t}${d}`,i),useSelectedItem:d=>n.useSelected(`${t}${d}`)};return jsx(Z.Fragment,{children:jsx(O,{...c,children:renderChildren(l,c)})},m.id)})})};V.displayName="BgsFormArray";var We=V;Z.memo(({children:e,props:r})=>jsx(Fragment,{children:renderChildren(e,r)}));var _=createContext(void 0);function G(){let e=useContext(_);return e||{}}function W({children:e,...r}){return jsx(_.Provider,{value:r,children:e})}var Y=({children:e,...r})=>{let o=y(),l=useMemo(()=>generateUUID(),[]);return jsx(Fragment,{children:jsx(W,{...o,...r,formGroupId:l,children:e})})};Y.displayName="BgsFormGroup";var qe=Y;var ee=createContext(void 0);function re(){let e=useContext(ee);return e||{}}function te({children:e,...r}){return jsx(ee.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 E({validationRules:e,label:r}){let{formControl:o,getData:l}=y(),a=[];return e&&(typeof e=="string"?oe(e,true,r,o,l,{}).forEach(n=>a.push(n)):typeof e=="object"&&Object.keys(e).forEach(n=>{let{validate:m}=a.find(t=>t.validate)||{};if(["minLength","maxLength","min","max","match","diff","regexp","pattern","required","email"].includes(n)){let t=e[n],c="";["match","diff"].includes(n)&&typeof t=="object"&&(t=e[n].dataField,c=e[n].label),t!=null&&oe(n,t,r,o,l,m,c).forEach(d=>a.push(d));}else if(typeof e[n]=="object"){let t=e[n];a.push({validate:{...m,[n]:c=>t.validation(c)||t.message&&(typeof t.message=="string"?t.message:t.message(r))}});}})),Object.assign({},...a)}var oe=(e,r,o,l,a,n,m)=>{let u=[],{validationMessage:t}=re(),{required:c,minLength:d,maxLength:i,min:p,max:F,email:T,match:g,diff:b,pattern:f}=t||{},h={required:s=>{if(!r)return true;let U=c?c(o):`${o} is required`;return typeof s=="string"&&!s.trim()||s==null?U:true},minLength:{value:r,message:d?d(o,r):`${o} must be at least ${r} characters long`},maxLength:{value:r,message:i?i(o,r):`${o} cannot be more than ${r} characters long`},min:{value:Number(r),message:p?p(o,r):`${o} should be at least ${r}`},max:{value:Number(r),message:F?F(o,r):`${o} should be at most ${r}`},regexp:(s="")=>s?new RegExp(r.regexp).test(s)||`${o} ${r.message}`:true,email:(s="")=>!r||!s?true:je.test(s)||(T?T(o):`${o} must be type email`),match:(s="")=>s?s===(a&&a(r))||(g?g(o,m||labelFormatter.changeAll(r)):`${o} must be same with ${m||labelFormatter.changeAll(r)}`):true,diff:(s="")=>s?s!==(a&&a(r))||(b?b(o,m||labelFormatter.changeAll(r)):`${o} must be different with ${m||labelFormatter.changeAll(r)}`):true,pattern:{alphabet:(s="")=>!!s&&new RegExp("^[A-Za-z ]*$").test(s)||(f?.alphabet?f?.alphabet(o):`${o} must be format Alphabet`),alphanumber:(s="")=>!!s&&new RegExp("^[A-Za-z0-9 ]*$").test(s)||(f?.alphanumber?f?.alphanumber(o):`${o} must be format Alphabet or Number`),number:(s="")=>!!s&&new RegExp("^[0-9]*$").test(s)||(f?.number?f?.number(o):`${o} must be format Number`),lowercase:(s="")=>!!s&&new RegExp("^[a-z0-9 ]*$").test(s)||(f?.lowercase?f?.lowercase(o):`${o} must be format Lowercase`),url:(s="")=>!!s&&/^(ftp|http|https):\/\/[^ "]+$/.test(s)||(f?.url?f?.url(o):`${o} must be a valid URL`),uppercase:(s="")=>!!s&&new RegExp("^[A-Z0-9 ]*$").test(s)||(f?.uppercase?f?.uppercase(o):`${o} must be format Uppercase`),mixedcase:(s="")=>!!s&&/[a-z]/.test(s)&&/[A-Z]/.test(s)||(f?.mixedcase?f?.mixedcase(o):`${o} must be mixed case`),specialcharacters:(s="")=>!!s&&/[^a-zA-Z0-9\s]/.test(s)||(f?.specialcharacters?f?.specialcharacters(o):`${o} must contain special characters`)}}[e];if(h){let{validate:s}=u.find(U=>U.validate)||{};typeof h=="function"?u.push({validate:{...s,...n,[e]:h}}):e==="pattern"?u.push({validate:{...s,...n,[`${e}${r}`]:h[r]}}):u.push({[e]:h});}return u};var ct=e=>{let r=useMemo(()=>generateUUID(),[]),{registerItem:o,unregisterItem:l,control:a,disabled:n,readOnly:m,formId:u,setSelected:t,useSelected:c}=y(),{name:d,formId:i,...p}=G(),{name:F,formId:T}=B(),g=useMemo(()=>{let x=e.dataField;return e.disabledHierarchy||(F&&u===T&&(x=`${F}${x}`),d&&u===i&&(x=`${d}${x}`)),x},[F,u,T,e.dataField,d,i,e.disabledHierarchy]),b=useMemo(()=>{if(e.label)return e.label;if(!e.noLabel)return labelFormatter.changeAll(g)},[e.label,e.noLabel,g]);useEffect(()=>(o({id:r,...e,dataField:g,label:b}),()=>{l(r);}),[r,e,g,b]);let f=false;typeof e.disabled=="boolean"?f=e.disabled:typeof p.disabled=="boolean"?f=p.disabled:f=!!n;let R=false;typeof e.readOnly=="boolean"?R=e.readOnly:typeof p.readOnly=="boolean"?R=p.readOnly:R=!!m;let h=false;typeof e.hidden=="boolean"&&(h=e.hidden);let s=e.validationRules;typeof e.required=="boolean"&&(typeof e.validationRules>"u"?s={required:e.required}:typeof e.validationRules=="string"&&e.validationRules==="email"?s={email:true,required:e.required}:typeof e.validationRules=="object"&&(s={...e.validationRules,required:e.required}));let U=f||R||h?{required:false}:E({...e,validationRules:s,label:b}),P=useController({name:g,control:a,disabled:f,defaultValue:e.defaultValue,shouldUnregister:e.shouldUnregister,rules:U}),ne=P.fieldState.invalid,se=P.fieldState.error?.message,ie=useWatch({name:g,control:a,defaultValue:e.defaultValue}),ae=useMemo(()=>debounce(x=>t(de=>({...de,[g]:x||null}))),[t,g]),me=c(g),le=s?.required;return {...e,setSelectedField:ae,label:b,dataField:g,controller:P,invalid:ne,messageError:se,selectedField:me,value:ie,required:le}};var gt=()=>{let{formControl:e,items:r}=y(),o=(a,n,m,u=0)=>{let t=[];if(Array.isArray(m))m.forEach((c,d)=>{let i=Object.entries(c||{}).map(([p,F])=>o(`${a}.${d}.${p}`,`${n}[]${p}`,F,m.length>1?d+1:0)).flat();t=[...t,...i];});else if(m&&typeof m=="object"&&!Array.isArray(m)&&!m?.ref)Object.entries(m).map(([c,d])=>{let i=o(`${a}.${c}`,`${a}.${c}`,d);t=[...t,...i];});else {let c=m?.message||"",d=r.find(i=>i.dataField===n)?.label;t.push({label:`${d||""}${u>0?` ${u}`:""}`,message:c,dataField:a});}return t};return Object.entries(e.formState.errors||{}).map(([a,n])=>o(a,a,n)).flat()};var Ye=(t=>(t.alphabet="alphabet",t.alphaNumber="alphanumber",t.number="number",t.lowercase="lowercase",t.url="url",t.uppercase="uppercase",t.mixedCase="mixedcase",t.specialCharacters="specialcharacters",t))(Ye||{});var bt=H;export{We as BgsFormArray,qe as BgsFormGroup,te as BgsReactFormProvider,Ye as PatternTypeEnum,bt as default,ct as useBgsController,y as useBgsForm,B as useBgsFormArray,j as useBgsFormArrayInit,G as useBgsFormGroup,K as useBgsFormInit,gt as useSummaryValidation};
|
|
1
|
+
import Z,{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 k=createContext(void 0);function F(){let e=useContext(k);return e||{}}function $({children:e,controller:r,onSubmit:o}){let l=useRef([]),a=useCallback(t=>{let c=l.current.findIndex(d=>d.id===t.id);if(c>-1){let d=[...l.current];d[c]=t,l.current=[...d];}else l.current.push(t);},[l]),n=useCallback(t=>{l.current=l.current.filter(c=>c.id!==t);},[]),m=async(t,c)=>{r.setIsSubmit(true);let d=c?await r.formControl.trigger():true,i=r.getData();d&&o&&o({...i,...t},{...r});},u={...r,registerItem:a,unregisterItem:n,items:l.current,triggerSubmit:m};return jsx(k.Provider,{value:u,children:e})}var v=new WeakMap;function M(e){return v.has(e)||v.set(e,createStore({})),v.get(e)}function A(e){if(typeof e!="object"||e===null||Array.isArray(e))return e;let r={};for(let[o,l]of Object.entries(e))if(o.includes(".")){let a=o.split("."),n=r;for(let m=0;m<a.length;m++){let u=a[m];m===a.length-1?n[u]=A(l):((!n[u]||typeof n[u]!="object")&&(n[u]={}),n=n[u]);}}else r[o]=A(l);return r}var K=(e,r)=>{e||(e={}),e=A(e);let o=useRef(null),[l,a]=useState(false),n=useForm({...r,reValidateMode:"onSubmit",mode:"all",defaultValues:e}),m=M(n),u=useMemo(()=>generateUUID(),[]),t=i=>i?getFieldValue(mappingUndefinedtoNull(n.getValues()),i):mappingUndefinedtoNull(n.getValues()),d={...n,ref:o,reset:i=>{i?typeof i=="string"?n.resetField(i,{}):typeof i=="object"&&isArray(i,0)&&i.forEach(p=>n.resetField(p)):n.reset();},updateData:i=>{let p=t();n.reset(A({...p,...i}));},getData:t,formControl:n,useFieldArray:i=>useFieldArray({control:n.control,name:i}),useWatch:i=>useWatch({control:n.control,name:i}),isSubmit:l,formId:u,setIsSubmit:a,useSelected:i=>m.useStore(p=>getFieldValue(p,i)),setSelected:m.setState};return [d,d]};var Ie=({onSubmit:e,onChange:r,onInvalid:o,formData:l,controller:a,children:n,...m})=>{l&&(l=A(l));let u=a??K(),[t]=Array.isArray(u)?u:[u],c=useRef(void 0),d=async i=>{i.preventDefault(),i.stopPropagation(),t.setIsSubmit(true);let p=await t.formControl.trigger(),y=t.getData();p?e&&e({...y},{...t}):o&&o(t.formControl.formState.errors);};return useEffect(()=>{l&&diffJson(c.current||{},l)&&(t.formControl.reset(l),c.current=l);},[l,t.formControl.reset]),useEffect(()=>{if(!r)return;let i=t.formControl.watch((p,y)=>r(p,y,t));return ()=>i.unsubscribe()},[]),jsx(Fragment,{children:jsx($,{controller:{...t,disabled:m?.disabled,readOnly:m?.readOnly},onSubmit:e,children:jsx("form",{...m,id:t.formId,ref:t.ref,onSubmit:d,children:n})})})},H=Ie;var z=createContext(void 0);function B(){let e=useContext(z);return e||{}}function O({children:e,...r}){return jsx(z.Provider,{value:r,children:e})}var j=e=>{let r=F(),o=useFieldArray({control:r.control,name:e}),a={formArrayId:useMemo(()=>generateUUID(),[]),...o,...r};return [a,a]};var V=({name:e,defaultData:r,controller:o,children:l})=>{let a=o??j(e),[n]=Array.isArray(a)?a:[a];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,u)=>{let t=`${e}.${u}.`,c={...n,index:u,fieldId:m.id,name:t,countFields:n.fields.length,removeItem:()=>n.remove(u),watchItem:d=>n.watch(d?`${t}${d}`:t.slice(0,-1)),setValueItem:(d,i)=>n.setValue(`${t}${d}`,i),useSelectedItem:d=>n.useSelected(`${t}${d}`)};return jsx(Z.Fragment,{children:jsx(O,{...c,children:renderChildren(l,c)})},m.id)})})};V.displayName="BgsFormArray";var We=V;Z.memo(({children:e,props:r})=>jsx(Fragment,{children:renderChildren(e,r)}));var _=createContext(void 0);function G(){let e=useContext(_);return e||{}}function W({children:e,...r}){return jsx(_.Provider,{value:r,children:e})}var Y=({children:e,...r})=>{let o=F(),l=useMemo(()=>generateUUID(),[]);return jsx(Fragment,{children:jsx(W,{...o,...r,formGroupId:l,children:e})})};Y.displayName="BgsFormGroup";var qe=Y;var ee=createContext(void 0);function re(){let e=useContext(ee);return e||{}}function te({children:e,...r}){return jsx(ee.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 E({validationRules:e,label:r}){let{formControl:o,getData:l}=F(),a=[];return e&&(typeof e=="string"?oe(e,true,r,o,l,{}).forEach(n=>a.push(n)):typeof e=="object"&&Object.keys(e).forEach(n=>{let{validate:m}=a.find(t=>t.validate)||{};if(["minLength","maxLength","min","max","match","diff","regexp","pattern","required","email"].includes(n)){let t=e[n],c="";["match","diff"].includes(n)&&typeof t=="object"&&(t=e[n].dataField,c=e[n].label),t!=null&&oe(n,t,r,o,l,m,c).forEach(d=>a.push(d));}else if(typeof e[n]=="object"){let t=e[n];a.push({validate:{...m,[n]:c=>t.validation(c)||t.message&&(typeof t.message=="string"?t.message:t.message(r))}});}})),Object.assign({},...a)}var oe=(e,r,o,l,a,n,m)=>{let u=[],{validationMessage:t}=re(),{required:c,minLength:d,maxLength:i,min:p,max:y,email:T,match:g,diff:b,pattern:f}=t||{},h={required:s=>{if(!r)return true;let U=c?c(o):`${o} is required`;return typeof s=="string"&&!s.trim()||s==null?U:true},minLength:{value:r,message:d?d(o,r):`${o} must be at least ${r} characters long`},maxLength:{value:r,message:i?i(o,r):`${o} cannot be more than ${r} characters long`},min:{value:Number(r),message:p?p(o,r):`${o} should be at least ${r}`},max:{value:Number(r),message:y?y(o,r):`${o} should be at most ${r}`},regexp:(s="")=>s?new RegExp(r.regexp).test(s)||`${o} ${r.message}`:true,email:(s="")=>!r||!s?true:je.test(s)||(T?T(o):`${o} must be type email`),match:(s="")=>s?s===(a&&a(r))||(g?g(o,m||labelFormatter.changeAll(r)):`${o} must be same with ${m||labelFormatter.changeAll(r)}`):true,diff:(s="")=>s?s!==(a&&a(r))||(b?b(o,m||labelFormatter.changeAll(r)):`${o} must be different with ${m||labelFormatter.changeAll(r)}`):true,pattern:{alphabet:(s="")=>!!s&&new RegExp("^[A-Za-z ]*$").test(s)||(f?.alphabet?f?.alphabet(o):`${o} must be format Alphabet`),alphanumber:(s="")=>!!s&&new RegExp("^[A-Za-z0-9 ]*$").test(s)||(f?.alphanumber?f?.alphanumber(o):`${o} must be format Alphabet or Number`),number:(s="")=>!!s&&new RegExp("^[0-9]*$").test(s)||(f?.number?f?.number(o):`${o} must be format Number`),lowercase:(s="")=>!!s&&new RegExp("^[a-z0-9 ]*$").test(s)||(f?.lowercase?f?.lowercase(o):`${o} must be format Lowercase`),url:(s="")=>!!s&&/^(ftp|http|https):\/\/[^ "]+$/.test(s)||(f?.url?f?.url(o):`${o} must be a valid URL`),uppercase:(s="")=>!!s&&new RegExp("^[A-Z0-9 ]*$").test(s)||(f?.uppercase?f?.uppercase(o):`${o} must be format Uppercase`),mixedcase:(s="")=>!!s&&/[a-z]/.test(s)&&/[A-Z]/.test(s)||(f?.mixedcase?f?.mixedcase(o):`${o} must be mixed case`),specialcharacters:(s="")=>!!s&&/[^a-zA-Z0-9\s]/.test(s)||(f?.specialcharacters?f?.specialcharacters(o):`${o} must contain special characters`)}}[e];if(h){let{validate:s}=u.find(U=>U.validate)||{};typeof h=="function"?u.push({validate:{...s,...n,[e]:h}}):e==="pattern"?u.push({validate:{...s,...n,[`${e}${r}`]:h[r]}}):u.push({[e]:h});}return u};var ct=e=>{let r=useMemo(()=>generateUUID(),[]),{registerItem:o,unregisterItem:l,control:a,disabled:n,readOnly:m,formId:u,setSelected:t,useSelected:c}=F(),{name:d,formId:i,...p}=G(),{name:y,formId:T}=B(),g=useMemo(()=>{let x=e.dataField;return e.disabledHierarchy||(y&&u===T&&(x=`${y}${x}`),d&&u===i&&(x=`${d}${x}`)),x},[y,u,T,e.dataField,d,i,e.disabledHierarchy]),b=useMemo(()=>{if(e.label)return e.label;if(!e.noLabel)return labelFormatter.changeAll(g)},[e.label,e.noLabel,g]);useEffect(()=>(o({id:r,...e,dataField:g,label:b}),()=>{l(r);}),[r,e,g,b]);let f=false;typeof e.disabled=="boolean"?f=e.disabled:typeof p.disabled=="boolean"?f=p.disabled:f=!!n;let R=false;typeof e.readOnly=="boolean"?R=e.readOnly:typeof p.readOnly=="boolean"?R=p.readOnly:R=!!m;let h=false;typeof e.hidden=="boolean"&&(h=e.hidden);let s=e.validationRules;typeof e.required=="boolean"&&(typeof e.validationRules>"u"?s={required:e.required}:typeof e.validationRules=="string"&&e.validationRules==="email"?s={email:true,required:e.required}:typeof e.validationRules=="object"&&(s={...e.validationRules,required:e.required}));let U=f||R||h?{required:false}:E({...e,validationRules:s,label:b}),P=useController({name:g,control:a,disabled:f,defaultValue:e.defaultValue,shouldUnregister:e.shouldUnregister,rules:U}),ne=P.fieldState.invalid,se=P.fieldState.error?.message,ie=useWatch({name:g,control:a,defaultValue:e.defaultValue}),ae=useMemo(()=>debounce(x=>t(de=>({...de,[g]:x||null}))),[t,g]),me=c(g),le=s?.required;return {...e,setSelectedField:ae,label:b,dataField:g,controller:P,invalid:ne,messageError:se,selectedField:me,value:ie,required:le}};var gt=()=>{let{formControl:e,items:r}=F(),o=(a,n,m,u=0)=>{let t=[];if(Array.isArray(m))m.forEach((c,d)=>{let i=Object.entries(c||{}).map(([p,y])=>o(`${a}.${d}.${p}`,`${n}[]${p}`,y,m.length>1?d+1:0)).flat();t=[...t,...i];});else if(m&&typeof m=="object"&&!Array.isArray(m)&&!m?.ref)Object.entries(m).map(([c,d])=>{let i=o(`${a}.${c}`,`${a}.${c}`,d);t=[...t,...i];});else {let c=m?.message||"",d=r.find(i=>i.dataField===n)?.label;t.push({label:`${d||""}${u>0?` ${u}`:""}`,message:c,dataField:a});}return t};return Object.entries(e.formState.errors||{}).map(([a,n])=>o(a,a,n)).flat()};var Ye=(t=>(t.alphabet="alphabet",t.alphaNumber="alphanumber",t.number="number",t.lowercase="lowercase",t.url="url",t.uppercase="uppercase",t.mixedCase="mixedcase",t.specialCharacters="specialcharacters",t))(Ye||{});var bt=H;export{We as BgsFormArray,qe as BgsFormGroup,te as BgsReactFormProvider,Ye as PatternTypeEnum,bt as default,ct as useBgsController,F as useBgsForm,B as useBgsFormArray,j as useBgsFormArrayInit,G as useBgsFormGroup,K as useBgsFormInit,gt as useSummaryValidation};
|
package/package.json
CHANGED