@bgscore/react-form 0.0.14 → 0.0.16

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}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _react = require('react');var _jsxruntime = require('react/jsx-runtime');var O=_react.createContext.call(void 0, void 0);function F(){let r=_react.useContext.call(void 0, O);return r||{}}function U({children:r,controller:e,onSubmit:t}){let i=_react.useRef.call(void 0, []),a=_react.useCallback.call(void 0, o=>{let u=i.current.findIndex(l=>l.id===o.id);if(u>-1){let l=[...i.current];l[u]=o,i.current=[...l]}else i.current.push(o)},[i]),s=_react.useCallback.call(void 0, o=>{i.current=i.current.filter(u=>u.id!==o)},[]),d=async(o,u)=>{e.setIsSubmit(!0);let l=u?await e.formControl.trigger():!0,c=e.getData();l&&t&&t({...c,...o},{...e})},m={...e,registerItem:a,unregisterItem:s,items:i.current,triggerSubmit:d};return _jsxruntime.jsx.call(void 0, O.Provider,{value:m,children:r})}function x(){let r=()=>Math.random()*16%16|0;return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>(e==="x"?r():r()&3|8).toString(16))}function k(r,e){return typeof r=="function"?r(e):r}var h={camelCase:(r="")=>(r=r.split(".").map(e=>(e=e.charAt(0).toUpperCase()+e.slice(1),e)).join(" "),r=r.replace(/([a-z0-9])([A-Z])/g,"$1 $2"),r.charAt(0).toUpperCase()+r.slice(1)),snackCase:(r="")=>{let t=r.replace(/_([a-z])/g,(i,a)=>a.toUpperCase()).replace(/([A-Z])/g," $1");return t=t.charAt(0).toUpperCase()+t.slice(1),t},changeAll:(r="",e=!1)=>{let t="";try{r=_optionalChain([r, 'optionalAccess', _2 => _2.split, 'call', _3 => _3("."), 'access', _4 => _4[_optionalChain([r, 'optionalAccess', _5 => _5.split, 'call', _6 => _6("."), 'optionalAccess', _7 => _7.length])-1]]),r=_optionalChain([r, 'optionalAccess', _8 => _8.split, 'call', _9 => _9("[]"), 'access', _10 => _10[_optionalChain([r, 'optionalAccess', _11 => _11.split, 'call', _12 => _12("[]"), 'optionalAccess', _13 => _13.length])-1]]),t=h.snackCase(h.camelCase(r)),e&&(t=_optionalChain([t, 'optionalAccess', _14 => _14.split, 'call', _15 => _15(" "), 'optionalAccess', _16 => _16.map, 'call', _17 => _17(i=>_optionalChain([i, 'optionalAccess', _18 => _18.length])<=3?_optionalChain([i, 'optionalAccess', _19 => _19.toUpperCase, 'call', _20 => _20()]):i), 'optionalAccess', _21 => _21.join, 'call', _22 => _22(" ")]))}catch (e2){}return t}};function N(r,e){try{return JSON.stringify(r)!==JSON.stringify(e)}catch (e3){return!1}}var A=r=>(Object.keys(r).forEach(e=>{r[e]===void 0&&(r[e]=null)}),r),T=(r,e,t)=>{if(!r)return"";let i=e.replace(/\[(\d+)\]/g,".$1").split("."),a=r;for(let s of i){if(a==null)return t;a=a[s]}return a===void 0?t:a};function L(r,e){let t=!1;return r&&typeof r=="object"&&Array.isArray(r)&&(typeof e=="number"?r.length>e&&(t=!0):t=!0),t}var _reacthookform = require('react-hook-form');var D=(r,e)=>{r||(r={});let t=_react.useRef.call(void 0, null),[i,a]=_react.useState.call(void 0, !1),[s,d]=_react.useState.call(void 0, {}),m=_reacthookform.useForm.call(void 0, {...e,reValidateMode:"onSubmit",mode:"all",defaultValues:r}),o=_react.useMemo.call(void 0, ()=>x(),[]),u=p=>p?T(A(m.getValues()),p):A(m.getValues()),g={...m,ref:t,reset:p=>{p?typeof p=="string"?m.resetField(p,{}):typeof p=="object"&&L(p,0)&&p.forEach(y=>m.resetField(y)):m.reset()},updateData:p=>{let y=u();m.reset({...y,...p})},getData:u,formControl:m,useFieldArray:p=>_reacthookform.useFieldArray.call(void 0, {control:m.control,name:p}),useWatch:p=>_reacthookform.useWatch.call(void 0, {control:m.control,name:p}),isSubmit:i,formId:o,setIsSubmit:a,useSelected:p=>T(s,p),setSelected:d};return[g,g]};var de=({onSubmit:r,onChange:e=()=>{},onInvalid:t=()=>{},formData:i,controller:a,children:s,...d})=>{let m=_nullishCoalesce(a, () => (D())),[o]=Array.isArray(m)?m:[m],u=_react.useRef.call(void 0, void 0),l=async c=>{c.preventDefault(),c.stopPropagation(),o.setIsSubmit(!0);let g=await o.formControl.trigger(),p=o.getData();g?r&&r({...p},{...o}):t(o.formControl.formState.errors)};return _react.useEffect.call(void 0, ()=>{i&&N(u.current||{},i)&&(o.formControl.reset(i),u.current=i)},[i,o.formControl.reset]),_react.useEffect.call(void 0, ()=>{if(!e)return;let c=o.formControl.watch(e);return()=>c.unsubscribe()},[]),_jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:_jsxruntime.jsx.call(void 0, U,{controller:o,onSubmit:r,children:_jsxruntime.jsx.call(void 0, "form",{...d,id:o.formId,ref:o.ref,onSubmit:l,children:s})})})},K=de;var z=_react.createContext.call(void 0, void 0);function Fe(){let r=_react.useContext.call(void 0, z);return r||{}}function P({children:r,...e}){return _jsxruntime.jsx.call(void 0, z.Provider,{value:e,children:r})}var Z=r=>{let e=F(),t=_reacthookform.useFieldArray.call(void 0, {control:e.control,name:r}),a={formArrayId:_react.useMemo.call(void 0, ()=>x(),[]),...t,...e};return[a,a]};var H=({name:r,defaultData:e,controller:t,children:i})=>{let a=_nullishCoalesce(t, () => (Z(r))),[s]=Array.isArray(a)?a:[a];return _react.useEffect.call(void 0, ()=>{typeof e=="boolean"&&e?s.append({}):typeof e=="number"&&e>0?s.append([...Array(e).fill(null).map(()=>({}))]):typeof e=="object"&&e&&s.append(e)},[]),_jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:s.fields.map((d,m)=>{let o=`${r}.${m}.`,u={...s,index:m,name:o,countFields:s.fields.length,removeItem:()=>s.remove(m),watchItem:l=>s.watch(l?`${o}${l}`:o.slice(0,-1)),setValueItem:(l,c)=>s.setValue(`${o}${l}`,c),useSelectedItem:l=>s.useSelected(`${o}${l}`)};return _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:_jsxruntime.jsx.call(void 0, P,{...u,children:k(i,u)},d.id)})})})};H.displayName="BgsFormArray";var Ue=H;var j=_react.createContext.call(void 0, void 0);function Re(){let r=_react.useContext.call(void 0, j);return r||{}}function S({children:r,...e}){return _jsxruntime.jsx.call(void 0, j.Provider,{value:e,children:r})}var J=_react.createContext.call(void 0, void 0);function $(){let r=_react.useContext.call(void 0, J);return r||{}}function w({children:r,...e}){return _jsxruntime.jsx.call(void 0, J.Provider,{value:e,children:r})}var _=_react.createContext.call(void 0, void 0);function Q(){let r=_react.useContext.call(void 0, _);return r||{}}function X({children:r,...e}){return _jsxruntime.jsx.call(void 0, _.Provider,{value:e,children:r})}function B({validationRules:r,label:e}){let{formControl:t,getData:i}=F(),a=[];return r&&(typeof r=="string"?Y(r,!0,e,t,i,{}).forEach(s=>a.push(s)):typeof r=="object"&&Object.keys(r).forEach(s=>{let{validate:d}=a.find(o=>o.validate)||{};if(["minLength","maxLength","min","max","match","diff","regexp","pattern","required","email"].includes(s)){let o=r[s],u="";if(s==="email"&&!o)return;["match","diff"].includes(s)&&typeof o=="object"&&(o=r[s].dataField,u=r[s].label),o!=null&&Y(s,o,e,t,i,d,u).forEach(l=>a.push(l))}else if(typeof r[s]=="object"){let o=r[s];a.push({validate:{...d,[s]:u=>o.validation(u)||o.message&&(typeof o.message=="string"?o.message:o.message(e))}})}})),Object.assign({},...a)}var Y=(r,e,t,i,a,s,d)=>{let m=[],{validationMessage:o}=Q(),{required:u,minLength:l,maxLength:c,min:g,max:p,email:y,match:W,diff:v,pattern:f}=o||{},b={required:{value:!!e,message:u?u(t):`${t} is required`},minLength:{value:e,message:l?l(t,e):`${t} must be at least ${e} characters long`},maxLength:{value:e,message:c?c(t,e):`${t} cannot be more than ${e} characters long`},min:{value:Number(e),message:g?g(t,e):`${t} should be at least ${e}`},max:{value:Number(e),message:p?p(t,e):`${t} should be at most ${e}`},regexp:(n="")=>n?new RegExp(e.regexp).test(n)||`${t} ${e.message}`:!0,email:(n="")=>n?n.match(/^(([^<>()[\]\\.,;:\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,}))$/)||(y?y(t):`${t} must be type email`):!0,match:(n="")=>n?n===(a&&a(e))||(W?W(t,d||h.changeAll(e)):`${t} must be same with ${d||h.changeAll(e)}`):!0,diff:(n="")=>n?n!==(a&&a(e))||(v?v(t,d||h.changeAll(e)):`${t} must be different with ${d||h.changeAll(e)}`):!0,pattern:{alphabet:(n="")=>!!n&&new RegExp("^[A-Za-z ]*$").test(n)||(_optionalChain([f, 'optionalAccess', _23 => _23.alphabet])?_optionalChain([f, 'optionalAccess', _24 => _24.alphabet, 'call', _25 => _25(t)]):`${t} must be format Alphabet`),alphanumber:(n="")=>!!n&&new RegExp("^[A-Za-z0-9 ]*$").test(n)||(_optionalChain([f, 'optionalAccess', _26 => _26.alphanumber])?_optionalChain([f, 'optionalAccess', _27 => _27.alphanumber, 'call', _28 => _28(t)]):`${t} must be format Alphabet or Number`),number:(n="")=>!!n&&new RegExp("^[0-9]*$").test(n)||(_optionalChain([f, 'optionalAccess', _29 => _29.number])?_optionalChain([f, 'optionalAccess', _30 => _30.number, 'call', _31 => _31(t)]):`${t} must be format Number`),lowercase:(n="")=>!!n&&new RegExp("^[a-z0-9 ]*$").test(n)||(_optionalChain([f, 'optionalAccess', _32 => _32.lowercase])?_optionalChain([f, 'optionalAccess', _33 => _33.lowercase, 'call', _34 => _34(t)]):`${t} must be format Lowercase`),url:(n="")=>!!n&&/^(ftp|http|https):\/\/[^ "]+$/.test(n)||(_optionalChain([f, 'optionalAccess', _35 => _35.url])?_optionalChain([f, 'optionalAccess', _36 => _36.url, 'call', _37 => _37(t)]):`${t} must be a valid URL`),uppercase:(n="")=>!!n&&new RegExp("^[A-Z0-9 ]*$").test(n)||(_optionalChain([f, 'optionalAccess', _38 => _38.uppercase])?_optionalChain([f, 'optionalAccess', _39 => _39.uppercase, 'call', _40 => _40(t)]):`${t} must be format Uppercase`),mixedcase:(n="")=>!!n&&/[a-z]/.test(n)&&/[A-Z]/.test(n)||(_optionalChain([f, 'optionalAccess', _41 => _41.mixedcase])?_optionalChain([f, 'optionalAccess', _42 => _42.mixedcase, 'call', _43 => _43(t)]):`${t} must be mixed case`),specialcharacters:(n="")=>!!n&&/[^a-zA-Z0-9\s]/.test(n)||(_optionalChain([f, 'optionalAccess', _44 => _44.specialcharacters])?_optionalChain([f, 'optionalAccess', _45 => _45.specialcharacters, 'call', _46 => _46(t)]):`${t} must contain special characters`)}}[r];if(b){let{validate:n}=m.find(te=>te.validate)||{};typeof b=="function"?m.push({validate:{...n,...s,[r]:b}}):r==="pattern"?m.push({validate:{...n,...s,[`${r}${e}`]:b[e]}}):m.push({[r]:b})}return m};var ke=({children:r,...e})=>{let t=_react.useMemo.call(void 0, ()=>x(),[]),{registerItem:i,unregisterItem:a,formControl:s,disabled:d,readOnly:m}=F(),{name:o,formId:u,...l}=$();_react.useEffect.call(void 0, ()=>(i({id:t,...e}),()=>{a(t)}),[t,e]),!e.label&&!e.noLabel&&(e.label=h.changeAll(e.dataField));let c=!1;typeof e.disabled=="boolean"?c=e.disabled:typeof l.disabled=="boolean"?c=l.disabled:c=!!d;let g=!1;typeof e.readOnly=="boolean"?g=e.readOnly:typeof l.readOnly=="boolean"?g=l.readOnly:g=!!m;let p=!1;return typeof e.hidden=="boolean"&&(p=e.hidden),_jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:s.control&&_jsxruntime.jsx.call(void 0, _reacthookform.Controller,{name:e.dataField,control:s.control,rules:c||g||p?{required:!1}:B(e),render:y=>_jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:_jsxruntime.jsx.call(void 0, S,{...e,controller:y,children:r})})})})},Ne= exports.BgsController =ke;var re=({children:r,...e})=>{let t=F(),i=_react.useMemo.call(void 0, ()=>x(),[]);return _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:_jsxruntime.jsx.call(void 0, w,{...t,...e,formGroupId:i,children:r})})};re.displayName="BgsFormGroup";var Ee=re;var Me=(o=>(o.alphabet="alphabet",o.alphaNumber="alphanumber",o.number="number",o.lowercase="lowercase",o.url="url",o.uppercase="uppercase",o.mixedCase="mixedcase",o.specialCharacters="specialcharacters",o))(Me||{});var st=K;exports.BgsArrayForm = Ue; exports.BgsController = Ne; exports.BgsGroupForm = Ee; exports.BgsReactFormProvider = X; exports.PatternTypeEnum = Me; exports.default = st; exports.useBgsArrayForm = Fe; exports.useBgsControllerForm = Re; exports.useBgsForm = F; exports.useBgsGroupForm = $; exports.useFormArrayInit = Z; exports.useFormInit = D;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _react = require('react');var _jsxruntime = require('react/jsx-runtime');var G=_react.createContext.call(void 0, void 0);function F(){let r=_react.useContext.call(void 0, G);return r||{}}function A({children:r,controller:e,onSubmit:t}){let i=_react.useRef.call(void 0, []),a=_react.useCallback.call(void 0, o=>{let u=i.current.findIndex(l=>l.id===o.id);if(u>-1){let l=[...i.current];l[u]=o,i.current=[...l]}else i.current.push(o)},[i]),s=_react.useCallback.call(void 0, o=>{i.current=i.current.filter(u=>u.id!==o)},[]),d=async(o,u)=>{e.setIsSubmit(!0);let l=u?await e.formControl.trigger():!0,c=e.getData();l&&t&&t({...c,...o},{...e})},m={...e,registerItem:a,unregisterItem:s,items:i.current,triggerSubmit:d};return _jsxruntime.jsx.call(void 0, G.Provider,{value:m,children:r})}function x(){let r=()=>Math.random()*16%16|0;return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>(e==="x"?r():r()&3|8).toString(16))}function k(r,e){return typeof r=="function"?r(e):r}var h={camelCase:(r="")=>(r=r.split(".").map(e=>(e=e.charAt(0).toUpperCase()+e.slice(1),e)).join(" "),r=r.replace(/([a-z0-9])([A-Z])/g,"$1 $2"),r.charAt(0).toUpperCase()+r.slice(1)),snackCase:(r="")=>{let t=r.replace(/_([a-z])/g,(i,a)=>a.toUpperCase()).replace(/([A-Z])/g," $1");return t=t.charAt(0).toUpperCase()+t.slice(1),t},changeAll:(r="",e=!1)=>{let t="";try{r=_optionalChain([r, 'optionalAccess', _2 => _2.split, 'call', _3 => _3("."), 'access', _4 => _4[_optionalChain([r, 'optionalAccess', _5 => _5.split, 'call', _6 => _6("."), 'optionalAccess', _7 => _7.length])-1]]),r=_optionalChain([r, 'optionalAccess', _8 => _8.split, 'call', _9 => _9("[]"), 'access', _10 => _10[_optionalChain([r, 'optionalAccess', _11 => _11.split, 'call', _12 => _12("[]"), 'optionalAccess', _13 => _13.length])-1]]),t=h.snackCase(h.camelCase(r)),e&&(t=_optionalChain([t, 'optionalAccess', _14 => _14.split, 'call', _15 => _15(" "), 'optionalAccess', _16 => _16.map, 'call', _17 => _17(i=>_optionalChain([i, 'optionalAccess', _18 => _18.length])<=3?_optionalChain([i, 'optionalAccess', _19 => _19.toUpperCase, 'call', _20 => _20()]):i), 'optionalAccess', _21 => _21.join, 'call', _22 => _22(" ")]))}catch (e2){}return t}};function N(r,e){try{return JSON.stringify(r)!==JSON.stringify(e)}catch (e3){return!1}}var R=r=>(Object.keys(r).forEach(e=>{r[e]===void 0&&(r[e]=null)}),r),C= exports.getFieldValue =(r,e,t)=>{if(!r)return"";let i=e.replace(/\[(\d+)\]/g,".$1").split("."),a=r;for(let s of i){if(a==null)return t;a=a[s]}return a===void 0?t:a};function L(r,e){let t=!1;return r&&typeof r=="object"&&Array.isArray(r)&&(typeof e=="number"?r.length>e&&(t=!0):t=!0),t}var _reacthookform = require('react-hook-form');var D=(r,e)=>{r||(r={});let t=_react.useRef.call(void 0, null),[i,a]=_react.useState.call(void 0, !1),[s,d]=_react.useState.call(void 0, {}),m=_reacthookform.useForm.call(void 0, {...e,reValidateMode:"onSubmit",mode:"all",defaultValues:r}),o=_react.useMemo.call(void 0, ()=>x(),[]),u=p=>p?C(R(m.getValues()),p):R(m.getValues()),g={...m,ref:t,reset:p=>{p?typeof p=="string"?m.resetField(p,{}):typeof p=="object"&&L(p,0)&&p.forEach(y=>m.resetField(y)):m.reset()},updateData:p=>{let y=u();m.reset({...y,...p})},getData:u,formControl:m,useFieldArray:p=>_reacthookform.useFieldArray.call(void 0, {control:m.control,name:p}),useWatch:p=>_reacthookform.useWatch.call(void 0, {control:m.control,name:p}),isSubmit:i,formId:o,setIsSubmit:a,useSelected:p=>C(s,p),setSelected:d,selected:s};return[g,g]};var de=({onSubmit:r,onChange:e=()=>{},onInvalid:t=()=>{},formData:i,controller:a,children:s,...d})=>{let m=_nullishCoalesce(a, () => (D())),[o]=Array.isArray(m)?m:[m],u=_react.useRef.call(void 0, void 0),l=async c=>{c.preventDefault(),c.stopPropagation(),o.setIsSubmit(!0);let g=await o.formControl.trigger(),p=o.getData();g?r&&r({...p},{...o}):t(o.formControl.formState.errors)};return _react.useEffect.call(void 0, ()=>{i&&N(u.current||{},i)&&(o.formControl.reset(i),u.current=i)},[i,o.formControl.reset]),_react.useEffect.call(void 0, ()=>{if(!e)return;let c=o.formControl.watch(e);return()=>c.unsubscribe()},[]),_jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:_jsxruntime.jsx.call(void 0, A,{controller:o,onSubmit:r,children:_jsxruntime.jsx.call(void 0, "form",{...d,id:o.formId,ref:o.ref,onSubmit:l,children:s})})})},K=de;var z=_react.createContext.call(void 0, void 0);function Fe(){let r=_react.useContext.call(void 0, z);return r||{}}function P({children:r,...e}){return _jsxruntime.jsx.call(void 0, z.Provider,{value:e,children:r})}var Z=r=>{let e=F(),t=_reacthookform.useFieldArray.call(void 0, {control:e.control,name:r}),a={formArrayId:_react.useMemo.call(void 0, ()=>x(),[]),...t,...e};return[a,a]};var H=({name:r,defaultData:e,controller:t,children:i})=>{let a=_nullishCoalesce(t, () => (Z(r))),[s]=Array.isArray(a)?a:[a];return _react.useEffect.call(void 0, ()=>{typeof e=="boolean"&&e?s.append({}):typeof e=="number"&&e>0?s.append([...Array(e).fill(null).map(()=>({}))]):typeof e=="object"&&e&&s.append(e)},[]),_jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:s.fields.map((d,m)=>{let o=`${r}.${m}.`,u={...s,index:m,name:o,countFields:s.fields.length,removeItem:()=>s.remove(m),watchItem:l=>s.watch(l?`${o}${l}`:o.slice(0,-1)),setValueItem:(l,c)=>s.setValue(`${o}${l}`,c),useSelectedItem:l=>s.useSelected(`${o}${l}`)};return _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:_jsxruntime.jsx.call(void 0, P,{...u,children:k(i,u)},d.id)})})})};H.displayName="BgsFormArray";var Ue=H;var j=_react.createContext.call(void 0, void 0);function Te(){let r=_react.useContext.call(void 0, j);return r||{}}function S({children:r,...e}){return _jsxruntime.jsx.call(void 0, j.Provider,{value:e,children:r})}var J=_react.createContext.call(void 0, void 0);function $(){let r=_react.useContext.call(void 0, J);return r||{}}function w({children:r,...e}){return _jsxruntime.jsx.call(void 0, J.Provider,{value:e,children:r})}var _=_react.createContext.call(void 0, void 0);function Q(){let r=_react.useContext.call(void 0, _);return r||{}}function X({children:r,...e}){return _jsxruntime.jsx.call(void 0, _.Provider,{value:e,children:r})}function B({validationRules:r,label:e}){let{formControl:t,getData:i}=F(),a=[];return r&&(typeof r=="string"?Y(r,!0,e,t,i,{}).forEach(s=>a.push(s)):typeof r=="object"&&Object.keys(r).forEach(s=>{let{validate:d}=a.find(o=>o.validate)||{};if(["minLength","maxLength","min","max","match","diff","regexp","pattern","required","email"].includes(s)){let o=r[s],u="";if(s==="email"&&!o)return;["match","diff"].includes(s)&&typeof o=="object"&&(o=r[s].dataField,u=r[s].label),o!=null&&Y(s,o,e,t,i,d,u).forEach(l=>a.push(l))}else if(typeof r[s]=="object"){let o=r[s];a.push({validate:{...d,[s]:u=>o.validation(u)||o.message&&(typeof o.message=="string"?o.message:o.message(e))}})}})),Object.assign({},...a)}var Y=(r,e,t,i,a,s,d)=>{let m=[],{validationMessage:o}=Q(),{required:u,minLength:l,maxLength:c,min:g,max:p,email:y,match:W,diff:v,pattern:f}=o||{},b={required:{value:!!e,message:u?u(t):`${t} is required`},minLength:{value:e,message:l?l(t,e):`${t} must be at least ${e} characters long`},maxLength:{value:e,message:c?c(t,e):`${t} cannot be more than ${e} characters long`},min:{value:Number(e),message:g?g(t,e):`${t} should be at least ${e}`},max:{value:Number(e),message:p?p(t,e):`${t} should be at most ${e}`},regexp:(n="")=>n?new RegExp(e.regexp).test(n)||`${t} ${e.message}`:!0,email:(n="")=>n?n.match(/^(([^<>()[\]\\.,;:\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,}))$/)||(y?y(t):`${t} must be type email`):!0,match:(n="")=>n?n===(a&&a(e))||(W?W(t,d||h.changeAll(e)):`${t} must be same with ${d||h.changeAll(e)}`):!0,diff:(n="")=>n?n!==(a&&a(e))||(v?v(t,d||h.changeAll(e)):`${t} must be different with ${d||h.changeAll(e)}`):!0,pattern:{alphabet:(n="")=>!!n&&new RegExp("^[A-Za-z ]*$").test(n)||(_optionalChain([f, 'optionalAccess', _23 => _23.alphabet])?_optionalChain([f, 'optionalAccess', _24 => _24.alphabet, 'call', _25 => _25(t)]):`${t} must be format Alphabet`),alphanumber:(n="")=>!!n&&new RegExp("^[A-Za-z0-9 ]*$").test(n)||(_optionalChain([f, 'optionalAccess', _26 => _26.alphanumber])?_optionalChain([f, 'optionalAccess', _27 => _27.alphanumber, 'call', _28 => _28(t)]):`${t} must be format Alphabet or Number`),number:(n="")=>!!n&&new RegExp("^[0-9]*$").test(n)||(_optionalChain([f, 'optionalAccess', _29 => _29.number])?_optionalChain([f, 'optionalAccess', _30 => _30.number, 'call', _31 => _31(t)]):`${t} must be format Number`),lowercase:(n="")=>!!n&&new RegExp("^[a-z0-9 ]*$").test(n)||(_optionalChain([f, 'optionalAccess', _32 => _32.lowercase])?_optionalChain([f, 'optionalAccess', _33 => _33.lowercase, 'call', _34 => _34(t)]):`${t} must be format Lowercase`),url:(n="")=>!!n&&/^(ftp|http|https):\/\/[^ "]+$/.test(n)||(_optionalChain([f, 'optionalAccess', _35 => _35.url])?_optionalChain([f, 'optionalAccess', _36 => _36.url, 'call', _37 => _37(t)]):`${t} must be a valid URL`),uppercase:(n="")=>!!n&&new RegExp("^[A-Z0-9 ]*$").test(n)||(_optionalChain([f, 'optionalAccess', _38 => _38.uppercase])?_optionalChain([f, 'optionalAccess', _39 => _39.uppercase, 'call', _40 => _40(t)]):`${t} must be format Uppercase`),mixedcase:(n="")=>!!n&&/[a-z]/.test(n)&&/[A-Z]/.test(n)||(_optionalChain([f, 'optionalAccess', _41 => _41.mixedcase])?_optionalChain([f, 'optionalAccess', _42 => _42.mixedcase, 'call', _43 => _43(t)]):`${t} must be mixed case`),specialcharacters:(n="")=>!!n&&/[^a-zA-Z0-9\s]/.test(n)||(_optionalChain([f, 'optionalAccess', _44 => _44.specialcharacters])?_optionalChain([f, 'optionalAccess', _45 => _45.specialcharacters, 'call', _46 => _46(t)]):`${t} must contain special characters`)}}[r];if(b){let{validate:n}=m.find(te=>te.validate)||{};typeof b=="function"?m.push({validate:{...n,...s,[r]:b}}):r==="pattern"?m.push({validate:{...n,...s,[`${r}${e}`]:b[e]}}):m.push({[r]:b})}return m};var ke=({children:r,...e})=>{let t=_react.useMemo.call(void 0, ()=>x(),[]),{registerItem:i,unregisterItem:a,formControl:s,disabled:d,readOnly:m}=F(),{name:o,formId:u,...l}=$();_react.useEffect.call(void 0, ()=>(i({id:t,...e}),()=>{a(t)}),[t,e]),!e.label&&!e.noLabel&&(e.label=h.changeAll(e.dataField));let c=!1;typeof e.disabled=="boolean"?c=e.disabled:typeof l.disabled=="boolean"?c=l.disabled:c=!!d;let g=!1;typeof e.readOnly=="boolean"?g=e.readOnly:typeof l.readOnly=="boolean"?g=l.readOnly:g=!!m;let p=!1;return typeof e.hidden=="boolean"&&(p=e.hidden),_jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:s.control&&_jsxruntime.jsx.call(void 0, _reacthookform.Controller,{name:e.dataField,control:s.control,rules:c||g||p?{required:!1}:B(e),render:y=>_jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:_jsxruntime.jsx.call(void 0, S,{...e,controller:y,children:r})})})})},Ne= exports.BgsController =ke;var re=({children:r,...e})=>{let t=F(),i=_react.useMemo.call(void 0, ()=>x(),[]);return _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:_jsxruntime.jsx.call(void 0, w,{...t,...e,formGroupId:i,children:r})})};re.displayName="BgsFormGroup";var Ee=re;var Me=(o=>(o.alphabet="alphabet",o.alphaNumber="alphanumber",o.number="number",o.lowercase="lowercase",o.url="url",o.uppercase="uppercase",o.mixedCase="mixedcase",o.specialCharacters="specialcharacters",o))(Me||{});var st=K;exports.BgsArrayForm = Ue; exports.BgsController = Ne; exports.BgsGroupForm = Ee; exports.BgsReactFormProvider = X; exports.PatternTypeEnum = Me; exports.default = st; exports.getFieldValue = C; exports.useBgsArrayForm = Fe; exports.useBgsControllerForm = Te; exports.useBgsForm = F; exports.useBgsGroupForm = $; exports.useFormArrayInit = Z; exports.useFormInit = D;
package/dist/index.d.cts CHANGED
@@ -48,8 +48,9 @@ interface UseFormInitReturn<T = unknown> extends FormDefaultProps, Omit<UseFormR
48
48
  formId: string;
