@bgscore/react-form 0.0.49 → 0.0.51

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 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(u=>u.id===o.id);if(p>-1){let u=[...i.current];u[p]=o,i.current=[...u]}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 u=p?await r.formControl.trigger():!0,l=r.getData();u&&t&&t({...l,...o},{...r})},m={...r,registerItem:a,unregisterItem:n,items:i.current,triggerSubmit:c};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 Ve=_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 E(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),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 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,M({})),$.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}),c=z(n),m=_react.useMemo.call(void 0, ()=>x(),[]),o=l=>l?S(I(n.getValues()),l):I(n.getValues()),u={...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=>c.useStore(f=>S(f,l)),setSelected:c.setState};return[u,u]};var Se=({onSubmit:e,onChange:r=()=>{},onInvalid:t=()=>{},formData:i,controller:a,children:n,...c})=>{let m=_nullishCoalesce(a, () => (Z())),[o]=Array.isArray(m)?m:[m],p=_react.useRef.call(void 0, void 0),u=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(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:u,children:n})})})},H=Se;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 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 Q=({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((c,m)=>{let o=`${e}.${m}.`,p={...n,index:m,fieldId:c.id,name:o,countFields:n.fields.length,removeItem:()=>n.remove(m),watchItem:u=>n.watch(u?`${o}${u}`:o.slice(0,-1)),setValueItem:(u,l)=>n.setValue(`${o}${u}`,l),useSelectedItem:u=>n.useSelected(`${o}${u}`)};return _jsxruntime.jsx.call(void 0, _react2.default.Fragment,{children:_jsxruntime.jsx.call(void 0, B,{...p,children:_jsxruntime.jsx.call(void 0, ke,{children:i,props:p})})},c.id)})})};Q.displayName="BgsFormArray";var We=Q,ke=_react2.default.memo(({children:e,props:r})=>_jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:L(e,r)}));var Y=_react.createContext.call(void 0, void 0);function O(){let e=_react.useContext.call(void 0, Y);return e||{}}function W({children:e,...r}){return _jsxruntime.jsx.call(void 0, Y.Provider,{value:r,children:e})}var ee=({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})})};ee.displayName="BgsFormGroup";var Ke=ee;var re=_react.createContext.call(void 0, void 0);function te(){let e=_react.useContext.call(void 0, re);return e||{}}function oe({children:e,...r}){return _jsxruntime.jsx.call(void 0, re.Provider,{value:r,children:e})}function k({validationRules:e,label:r}){let{formControl:t,getData:i}=F(),a=[];return e&&(typeof e=="string"?ne(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&&ne(n,o,r,t,i,c,p).forEach(u=>a.push(u))}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 ne=(e,r,t,i,a,n,c)=>{let m=[],{validationMessage:o}=te(),{required:p,minLength:u,maxLength:l,min:f,max:y,email:R,match:A,diff:b,pattern:d}=o||{},g={required:{value:!!r,message:p?p(t):`${t} is required`},minLength:{value:r,message:u?u(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,}))$/)||(R?R(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([d, 'optionalAccess', _25 => _25.alphabet])?_optionalChain([d, '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([d, 'optionalAccess', _28 => _28.alphanumber])?_optionalChain([d, '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([d, 'optionalAccess', _31 => _31.number])?_optionalChain([d, 'optionalAccess', _32 => _32.number, 'call', _33 => _33(t)]):`${t} must be format Number`),lowercase:(s="")=>!!s&&new RegExp("^[a-z0-9 ]*$").test(s)||(_optionalChain([d, 'optionalAccess', _34 => _34.lowercase])?_optionalChain([d, 'optionalAccess', _35 => _35.lowercase, 'call', _36 => _36(t)]):`${t} must be format Lowercase`),url:(s="")=>!!s&&/^(ftp|http|https):\/\/[^ "]+$/.test(s)||(_optionalChain([d, 'optionalAccess', _37 => _37.url])?_optionalChain([d, '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([d, 'optionalAccess', _40 => _40.uppercase])?_optionalChain([d, '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([d, 'optionalAccess', _43 => _43.mixedcase])?_optionalChain([d, 'optionalAccess', _44 => _44.mixedcase, 'call', _45 => _45(t)]):`${t} must be mixed case`),specialcharacters:(s="")=>!!s&&/[^a-zA-Z0-9\s]/.test(s)||(_optionalChain([d, 'optionalAccess', _46 => _46.specialcharacters])?_optionalChain([d, '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:u}=F(),{name:l,formId:f,...y}=O(),{formId:R,name:A}=v(),b=e.label,d=e.dataField;_react.useEffect.call(void 0, ()=>(t({id:r,...e}),()=>{i(r)}),[r,e]),!e.label&&!e.noLabel&&(b=h.changeAll(d)),A&&m===R&&(d=`${A}${d}`);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:d,control:a,disabled:T,defaultValue:e.defaultValue,shouldUnregister:e.shouldUnregister,rules:T||g||s?{required:!1}:k({...e,label:b,dataField:d})}),ie=U.fieldState.invalid,ae=_optionalChain([U, 'access', _49 => _49.fieldState, 'access', _50 => _50.error, 'optionalAccess', _51 => _51.message]),me=o(d),le=_react.useMemo.call(void 0, ()=>D(ue=>p(pe=>({...pe,[d]:ue||null}))),[p]),de=u(d);return{...e,setSelectedField:le,label:b,dataField:d,controller:U,invalid:ie,messageError:ae,selectedField:de,value:me}};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=H;exports.BgsArrayForm = We; exports.BgsGroupForm = Ke; exports.BgsReactFormProvider = oe; exports.PatternTypeEnum = je; exports.createStore = M; exports.default = ut; exports.getFieldValue = S; exports.useBgsArrayForm = v; exports.useBgsForm = F; exports.useBgsGroupForm = O; exports.useController = at; 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 y(){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 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)},[]),u=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:u};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))}function I(e,r){return typeof e=="function"?e(r):e}var Ve=_react2.default.memo(e=>{let{children:r,props:t}=e;return typeof r=="function"?r(t):r}),F={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=F.snackCase(F.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 $=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 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 u(m){return _react.useSyncExternalStore.call(void 0, a,()=>m?m(r):r,()=>m?m(r):r)}return{getSnapshot:i,subscribe:a,setState:n,useStore:u}}var w=new WeakMap;function q(e){return w.has(e)||w.set(e,M({})),w.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}),u=q(n),m=_react.useMemo.call(void 0, ()=>x(),[]),o=l=>l?R($(n.getValues()),l):$(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=>u.useStore(f=>R(f,l)),setSelected:u.setState};return[d,d]};var Se=({onSubmit:e,onChange:r,onInvalid:t,formData:i,controller:a,children:n,...u})=>{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(),b=o.getData();f?e&&e({...b},{...o}):t&&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, P,{controller:{...o,disabled:_optionalChain([u, 'optionalAccess', _23 => _23.disabled]),readOnly:_optionalChain([u, 'optionalAccess', _24 => _24.readOnly])},onSubmit:e,children:_jsxruntime.jsx.call(void 0, "form",{...u,id:o.formId,ref:o.ref,onSubmit:d,children:n})})})},Z=Se;var j=_react.createContext.call(void 0, void 0);function v(){let e=_react.useContext.call(void 0, j);return e||{}}function O({children:e,...r}){return _jsxruntime.jsx.call(void 0, j.Provider,{value:r,children:e})}var J=e=>{let r=y(),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, () => (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((u,m)=>{let o=`${e}.${m}.`,c={...n,index:m,fieldId:u.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, O,{...c,children:I(i,c)})},u.id)})})};Q.displayName="BgsFormArray";var We=Q,Or=_react2.default.memo(({children:e,props:r})=>_jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:I(e,r)}));var Y=_react.createContext.call(void 0, void 0);function W(){let e=_react.useContext.call(void 0, Y);return e||{}}function k({children:e,...r}){return _jsxruntime.jsx.call(void 0, Y.Provider,{value:r,children:e})}var ee=({children:e,...r})=>{let t=y(),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})})};ee.displayName="BgsFormGroup";var Ee=ee;var re=_react.createContext.call(void 0, void 0);function te(){let e=_react.useContext.call(void 0, re);return e||{}}function oe({children:e,...r}){return _jsxruntime.jsx.call(void 0, re.Provider,{value:r,children:e})}function G({validationRules:e,label:r}){let{formControl:t,getData:i}=y(),a=[];return e&&(typeof e=="string"?ne(e,!0,r,t,i,{}).forEach(n=>a.push(n)):typeof e=="object"&&Object.keys(e).forEach(n=>{let{validate:u}=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&&ne(n,o,r,t,i,u,c).forEach(d=>a.push(d))}else if(typeof e[n]=="object"){let o=e[n];a.push({validate:{...u,[n]:c=>o.validation(c)||o.message&&(typeof o.message=="string"?o.message:o.message(r))}})}})),Object.assign({},...a)}var ne=(e,r,t,i,a,n,u)=>{let m=[],{validationMessage:o}=te(),{required:c,minLength:d,maxLength:l,min:f,max:b,email:A,match:T,diff:g,pattern:p}=o||{},h={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:b?b(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,}))$/)||(A?A(t):`${t} must be type email`):!0,match:(s="")=>s?s===(a&&a(r))||(T?T(t,u||F.changeAll(r)):`${t} must be same with ${u||F.changeAll(r)}`):!0,diff:(s="")=>s?s!==(a&&a(r))||(g?g(t,u||F.changeAll(r)):`${t} must be different with ${u||F.changeAll(r)}`):!0,pattern:{alphabet:(s="")=>!!s&&new RegExp("^[A-Za-z ]*$").test(s)||(_optionalChain([p, 'optionalAccess', _25 => _25.alphabet])?_optionalChain([p, '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([p, 'optionalAccess', _28 => _28.alphanumber])?_optionalChain([p, '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([p, 'optionalAccess', _31 => _31.number])?_optionalChain([p, 'optionalAccess', _32 => _32.number, 'call', _33 => _33(t)]):`${t} must be format Number`),lowercase:(s="")=>!!s&&new RegExp("^[a-z0-9 ]*$").test(s)||(_optionalChain([p, 'optionalAccess', _34 => _34.lowercase])?_optionalChain([p, 'optionalAccess', _35 => _35.lowercase, 'call', _36 => _36(t)]):`${t} must be format Lowercase`),url:(s="")=>!!s&&/^(ftp|http|https):\/\/[^ "]+$/.test(s)||(_optionalChain([p, 'optionalAccess', _37 => _37.url])?_optionalChain([p, '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([p, 'optionalAccess', _40 => _40.uppercase])?_optionalChain([p, '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([p, 'optionalAccess', _43 => _43.mixedcase])?_optionalChain([p, 'optionalAccess', _44 => _44.mixedcase, 'call', _45 => _45(t)]):`${t} must be mixed case`),specialcharacters:(s="")=>!!s&&/[^a-zA-Z0-9\s]/.test(s)||(_optionalChain([p, 'optionalAccess', _46 => _46.specialcharacters])?_optionalChain([p, 'optionalAccess', _47 => _47.specialcharacters, 'call', _48 => _48(t)]):`${t} must contain special characters`)}}[e];if(h){let{validate:s}=m.find(C=>C.validate)||{};typeof h=="function"?m.push({validate:{...s,...n,[e]:h}}):e==="pattern"?m.push({validate:{...s,...n,[`${e}${r}`]:h[r]}}):m.push({[e]:h})}return m};var mt=e=>{let r=_react.useMemo.call(void 0, ()=>x(),[]),{registerItem:t,unregisterItem:i,control:a,disabled:n,readOnly:u,formId:m,setSelected:o,useSelected:c}=y(),{name:d,formId:l,...f}=W(),{formId:b,name:A}=v(),T=e.label,g=e.dataField;_react.useEffect.call(void 0, ()=>(t({id:r,...e}),()=>{i(r)}),[r,e]),!e.label&&!e.noLabel&&(T=F.changeAll(g)),e.disabledHierarchy||(A&&m===b&&(g=`${A}${g}`),d&&m===l&&(g=`${d}${g}`));let p=!1;typeof e.disabled=="boolean"?p=e.disabled:typeof f.disabled=="boolean"?p=f.disabled:p=!!n;let U=!1;typeof e.readOnly=="boolean"?U=e.readOnly:typeof f.readOnly=="boolean"?U=f.readOnly:U=!!u;let h=!1;typeof e.hidden=="boolean"&&(h=e.hidden);let s=p||U||h?{required:!1}:G({...e,label:T,dataField:g});e.required&&(s={...s,required:e.required});let C=_reacthookform.useController.call(void 0, {name:g,control:a,disabled:p,defaultValue:e.defaultValue,shouldUnregister:e.shouldUnregister,rules:s}),ie=C.fieldState.invalid,ae=_optionalChain([C, 'access', _49 => _49.fieldState, 'access', _50 => _50.error, 'optionalAccess', _51 => _51.message]),me=_reacthookform.useWatch.call(void 0, {name:g,control:a,defaultValue:e.defaultValue}),le=_react.useMemo.call(void 0, ()=>D(ue=>o(ce=>({...ce,[g]:ue||null}))),[o]),de=c(g);return{...e,setSelectedField:le,label:T,dataField:g,controller:C,invalid:ie,messageError:ae,selectedField:de,value:me}};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 ct=Z;exports.BgsFormArray = We; exports.BgsFormGroup = Ee; exports.BgsReactFormProvider = oe; exports.PatternTypeEnum = je; exports.createStore = M; exports.default = ct; exports.getFieldValue = R; exports.useBgsController = mt; exports.useBgsForm = y; exports.useBgsFormArray = v; exports.useBgsFormArrayInit = J; exports.useBgsFormGroup = W; exports.useBgsFormInit = z;
package/dist/index.d.cts CHANGED
@@ -77,6 +77,8 @@ interface ControllerProps {
77
77
  readOnly?: boolean;
78
78
  defaultValue?: any;
79
79
  shouldUnregister?: boolean;
80
+ required?: boolean;
81
+ disabledHierarchy?: boolean;
80
82
  }
81
83
  type PatternType = "alphabet" | "alphanumber" | "number" | "lowercase" | "url" | "uppercase" | "mixedcase" | "specialcharacters";
82
84
  declare enum PatternTypeEnum {
@@ -163,10 +165,10 @@ declare const FormGroup: {
163
165
  displayName: string;
164
166
  };
165
167
 
166
- declare function useFormArray<T = unknown>(): UseFormArray<T>;
167
-
168
168
  declare function useForm<T = unknown>(): UseBgsForm<T>;
169
169
 
170
+ declare function useFormArray<T = unknown>(): UseFormArray<T>;
171
+
170
172
  type UseFormGroup = FormGroupProps & UseFormInitReturn & {
171
173
  formGroupId: string;
172
174
  };
@@ -197,11 +199,11 @@ interface BgsReactFormContextData {
197
199
  }
198
200
  declare function BgsReactFormProvider({ children, ...value }: PropsWithChildren<BgsReactFormContextData>): react_jsx_runtime.JSX.Element;
199
201
 
200
- declare const useFormInit: <T = unknown>(defaultValues?: Partial<T> | undefined, options?: UseFormProps) => UseFormInitReturn<T>[];
202
+ declare const useBgsFormInit: <T = unknown>(defaultValues?: Partial<T> | undefined, options?: UseFormProps) => UseFormInitReturn<T>[];
201
203
 
202
- declare const useFormArrayInit: <T = unknown>(name: string) => UseFormArrayInitReturn<T>[];
204
+ declare const useBgsFormArrayInit: <T = unknown>(name: string) => UseFormArrayInitReturn<T>[];
203
205
 
204
- declare const useController: (props: ControllerProps) => UseController;
206
+ declare const useBgsController: (props: ControllerProps) => UseController;
205
207
 
206
208
  declare const getFieldValue: <T, P extends NestedKeyOf<T>, D = undefined>(obj: T, path: P, defaultValue?: D) => PathValue<T, P> | D;
207
209
 
@@ -216,4 +218,4 @@ declare function createStore<T>(initialState: T): {
216
218
  };
217
219
  };
218
220
 
219
- export { FormArray as BgsArrayForm, 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, createStore, BgsForm as default, getFieldValue, useFormArray as useBgsArrayForm, useForm as useBgsForm, useFormGroup as useBgsGroupForm, useController, useFormArrayInit, useFormInit };
221
+ export { FormArray as BgsFormArray, FormGroup as BgsFormGroup, 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, createStore, BgsForm as default, getFieldValue, useBgsController, useForm as useBgsForm, useFormArray as useBgsFormArray, useBgsFormArrayInit, useFormGroup as useBgsFormGroup, useBgsFormInit };
package/dist/index.d.ts CHANGED
@@ -77,6 +77,8 @@ interface ControllerProps {
77
77
  readOnly?: boolean;
78
78
  defaultValue?: any;
79
79
  shouldUnregister?: boolean;
80
+ required?: boolean;
81
+ disabledHierarchy?: boolean;
80
82
  }
81
83
  type PatternType = "alphabet" | "alphanumber" | "number" | "lowercase" | "url" | "uppercase" | "mixedcase" | "specialcharacters";
82
84
  declare enum PatternTypeEnum {
@@ -163,10 +165,10 @@ declare const FormGroup: {
163
165
  displayName: string;
164
166
  };
165
167
 
166
- declare function useFormArray<T = unknown>(): UseFormArray<T>;
167
-
168
168
  declare function useForm<T = unknown>(): UseBgsForm<T>;
169
169
 
170
+ declare function useFormArray<T = unknown>(): UseFormArray<T>;
171
+
170
172
  type UseFormGroup = FormGroupProps & UseFormInitReturn & {
171
173
  formGroupId: string;
172
174
  };
@@ -197,11 +199,11 @@ interface BgsReactFormContextData {
197
199
  }
198
200
  declare function BgsReactFormProvider({ children, ...value }: PropsWithChildren<BgsReactFormContextData>): react_jsx_runtime.JSX.Element;
199
201
 
200
- declare const useFormInit: <T = unknown>(defaultValues?: Partial<T> | undefined, options?: UseFormProps) => UseFormInitReturn<T>[];
202
+ declare const useBgsFormInit: <T = unknown>(defaultValues?: Partial<T> | undefined, options?: UseFormProps) => UseFormInitReturn<T>[];
201
203
 
202
- declare const useFormArrayInit: <T = unknown>(name: string) => UseFormArrayInitReturn<T>[];
204
+ declare const useBgsFormArrayInit: <T = unknown>(name: string) => UseFormArrayInitReturn<T>[];
203
205
 
204
- declare const useController: (props: ControllerProps) => UseController;
206
+ declare const useBgsController: (props: ControllerProps) => UseController;
205
207
 
206
208
  declare const getFieldValue: <T, P extends NestedKeyOf<T>, D = undefined>(obj: T, path: P, defaultValue?: D) => PathValue<T, P> | D;
207
209
 
@@ -216,4 +218,4 @@ declare function createStore<T>(initialState: T): {
216
218
  };
217
219
  };
218
220
 
219
- export { FormArray as BgsArrayForm, 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, createStore, BgsForm as default, getFieldValue, useFormArray as useBgsArrayForm, useForm as useBgsForm, useFormGroup as useBgsGroupForm, useController, useFormArrayInit, useFormInit };
221
+ export { FormArray as BgsFormArray, FormGroup as BgsFormGroup, 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, createStore, BgsForm as default, getFieldValue, useBgsController, useForm as useBgsForm, useFormArray as useBgsFormArray, useBgsFormArrayInit, useFormGroup as useBgsFormGroup, useBgsFormInit };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{useEffect as q,useRef as Re}from"react";import{createContext as ce,useCallback as G,useContext as fe,useRef as ge}from"react";import{jsx as ye}from"react/jsx-runtime";var N=ce(void 0);function F(){let e=fe(N);return e||{}}function P({children:e,controller:r,onSubmit:t}){let i=ge([]),a=G(o=>{let p=i.current.findIndex(u=>u.id===o.id);if(p>-1){let u=[...i.current];u[p]=o,i.current=[...u]}else i.current.push(o)},[i]),n=G(o=>{i.current=i.current.filter(p=>p.id!==o)},[]),c=async(o,p)=>{r.setIsSubmit(!0);let u=p?await r.formControl.trigger():!0,l=r.getData();u&&t&&t({...l,...o},{...r})},m={...r,registerItem:a,unregisterItem:n,items:i.current,triggerSubmit:c};return ye(N.Provider,{value:m,children:e})}import Fe 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))}function L(e,r){return typeof e=="function"?e(r):e}var Ve=Fe.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 E(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),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 xe,useForm as be,useWatch as Te}from"react-hook-form";import{useMemo as Ae,useRef as Ue,useState as Ce}from"react";import{useSyncExternalStore as he}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 c(m){return he(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,M({})),$.get(e)}var Z=(e,r)=>{e||(e={});let t=Ue(null),[i,a]=Ce(!1),n=be({...r,reValidateMode:"onSubmit",mode:"all",defaultValues:e}),c=z(n),m=Ae(()=>x(),[]),o=l=>l?S(I(n.getValues()),l):I(n.getValues()),u={...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=>xe({control:n.control,name:l}),useWatch:l=>Te({control:n.control,name:l}),isSubmit:i,formId:m,setIsSubmit:a,useSelected:l=>c.useStore(f=>S(f,l)),setSelected:c.setState};return[u,u]};import{Fragment as Pe,jsx as w}from"react/jsx-runtime";var Se=({onSubmit:e,onChange:r=()=>{},onInvalid:t=()=>{},formData:i,controller:a,children:n,...c})=>{let m=a??Z(),[o]=Array.isArray(m)?m:[m],p=Re(void 0),u=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(p.current||{},i)&&(o.formControl.reset(i),p.current=i)},[i,o.formControl.reset]),q(()=>{if(!r)return;let l=o.formControl.watch(r);return()=>l.unsubscribe()},[]),w(Pe,{children:w(P,{controller:{...o,disabled:c?.disabled,readOnly:c?.readOnly},onSubmit:e,children:w("form",{...c,id:o.formId,ref:o.ref,onSubmit:u,children:n})})})},H=Se;import _,{useEffect as Oe}from"react";import{createContext as Ie,useContext as $e}from"react";import{jsx as we}from"react/jsx-runtime";var j=Ie(void 0);function v(){let e=$e(j);return e||{}}function B({children:e,...r}){return we(j.Provider,{value:r,children:e})}import{useFieldArray as ve}from"react-hook-form";import{useMemo as Be}from"react";var J=e=>{let r=F(),t=ve({control:r.control,name:e}),a={formArrayId:Be(()=>x(),[]),...t,...r};return[a,a]};import{Fragment as X,jsx as C}from"react/jsx-runtime";var Q=({name:e,defaultData:r,controller:t,children:i})=>{let a=t??J(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)},[]),C(X,{children:n.fields.map((c,m)=>{let o=`${e}.${m}.`,p={...n,index:m,fieldId:c.id,name:o,countFields:n.fields.length,removeItem:()=>n.remove(m),watchItem:u=>n.watch(u?`${o}${u}`:o.slice(0,-1)),setValueItem:(u,l)=>n.setValue(`${o}${u}`,l),useSelectedItem:u=>n.useSelected(`${o}${u}`)};return C(_.Fragment,{children:C(B,{...p,children:C(ke,{children:i,props:p})})},c.id)})})};Q.displayName="BgsFormArray";var We=Q,ke=_.memo(({children:e,props:r})=>C(X,{children:L(e,r)}));import{useMemo as Ee}from"react";import{createContext as Ge,useContext as Ne}from"react";import{jsx as Le}from"react/jsx-runtime";var Y=Ge(void 0);function O(){let e=Ne(Y);return e||{}}function W({children:e,...r}){return Le(Y.Provider,{value:r,children:e})}import{Fragment as De,jsx as V}from"react/jsx-runtime";var ee=({children:e,...r})=>{let t=F(),i=Ee(()=>x(),[]);return V(De,{children:V(W,{...t,...r,formGroupId:i,children:e})})};ee.displayName="BgsFormGroup";var Ke=ee;import{createContext as Me,useContext as ze}from"react";import{jsx as Ze}from"react/jsx-runtime";var re=Me(void 0);function te(){let e=ze(re);return e||{}}function oe({children:e,...r}){return Ze(re.Provider,{value:r,children:e})}import{useEffect as qe,useMemo as se}from"react";import{useController as He}from"react-hook-form";function k({validationRules:e,label:r}){let{formControl:t,getData:i}=F(),a=[];return e&&(typeof e=="string"?ne(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&&ne(n,o,r,t,i,c,p).forEach(u=>a.push(u))}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 ne=(e,r,t,i,a,n,c)=>{let m=[],{validationMessage:o}=te(),{required:p,minLength:u,maxLength:l,min:f,max:y,email:R,match:A,diff:b,pattern:d}=o||{},g={required:{value:!!r,message:p?p(t):`${t} is required`},minLength:{value:r,message:u?u(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,}))$/)||(R?R(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)||(d?.alphabet?d?.alphabet(t):`${t} must be format Alphabet`),alphanumber:(s="")=>!!s&&new RegExp("^[A-Za-z0-9 ]*$").test(s)||(d?.alphanumber?d?.alphanumber(t):`${t} must be format Alphabet or Number`),number:(s="")=>!!s&&new RegExp("^[0-9]*$").test(s)||(d?.number?d?.number(t):`${t} must be format Number`),lowercase:(s="")=>!!s&&new RegExp("^[a-z0-9 ]*$").test(s)||(d?.lowercase?d?.lowercase(t):`${t} must be format Lowercase`),url:(s="")=>!!s&&/^(ftp|http|https):\/\/[^ "]+$/.test(s)||(d?.url?d?.url(t):`${t} must be a valid URL`),uppercase:(s="")=>!!s&&new RegExp("^[A-Z0-9 ]*$").test(s)||(d?.uppercase?d?.uppercase(t):`${t} must be format Uppercase`),mixedcase:(s="")=>!!s&&/[a-z]/.test(s)&&/[A-Z]/.test(s)||(d?.mixedcase?d?.mixedcase(t):`${t} must be mixed case`),specialcharacters:(s="")=>!!s&&/[^a-zA-Z0-9\s]/.test(s)||(d?.specialcharacters?d?.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=se(()=>x(),[]),{registerItem:t,unregisterItem:i,control:a,disabled:n,readOnly:c,formId:m,useWatch:o,setSelected:p,useSelected:u}=F(),{name:l,formId:f,...y}=O(),{formId:R,name:A}=v(),b=e.label,d=e.dataField;qe(()=>(t({id:r,...e}),()=>{i(r)}),[r,e]),!e.label&&!e.noLabel&&(b=h.changeAll(d)),A&&m===R&&(d=`${A}${d}`);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:d,control:a,disabled:T,defaultValue:e.defaultValue,shouldUnregister:e.shouldUnregister,rules:T||g||s?{required:!1}:k({...e,label:b,dataField:d})}),ie=U.fieldState.invalid,ae=U.fieldState.error?.message,me=o(d),le=se(()=>D(ue=>p(pe=>({...pe,[d]:ue||null}))),[p]),de=u(d);return{...e,setSelectedField:le,label:b,dataField:d,controller:U,invalid:ie,messageError:ae,selectedField:de,value:me}};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=H;export{We as BgsArrayForm,Ke as BgsGroupForm,oe as BgsReactFormProvider,je as PatternTypeEnum,M as createStore,ut as default,S as getFieldValue,v as useBgsArrayForm,F as useBgsForm,O as useBgsGroupForm,at as useController,J as useFormArrayInit,Z as useFormInit};
1
+ import{useEffect as H,useRef as Re}from"react";import{createContext as pe,useCallback as N,useContext as fe,useRef as ge}from"react";import{jsx as ye}from"react/jsx-runtime";var L=pe(void 0);function y(){let e=fe(L);return e||{}}function P({children:e,controller:r,onSubmit:t}){let i=ge([]),a=N(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=N(o=>{i.current=i.current.filter(c=>c.id!==o)},[]),u=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:u};return ye(L.Provider,{value:m,children:e})}import Fe 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))}function I(e,r){return typeof e=="function"?e(r):e}var Ve=Fe.memo(e=>{let{children:r,props:t}=e;return typeof r=="function"?r(t):r}),F={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=F.snackCase(F.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 $=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 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 xe,useForm as be,useWatch as Te}from"react-hook-form";import{useMemo as Ae,useRef as Ue,useState as Ce}from"react";import{useSyncExternalStore as he}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 u(m){return he(a,()=>m?m(r):r,()=>m?m(r):r)}return{getSnapshot:i,subscribe:a,setState:n,useStore:u}}var w=new WeakMap;function q(e){return w.has(e)||w.set(e,M({})),w.get(e)}var z=(e,r)=>{e||(e={});let t=Ue(null),[i,a]=Ce(!1),n=be({...r,reValidateMode:"onSubmit",mode:"all",defaultValues:e}),u=q(n),m=Ae(()=>x(),[]),o=l=>l?R($(n.getValues()),l):$(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=>xe({control:n.control,name:l}),useWatch:l=>Te({control:n.control,name:l}),isSubmit:i,formId:m,setIsSubmit:a,useSelected:l=>u.useStore(f=>R(f,l)),setSelected:u.setState};return[d,d]};import{Fragment as Pe,jsx as B}from"react/jsx-runtime";var Se=({onSubmit:e,onChange:r,onInvalid:t,formData:i,controller:a,children:n,...u})=>{let m=a??z(),[o]=Array.isArray(m)?m:[m],c=Re(void 0),d=async l=>{l.preventDefault(),l.stopPropagation(),o.setIsSubmit(!0);let f=await o.formControl.trigger(),b=o.getData();f?e&&e({...b},{...o}):t&&t(o.formControl.formState.errors)};return H(()=>{i&&E(c.current||{},i)&&(o.formControl.reset(i),c.current=i)},[i,o.formControl.reset]),H(()=>{if(!r)return;let l=o.formControl.watch(r);return()=>l.unsubscribe()},[]),B(Pe,{children:B(P,{controller:{...o,disabled:u?.disabled,readOnly:u?.readOnly},onSubmit:e,children:B("form",{...u,id:o.formId,ref:o.ref,onSubmit:d,children:n})})})},Z=Se;import _,{useEffect as Oe}from"react";import{createContext as Ie,useContext as $e}from"react";import{jsx as we}from"react/jsx-runtime";var j=Ie(void 0);function v(){let e=$e(j);return e||{}}function O({children:e,...r}){return we(j.Provider,{value:r,children:e})}import{useFieldArray as Be}from"react-hook-form";import{useMemo as ve}from"react";var J=e=>{let r=y(),t=Be({control:r.control,name:e}),a={formArrayId:ve(()=>x(),[]),...t,...r};return[a,a]};import{Fragment as X,jsx as S}from"react/jsx-runtime";var Q=({name:e,defaultData:r,controller:t,children:i})=>{let a=t??J(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(X,{children:n.fields.map((u,m)=>{let o=`${e}.${m}.`,c={...n,index:m,fieldId:u.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 S(_.Fragment,{children:S(O,{...c,children:I(i,c)})},u.id)})})};Q.displayName="BgsFormArray";var We=Q,Or=_.memo(({children:e,props:r})=>S(X,{children:I(e,r)}));import{useMemo as Le}from"react";import{createContext as ke,useContext as Ge}from"react";import{jsx as Ne}from"react/jsx-runtime";var Y=ke(void 0);function W(){let e=Ge(Y);return e||{}}function k({children:e,...r}){return Ne(Y.Provider,{value:r,children:e})}import{Fragment as Ke,jsx as V}from"react/jsx-runtime";var ee=({children:e,...r})=>{let t=y(),i=Le(()=>x(),[]);return V(Ke,{children:V(k,{...t,...r,formGroupId:i,children:e})})};ee.displayName="BgsFormGroup";var Ee=ee;import{createContext as De,useContext as Me}from"react";import{jsx as qe}from"react/jsx-runtime";var re=De(void 0);function te(){let e=Me(re);return e||{}}function oe({children:e,...r}){return qe(re.Provider,{value:r,children:e})}import{useEffect as ze,useMemo as se}from"react";import{useController as He,useWatch as Ze}from"react-hook-form";function G({validationRules:e,label:r}){let{formControl:t,getData:i}=y(),a=[];return e&&(typeof e=="string"?ne(e,!0,r,t,i,{}).forEach(n=>a.push(n)):typeof e=="object"&&Object.keys(e).forEach(n=>{let{validate:u}=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&&ne(n,o,r,t,i,u,c).forEach(d=>a.push(d))}else if(typeof e[n]=="object"){let o=e[n];a.push({validate:{...u,[n]:c=>o.validation(c)||o.message&&(typeof o.message=="string"?o.message:o.message(r))}})}})),Object.assign({},...a)}var ne=(e,r,t,i,a,n,u)=>{let m=[],{validationMessage:o}=te(),{required:c,minLength:d,maxLength:l,min:f,max:b,email:A,match:T,diff:g,pattern:p}=o||{},h={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:b?b(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,}))$/)||(A?A(t):`${t} must be type email`):!0,match:(s="")=>s?s===(a&&a(r))||(T?T(t,u||F.changeAll(r)):`${t} must be same with ${u||F.changeAll(r)}`):!0,diff:(s="")=>s?s!==(a&&a(r))||(g?g(t,u||F.changeAll(r)):`${t} must be different with ${u||F.changeAll(r)}`):!0,pattern:{alphabet:(s="")=>!!s&&new RegExp("^[A-Za-z ]*$").test(s)||(p?.alphabet?p?.alphabet(t):`${t} must be format Alphabet`),alphanumber:(s="")=>!!s&&new RegExp("^[A-Za-z0-9 ]*$").test(s)||(p?.alphanumber?p?.alphanumber(t):`${t} must be format Alphabet or Number`),number:(s="")=>!!s&&new RegExp("^[0-9]*$").test(s)||(p?.number?p?.number(t):`${t} must be format Number`),lowercase:(s="")=>!!s&&new RegExp("^[a-z0-9 ]*$").test(s)||(p?.lowercase?p?.lowercase(t):`${t} must be format Lowercase`),url:(s="")=>!!s&&/^(ftp|http|https):\/\/[^ "]+$/.test(s)||(p?.url?p?.url(t):`${t} must be a valid URL`),uppercase:(s="")=>!!s&&new RegExp("^[A-Z0-9 ]*$").test(s)||(p?.uppercase?p?.uppercase(t):`${t} must be format Uppercase`),mixedcase:(s="")=>!!s&&/[a-z]/.test(s)&&/[A-Z]/.test(s)||(p?.mixedcase?p?.mixedcase(t):`${t} must be mixed case`),specialcharacters:(s="")=>!!s&&/[^a-zA-Z0-9\s]/.test(s)||(p?.specialcharacters?p?.specialcharacters(t):`${t} must contain special characters`)}}[e];if(h){let{validate:s}=m.find(C=>C.validate)||{};typeof h=="function"?m.push({validate:{...s,...n,[e]:h}}):e==="pattern"?m.push({validate:{...s,...n,[`${e}${r}`]:h[r]}}):m.push({[e]:h})}return m};var mt=e=>{let r=se(()=>x(),[]),{registerItem:t,unregisterItem:i,control:a,disabled:n,readOnly:u,formId:m,setSelected:o,useSelected:c}=y(),{name:d,formId:l,...f}=W(),{formId:b,name:A}=v(),T=e.label,g=e.dataField;ze(()=>(t({id:r,...e}),()=>{i(r)}),[r,e]),!e.label&&!e.noLabel&&(T=F.changeAll(g)),e.disabledHierarchy||(A&&m===b&&(g=`${A}${g}`),d&&m===l&&(g=`${d}${g}`));let p=!1;typeof e.disabled=="boolean"?p=e.disabled:typeof f.disabled=="boolean"?p=f.disabled:p=!!n;let U=!1;typeof e.readOnly=="boolean"?U=e.readOnly:typeof f.readOnly=="boolean"?U=f.readOnly:U=!!u;let h=!1;typeof e.hidden=="boolean"&&(h=e.hidden);let s=p||U||h?{required:!1}:G({...e,label:T,dataField:g});e.required&&(s={...s,required:e.required});let C=He({name:g,control:a,disabled:p,defaultValue:e.defaultValue,shouldUnregister:e.shouldUnregister,rules:s}),ie=C.fieldState.invalid,ae=C.fieldState.error?.message,me=Ze({name:g,control:a,defaultValue:e.defaultValue}),le=se(()=>D(ue=>o(ce=>({...ce,[g]:ue||null}))),[o]),de=c(g);return{...e,setSelectedField:le,label:T,dataField:g,controller:C,invalid:ie,messageError:ae,selectedField:de,value:me}};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 ct=Z;export{We as BgsFormArray,Ee as BgsFormGroup,oe as BgsReactFormProvider,je as PatternTypeEnum,M as createStore,ct as default,R as getFieldValue,mt as useBgsController,y as useBgsForm,v as useBgsFormArray,J as useBgsFormArrayInit,W as useBgsFormGroup,z as useBgsFormInit};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bgscore/react-form",
3
- "version": "0.0.49",
3
+ "version": "0.0.51",
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",