@bgscore/react-form 0.0.43 → 0.0.44

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 _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 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 _react2 = _interopRequireDefault(_react);var _jsxruntime = require('react/jsx-runtime');var N=_react.createContext.call(void 0, void 0);function F(){let e=_react.useContext.call(void 0, N);return e||{}}function R({children:e,controller:r,onSubmit:t}){let i=_react.useRef.call(void 0, []),a=_react.useCallback.call(void 0, o=>{let c=i.current.findIndex(d=>d.id===o.id);if(c>-1){let d=[...i.current];d[c]=o,i.current=[...d]}else i.current.push(o)},[i]),n=_react.useCallback.call(void 0, o=>{i.current=i.current.filter(c=>c.id!==o)},[]),p=async(o,c)=>{r.setIsSubmit(!0);let d=c?await r.formControl.trigger():!0,l=r.getData();d&&t&&t({...l,...o},{...r})},m={...r,registerItem:a,unregisterItem:n,items:i.current,triggerSubmit:p};return _jsxruntime.jsx.call(void 0, N.Provider,{value:m,children:e})}function x(){let e=()=>Math.random()*16%16|0;return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,r=>(r==="x"?e():e()&3|8).toString(16))}function L(e,r){return typeof e=="function"?e(r):e}var h={camelCase:(e="")=>(e=e.split(".").map(r=>(r=r.charAt(0).toUpperCase()+r.slice(1),r)).join(" "),e=e.replace(/([a-z0-9])([A-Z])/g,"$1 $2"),e.charAt(0).toUpperCase()+e.slice(1)),snackCase:(e="")=>{let t=e.replace(/_([a-z])/g,(i,a)=>a.toUpperCase()).replace(/([A-Z])/g," $1");return t=t.charAt(0).toUpperCase()+t.slice(1),t},changeAll:(e="",r=!1)=>{let t="";try{e=_optionalChain([e, 'optionalAccess', _2 => _2.split, 'call', _3 => _3("."), 'access', _4 => _4[_optionalChain([e, 'optionalAccess', _5 => _5.split, 'call', _6 => _6("."), 'optionalAccess', _7 => _7.length])-1]]),e=_optionalChain([e, 'optionalAccess', _8 => _8.split, 'call', _9 => _9("[]"), 'access', _10 => _10[_optionalChain([e, 'optionalAccess', _11 => _11.split, 'call', _12 => _12("[]"), 'optionalAccess', _13 => _13.length])-1]]),t=h.snackCase(h.camelCase(e)),r&&(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 E(e,r){try{return JSON.stringify(e)!==JSON.stringify(r)}catch (e3){return!1}}var P=e=>(Object.keys(e).forEach(r=>{e[r]===void 0&&(e[r]=null)}),e),S= exports.getFieldValue =(e,r,t="")=>{if(!e)return t;if(e.hasOwnProperty(r))return e[r];let i=r.replace(/\[(\d+)\]/g,".$1").split("."),a=e;for(let n of i){if(a==null)return t;a=a[n]}return a===void 0?t:a};function K(e,r){let t=!1;return e&&typeof e=="object"&&Array.isArray(e)&&(typeof r=="number"?e.length>r&&(t=!0):t=!0),t}function D(e,r=0){let t;return function(...i){clearTimeout(t),t=setTimeout(()=>{e(...i)},r*1e3)}}var _reacthookform = require('react-hook-form');function M(e){let r=e,t=new Set;function i(){return r}function a(m){return t.add(m),()=>t.delete(m)}function n(m){typeof m=="function"?r=m(r):r=m,t.forEach(o=>o())}function p(m){return _react.useSyncExternalStore.call(void 0, a,()=>m?m(r):r,()=>m?m(r):r)}return{getSnapshot:i,subscribe:a,setState:n,useStore:p}}var I=new WeakMap;function z(e){return I.has(e)||I.set(e,M({})),I.get(e)}var Z=(e,r)=>{e||(e={});let t=_react.useRef.call(void 0, null),[i,a]=_react.useState.call(void 0, !1),n=_reacthookform.useForm.call(void 0, {...r,reValidateMode:"onSubmit",mode:"all",defaultValues:e}),p=z(n),m=_react.useMemo.call(void 0, ()=>x(),[]),o=l=>l?S(P(n.getValues()),l):P(n.getValues()),d={...n,ref:t,reset:l=>{l?typeof l=="string"?n.resetField(l,{}):typeof l=="object"&&K(l,0)&&l.forEach(f=>n.resetField(f)):n.reset()},updateData:l=>{let f=o();n.reset({...f,...l})},getData:o,formControl:n,useFieldArray:l=>_reacthookform.useFieldArray.call(void 0, {control:n.control,name:l}),useWatch:l=>_reacthookform.useWatch.call(void 0, {control:n.control,name:l}),isSubmit:i,formId:m,setIsSubmit:a,useSelected:l=>p.useStore(f=>S(f,l)),setSelected:p.setState};return[d,d]};var Ue=({onSubmit:e,onChange:r=()=>{},onInvalid:t=()=>{},formData:i,controller:a,children:n,...p})=>{let m=_nullishCoalesce(a, () => (Z())),[o]=Array.isArray(m)?m:[m],c=_react.useRef.call(void 0, void 0),d=async l=>{l.preventDefault(),l.stopPropagation(),o.setIsSubmit(!0);let f=await o.formControl.trigger(),y=o.getData();f?e&&e({...y},{...o}):t(o.formControl.formState.errors)};return _react.useEffect.call(void 0, ()=>{i&&E(c.current||{},i)&&(o.formControl.reset(i),c.current=i)},[i,o.formControl.reset]),_react.useEffect.call(void 0, ()=>{if(!r)return;let l=o.formControl.watch(r);return()=>l.unsubscribe()},[]),_jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:_jsxruntime.jsx.call(void 0, R,{controller:{...o,disabled:_optionalChain([p, 'optionalAccess', _23 => _23.disabled]),readOnly:_optionalChain([p, 'optionalAccess', _24 => _24.readOnly])},onSubmit:e,children:_jsxruntime.jsx.call(void 0, "form",{...p,id:o.formId,ref:o.ref,onSubmit:d,children:n})})})},H=Ue;var j=_react.createContext.call(void 0, void 0);function w(){let e=_react.useContext.call(void 0, j);return e||{}}function v({children:e,...r}){return _jsxruntime.jsx.call(void 0, j.Provider,{value:r,children:e})}var J=e=>{let r=F(),t=_reacthookform.useFieldArray.call(void 0, {control:r.control,name:e}),a={formArrayId:_react.useMemo.call(void 0, ()=>x(),[]),...t,...r};return[a,a]};var _=({name:e,defaultData:r,controller:t,children:i})=>{let a=_nullishCoalesce(t, () => (J(e))),[n]=Array.isArray(a)?a:[a];return _react.useEffect.call(void 0, ()=>{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.call(void 0, _jsxruntime.Fragment,{children:n.fields.map((p,m)=>{let o=`${e}.${m}.`,c={...n,index:m,fieldId:p.id,name:o,countFields:n.fields.length,removeItem:()=>n.remove(m),watchItem:d=>n.watch(d?`${o}${d}`:o.slice(0,-1)),setValueItem:(d,l)=>n.setValue(`${o}${d}`,l),useSelectedItem:d=>n.useSelected(`${o}${d}`)};return _jsxruntime.jsx.call(void 0, _react2.default.Fragment,{children:_jsxruntime.jsx.call(void 0, v,{...c,children:L(i,c)})},m)})})};_.displayName="BgsFormArray";var Be=_;var Q=_react.createContext.call(void 0, void 0);function O(){let e=_react.useContext.call(void 0, Q);return e||{}}function W({children:e,...r}){return _jsxruntime.jsx.call(void 0, Q.Provider,{value:r,children:e})}var Y=({children:e,...r})=>{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,...r,formGroupId:i,children:e})})};Y.displayName="BgsFormGroup";var Le=Y;var V=_react.createContext.call(void 0, void 0);function ee(){let e=_react.useContext.call(void 0, V);return e||{}}function re({children:e,...r}){return _jsxruntime.jsx.call(void 0, V.Provider,{value:r,children:e})}function G({validationRules:e,label:r}){let{formControl:t,getData:i}=F(),a=[];return e&&(typeof e=="string"?te(e,!0,r,t,i,{}).forEach(n=>a.push(n)):typeof e=="object"&&Object.keys(e).forEach(n=>{let{validate:p}=a.find(o=>o.validate)||{};if(["minLength","maxLength","min","max","match","diff","regexp","pattern","required","email"].includes(n)){let o=e[n],c="";if(n==="email"&&!o)return;["match","diff"].includes(n)&&typeof o=="object"&&(o=e[n].dataField,c=e[n].label),o!=null&&te(n,o,r,t,i,p,c).forEach(d=>a.push(d))}else if(typeof e[n]=="object"){let o=e[n];a.push({validate:{...p,[n]:c=>o.validation(c)||o.message&&(typeof o.message=="string"?o.message:o.message(r))}})}})),Object.assign({},...a)}var te=(e,r,t,i,a,n,p)=>{let m=[],{validationMessage:o}=ee(),{required:c,minLength:d,maxLength:l,min:f,max:y,email:C,match:T,diff:b,pattern:u}=o||{},g={required:{value:!!r,message:c?c(t):`${t} is required`},minLength:{value:r,message:d?d(t,r):`${t} must be at least ${r} characters long`},maxLength:{value:r,message:l?l(t,r):`${t} cannot be more than ${r} characters long`},min:{value:Number(r),message:f?f(t,r):`${t} should be at least ${r}`},max:{value:Number(r),message:y?y(t,r):`${t} should be at most ${r}`},regexp:(s="")=>s?new RegExp(r.regexp).test(s)||`${t} ${r.message}`:!0,email:(s="")=>s?s.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,}))$/)||(C?C(t):`${t} must be type email`):!0,match:(s="")=>s?s===(a&&a(r))||(T?T(t,p||h.changeAll(r)):`${t} must be same with ${p||h.changeAll(r)}`):!0,diff:(s="")=>s?s!==(a&&a(r))||(b?b(t,p||h.changeAll(r)):`${t} must be different with ${p||h.changeAll(r)}`):!0,pattern:{alphabet:(s="")=>!!s&&new RegExp("^[A-Za-z ]*$").test(s)||(_optionalChain([u, 'optionalAccess', _25 => _25.alphabet])?_optionalChain([u, 'optionalAccess', _26 => _26.alphabet, 'call', _27 => _27(t)]):`${t} must be format Alphabet`),alphanumber:(s="")=>!!s&&new RegExp("^[A-Za-z0-9 ]*$").test(s)||(_optionalChain([u, 'optionalAccess', _28 => _28.alphanumber])?_optionalChain([u, 'optionalAccess', _29 => _29.alphanumber, 'call', _30 => _30(t)]):`${t} must be format Alphabet or Number`),number:(s="")=>!!s&&new RegExp("^[0-9]*$").test(s)||(_optionalChain([u, 'optionalAccess', _31 => _31.number])?_optionalChain([u, 'optionalAccess', _32 => _32.number, 'call', _33 => _33(t)]):`${t} must be format Number`),lowercase:(s="")=>!!s&&new RegExp("^[a-z0-9 ]*$").test(s)||(_optionalChain([u, 'optionalAccess', _34 => _34.lowercase])?_optionalChain([u, 'optionalAccess', _35 => _35.lowercase, 'call', _36 => _36(t)]):`${t} must be format Lowercase`),url:(s="")=>!!s&&/^(ftp|http|https):\/\/[^ "]+$/.test(s)||(_optionalChain([u, 'optionalAccess', _37 => _37.url])?_optionalChain([u, 'optionalAccess', _38 => _38.url, 'call', _39 => _39(t)]):`${t} must be a valid URL`),uppercase:(s="")=>!!s&&new RegExp("^[A-Z0-9 ]*$").test(s)||(_optionalChain([u, 'optionalAccess', _40 => _40.uppercase])?_optionalChain([u, 'optionalAccess', _41 => _41.uppercase, 'call', _42 => _42(t)]):`${t} must be format Uppercase`),mixedcase:(s="")=>!!s&&/[a-z]/.test(s)&&/[A-Z]/.test(s)||(_optionalChain([u, 'optionalAccess', _43 => _43.mixedcase])?_optionalChain([u, 'optionalAccess', _44 => _44.mixedcase, 'call', _45 => _45(t)]):`${t} must be mixed case`),specialcharacters:(s="")=>!!s&&/[^a-zA-Z0-9\s]/.test(s)||(_optionalChain([u, 'optionalAccess', _46 => _46.specialcharacters])?_optionalChain([u, 'optionalAccess', _47 => _47.specialcharacters, 'call', _48 => _48(t)]):`${t} must contain special characters`)}}[e];if(g){let{validate:s}=m.find(U=>U.validate)||{};typeof g=="function"?m.push({validate:{...s,...n,[e]:g}}):e==="pattern"?m.push({validate:{...s,...n,[`${e}${r}`]:g[r]}}):m.push({[e]:g})}return m};var ot=e=>{let r=_react.useMemo.call(void 0, ()=>x(),[]),{registerItem:t,unregisterItem:i,control:a,disabled:n,readOnly:p,formId:m,useWatch:o,setSelected:c,useSelected:d}=F(),{name:l,formId:f,...y}=O(),{formId:C,name:T}=w(),b=e.label,u=e.dataField;_react.useEffect.call(void 0, ()=>(t({id:r,...e}),()=>{i(r)}),[r,e]),!e.label&&!e.noLabel&&(b=h.changeAll(u)),T&&m===C&&(u=`${T}${u}`);let A=!1;typeof e.disabled=="boolean"?A=e.disabled:typeof y.disabled=="boolean"?A=y.disabled:A=!!n;let g=!1;typeof e.readOnly=="boolean"?g=e.readOnly:typeof y.readOnly=="boolean"?g=y.readOnly:g=!!p;let s=!1;typeof e.hidden=="boolean"&&(s=e.hidden);let U=_reacthookform.useController.call(void 0, {name:u,control:a,disabled:A,defaultValue:e.defaultValue,shouldUnregister:e.shouldUnregister,rules:A||g||s?{required:!1}:G({...e,label:b,dataField:u})}),ne=U.fieldState.invalid,se=_optionalChain([U, 'access', _49 => _49.fieldState, 'access', _50 => _50.error, 'optionalAccess', _51 => _51.message]),ie=o(u),ae=_react.useMemo.call(void 0, ()=>D(le=>c(ue=>({...ue,[u]:le||null}))),[c]),me=d(u);return{...e,setSelectedField:ae,label:b,dataField:u,controller:U,invalid:ne,messageError:se,selectedField:me,value:ie}};var qe=(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))(qe||{});var at=H;exports.BgsArrayForm = Be; exports.BgsGroupForm = Le; exports.BgsReactFormProvider = re; exports.PatternTypeEnum = qe; exports.createStore = M; exports.default = at; exports.getFieldValue = S; exports.useBgsArrayForm = w; exports.useBgsForm = F; exports.useBgsGroupForm = O; exports.useController = ot; exports.useFormArrayInit = J; exports.useFormInit = Z;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 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 _react2 = _interopRequireDefault(_react);var _jsxruntime = require('react/jsx-runtime');var L=_react.createContext.call(void 0, void 0);function F(){let e=_react.useContext.call(void 0, L);return e||{}}function P({children:e,controller:r,onSubmit:t}){let i=_react.useRef.call(void 0, []),a=_react.useCallback.call(void 0, o=>{let p=i.current.findIndex(d=>d.id===o.id);if(p>-1){let d=[...i.current];d[p]=o,i.current=[...d]}else i.current.push(o)},[i]),n=_react.useCallback.call(void 0, o=>{i.current=i.current.filter(p=>p.id!==o)},[]),c=async(o,p)=>{r.setIsSubmit(!0);let d=p?await r.formControl.trigger():!0,l=r.getData();d&&t&&t({...l,...o},{...r})},m={...r,registerItem:a,unregisterItem:n,items:i.current,triggerSubmit:c};return _jsxruntime.jsx.call(void 0, L.Provider,{value:m,children:e})}function x(){let e=()=>Math.random()*16%16|0;return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,r=>(r==="x"?e():e()&3|8).toString(16))}var E=_react2.default.memo(e=>{let{children:r,props:t}=e;return typeof r=="function"?r(t):r}),h={camelCase:(e="")=>(e=e.split(".").map(r=>(r=r.charAt(0).toUpperCase()+r.slice(1),r)).join(" "),e=e.replace(/([a-z0-9])([A-Z])/g,"$1 $2"),e.charAt(0).toUpperCase()+e.slice(1)),snackCase:(e="")=>{let t=e.replace(/_([a-z])/g,(i,a)=>a.toUpperCase()).replace(/([A-Z])/g," $1");return t=t.charAt(0).toUpperCase()+t.slice(1),t},changeAll:(e="",r=!1)=>{let t="";try{e=_optionalChain([e, 'optionalAccess', _2 => _2.split, 'call', _3 => _3("."), 'access', _4 => _4[_optionalChain([e, 'optionalAccess', _5 => _5.split, 'call', _6 => _6("."), 'optionalAccess', _7 => _7.length])-1]]),e=_optionalChain([e, 'optionalAccess', _8 => _8.split, 'call', _9 => _9("[]"), 'access', _10 => _10[_optionalChain([e, 'optionalAccess', _11 => _11.split, 'call', _12 => _12("[]"), 'optionalAccess', _13 => _13.length])-1]]),t=h.snackCase(h.camelCase(e)),r&&(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 K(e,r){try{return JSON.stringify(e)!==JSON.stringify(r)}catch (e3){return!1}}var I=e=>(Object.keys(e).forEach(r=>{e[r]===void 0&&(e[r]=null)}),e),R= exports.getFieldValue =(e,r,t="")=>{if(!e)return t;if(e.hasOwnProperty(r))return e[r];let i=r.replace(/\[(\d+)\]/g,".$1").split("."),a=e;for(let n of i){if(a==null)return t;a=a[n]}return a===void 0?t:a};function D(e,r){let t=!1;return e&&typeof e=="object"&&Array.isArray(e)&&(typeof r=="number"?e.length>r&&(t=!0):t=!0),t}function M(e,r=0){let t;return function(...i){clearTimeout(t),t=setTimeout(()=>{e(...i)},r*1e3)}}var _reacthookform = require('react-hook-form');function z(e){let r=e,t=new Set;function i(){return r}function a(m){return t.add(m),()=>t.delete(m)}function n(m){typeof m=="function"?r=m(r):r=m,t.forEach(o=>o())}function c(m){return _react.useSyncExternalStore.call(void 0, a,()=>m?m(r):r,()=>m?m(r):r)}return{getSnapshot:i,subscribe:a,setState:n,useStore:c}}var $=new WeakMap;function Z(e){return $.has(e)||$.set(e,z({})),$.get(e)}var q=(e,r)=>{e||(e={});let t=_react.useRef.call(void 0, null),[i,a]=_react.useState.call(void 0, !1),n=_reacthookform.useForm.call(void 0, {...r,reValidateMode:"onSubmit",mode:"all",defaultValues:e}),c=Z(n),m=_react.useMemo.call(void 0, ()=>x(),[]),o=l=>l?R(I(n.getValues()),l):I(n.getValues()),d={...n,ref:t,reset:l=>{l?typeof l=="string"?n.resetField(l,{}):typeof l=="object"&&D(l,0)&&l.forEach(f=>n.resetField(f)):n.reset()},updateData:l=>{let f=o();n.reset({...f,...l})},getData:o,formControl:n,useFieldArray:l=>_reacthookform.useFieldArray.call(void 0, {control:n.control,name:l}),useWatch:l=>_reacthookform.useWatch.call(void 0, {control:n.control,name:l}),isSubmit:i,formId:m,setIsSubmit:a,useSelected:l=>c.useStore(f=>R(f,l)),setSelected:c.setState};return[d,d]};var Re=({onSubmit:e,onChange:r=()=>{},onInvalid:t=()=>{},formData:i,controller:a,children:n,...c})=>{let m=_nullishCoalesce(a, () => (q())),[o]=Array.isArray(m)?m:[m],p=_react.useRef.call(void 0, void 0),d=async l=>{l.preventDefault(),l.stopPropagation(),o.setIsSubmit(!0);let f=await o.formControl.trigger(),y=o.getData();f?e&&e({...y},{...o}):t(o.formControl.formState.errors)};return _react.useEffect.call(void 0, ()=>{i&&K(p.current||{},i)&&(o.formControl.reset(i),p.current=i)},[i,o.formControl.reset]),_react.useEffect.call(void 0, ()=>{if(!r)return;let l=o.formControl.watch(r);return()=>l.unsubscribe()},[]),_jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:_jsxruntime.jsx.call(void 0, P,{controller:{...o,disabled:_optionalChain([c, 'optionalAccess', _23 => _23.disabled]),readOnly:_optionalChain([c, 'optionalAccess', _24 => _24.readOnly])},onSubmit:e,children:_jsxruntime.jsx.call(void 0, "form",{...c,id:o.formId,ref:o.ref,onSubmit:d,children:n})})})},j=Re;var J=_react.createContext.call(void 0, void 0);function v(){let e=_react.useContext.call(void 0, J);return e||{}}function B({children:e,...r}){return _jsxruntime.jsx.call(void 0, J.Provider,{value:r,children:e})}var _=e=>{let r=F(),t=_reacthookform.useFieldArray.call(void 0, {control:r.control,name:e}),a={formArrayId:_react.useMemo.call(void 0, ()=>x(),[]),...t,...r};return[a,a]};var Q=({name:e,defaultData:r,controller:t,children:i})=>{let a=_nullishCoalesce(t, () => (_(e))),[n]=Array.isArray(a)?a:[a];return _react.useEffect.call(void 0, ()=>{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.call(void 0, _jsxruntime.Fragment,{children:n.fields.map((c,m)=>{let o=`${e}.${m}.`,p={...n,append:_react.useCallback.call(void 0, d=>n.append(d),[]),fieldId:c.id,name:o,countFields:n.fields.length,removeItem:_react.useCallback.call(void 0, ()=>n.remove(m),[]),watchItem:d=>n.watch(d?`${o}${d}`:o.slice(0,-1)),setValueItem:_react.useCallback.call(void 0, (d,l)=>n.setValue(`${o}${d}`,l),[]),useSelectedItem:d=>n.useSelected(`${o}${d}`)};return _jsxruntime.jsx.call(void 0, _react2.default.Fragment,{children:_jsxruntime.jsx.call(void 0, B,{...p,children:_jsxruntime.jsx.call(void 0, E,{children:i,props:p})})},c.id)})})};Q.displayName="BgsFormArray";var We=Q;var X=_react.createContext.call(void 0, void 0);function W(){let e=_react.useContext.call(void 0, X);return e||{}}function k({children:e,...r}){return _jsxruntime.jsx.call(void 0, X.Provider,{value:r,children:e})}var V=({children:e,...r})=>{let t=F(),i=_react.useMemo.call(void 0, ()=>x(),[]);return _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:_jsxruntime.jsx.call(void 0, k,{...t,...r,formGroupId:i,children:e})})};V.displayName="BgsFormGroup";var Ke=V;var ee=_react.createContext.call(void 0, void 0);function re(){let e=_react.useContext.call(void 0, ee);return e||{}}function te({children:e,...r}){return _jsxruntime.jsx.call(void 0, ee.Provider,{value:r,children:e})}function G({validationRules:e,label:r}){let{formControl:t,getData:i}=F(),a=[];return e&&(typeof e=="string"?oe(e,!0,r,t,i,{}).forEach(n=>a.push(n)):typeof e=="object"&&Object.keys(e).forEach(n=>{let{validate:c}=a.find(o=>o.validate)||{};if(["minLength","maxLength","min","max","match","diff","regexp","pattern","required","email"].includes(n)){let o=e[n],p="";if(n==="email"&&!o)return;["match","diff"].includes(n)&&typeof o=="object"&&(o=e[n].dataField,p=e[n].label),o!=null&&oe(n,o,r,t,i,c,p).forEach(d=>a.push(d))}else if(typeof e[n]=="object"){let o=e[n];a.push({validate:{...c,[n]:p=>o.validation(p)||o.message&&(typeof o.message=="string"?o.message:o.message(r))}})}})),Object.assign({},...a)}var oe=(e,r,t,i,a,n,c)=>{let m=[],{validationMessage:o}=re(),{required:p,minLength:d,maxLength:l,min:f,max:y,email:C,match:A,diff:b,pattern:u}=o||{},g={required:{value:!!r,message:p?p(t):`${t} is required`},minLength:{value:r,message:d?d(t,r):`${t} must be at least ${r} characters long`},maxLength:{value:r,message:l?l(t,r):`${t} cannot be more than ${r} characters long`},min:{value:Number(r),message:f?f(t,r):`${t} should be at least ${r}`},max:{value:Number(r),message:y?y(t,r):`${t} should be at most ${r}`},regexp:(s="")=>s?new RegExp(r.regexp).test(s)||`${t} ${r.message}`:!0,email:(s="")=>s?s.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,}))$/)||(C?C(t):`${t} must be type email`):!0,match:(s="")=>s?s===(a&&a(r))||(A?A(t,c||h.changeAll(r)):`${t} must be same with ${c||h.changeAll(r)}`):!0,diff:(s="")=>s?s!==(a&&a(r))||(b?b(t,c||h.changeAll(r)):`${t} must be different with ${c||h.changeAll(r)}`):!0,pattern:{alphabet:(s="")=>!!s&&new RegExp("^[A-Za-z ]*$").test(s)||(_optionalChain([u, 'optionalAccess', _25 => _25.alphabet])?_optionalChain([u, 'optionalAccess', _26 => _26.alphabet, 'call', _27 => _27(t)]):`${t} must be format Alphabet`),alphanumber:(s="")=>!!s&&new RegExp("^[A-Za-z0-9 ]*$").test(s)||(_optionalChain([u, 'optionalAccess', _28 => _28.alphanumber])?_optionalChain([u, 'optionalAccess', _29 => _29.alphanumber, 'call', _30 => _30(t)]):`${t} must be format Alphabet or Number`),number:(s="")=>!!s&&new RegExp("^[0-9]*$").test(s)||(_optionalChain([u, 'optionalAccess', _31 => _31.number])?_optionalChain([u, 'optionalAccess', _32 => _32.number, 'call', _33 => _33(t)]):`${t} must be format Number`),lowercase:(s="")=>!!s&&new RegExp("^[a-z0-9 ]*$").test(s)||(_optionalChain([u, 'optionalAccess', _34 => _34.lowercase])?_optionalChain([u, 'optionalAccess', _35 => _35.lowercase, 'call', _36 => _36(t)]):`${t} must be format Lowercase`),url:(s="")=>!!s&&/^(ftp|http|https):\/\/[^ "]+$/.test(s)||(_optionalChain([u, 'optionalAccess', _37 => _37.url])?_optionalChain([u, 'optionalAccess', _38 => _38.url, 'call', _39 => _39(t)]):`${t} must be a valid URL`),uppercase:(s="")=>!!s&&new RegExp("^[A-Z0-9 ]*$").test(s)||(_optionalChain([u, 'optionalAccess', _40 => _40.uppercase])?_optionalChain([u, 'optionalAccess', _41 => _41.uppercase, 'call', _42 => _42(t)]):`${t} must be format Uppercase`),mixedcase:(s="")=>!!s&&/[a-z]/.test(s)&&/[A-Z]/.test(s)||(_optionalChain([u, 'optionalAccess', _43 => _43.mixedcase])?_optionalChain([u, 'optionalAccess', _44 => _44.mixedcase, 'call', _45 => _45(t)]):`${t} must be mixed case`),specialcharacters:(s="")=>!!s&&/[^a-zA-Z0-9\s]/.test(s)||(_optionalChain([u, 'optionalAccess', _46 => _46.specialcharacters])?_optionalChain([u, 'optionalAccess', _47 => _47.specialcharacters, 'call', _48 => _48(t)]):`${t} must contain special characters`)}}[e];if(g){let{validate:s}=m.find(U=>U.validate)||{};typeof g=="function"?m.push({validate:{...s,...n,[e]:g}}):e==="pattern"?m.push({validate:{...s,...n,[`${e}${r}`]:g[r]}}):m.push({[e]:g})}return m};var at=e=>{let r=_react.useMemo.call(void 0, ()=>x(),[]),{registerItem:t,unregisterItem:i,control:a,disabled:n,readOnly:c,formId:m,useWatch:o,setSelected:p,useSelected:d}=F(),{name:l,formId:f,...y}=W(),{formId:C,name:A}=v(),b=e.label,u=e.dataField;_react.useEffect.call(void 0, ()=>(t({id:r,...e}),()=>{i(r)}),[r,e]),!e.label&&!e.noLabel&&(b=h.changeAll(u)),A&&m===C&&(u=`${A}${u}`);let T=!1;typeof e.disabled=="boolean"?T=e.disabled:typeof y.disabled=="boolean"?T=y.disabled:T=!!n;let g=!1;typeof e.readOnly=="boolean"?g=e.readOnly:typeof y.readOnly=="boolean"?g=y.readOnly:g=!!c;let s=!1;typeof e.hidden=="boolean"&&(s=e.hidden);let U=_reacthookform.useController.call(void 0, {name:u,control:a,disabled:T,defaultValue:e.defaultValue,shouldUnregister:e.shouldUnregister,rules:T||g||s?{required:!1}:G({...e,label:b,dataField:u})}),se=U.fieldState.invalid,ie=_optionalChain([U, 'access', _49 => _49.fieldState, 'access', _50 => _50.error, 'optionalAccess', _51 => _51.message]),ae=o(u),me=_react.useMemo.call(void 0, ()=>M(de=>p(ue=>({...ue,[u]:de||null}))),[p]),le=d(u);return{...e,setSelectedField:me,label:b,dataField:u,controller:U,invalid:se,messageError:ie,selectedField:le,value:ae}};var je=(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))(je||{});var ut=j;exports.BgsArrayForm = We; exports.BgsGroupForm = Ke; exports.BgsReactFormProvider = te; exports.PatternTypeEnum = je; exports.createStore = z; exports.default = ut; exports.getFieldValue = R; exports.useBgsArrayForm = v; exports.useBgsForm = F; exports.useBgsGroupForm = W; exports.useController = at; exports.useFormArrayInit = _; exports.useFormInit = q;
package/dist/index.d.cts CHANGED
@@ -134,7 +134,6 @@ type UseFormArray<T> = UseFormArrayInitReturn<T> & {
134
134
  update: UseFieldArrayUpdate<any, any>;
135
135
  replace: UseFieldArrayReplace<any, any>;
136
136
  fields: FieldArrayWithId<any, any, any>[];
137
- index: number;
138
137
  name: string;
139
138
  fieldId: string;
140
139
  countFields: number;
package/dist/index.d.ts CHANGED
@@ -134,7 +134,6 @@ type UseFormArray<T> = UseFormArrayInitReturn<T> & {
134
134
  update: UseFieldArrayUpdate<any, any>;
135
135
  replace: UseFieldArrayReplace<any, any>;
136
136
  fields: FieldArrayWithId<any, any, any>[];
137
- index: number;
138
137
  name: string;
139
138
  fieldId: string;
140
139
  countFields: number;
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{useEffect as q,useRef as Te}from"react";import{createContext as de,useCallback as k,useContext as ce,useRef as pe}from"react";import{jsx as fe}from"react/jsx-runtime";var N=de(void 0);function F(){let e=ce(N);return e||{}}function R({children:e,controller:r,onSubmit:t}){let i=pe([]),a=k(o=>{let c=i.current.findIndex(d=>d.id===o.id);if(c>-1){let d=[...i.current];d[c]=o,i.current=[...d]}else i.current.push(o)},[i]),n=k(o=>{i.current=i.current.filter(c=>c.id!==o)},[]),p=async(o,c)=>{r.setIsSubmit(!0);let d=c?await r.formControl.trigger():!0,l=r.getData();d&&t&&t({...l,...o},{...r})},m={...r,registerItem:a,unregisterItem:n,items:i.current,triggerSubmit:p};return fe(N.Provider,{value:m,children:e})}function x(){let e=()=>Math.random()*16%16|0;return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,r=>(r==="x"?e():e()&3|8).toString(16))}function L(e,r){return typeof e=="function"?e(r):e}var h={camelCase:(e="")=>(e=e.split(".").map(r=>(r=r.charAt(0).toUpperCase()+r.slice(1),r)).join(" "),e=e.replace(/([a-z0-9])([A-Z])/g,"$1 $2"),e.charAt(0).toUpperCase()+e.slice(1)),snackCase:(e="")=>{let t=e.replace(/_([a-z])/g,(i,a)=>a.toUpperCase()).replace(/([A-Z])/g," $1");return t=t.charAt(0).toUpperCase()+t.slice(1),t},changeAll:(e="",r=!1)=>{let t="";try{e=e?.split(".")[e?.split(".")?.length-1],e=e?.split("[]")[e?.split("[]")?.length-1],t=h.snackCase(h.camelCase(e)),r&&(t=t?.split(" ")?.map(i=>i?.length<=3?i?.toUpperCase():i)?.join(" "))}catch{}return t}};function E(e,r){try{return JSON.stringify(e)!==JSON.stringify(r)}catch{return!1}}var P=e=>(Object.keys(e).forEach(r=>{e[r]===void 0&&(e[r]=null)}),e),S=(e,r,t="")=>{if(!e)return t;if(e.hasOwnProperty(r))return e[r];let i=r.replace(/\[(\d+)\]/g,".$1").split("."),a=e;for(let n of i){if(a==null)return t;a=a[n]}return a===void 0?t:a};function K(e,r){let t=!1;return e&&typeof e=="object"&&Array.isArray(e)&&(typeof r=="number"?e.length>r&&(t=!0):t=!0),t}function D(e,r=0){let t;return function(...i){clearTimeout(t),t=setTimeout(()=>{e(...i)},r*1e3)}}import{useFieldArray as ye,useForm as Fe,useWatch as he}from"react-hook-form";import{useMemo as xe,useRef as be,useState as Ae}from"react";import{useSyncExternalStore as ge}from"react";function M(e){let r=e,t=new Set;function i(){return r}function a(m){return t.add(m),()=>t.delete(m)}function n(m){typeof m=="function"?r=m(r):r=m,t.forEach(o=>o())}function p(m){return ge(a,()=>m?m(r):r,()=>m?m(r):r)}return{getSnapshot:i,subscribe:a,setState:n,useStore:p}}var I=new WeakMap;function z(e){return I.has(e)||I.set(e,M({})),I.get(e)}var Z=(e,r)=>{e||(e={});let t=be(null),[i,a]=Ae(!1),n=Fe({...r,reValidateMode:"onSubmit",mode:"all",defaultValues:e}),p=z(n),m=xe(()=>x(),[]),o=l=>l?S(P(n.getValues()),l):P(n.getValues()),d={...n,ref:t,reset:l=>{l?typeof l=="string"?n.resetField(l,{}):typeof l=="object"&&K(l,0)&&l.forEach(f=>n.resetField(f)):n.reset()},updateData:l=>{let f=o();n.reset({...f,...l})},getData:o,formControl:n,useFieldArray:l=>ye({control:n.control,name:l}),useWatch:l=>he({control:n.control,name:l}),isSubmit:i,formId:m,setIsSubmit:a,useSelected:l=>p.useStore(f=>S(f,l)),setSelected:p.setState};return[d,d]};import{Fragment as Ce,jsx as $}from"react/jsx-runtime";var Ue=({onSubmit:e,onChange:r=()=>{},onInvalid:t=()=>{},formData:i,controller:a,children:n,...p})=>{let m=a??Z(),[o]=Array.isArray(m)?m:[m],c=Te(void 0),d=async l=>{l.preventDefault(),l.stopPropagation(),o.setIsSubmit(!0);let f=await o.formControl.trigger(),y=o.getData();f?e&&e({...y},{...o}):t(o.formControl.formState.errors)};return q(()=>{i&&E(c.current||{},i)&&(o.formControl.reset(i),c.current=i)},[i,o.formControl.reset]),q(()=>{if(!r)return;let l=o.formControl.watch(r);return()=>l.unsubscribe()},[]),$(Ce,{children:$(R,{controller:{...o,disabled:p?.disabled,readOnly:p?.readOnly},onSubmit:e,children:$("form",{...p,id:o.formId,ref:o.ref,onSubmit:d,children:n})})})},H=Ue;import we,{useEffect as ve}from"react";import{createContext as Se,useContext as Re}from"react";import{jsx as Pe}from"react/jsx-runtime";var j=Se(void 0);function w(){let e=Re(j);return e||{}}function v({children:e,...r}){return Pe(j.Provider,{value:r,children:e})}import{useFieldArray as Ie}from"react-hook-form";import{useMemo as $e}from"react";var J=e=>{let r=F(),t=Ie({control:r.control,name:e}),a={formArrayId:$e(()=>x(),[]),...t,...r};return[a,a]};import{Fragment as Oe,jsx as B}from"react/jsx-runtime";var _=({name:e,defaultData:r,controller:t,children:i})=>{let a=t??J(e),[n]=Array.isArray(a)?a:[a];return ve(()=>{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)},[]),B(Oe,{children:n.fields.map((p,m)=>{let o=`${e}.${m}.`,c={...n,index:m,fieldId:p.id,name:o,countFields:n.fields.length,removeItem:()=>n.remove(m),watchItem:d=>n.watch(d?`${o}${d}`:o.slice(0,-1)),setValueItem:(d,l)=>n.setValue(`${o}${d}`,l),useSelectedItem:d=>n.useSelected(`${o}${d}`)};return B(we.Fragment,{children:B(v,{...c,children:L(i,c)})},m)})})};_.displayName="BgsFormArray";var Be=_;import{useMemo as Ne}from"react";import{createContext as We,useContext as Ge}from"react";import{jsx as ke}from"react/jsx-runtime";var Q=We(void 0);function O(){let e=Ge(Q);return e||{}}function W({children:e,...r}){return ke(Q.Provider,{value:r,children:e})}import{Fragment as Ee,jsx as X}from"react/jsx-runtime";var Y=({children:e,...r})=>{let t=F(),i=Ne(()=>x(),[]);return X(Ee,{children:X(W,{...t,...r,formGroupId:i,children:e})})};Y.displayName="BgsFormGroup";var Le=Y;import{createContext as Ke,useContext as De}from"react";import{jsx as Me}from"react/jsx-runtime";var V=Ke(void 0);function ee(){let e=De(V);return e||{}}function re({children:e,...r}){return Me(V.Provider,{value:r,children:e})}import{useEffect as ze,useMemo as oe}from"react";import{useController as Ze}from"react-hook-form";function G({validationRules:e,label:r}){let{formControl:t,getData:i}=F(),a=[];return e&&(typeof e=="string"?te(e,!0,r,t,i,{}).forEach(n=>a.push(n)):typeof e=="object"&&Object.keys(e).forEach(n=>{let{validate:p}=a.find(o=>o.validate)||{};if(["minLength","maxLength","min","max","match","diff","regexp","pattern","required","email"].includes(n)){let o=e[n],c="";if(n==="email"&&!o)return;["match","diff"].includes(n)&&typeof o=="object"&&(o=e[n].dataField,c=e[n].label),o!=null&&te(n,o,r,t,i,p,c).forEach(d=>a.push(d))}else if(typeof e[n]=="object"){let o=e[n];a.push({validate:{...p,[n]:c=>o.validation(c)||o.message&&(typeof o.message=="string"?o.message:o.message(r))}})}})),Object.assign({},...a)}var te=(e,r,t,i,a,n,p)=>{let m=[],{validationMessage:o}=ee(),{required:c,minLength:d,maxLength:l,min:f,max:y,email:C,match:T,diff:b,pattern:u}=o||{},g={required:{value:!!r,message:c?c(t):`${t} is required`},minLength:{value:r,message:d?d(t,r):`${t} must be at least ${r} characters long`},maxLength:{value:r,message:l?l(t,r):`${t} cannot be more than ${r} characters long`},min:{value:Number(r),message:f?f(t,r):`${t} should be at least ${r}`},max:{value:Number(r),message:y?y(t,r):`${t} should be at most ${r}`},regexp:(s="")=>s?new RegExp(r.regexp).test(s)||`${t} ${r.message}`:!0,email:(s="")=>s?s.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,}))$/)||(C?C(t):`${t} must be type email`):!0,match:(s="")=>s?s===(a&&a(r))||(T?T(t,p||h.changeAll(r)):`${t} must be same with ${p||h.changeAll(r)}`):!0,diff:(s="")=>s?s!==(a&&a(r))||(b?b(t,p||h.changeAll(r)):`${t} must be different with ${p||h.changeAll(r)}`):!0,pattern:{alphabet:(s="")=>!!s&&new RegExp("^[A-Za-z ]*$").test(s)||(u?.alphabet?u?.alphabet(t):`${t} must be format Alphabet`),alphanumber:(s="")=>!!s&&new RegExp("^[A-Za-z0-9 ]*$").test(s)||(u?.alphanumber?u?.alphanumber(t):`${t} must be format Alphabet or Number`),number:(s="")=>!!s&&new RegExp("^[0-9]*$").test(s)||(u?.number?u?.number(t):`${t} must be format Number`),lowercase:(s="")=>!!s&&new RegExp("^[a-z0-9 ]*$").test(s)||(u?.lowercase?u?.lowercase(t):`${t} must be format Lowercase`),url:(s="")=>!!s&&/^(ftp|http|https):\/\/[^ "]+$/.test(s)||(u?.url?u?.url(t):`${t} must be a valid URL`),uppercase:(s="")=>!!s&&new RegExp("^[A-Z0-9 ]*$").test(s)||(u?.uppercase?u?.uppercase(t):`${t} must be format Uppercase`),mixedcase:(s="")=>!!s&&/[a-z]/.test(s)&&/[A-Z]/.test(s)||(u?.mixedcase?u?.mixedcase(t):`${t} must be mixed case`),specialcharacters:(s="")=>!!s&&/[^a-zA-Z0-9\s]/.test(s)||(u?.specialcharacters?u?.specialcharacters(t):`${t} must contain special characters`)}}[e];if(g){let{validate:s}=m.find(U=>U.validate)||{};typeof g=="function"?m.push({validate:{...s,...n,[e]:g}}):e==="pattern"?m.push({validate:{...s,...n,[`${e}${r}`]:g[r]}}):m.push({[e]:g})}return m};var ot=e=>{let r=oe(()=>x(),[]),{registerItem:t,unregisterItem:i,control:a,disabled:n,readOnly:p,formId:m,useWatch:o,setSelected:c,useSelected:d}=F(),{name:l,formId:f,...y}=O(),{formId:C,name:T}=w(),b=e.label,u=e.dataField;ze(()=>(t({id:r,...e}),()=>{i(r)}),[r,e]),!e.label&&!e.noLabel&&(b=h.changeAll(u)),T&&m===C&&(u=`${T}${u}`);let A=!1;typeof e.disabled=="boolean"?A=e.disabled:typeof y.disabled=="boolean"?A=y.disabled:A=!!n;let g=!1;typeof e.readOnly=="boolean"?g=e.readOnly:typeof y.readOnly=="boolean"?g=y.readOnly:g=!!p;let s=!1;typeof e.hidden=="boolean"&&(s=e.hidden);let U=Ze({name:u,control:a,disabled:A,defaultValue:e.defaultValue,shouldUnregister:e.shouldUnregister,rules:A||g||s?{required:!1}:G({...e,label:b,dataField:u})}),ne=U.fieldState.invalid,se=U.fieldState.error?.message,ie=o(u),ae=oe(()=>D(le=>c(ue=>({...ue,[u]:le||null}))),[c]),me=d(u);return{...e,setSelectedField:ae,label:b,dataField:u,controller:U,invalid:ne,messageError:se,selectedField:me,value:ie}};var qe=(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))(qe||{});var at=H;export{Be as BgsArrayForm,Le as BgsGroupForm,re as BgsReactFormProvider,qe as PatternTypeEnum,M as createStore,at as default,S as getFieldValue,w as useBgsArrayForm,F as useBgsForm,O as useBgsGroupForm,ot as useController,J as useFormArrayInit,Z as useFormInit};
1
+ import{useEffect as H,useRef as Ce}from"react";import{createContext as pe,useCallback as N,useContext as ce,useRef as fe}from"react";import{jsx as ge}from"react/jsx-runtime";var L=pe(void 0);function F(){let e=ce(L);return e||{}}function P({children:e,controller:r,onSubmit:t}){let i=fe([]),a=N(o=>{let p=i.current.findIndex(d=>d.id===o.id);if(p>-1){let d=[...i.current];d[p]=o,i.current=[...d]}else i.current.push(o)},[i]),n=N(o=>{i.current=i.current.filter(p=>p.id!==o)},[]),c=async(o,p)=>{r.setIsSubmit(!0);let d=p?await r.formControl.trigger():!0,l=r.getData();d&&t&&t({...l,...o},{...r})},m={...r,registerItem:a,unregisterItem:n,items:i.current,triggerSubmit:c};return ge(L.Provider,{value:m,children:e})}import ye from"react";function x(){let e=()=>Math.random()*16%16|0;return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,r=>(r==="x"?e():e()&3|8).toString(16))}var E=ye.memo(e=>{let{children:r,props:t}=e;return typeof r=="function"?r(t):r}),h={camelCase:(e="")=>(e=e.split(".").map(r=>(r=r.charAt(0).toUpperCase()+r.slice(1),r)).join(" "),e=e.replace(/([a-z0-9])([A-Z])/g,"$1 $2"),e.charAt(0).toUpperCase()+e.slice(1)),snackCase:(e="")=>{let t=e.replace(/_([a-z])/g,(i,a)=>a.toUpperCase()).replace(/([A-Z])/g," $1");return t=t.charAt(0).toUpperCase()+t.slice(1),t},changeAll:(e="",r=!1)=>{let t="";try{e=e?.split(".")[e?.split(".")?.length-1],e=e?.split("[]")[e?.split("[]")?.length-1],t=h.snackCase(h.camelCase(e)),r&&(t=t?.split(" ")?.map(i=>i?.length<=3?i?.toUpperCase():i)?.join(" "))}catch{}return t}};function K(e,r){try{return JSON.stringify(e)!==JSON.stringify(r)}catch{return!1}}var I=e=>(Object.keys(e).forEach(r=>{e[r]===void 0&&(e[r]=null)}),e),R=(e,r,t="")=>{if(!e)return t;if(e.hasOwnProperty(r))return e[r];let i=r.replace(/\[(\d+)\]/g,".$1").split("."),a=e;for(let n of i){if(a==null)return t;a=a[n]}return a===void 0?t:a};function D(e,r){let t=!1;return e&&typeof e=="object"&&Array.isArray(e)&&(typeof r=="number"?e.length>r&&(t=!0):t=!0),t}function M(e,r=0){let t;return function(...i){clearTimeout(t),t=setTimeout(()=>{e(...i)},r*1e3)}}import{useFieldArray as he,useForm as xe,useWatch as be}from"react-hook-form";import{useMemo as Te,useRef as Ae,useState as Ue}from"react";import{useSyncExternalStore as Fe}from"react";function z(e){let r=e,t=new Set;function i(){return r}function a(m){return t.add(m),()=>t.delete(m)}function n(m){typeof m=="function"?r=m(r):r=m,t.forEach(o=>o())}function c(m){return Fe(a,()=>m?m(r):r,()=>m?m(r):r)}return{getSnapshot:i,subscribe:a,setState:n,useStore:c}}var $=new WeakMap;function Z(e){return $.has(e)||$.set(e,z({})),$.get(e)}var q=(e,r)=>{e||(e={});let t=Ae(null),[i,a]=Ue(!1),n=xe({...r,reValidateMode:"onSubmit",mode:"all",defaultValues:e}),c=Z(n),m=Te(()=>x(),[]),o=l=>l?R(I(n.getValues()),l):I(n.getValues()),d={...n,ref:t,reset:l=>{l?typeof l=="string"?n.resetField(l,{}):typeof l=="object"&&D(l,0)&&l.forEach(f=>n.resetField(f)):n.reset()},updateData:l=>{let f=o();n.reset({...f,...l})},getData:o,formControl:n,useFieldArray:l=>he({control:n.control,name:l}),useWatch:l=>be({control:n.control,name:l}),isSubmit:i,formId:m,setIsSubmit:a,useSelected:l=>c.useStore(f=>R(f,l)),setSelected:c.setState};return[d,d]};import{Fragment as Se,jsx as w}from"react/jsx-runtime";var Re=({onSubmit:e,onChange:r=()=>{},onInvalid:t=()=>{},formData:i,controller:a,children:n,...c})=>{let m=a??q(),[o]=Array.isArray(m)?m:[m],p=Ce(void 0),d=async l=>{l.preventDefault(),l.stopPropagation(),o.setIsSubmit(!0);let f=await o.formControl.trigger(),y=o.getData();f?e&&e({...y},{...o}):t(o.formControl.formState.errors)};return H(()=>{i&&K(p.current||{},i)&&(o.formControl.reset(i),p.current=i)},[i,o.formControl.reset]),H(()=>{if(!r)return;let l=o.formControl.watch(r);return()=>l.unsubscribe()},[]),w(Se,{children:w(P,{controller:{...o,disabled:c?.disabled,readOnly:c?.readOnly},onSubmit:e,children:w("form",{...c,id:o.formId,ref:o.ref,onSubmit:d,children:n})})})},j=Re;import Be,{useCallback as O,useEffect as Oe}from"react";import{createContext as Pe,useContext as Ie}from"react";import{jsx as $e}from"react/jsx-runtime";var J=Pe(void 0);function v(){let e=Ie(J);return e||{}}function B({children:e,...r}){return $e(J.Provider,{value:r,children:e})}import{useFieldArray as we}from"react-hook-form";import{useMemo as ve}from"react";var _=e=>{let r=F(),t=we({control:r.control,name:e}),a={formArrayId:ve(()=>x(),[]),...t,...r};return[a,a]};import{Fragment as ke,jsx as S}from"react/jsx-runtime";var Q=({name:e,defaultData:r,controller:t,children:i})=>{let a=t??_(e),[n]=Array.isArray(a)?a:[a];return Oe(()=>{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)},[]),S(ke,{children:n.fields.map((c,m)=>{let o=`${e}.${m}.`,p={...n,append:O(d=>n.append(d),[]),fieldId:c.id,name:o,countFields:n.fields.length,removeItem:O(()=>n.remove(m),[]),watchItem:d=>n.watch(d?`${o}${d}`:o.slice(0,-1)),setValueItem:O((d,l)=>n.setValue(`${o}${d}`,l),[]),useSelectedItem:d=>n.useSelected(`${o}${d}`)};return S(Be.Fragment,{children:S(B,{...p,children:S(E,{children:i,props:p})})},c.id)})})};Q.displayName="BgsFormArray";var We=Q;import{useMemo as Ee}from"react";import{createContext as Ge,useContext as Ne}from"react";import{jsx as Le}from"react/jsx-runtime";var X=Ge(void 0);function W(){let e=Ne(X);return e||{}}function k({children:e,...r}){return Le(X.Provider,{value:r,children:e})}import{Fragment as De,jsx as Y}from"react/jsx-runtime";var V=({children:e,...r})=>{let t=F(),i=Ee(()=>x(),[]);return Y(De,{children:Y(k,{...t,...r,formGroupId:i,children:e})})};V.displayName="BgsFormGroup";var Ke=V;import{createContext as Me,useContext as ze}from"react";import{jsx as Ze}from"react/jsx-runtime";var ee=Me(void 0);function re(){let e=ze(ee);return e||{}}function te({children:e,...r}){return Ze(ee.Provider,{value:r,children:e})}import{useEffect as qe,useMemo as ne}from"react";import{useController as He}from"react-hook-form";function G({validationRules:e,label:r}){let{formControl:t,getData:i}=F(),a=[];return e&&(typeof e=="string"?oe(e,!0,r,t,i,{}).forEach(n=>a.push(n)):typeof e=="object"&&Object.keys(e).forEach(n=>{let{validate:c}=a.find(o=>o.validate)||{};if(["minLength","maxLength","min","max","match","diff","regexp","pattern","required","email"].includes(n)){let o=e[n],p="";if(n==="email"&&!o)return;["match","diff"].includes(n)&&typeof o=="object"&&(o=e[n].dataField,p=e[n].label),o!=null&&oe(n,o,r,t,i,c,p).forEach(d=>a.push(d))}else if(typeof e[n]=="object"){let o=e[n];a.push({validate:{...c,[n]:p=>o.validation(p)||o.message&&(typeof o.message=="string"?o.message:o.message(r))}})}})),Object.assign({},...a)}var oe=(e,r,t,i,a,n,c)=>{let m=[],{validationMessage:o}=re(),{required:p,minLength:d,maxLength:l,min:f,max:y,email:C,match:A,diff:b,pattern:u}=o||{},g={required:{value:!!r,message:p?p(t):`${t} is required`},minLength:{value:r,message:d?d(t,r):`${t} must be at least ${r} characters long`},maxLength:{value:r,message:l?l(t,r):`${t} cannot be more than ${r} characters long`},min:{value:Number(r),message:f?f(t,r):`${t} should be at least ${r}`},max:{value:Number(r),message:y?y(t,r):`${t} should be at most ${r}`},regexp:(s="")=>s?new RegExp(r.regexp).test(s)||`${t} ${r.message}`:!0,email:(s="")=>s?s.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,}))$/)||(C?C(t):`${t} must be type email`):!0,match:(s="")=>s?s===(a&&a(r))||(A?A(t,c||h.changeAll(r)):`${t} must be same with ${c||h.changeAll(r)}`):!0,diff:(s="")=>s?s!==(a&&a(r))||(b?b(t,c||h.changeAll(r)):`${t} must be different with ${c||h.changeAll(r)}`):!0,pattern:{alphabet:(s="")=>!!s&&new RegExp("^[A-Za-z ]*$").test(s)||(u?.alphabet?u?.alphabet(t):`${t} must be format Alphabet`),alphanumber:(s="")=>!!s&&new RegExp("^[A-Za-z0-9 ]*$").test(s)||(u?.alphanumber?u?.alphanumber(t):`${t} must be format Alphabet or Number`),number:(s="")=>!!s&&new RegExp("^[0-9]*$").test(s)||(u?.number?u?.number(t):`${t} must be format Number`),lowercase:(s="")=>!!s&&new RegExp("^[a-z0-9 ]*$").test(s)||(u?.lowercase?u?.lowercase(t):`${t} must be format Lowercase`),url:(s="")=>!!s&&/^(ftp|http|https):\/\/[^ "]+$/.test(s)||(u?.url?u?.url(t):`${t} must be a valid URL`),uppercase:(s="")=>!!s&&new RegExp("^[A-Z0-9 ]*$").test(s)||(u?.uppercase?u?.uppercase(t):`${t} must be format Uppercase`),mixedcase:(s="")=>!!s&&/[a-z]/.test(s)&&/[A-Z]/.test(s)||(u?.mixedcase?u?.mixedcase(t):`${t} must be mixed case`),specialcharacters:(s="")=>!!s&&/[^a-zA-Z0-9\s]/.test(s)||(u?.specialcharacters?u?.specialcharacters(t):`${t} must contain special characters`)}}[e];if(g){let{validate:s}=m.find(U=>U.validate)||{};typeof g=="function"?m.push({validate:{...s,...n,[e]:g}}):e==="pattern"?m.push({validate:{...s,...n,[`${e}${r}`]:g[r]}}):m.push({[e]:g})}return m};var at=e=>{let r=ne(()=>x(),[]),{registerItem:t,unregisterItem:i,control:a,disabled:n,readOnly:c,formId:m,useWatch:o,setSelected:p,useSelected:d}=F(),{name:l,formId:f,...y}=W(),{formId:C,name:A}=v(),b=e.label,u=e.dataField;qe(()=>(t({id:r,...e}),()=>{i(r)}),[r,e]),!e.label&&!e.noLabel&&(b=h.changeAll(u)),A&&m===C&&(u=`${A}${u}`);let T=!1;typeof e.disabled=="boolean"?T=e.disabled:typeof y.disabled=="boolean"?T=y.disabled:T=!!n;let g=!1;typeof e.readOnly=="boolean"?g=e.readOnly:typeof y.readOnly=="boolean"?g=y.readOnly:g=!!c;let s=!1;typeof e.hidden=="boolean"&&(s=e.hidden);let U=He({name:u,control:a,disabled:T,defaultValue:e.defaultValue,shouldUnregister:e.shouldUnregister,rules:T||g||s?{required:!1}:G({...e,label:b,dataField:u})}),se=U.fieldState.invalid,ie=U.fieldState.error?.message,ae=o(u),me=ne(()=>M(de=>p(ue=>({...ue,[u]:de||null}))),[p]),le=d(u);return{...e,setSelectedField:me,label:b,dataField:u,controller:U,invalid:se,messageError:ie,selectedField:le,value:ae}};var je=(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))(je||{});var ut=j;export{We as BgsArrayForm,Ke as BgsGroupForm,te as BgsReactFormProvider,je as PatternTypeEnum,z as createStore,ut as default,R as getFieldValue,v as useBgsArrayForm,F as useBgsForm,W as useBgsGroupForm,at as useController,_ as useFormArrayInit,q as useFormInit};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bgscore/react-form",
3
- "version": "0.0.43",
3
+ "version": "0.0.44",
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",