49
49
  name?: string;
50
50
  ref: React.RefObject<HTMLFormElement | null>;
51
- setSelected: React.Dispatch<SelectedNested<T>>;
51
+ setSelected: React.Dispatch<React.SetStateAction<Partial<Record<NestedKeyOf<T>, any>>>>;
52
52
  useSelected: UseSelected<T>;
53
+ selected: Partial<Record<NestedKeyOf<T>, any>>;
53
54
  }
54
55
  interface FormArrayProps<T = unknown> {
55
56
  name: string;
@@ -196,4 +197,6 @@ declare const useFormInit: <T = unknown>(defaultValues?: Partial<T> | undefined,
196
197
 
197
198
  declare const useFormArrayInit: <T = unknown>(name: string) => UseFormArrayInitReturn<T>[];
198
199
 
199
- export { FormArray as BgsArrayForm, Controller as BgsController, FormGroup as BgsGroupForm, BgsReactFormProvider, type ControllerProps, type FormArrayProps, type FormGroupProps, type FormProps, 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, useFormArray as useBgsArrayForm, useController as useBgsControllerForm, useForm as useBgsForm, useFormGroup as useBgsGroupForm, useFormArrayInit, useFormInit };
200
+ declare const getFieldValue: (obj: any, path: string, defaultValue?: any) => any;
201
+
202
+ export { FormArray as BgsArrayForm, Controller as BgsController, FormGroup as BgsGroupForm, BgsReactFormProvider, type ControllerProps, type FormArrayProps, type FormGroupProps, type FormProps, 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, getFieldValue, useFormArray as useBgsArrayForm, useController as useBgsControllerForm, useForm as useBgsForm, useFormGroup as useBgsGroupForm, useFormArrayInit, useFormInit };
package/dist/index.d.ts CHANGED
@@ -48,8 +48,9 @@ interface UseFormInitReturn<T = unknown> extends FormDefaultProps, Omit<UseFormR
48
48
  formId: string;
49
49
  name?: string;
50
50
  ref: React.RefObject<HTMLFormElement | null>;
51
- setSelected: React.Dispatch<SelectedNested<T>>;
51
+ setSelected: React.Dispatch<React.SetStateAction<Partial<Record<NestedKeyOf<T>, any>>>>;
52
52
  useSelected: UseSelected<T>;
53
+ selected: Partial<Record<NestedKeyOf<T>, any>>;
53
54
  }
54
55
  interface FormArrayProps<T = unknown> {
55
56
  name: string;
@@ -196,4 +197,6 @@ declare const useFormInit: <T = unknown>(defaultValues?: Partial<T> | undefined,
196
197
 
197
198
  declare const useFormArrayInit: <T = unknown>(name: string) => UseFormArrayInitReturn<T>[];
198
199
 
199
- export { FormArray as BgsArrayForm, Controller as BgsController, FormGroup as BgsGroupForm, BgsReactFormProvider, type ControllerProps, type FormArrayProps, type FormGroupProps, type FormProps, 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, useFormArray as useBgsArrayForm, useController as useBgsControllerForm, useForm as useBgsForm, useFormGroup as useBgsGroupForm, useFormArrayInit, useFormInit };
200
+ declare const getFieldValue: (obj: any, path: string, defaultValue?: any) => any;
201
+
202
+ export { FormArray as BgsArrayForm, Controller as BgsController, FormGroup as BgsGroupForm, BgsReactFormProvider, type ControllerProps, type FormArrayProps, type FormGroupProps, type FormProps, 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, getFieldValue, useFormArray as useBgsArrayForm, useController as useBgsControllerForm, useForm as useBgsForm, useFormGroup as useBgsGroupForm, useFormArrayInit, useFormInit };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{useEffect as M,useRef as ce}from"react";import{createContext as oe,useCallback as G,useContext as ne,useRef as se}from"react";import{jsx as ie}from"react/jsx-runtime";var O=oe(void 0);function F(){let r=ne(O);return r||{}}function U({children:r,controller:e,onSubmit:t}){let i=se([]),a=G(o=>{let u=i.current.findIndex(l=>l.id===o.id);if(u>-1){let l=[...i.current];l[u]=o,i.current=[...l]}else i.current.push(o)},[i]),s=G(o=>{i.current=i.current.filter(u=>u.id!==o)},[]),d=async(o,u)=>{e.setIsSubmit(!0);let l=u?await e.formControl.trigger():!0,c=e.getData();l&&t&&t({...c,...o},{...e})},m={...e,registerItem:a,unregisterItem:s,items:i.current,triggerSubmit:d};return ie(O.Provider,{value:m,children:r})}function x(){let r=()=>Math.random()*16%16|0;return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>(e==="x"?r():r()&3|8).toString(16))}function k(r,e){return typeof r=="function"?r(e):r}var h={camelCase:(r="")=>(r=r.split(".").map(e=>(e=e.charAt(0).toUpperCase()+e.slice(1),e)).join(" "),r=r.replace(/([a-z0-9])([A-Z])/g,"$1 $2"),r.charAt(0).toUpperCase()+r.slice(1)),snackCase:(r="")=>{let t=r.replace(/_([a-z])/g,(i,a)=>a.toUpperCase()).replace(/([A-Z])/g," $1");return t=t.charAt(0).toUpperCase()+t.slice(1),t},changeAll:(r="",e=!1)=>{let t="";try{r=r?.split(".")[r?.split(".")?.length-1],r=r?.split("[]")[r?.split("[]")?.length-1],t=h.snackCase(h.camelCase(r)),e&&(t=t?.split(" ")?.map(i=>i?.length<=3?i?.toUpperCase():i)?.join(" "))}catch{}return t}};function N(r,e){try{return JSON.stringify(r)!==JSON.stringify(e)}catch{return!1}}var A=r=>(Object.keys(r).forEach(e=>{r[e]===void 0&&(r[e]=null)}),r),T=(r,e,t)=>{if(!r)return"";let i=e.replace(/\[(\d+)\]/g,".$1").split("."),a=r;for(let s of i){if(a==null)return t;a=a[s]}return a===void 0?t:a};function L(r,e){let t=!1;return r&&typeof r=="object"&&Array.isArray(r)&&(typeof e=="number"?r.length>e&&(t=!0):t=!0),t}import{useFieldArray as ae,useForm as me,useWatch as le}from"react-hook-form";import{useMemo as pe,useRef as ue,useState as E}from"react";var D=(r,e)=>{r||(r={});let t=ue(null),[i,a]=E(!1),[s,d]=E({}),m=me({...e,reValidateMode:"onSubmit",mode:"all",defaultValues:r}),o=pe(()=>x(),[]),u=p=>p?T(A(m.getValues()),p):A(m.getValues()),g={...m,ref:t,reset:p=>{p?typeof p=="string"?m.resetField(p,{}):typeof p=="object"&&L(p,0)&&p.forEach(y=>m.resetField(y)):m.reset()},updateData:p=>{let y=u();m.reset({...y,...p})},getData:u,formControl:m,useFieldArray:p=>ae({control:m.control,name:p}),useWatch:p=>le({control:m.control,name:p}),isSubmit:i,formId:o,setIsSubmit:a,useSelected:p=>T(s,p),setSelected:d};return[g,g]};import{Fragment as fe,jsx as R}from"react/jsx-runtime";var de=({onSubmit:r,onChange:e=()=>{},onInvalid:t=()=>{},formData:i,controller:a,children:s,...d})=>{let m=a??D(),[o]=Array.isArray(m)?m:[m],u=ce(void 0),l=async c=>{c.preventDefault(),c.stopPropagation(),o.setIsSubmit(!0);let g=await o.formControl.trigger(),p=o.getData();g?r&&r({...p},{...o}):t(o.formControl.formState.errors)};return M(()=>{i&&N(u.current||{},i)&&(o.formControl.reset(i),u.current=i)},[i,o.formControl.reset]),M(()=>{if(!e)return;let c=o.formControl.watch(e);return()=>c.unsubscribe()},[]),R(fe,{children:R(U,{controller:o,onSubmit:r,children:R("form",{...d,id:o.formId,ref:o.ref,onSubmit:l,children:s})})})},K=de;import{useEffect as Ce}from"react";import{createContext as ge,useContext as ye}from"react";import{jsx as he}from"react/jsx-runtime";var z=ge(void 0);function Fe(){let r=ye(z);return r||{}}function P({children:r,...e}){return he(z.Provider,{value:e,children:r})}import{useFieldArray as xe}from"react-hook-form";import{useMemo as be}from"react";var Z=r=>{let e=F(),t=xe({control:e.control,name:r}),a={formArrayId:be(()=>x(),[]),...t,...e};return[a,a]};import{Fragment as q,jsx as I}from"react/jsx-runtime";var H=({name:r,defaultData:e,controller:t,children:i})=>{let a=t??Z(r),[s]=Array.isArray(a)?a:[a];return Ce(()=>{typeof e=="boolean"&&e?s.append({}):typeof e=="number"&&e>0?s.append([...Array(e).fill(null).map(()=>({}))]):typeof e=="object"&&e&&s.append(e)},[]),I(q,{children:s.fields.map((d,m)=>{let o=`${r}.${m}.`,u={...s,index:m,name:o,countFields:s.fields.length,removeItem:()=>s.remove(m),watchItem:l=>s.watch(l?`${o}${l}`:o.slice(0,-1)),setValueItem:(l,c)=>s.setValue(`${o}${l}`,c),useSelectedItem:l=>s.useSelected(`${o}${l}`)};return I(q,{children:I(P,{...u,children:k(i,u)},d.id)})})})};H.displayName="BgsFormArray";var Ue=H;import{useEffect as ve,useMemo as Ge}from"react";import{createContext as Ae,useContext as Te}from"react";import{jsx as Pe}from"react/jsx-runtime";var j=Ae(void 0);function Re(){let r=Te(j);return r||{}}function S({children:r,...e}){return Pe(j.Provider,{value:e,children:r})}import{Controller as Oe}from"react-hook-form";import{createContext as Ie,useContext as Se}from"react";import{jsx as $e}from"react/jsx-runtime";var J=Ie(void 0);function $(){let r=Se(J);return r||{}}function w({children:r,...e}){return $e(J.Provider,{value:e,children:r})}import{createContext as we,useContext as Be}from"react";import{jsx as We}from"react/jsx-runtime";var _=we(void 0);function Q(){let r=Be(_);return r||{}}function X({children:r,...e}){return We(_.Provider,{value:e,children:r})}function B({validationRules:r,label:e}){let{formControl:t,getData:i}=F(),a=[];return r&&(typeof r=="string"?Y(r,!0,e,t,i,{}).forEach(s=>a.push(s)):typeof r=="object"&&Object.keys(r).forEach(s=>{let{validate:d}=a.find(o=>o.validate)||{};if(["minLength","maxLength","min","max","match","diff","regexp","pattern","required","email"].includes(s)){let o=r[s],u="";if(s==="email"&&!o)return;["match","diff"].includes(s)&&typeof o=="object"&&(o=r[s].dataField,u=r[s].label),o!=null&&Y(s,o,e,t,i,d,u).forEach(l=>a.push(l))}else if(typeof r[s]=="object"){let o=r[s];a.push({validate:{...d,[s]:u=>o.validation(u)||o.message&&(typeof o.message=="string"?o.message:o.message(e))}})}})),Object.assign({},...a)}var Y=(r,e,t,i,a,s,d)=>{let m=[],{validationMessage:o}=Q(),{required:u,minLength:l,maxLength:c,min:g,max:p,email:y,match:W,diff:v,pattern:f}=o||{},b={required:{value:!!e,message:u?u(t):`${t} is required`},minLength:{value:e,message:l?l(t,e):`${t} must be at least ${e} characters long`},maxLength:{value:e,message:c?c(t,e):`${t} cannot be more than ${e} characters long`},min:{value:Number(e),message:g?g(t,e):`${t} should be at least ${e}`},max:{value:Number(e),message:p?p(t,e):`${t} should be at most ${e}`},regexp:(n="")=>n?new RegExp(e.regexp).test(n)||`${t} ${e.message}`:!0,email:(n="")=>n?n.match(/^(([^<>()[\]\\.,;:\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,}))$/)||(y?y(t):`${t} must be type email`):!0,match:(n="")=>n?n===(a&&a(e))||(W?W(t,d||h.changeAll(e)):`${t} must be same with ${d||h.changeAll(e)}`):!0,diff:(n="")=>n?n!==(a&&a(e))||(v?v(t,d||h.changeAll(e)):`${t} must be different with ${d||h.changeAll(e)}`):!0,pattern:{alphabet:(n="")=>!!n&&new RegExp("^[A-Za-z ]*$").test(n)||(f?.alphabet?f?.alphabet(t):`${t} must be format Alphabet`),alphanumber:(n="")=>!!n&&new RegExp("^[A-Za-z0-9 ]*$").test(n)||(f?.alphanumber?f?.alphanumber(t):`${t} must be format Alphabet or Number`),number:(n="")=>!!n&&new RegExp("^[0-9]*$").test(n)||(f?.number?f?.number(t):`${t} must be format Number`),lowercase:(n="")=>!!n&&new RegExp("^[a-z0-9 ]*$").test(n)||(f?.lowercase?f?.lowercase(t):`${t} must be format Lowercase`),url:(n="")=>!!n&&/^(ftp|http|https):\/\/[^ "]+$/.test(n)||(f?.url?f?.url(t):`${t} must be a valid URL`),uppercase:(n="")=>!!n&&new RegExp("^[A-Z0-9 ]*$").test(n)||(f?.uppercase?f?.uppercase(t):`${t} must be format Uppercase`),mixedcase:(n="")=>!!n&&/[a-z]/.test(n)&&/[A-Z]/.test(n)||(f?.mixedcase?f?.mixedcase(t):`${t} must be mixed case`),specialcharacters:(n="")=>!!n&&/[^a-zA-Z0-9\s]/.test(n)||(f?.specialcharacters?f?.specialcharacters(t):`${t} must contain special characters`)}}[r];if(b){let{validate:n}=m.find(te=>te.validate)||{};typeof b=="function"?m.push({validate:{...n,...s,[r]:b}}):r==="pattern"?m.push({validate:{...n,...s,[`${r}${e}`]:b[e]}}):m.push({[r]:b})}return m};import{Fragment as V,jsx as C}from"react/jsx-runtime";var ke=({children:r,...e})=>{let t=Ge(()=>x(),[]),{registerItem:i,unregisterItem:a,formControl:s,disabled:d,readOnly:m}=F(),{name:o,formId:u,...l}=$();ve(()=>(i({id:t,...e}),()=>{a(t)}),[t,e]),!e.label&&!e.noLabel&&(e.label=h.changeAll(e.dataField));let c=!1;typeof e.disabled=="boolean"?c=e.disabled:typeof l.disabled=="boolean"?c=l.disabled:c=!!d;let g=!1;typeof e.readOnly=="boolean"?g=e.readOnly:typeof l.readOnly=="boolean"?g=l.readOnly:g=!!m;let p=!1;return typeof e.hidden=="boolean"&&(p=e.hidden),C(V,{children:s.control&&C(Oe,{name:e.dataField,control:s.control,rules:c||g||p?{required:!1}:B(e),render:y=>C(V,{children:C(S,{...e,controller:y,children:r})})})})},Ne=ke;import{useMemo as Le}from"react";import{Fragment as De,jsx as ee}from"react/jsx-runtime";var re=({children:r,...e})=>{let t=F(),i=Le(()=>x(),[]);return ee(De,{children:ee(w,{...t,...e,formGroupId:i,children:r})})};re.displayName="BgsFormGroup";var Ee=re;var Me=(o=>(o.alphabet="alphabet",o.alphaNumber="alphanumber",o.number="number",o.lowercase="lowercase",o.url="url",o.uppercase="uppercase",o.mixedCase="mixedcase",o.specialCharacters="specialcharacters",o))(Me||{});var st=K;export{Ue as BgsArrayForm,Ne as BgsController,Ee as BgsGroupForm,X as BgsReactFormProvider,Me as PatternTypeEnum,st as default,Fe as useBgsArrayForm,Re as useBgsControllerForm,F as useBgsForm,$ as useBgsGroupForm,Z as useFormArrayInit,D as useFormInit};
1
+ import{useEffect as M,useRef as ce}from"react";import{createContext as oe,useCallback as O,useContext as ne,useRef as se}from"react";import{jsx as ie}from"react/jsx-runtime";var G=oe(void 0);function F(){let r=ne(G);return r||{}}function A({children:r,controller:e,onSubmit:t}){let i=se([]),a=O(o=>{let u=i.current.findIndex(l=>l.id===o.id);if(u>-1){let l=[...i.current];l[u]=o,i.current=[...l]}else i.current.push(o)},[i]),s=O(o=>{i.current=i.current.filter(u=>u.id!==o)},[]),d=async(o,u)=>{e.setIsSubmit(!0);let l=u?await e.formControl.trigger():!0,c=e.getData();l&&t&&t({...c,...o},{...e})},m={...e,registerItem:a,unregisterItem:s,items:i.current,triggerSubmit:d};return ie(G.Provider,{value:m,children:r})}function x(){let r=()=>Math.random()*16%16|0;return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>(e==="x"?r():r()&3|8).toString(16))}function k(r,e){return typeof r=="function"?r(e):r}var h={camelCase:(r="")=>(r=r.split(".").map(e=>(e=e.charAt(0).toUpperCase()+e.slice(1),e)).join(" "),r=r.replace(/([a-z0-9])([A-Z])/g,"$1 $2"),r.charAt(0).toUpperCase()+r.slice(1)),snackCase:(r="")=>{let t=r.replace(/_([a-z])/g,(i,a)=>a.toUpperCase()).replace(/([A-Z])/g," $1");return t=t.charAt(0).toUpperCase()+t.slice(1),t},changeAll:(r="",e=!1)=>{let t="";try{r=r?.split(".")[r?.split(".")?.length-1],r=r?.split("[]")[r?.split("[]")?.length-1],t=h.snackCase(h.camelCase(r)),e&&(t=t?.split(" ")?.map(i=>i?.length<=3?i?.toUpperCase():i)?.join(" "))}catch{}return t}};function N(r,e){try{return JSON.stringify(r)!==JSON.stringify(e)}catch{return!1}}var R=r=>(Object.keys(r).forEach(e=>{r[e]===void 0&&(r[e]=null)}),r),C=(r,e,t)=>{if(!r)return"";let i=e.replace(/\[(\d+)\]/g,".$1").split("."),a=r;for(let s of i){if(a==null)return t;a=a[s]}return a===void 0?t:a};function L(r,e){let t=!1;return r&&typeof r=="object"&&Array.isArray(r)&&(typeof e=="number"?r.length>e&&(t=!0):t=!0),t}import{useFieldArray as ae,useForm as me,useWatch as le}from"react-hook-form";import{useMemo as pe,useRef as ue,useState as E}from"react";var D=(r,e)=>{r||(r={});let t=ue(null),[i,a]=E(!1),[s,d]=E({}),m=me({...e,reValidateMode:"onSubmit",mode:"all",defaultValues:r}),o=pe(()=>x(),[]),u=p=>p?C(R(m.getValues()),p):R(m.getValues()),g={...m,ref:t,reset:p=>{p?typeof p=="string"?m.resetField(p,{}):typeof p=="object"&&L(p,0)&&p.forEach(y=>m.resetField(y)):m.reset()},updateData:p=>{let y=u();m.reset({...y,...p})},getData:u,formControl:m,useFieldArray:p=>ae({control:m.control,name:p}),useWatch:p=>le({control:m.control,name:p}),isSubmit:i,formId:o,setIsSubmit:a,useSelected:p=>C(s,p),setSelected:d,selected:s};return[g,g]};import{Fragment as fe,jsx as T}from"react/jsx-runtime";var de=({onSubmit:r,onChange:e=()=>{},onInvalid:t=()=>{},formData:i,controller:a,children:s,...d})=>{let m=a??D(),[o]=Array.isArray(m)?m:[m],u=ce(void 0),l=async c=>{c.preventDefault(),c.stopPropagation(),o.setIsSubmit(!0);let g=await o.formControl.trigger(),p=o.getData();g?r&&r({...p},{...o}):t(o.formControl.formState.errors)};return M(()=>{i&&N(u.current||{},i)&&(o.formControl.reset(i),u.current=i)},[i,o.formControl.reset]),M(()=>{if(!e)return;let c=o.formControl.watch(e);return()=>c.unsubscribe()},[]),T(fe,{children:T(A,{controller:o,onSubmit:r,children:T("form",{...d,id:o.formId,ref:o.ref,onSubmit:l,children:s})})})},K=de;import{useEffect as Ce}from"react";import{createContext as ge,useContext as ye}from"react";import{jsx as he}from"react/jsx-runtime";var z=ge(void 0);function Fe(){let r=ye(z);return r||{}}function P({children:r,...e}){return he(z.Provider,{value:e,children:r})}import{useFieldArray as xe}from"react-hook-form";import{useMemo as be}from"react";var Z=r=>{let e=F(),t=xe({control:e.control,name:r}),a={formArrayId:be(()=>x(),[]),...t,...e};return[a,a]};import{Fragment as q,jsx as I}from"react/jsx-runtime";var H=({name:r,defaultData:e,controller:t,children:i})=>{let a=t??Z(r),[s]=Array.isArray(a)?a:[a];return Ce(()=>{typeof e=="boolean"&&e?s.append({}):typeof e=="number"&&e>0?s.append([...Array(e).fill(null).map(()=>({}))]):typeof e=="object"&&e&&s.append(e)},[]),I(q,{children:s.fields.map((d,m)=>{let o=`${r}.${m}.`,u={...s,index:m,name:o,countFields:s.fields.length,removeItem:()=>s.remove(m),watchItem:l=>s.watch(l?`${o}${l}`:o.slice(0,-1)),setValueItem:(l,c)=>s.setValue(`${o}${l}`,c),useSelectedItem:l=>s.useSelected(`${o}${l}`)};return I(q,{children:I(P,{...u,children:k(i,u)},d.id)})})})};H.displayName="BgsFormArray";var Ue=H;import{useEffect as ve,useMemo as Oe}from"react";import{createContext as Ae,useContext as Re}from"react";import{jsx as Pe}from"react/jsx-runtime";var j=Ae(void 0);function Te(){let r=Re(j);return r||{}}function S({children:r,...e}){return Pe(j.Provider,{value:e,children:r})}import{Controller as Ge}from"react-hook-form";import{createContext as Ie,useContext as Se}from"react";import{jsx as $e}from"react/jsx-runtime";var J=Ie(void 0);function $(){let r=Se(J);return r||{}}function w({children:r,...e}){return $e(J.Provider,{value:e,children:r})}import{createContext as we,useContext as Be}from"react";import{jsx as We}from"react/jsx-runtime";var _=we(void 0);function Q(){let r=Be(_);return r||{}}function X({children:r,...e}){return We(_.Provider,{value:e,children:r})}function B({validationRules:r,label:e}){let{formControl:t,getData:i}=F(),a=[];return r&&(typeof r=="string"?Y(r,!0,e,t,i,{}).forEach(s=>a.push(s)):typeof r=="object"&&Object.keys(r).forEach(s=>{let{validate:d}=a.find(o=>o.validate)||{};if(["minLength","maxLength","min","max","match","diff","regexp","pattern","required","email"].includes(s)){let o=r[s],u="";if(s==="email"&&!o)return;["match","diff"].includes(s)&&typeof o=="object"&&(o=r[s].dataField,u=r[s].label),o!=null&&Y(s,o,e,t,i,d,u).forEach(l=>a.push(l))}else if(typeof r[s]=="object"){let o=r[s];a.push({validate:{...d,[s]:u=>o.validation(u)||o.message&&(typeof o.message=="string"?o.message:o.message(e))}})}})),Object.assign({},...a)}var Y=(r,e,t,i,a,s,d)=>{let m=[],{validationMessage:o}=Q(),{required:u,minLength:l,maxLength:c,min:g,max:p,email:y,match:W,diff:v,pattern:f}=o||{},b={required:{value:!!e,message:u?u(t):`${t} is required`},minLength:{value:e,message:l?l(t,e):`${t} must be at least ${e} characters long`},maxLength:{value:e,message:c?c(t,e):`${t} cannot be more than ${e} characters long`},min:{value:Number(e),message:g?g(t,e):`${t} should be at least ${e}`},max:{value:Number(e),message:p?p(t,e):`${t} should be at most ${e}`},regexp:(n="")=>n?new RegExp(e.regexp).test(n)||`${t} ${e.message}`:!0,email:(n="")=>n?n.match(/^(([^<>()[\]\\.,;:\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,}))$/)||(y?y(t):`${t} must be type email`):!0,match:(n="")=>n?n===(a&&a(e))||(W?W(t,d||h.changeAll(e)):`${t} must be same with ${d||h.changeAll(e)}`):!0,diff:(n="")=>n?n!==(a&&a(e))||(v?v(t,d||h.changeAll(e)):`${t} must be different with ${d||h.changeAll(e)}`):!0,pattern:{alphabet:(n="")=>!!n&&new RegExp("^[A-Za-z ]*$").test(n)||(f?.alphabet?f?.alphabet(t):`${t} must be format Alphabet`),alphanumber:(n="")=>!!n&&new RegExp("^[A-Za-z0-9 ]*$").test(n)||(f?.alphanumber?f?.alphanumber(t):`${t} must be format Alphabet or Number`),number:(n="")=>!!n&&new RegExp("^[0-9]*$").test(n)||(f?.number?f?.number(t):`${t} must be format Number`),lowercase:(n="")=>!!n&&new RegExp("^[a-z0-9 ]*$").test(n)||(f?.lowercase?f?.lowercase(t):`${t} must be format Lowercase`),url:(n="")=>!!n&&/^(ftp|http|https):\/\/[^ "]+$/.test(n)||(f?.url?f?.url(t):`${t} must be a valid URL`),uppercase:(n="")=>!!n&&new RegExp("^[A-Z0-9 ]*$").test(n)||(f?.uppercase?f?.uppercase(t):`${t} must be format Uppercase`),mixedcase:(n="")=>!!n&&/[a-z]/.test(n)&&/[A-Z]/.test(n)||(f?.mixedcase?f?.mixedcase(t):`${t} must be mixed case`),specialcharacters:(n="")=>!!n&&/[^a-zA-Z0-9\s]/.test(n)||(f?.specialcharacters?f?.specialcharacters(t):`${t} must contain special characters`)}}[r];if(b){let{validate:n}=m.find(te=>te.validate)||{};typeof b=="function"?m.push({validate:{...n,...s,[r]:b}}):r==="pattern"?m.push({validate:{...n,...s,[`${r}${e}`]:b[e]}}):m.push({[r]:b})}return m};import{Fragment as V,jsx as U}from"react/jsx-runtime";var ke=({children:r,...e})=>{let t=Oe(()=>x(),[]),{registerItem:i,unregisterItem:a,formControl:s,disabled:d,readOnly:m}=F(),{name:o,formId:u,...l}=$();ve(()=>(i({id:t,...e}),()=>{a(t)}),[t,e]),!e.label&&!e.noLabel&&(e.label=h.changeAll(e.dataField));let c=!1;typeof e.disabled=="boolean"?c=e.disabled:typeof l.disabled=="boolean"?c=l.disabled:c=!!d;let g=!1;typeof e.readOnly=="boolean"?g=e.readOnly:typeof l.readOnly=="boolean"?g=l.readOnly:g=!!m;let p=!1;return typeof e.hidden=="boolean"&&(p=e.hidden),U(V,{children:s.control&&U(Ge,{name:e.dataField,control:s.control,rules:c||g||p?{required:!1}:B(e),render:y=>U(V,{children:U(S,{...e,controller:y,children:r})})})})},Ne=ke;import{useMemo as Le}from"react";import{Fragment as De,jsx as ee}from"react/jsx-runtime";var re=({children:r,...e})=>{let t=F(),i=Le(()=>x(),[]);return ee(De,{children:ee(w,{...t,...e,formGroupId:i,children:r})})};re.displayName="BgsFormGroup";var Ee=re;var Me=(o=>(o.alphabet="alphabet",o.alphaNumber="alphanumber",o.number="number",o.lowercase="lowercase",o.url="url",o.uppercase="uppercase",o.mixedCase="mixedcase",o.specialCharacters="specialcharacters",o))(Me||{});var st=K;export{Ue as BgsArrayForm,Ne as BgsController,Ee as BgsGroupForm,X as BgsReactFormProvider,Me as PatternTypeEnum,st as default,C as getFieldValue,Fe as useBgsArrayForm,Te as useBgsControllerForm,F as useBgsForm,$ as useBgsGroupForm,Z as useFormArrayInit,D as useFormInit};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bgscore/react-form",
3
- "version": "0.0.14",
3
+ "version": "0.0.16",
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",