@bgscore/react-form 0.0.27 → 0.0.28

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 k=_react.createContext.call(void 0, void 0);function y(){let e=_react.useContext.call(void 0, k);return e||{}}function T({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(l=>l.id===o.id);if(p>-1){let l=[...i.current];l[p]=o,i.current=[...l]}else i.current.push(o)},[i]),s=_react.useCallback.call(void 0, o=>{i.current=i.current.filter(p=>p.id!==o)},[]),c=async(o,p)=>{r.setIsSubmit(!0);let l=p?await r.formControl.trigger():!0,f=r.getData();l&&t&&t({...f,...o},{...r})},m={...r,registerItem:a,unregisterItem:s,items:i.current,triggerSubmit:c};return _jsxruntime.jsx.call(void 0, k.Provider,{value:m,children:e})}function b(){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 v(e,r){return typeof e=="function"?e(r):e}var 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 N(e,r){try{return JSON.stringify(e)!==JSON.stringify(r)}catch (e3){return!1}}var R=e=>(Object.keys(e).forEach(r=>{e[r]===void 0&&(e[r]=null)}),e),C= 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 s of i){if(a==null)return t;a=a[s]}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}var _reacthookform = require('react-hook-form');var E=(e,r)=>{e||(e={});let t=_react.useRef.call(void 0, null),[i,a]=_react.useState.call(void 0, !1),[s,c]=_react.useState.call(void 0, {}),m=_reacthookform.useForm.call(void 0, {...r,reValidateMode:"onSubmit",mode:"all",defaultValues:e}),o=_react.useMemo.call(void 0, ()=>b(),[]),p=u=>u?C(R(m.getValues()),u):R(m.getValues()),f={...m,ref:t,reset:u=>{u?typeof u=="string"?m.resetField(u,{}):typeof u=="object"&&D(u,0)&&u.forEach(g=>m.resetField(g)):m.reset()},updateData:u=>{let g=p();m.reset({...g,...u})},getData:p,formControl:m,useFieldArray:u=>_reacthookform.useFieldArray.call(void 0, {control:m.control,name:u}),useWatch:u=>_reacthookform.useWatch.call(void 0, {control:m.control,name:u}),isSubmit:i,formId:o,setIsSubmit:a,useSelected:u=>C(s,u),setSelected:c,selected:s};return[f,f]};var ue=({onSubmit:e,onChange:r=()=>{},onInvalid:t=()=>{},formData:i,controller:a,children:s,...c})=>{let m=_nullishCoalesce(a, () => (E())),[o]=Array.isArray(m)?m:[m],p=_react.useRef.call(void 0, void 0),l=async f=>{f.preventDefault(),f.stopPropagation(),o.setIsSubmit(!0);let u=await o.formControl.trigger(),g=o.getData();u?e&&e({...g},{...o}):t(o.formControl.formState.errors)};return _react.useEffect.call(void 0, ()=>{i&&N(p.current||{},i)&&(o.formControl.reset(i),p.current=i)},[i,o.formControl.reset]),_react.useEffect.call(void 0, ()=>{if(!r)return;let f=o.formControl.watch(r);return()=>f.unsubscribe()},[]),_jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:_jsxruntime.jsx.call(void 0, T,{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:l,children:s})})})},M=ue;var z=_react.createContext.call(void 0, void 0);function I(){let e=_react.useContext.call(void 0, z);return e||{}}function $({children:e,...r}){return _jsxruntime.jsx.call(void 0, z.Provider,{value:r,children:e})}var Z=e=>{let r=y(),t=_reacthookform.useFieldArray.call(void 0, {control:r.control,name:e}),a={formArrayId:_react.useMemo.call(void 0, ()=>b(),[]),...t,...r};return[a,a]};var q=({name:e,defaultData:r,controller:t,children:i})=>{let a=_nullishCoalesce(t, () => (Z(e))),[s]=Array.isArray(a)?a:[a];return _react.useEffect.call(void 0, ()=>{typeof r=="boolean"&&r?s.append({}):typeof r=="number"&&r>0?s.append([...Array(r).fill(null).map(()=>({}))]):typeof r=="object"&&r&&s.append(r)},[]),_jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:s.fields.map((c,m)=>{let o=`${e}.${m}.`,p={...s,index:m,name:o,countFields:s.fields.length,removeItem:()=>s.remove(m),watchItem:l=>s.watch(l?`${o}${l}`:o.slice(0,-1)),setValueItem:(l,f)=>s.setValue(`${o}${l}`,f),useSelectedItem:l=>s.useSelected(`${o}${l}`)};return _jsxruntime.jsx.call(void 0, _react2.default.Fragment,{children:_jsxruntime.jsx.call(void 0, $,{...p,children:v(i,p)})},c.id||m)})})};q.displayName="BgsFormArray";var xe=q;var H=_react.createContext.call(void 0, void 0);function w(){let e=_react.useContext.call(void 0, H);return e||{}}function B({children:e,...r}){return _jsxruntime.jsx.call(void 0, H.Provider,{value:r,children:e})}var J=({children:e,...r})=>{let t=y(),i=_react.useMemo.call(void 0, ()=>b(),[]);return _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:_jsxruntime.jsx.call(void 0, B,{...t,...r,formGroupId:i,children:e})})};J.displayName="BgsFormGroup";var Re=J;var _=_react.createContext.call(void 0, void 0);function Q(){let e=_react.useContext.call(void 0, _);return e||{}}function X({children:e,...r}){return _jsxruntime.jsx.call(void 0, _.Provider,{value:r,children:e})}function O({validationRules:e,label:r}){let{formControl:t,getData:i}=y(),a=[];return e&&(typeof e=="string"?Y(e,!0,r,t,i,{}).forEach(s=>a.push(s)):typeof e=="object"&&Object.keys(e).forEach(s=>{let{validate:c}=a.find(o=>o.validate)||{};if(["minLength","maxLength","min","max","match","diff","regexp","pattern","required","email"].includes(s)){let o=e[s],p="";if(s==="email"&&!o)return;["match","diff"].includes(s)&&typeof o=="object"&&(o=e[s].dataField,p=e[s].label),o!=null&&Y(s,o,r,t,i,c,p).forEach(l=>a.push(l))}else if(typeof e[s]=="object"){let o=e[s];a.push({validate:{...c,[s]:p=>o.validation(p)||o.message&&(typeof o.message=="string"?o.message:o.message(r))}})}})),Object.assign({},...a)}var Y=(e,r,t,i,a,s,c)=>{let m=[],{validationMessage:o}=Q(),{required:p,minLength:l,maxLength:f,min:u,max:g,email:h,match:x,diff:A,pattern:d}=o||{},U={required:{value:!!r,message:p?p(t):`${t} is required`},minLength:{value:r,message:l?l(t,r):`${t} must be at least ${r} characters long`},maxLength:{value:r,message:f?f(t,r):`${t} cannot be more than ${r} characters long`},min:{value:Number(r),message:u?u(t,r):`${t} should be at least ${r}`},max:{value:Number(r),message:g?g(t,r):`${t} should be at most ${r}`},regexp:(n="")=>n?new RegExp(r.regexp).test(n)||`${t} ${r.message}`:!0,email:(n="")=>n?n.match(/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/)||(h?h(t):`${t} must be type email`):!0,match:(n="")=>n?n===(a&&a(r))||(x?x(t,c||F.changeAll(r)):`${t} must be same with ${c||F.changeAll(r)}`):!0,diff:(n="")=>n?n!==(a&&a(r))||(A?A(t,c||F.changeAll(r)):`${t} must be different with ${c||F.changeAll(r)}`):!0,pattern:{alphabet:(n="")=>!!n&&new RegExp("^[A-Za-z ]*$").test(n)||(_optionalChain([d, 'optionalAccess', _25 => _25.alphabet])?_optionalChain([d, 'optionalAccess', _26 => _26.alphabet, 'call', _27 => _27(t)]):`${t} must be format Alphabet`),alphanumber:(n="")=>!!n&&new RegExp("^[A-Za-z0-9 ]*$").test(n)||(_optionalChain([d, 'optionalAccess', _28 => _28.alphanumber])?_optionalChain([d, 'optionalAccess', _29 => _29.alphanumber, 'call', _30 => _30(t)]):`${t} must be format Alphabet or Number`),number:(n="")=>!!n&&new RegExp("^[0-9]*$").test(n)||(_optionalChain([d, 'optionalAccess', _31 => _31.number])?_optionalChain([d, 'optionalAccess', _32 => _32.number, 'call', _33 => _33(t)]):`${t} must be format Number`),lowercase:(n="")=>!!n&&new RegExp("^[a-z0-9 ]*$").test(n)||(_optionalChain([d, 'optionalAccess', _34 => _34.lowercase])?_optionalChain([d, 'optionalAccess', _35 => _35.lowercase, 'call', _36 => _36(t)]):`${t} must be format Lowercase`),url:(n="")=>!!n&&/^(ftp|http|https):\/\/[^ "]+$/.test(n)||(_optionalChain([d, 'optionalAccess', _37 => _37.url])?_optionalChain([d, 'optionalAccess', _38 => _38.url, 'call', _39 => _39(t)]):`${t} must be a valid URL`),uppercase:(n="")=>!!n&&new RegExp("^[A-Z0-9 ]*$").test(n)||(_optionalChain([d, 'optionalAccess', _40 => _40.uppercase])?_optionalChain([d, 'optionalAccess', _41 => _41.uppercase, 'call', _42 => _42(t)]):`${t} must be format Uppercase`),mixedcase:(n="")=>!!n&&/[a-z]/.test(n)&&/[A-Z]/.test(n)||(_optionalChain([d, 'optionalAccess', _43 => _43.mixedcase])?_optionalChain([d, 'optionalAccess', _44 => _44.mixedcase, 'call', _45 => _45(t)]):`${t} must be mixed case`),specialcharacters:(n="")=>!!n&&/[^a-zA-Z0-9\s]/.test(n)||(_optionalChain([d, 'optionalAccess', _46 => _46.specialcharacters])?_optionalChain([d, 'optionalAccess', _47 => _47.specialcharacters, 'call', _48 => _48(t)]):`${t} must contain special characters`)}}[e];if(U){let{validate:n}=m.find(V=>V.validate)||{};typeof U=="function"?m.push({validate:{...n,...s,[e]:U}}):e==="pattern"?m.push({validate:{...n,...s,[`${e}${r}`]:U[r]}}):m.push({[e]:U})}return m};var Er=e=>{let r=_react.useMemo.call(void 0, ()=>b(),[]),{registerItem:t,unregisterItem:i,formControl:a,disabled:s,readOnly:c,formId:m}=y(),{name:o,formId:p,...l}=w(),{formId:f,name:u}=I(),g=e.label,h=e.dataField;_react.useEffect.call(void 0, ()=>(t({id:r,...e}),()=>{i(r)}),[r,e]),!e.label&&!e.noLabel&&(g=F.changeAll(h)),u&&m===f&&(h=`${u}${h}`);let x=!1;typeof e.disabled=="boolean"?x=e.disabled:typeof l.disabled=="boolean"?x=l.disabled:x=!!s;let A=!1;typeof e.readOnly=="boolean"?A=e.readOnly:typeof l.readOnly=="boolean"?A=l.readOnly:A=!!c;let d=!1;typeof e.hidden=="boolean"&&(d=e.hidden);let G=_reacthookform.useController.call(void 0, {name:h,control:a.control,disabled:x,defaultValue:e.defaultValue,rules:x||A||d?{required:!1}:O(e)});return{...e,label:g,dataField:h,controller:G}};var Ge=(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))(Ge||{});var Zr=M;exports.BgsArrayForm = xe; exports.BgsGroupForm = Re; exports.BgsReactFormProvider = X; exports.PatternTypeEnum = Ge; exports.default = Zr; exports.getFieldValue = C; exports.useBgsArrayForm = I; exports.useBgsForm = y; exports.useBgsGroupForm = w; exports.useController = Er; exports.useFormArrayInit = Z; exports.useFormInit = E;
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 k=_react.createContext.call(void 0, void 0);function y(){let e=_react.useContext.call(void 0, k);return e||{}}function T({children:e,controller:r,onSubmit:t}){let a=_react.useRef.call(void 0, []),i=_react.useCallback.call(void 0, o=>{let p=a.current.findIndex(l=>l.id===o.id);if(p>-1){let l=[...a.current];l[p]=o,a.current=[...l]}else a.current.push(o)},[a]),s=_react.useCallback.call(void 0, o=>{a.current=a.current.filter(p=>p.id!==o)},[]),c=async(o,p)=>{r.setIsSubmit(!0);let l=p?await r.formControl.trigger():!0,f=r.getData();l&&t&&t({...f,...o},{...r})},m={...r,registerItem:i,unregisterItem:s,items:a.current,triggerSubmit:c};return _jsxruntime.jsx.call(void 0, k.Provider,{value:m,children:e})}function b(){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 v(e,r){return typeof e=="function"?e(r):e}var 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,(a,i)=>i.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(a=>_optionalChain([a, 'optionalAccess', _18 => _18.length])<=3?_optionalChain([a, 'optionalAccess', _19 => _19.toUpperCase, 'call', _20 => _20()]):a), 'optionalAccess', _21 => _21.join, 'call', _22 => _22(" ")]))}catch (e2){}return t}};function N(e,r){try{return JSON.stringify(e)!==JSON.stringify(r)}catch (e3){return!1}}var R=e=>(Object.keys(e).forEach(r=>{e[r]===void 0&&(e[r]=null)}),e),C= exports.getFieldValue =(e,r,t="")=>{if(!e)return t;if(e.hasOwnProperty(r))return e[r];let a=r.replace(/\[(\d+)\]/g,".$1").split("."),i=e;for(let s of a){if(i==null)return t;i=i[s]}return i===void 0?t:i};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}var _reacthookform = require('react-hook-form');var E=(e,r)=>{e||(e={});let t=_react.useRef.call(void 0, null),[a,i]=_react.useState.call(void 0, !1),[s,c]=_react.useState.call(void 0, {}),m=_reacthookform.useForm.call(void 0, {...r,reValidateMode:"onSubmit",mode:"all",defaultValues:e}),o=_react.useMemo.call(void 0, ()=>b(),[]),p=u=>u?C(R(m.getValues()),u):R(m.getValues()),f={...m,ref:t,reset:u=>{u?typeof u=="string"?m.resetField(u,{}):typeof u=="object"&&D(u,0)&&u.forEach(g=>m.resetField(g)):m.reset()},updateData:u=>{let g=p();m.reset({...g,...u})},getData:p,formControl:m,useFieldArray:u=>_reacthookform.useFieldArray.call(void 0, {control:m.control,name:u}),useWatch:u=>_reacthookform.useWatch.call(void 0, {control:m.control,name:u}),isSubmit:a,formId:o,setIsSubmit:i,useSelected:u=>C(s,u),setSelected:c,selected:s};return[f,f]};var ue=({onSubmit:e,onChange:r=()=>{},onInvalid:t=()=>{},formData:a,controller:i,children:s,...c})=>{let m=_nullishCoalesce(i, () => (E())),[o]=Array.isArray(m)?m:[m],p=_react.useRef.call(void 0, void 0),l=async f=>{f.preventDefault(),f.stopPropagation(),o.setIsSubmit(!0);let u=await o.formControl.trigger(),g=o.getData();u?e&&e({...g},{...o}):t(o.formControl.formState.errors)};return _react.useEffect.call(void 0, ()=>{a&&N(p.current||{},a)&&(o.formControl.reset(a),p.current=a)},[a,o.formControl.reset]),_react.useEffect.call(void 0, ()=>{if(!r)return;let f=o.formControl.watch(r);return()=>f.unsubscribe()},[]),_jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:_jsxruntime.jsx.call(void 0, T,{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:l,children:s})})})},M=ue;var z=_react.createContext.call(void 0, void 0);function I(){let e=_react.useContext.call(void 0, z);return e||{}}function $({children:e,...r}){return _jsxruntime.jsx.call(void 0, z.Provider,{value:r,children:e})}var Z=e=>{let r=y(),t=_reacthookform.useFieldArray.call(void 0, {control:r.control,name:e}),i={formArrayId:_react.useMemo.call(void 0, ()=>b(),[]),...t,...r};return[i,i]};var q=({name:e,defaultData:r,controller:t,children:a})=>{let i=_nullishCoalesce(t, () => (Z(e))),[s]=Array.isArray(i)?i:[i];return _react.useEffect.call(void 0, ()=>{typeof r=="boolean"&&r?s.append({}):typeof r=="number"&&r>0?s.append([...Array(r).fill(null).map(()=>({}))]):typeof r=="object"&&r&&s.append(r)},[]),_jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:s.fields.map((c,m)=>{let o=`${e}.${m}.`,p={...s,index:m,name:o,countFields:s.fields.length,removeItem:()=>s.remove(m),watchItem:l=>s.watch(l?`${o}${l}`:o.slice(0,-1)),setValueItem:(l,f)=>s.setValue(`${o}${l}`,f),useSelectedItem:l=>s.useSelected(`${o}${l}`)};return _jsxruntime.jsx.call(void 0, _react2.default.Fragment,{children:_jsxruntime.jsx.call(void 0, $,{...p,children:v(a,p)})},c.id||m)})})};q.displayName="BgsFormArray";var xe=q;var H=_react.createContext.call(void 0, void 0);function w(){let e=_react.useContext.call(void 0, H);return e||{}}function B({children:e,...r}){return _jsxruntime.jsx.call(void 0, H.Provider,{value:r,children:e})}var J=({children:e,...r})=>{let t=y(),a=_react.useMemo.call(void 0, ()=>b(),[]);return _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:_jsxruntime.jsx.call(void 0, B,{...t,...r,formGroupId:a,children:e})})};J.displayName="BgsFormGroup";var Re=J;var _=_react.createContext.call(void 0, void 0);function Q(){let e=_react.useContext.call(void 0, _);return e||{}}function X({children:e,...r}){return _jsxruntime.jsx.call(void 0, _.Provider,{value:r,children:e})}function O({validationRules:e,label:r}){let{formControl:t,getData:a}=y(),i=[];return e&&(typeof e=="string"?Y(e,!0,r,t,a,{}).forEach(s=>i.push(s)):typeof e=="object"&&Object.keys(e).forEach(s=>{let{validate:c}=i.find(o=>o.validate)||{};if(["minLength","maxLength","min","max","match","diff","regexp","pattern","required","email"].includes(s)){let o=e[s],p="";if(s==="email"&&!o)return;["match","diff"].includes(s)&&typeof o=="object"&&(o=e[s].dataField,p=e[s].label),o!=null&&Y(s,o,r,t,a,c,p).forEach(l=>i.push(l))}else if(typeof e[s]=="object"){let o=e[s];i.push({validate:{...c,[s]:p=>o.validation(p)||o.message&&(typeof o.message=="string"?o.message:o.message(r))}})}})),Object.assign({},...i)}var Y=(e,r,t,a,i,s,c)=>{let m=[],{validationMessage:o}=Q(),{required:p,minLength:l,maxLength:f,min:u,max:g,email:h,match:x,diff:A,pattern:d}=o||{},U={required:{value:!!r,message:p?p(t):`${t} is required`},minLength:{value:r,message:l?l(t,r):`${t} must be at least ${r} characters long`},maxLength:{value:r,message:f?f(t,r):`${t} cannot be more than ${r} characters long`},min:{value:Number(r),message:u?u(t,r):`${t} should be at least ${r}`},max:{value:Number(r),message:g?g(t,r):`${t} should be at most ${r}`},regexp:(n="")=>n?new RegExp(r.regexp).test(n)||`${t} ${r.message}`:!0,email:(n="")=>n?n.match(/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/)||(h?h(t):`${t} must be type email`):!0,match:(n="")=>n?n===(i&&i(r))||(x?x(t,c||F.changeAll(r)):`${t} must be same with ${c||F.changeAll(r)}`):!0,diff:(n="")=>n?n!==(i&&i(r))||(A?A(t,c||F.changeAll(r)):`${t} must be different with ${c||F.changeAll(r)}`):!0,pattern:{alphabet:(n="")=>!!n&&new RegExp("^[A-Za-z ]*$").test(n)||(_optionalChain([d, 'optionalAccess', _25 => _25.alphabet])?_optionalChain([d, 'optionalAccess', _26 => _26.alphabet, 'call', _27 => _27(t)]):`${t} must be format Alphabet`),alphanumber:(n="")=>!!n&&new RegExp("^[A-Za-z0-9 ]*$").test(n)||(_optionalChain([d, 'optionalAccess', _28 => _28.alphanumber])?_optionalChain([d, 'optionalAccess', _29 => _29.alphanumber, 'call', _30 => _30(t)]):`${t} must be format Alphabet or Number`),number:(n="")=>!!n&&new RegExp("^[0-9]*$").test(n)||(_optionalChain([d, 'optionalAccess', _31 => _31.number])?_optionalChain([d, 'optionalAccess', _32 => _32.number, 'call', _33 => _33(t)]):`${t} must be format Number`),lowercase:(n="")=>!!n&&new RegExp("^[a-z0-9 ]*$").test(n)||(_optionalChain([d, 'optionalAccess', _34 => _34.lowercase])?_optionalChain([d, 'optionalAccess', _35 => _35.lowercase, 'call', _36 => _36(t)]):`${t} must be format Lowercase`),url:(n="")=>!!n&&/^(ftp|http|https):\/\/[^ "]+$/.test(n)||(_optionalChain([d, 'optionalAccess', _37 => _37.url])?_optionalChain([d, 'optionalAccess', _38 => _38.url, 'call', _39 => _39(t)]):`${t} must be a valid URL`),uppercase:(n="")=>!!n&&new RegExp("^[A-Z0-9 ]*$").test(n)||(_optionalChain([d, 'optionalAccess', _40 => _40.uppercase])?_optionalChain([d, 'optionalAccess', _41 => _41.uppercase, 'call', _42 => _42(t)]):`${t} must be format Uppercase`),mixedcase:(n="")=>!!n&&/[a-z]/.test(n)&&/[A-Z]/.test(n)||(_optionalChain([d, 'optionalAccess', _43 => _43.mixedcase])?_optionalChain([d, 'optionalAccess', _44 => _44.mixedcase, 'call', _45 => _45(t)]):`${t} must be mixed case`),specialcharacters:(n="")=>!!n&&/[^a-zA-Z0-9\s]/.test(n)||(_optionalChain([d, 'optionalAccess', _46 => _46.specialcharacters])?_optionalChain([d, 'optionalAccess', _47 => _47.specialcharacters, 'call', _48 => _48(t)]):`${t} must contain special characters`)}}[e];if(U){let{validate:n}=m.find(V=>V.validate)||{};typeof U=="function"?m.push({validate:{...n,...s,[e]:U}}):e==="pattern"?m.push({validate:{...n,...s,[`${e}${r}`]:U[r]}}):m.push({[e]:U})}return m};var Er=e=>{let r=_react.useMemo.call(void 0, ()=>b(),[]),{registerItem:t,unregisterItem:a,formControl:i,disabled:s,readOnly:c,formId:m}=y(),{name:o,formId:p,...l}=w(),{formId:f,name:u}=I(),g=e.label,h=e.dataField;_react.useEffect.call(void 0, ()=>(t({id:r,...e}),()=>{a(r)}),[r,e]),!e.label&&!e.noLabel&&(g=F.changeAll(h)),u&&m===f&&(h=`${u}${h}`);let x=!1;typeof e.disabled=="boolean"?x=e.disabled:typeof l.disabled=="boolean"?x=l.disabled:x=!!s;let A=!1;typeof e.readOnly=="boolean"?A=e.readOnly:typeof l.readOnly=="boolean"?A=l.readOnly:A=!!c;let d=!1;typeof e.hidden=="boolean"&&(d=e.hidden);let G=_reacthookform.useController.call(void 0, {name:h,control:i.control,disabled:x,defaultValue:e.defaultValue,rules:x||A||d?{required:!1}:O(e)});return{...e,label:g,dataField:h,controller:G}};var Ge=(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))(Ge||{});var Zr=M;exports.BgsArrayForm = xe; exports.BgsGroupForm = Re; exports.BgsReactFormProvider = X; exports.PatternTypeEnum = Ge; exports.default = Zr; exports.getFieldValue = C; exports.useBgsArrayForm = I; exports.useBgsForm = y; exports.useBgsGroupForm = w; exports.useController = Er; exports.useControllerRhf = _reacthookform.useController; exports.useFormArrayInit = Z; exports.useFormInit = E;
package/dist/index.d.cts CHANGED
@@ -1,6 +1,7 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode, PropsWithChildren } from 'react';
3
3
  import { DeepPartialSkipArrayKey, ControllerRenderProps, FieldValues, ControllerFieldState, UseFormStateReturn, UseFormReturn, UseFieldArrayReturn, EventType, FieldErrors, UseFieldArraySwap, UseFieldArrayMove, UseFieldArrayPrepend, UseFieldArrayAppend, UseFieldArrayRemove, UseFieldArrayInsert, UseFieldArrayUpdate, UseFieldArrayReplace, FieldArrayWithId, UseFormProps } from 'react-hook-form';
4
+ export { useController as useControllerRhf } from 'react-hook-form';
4
5
 
5
6
  type ControllerWithKey = ControllerProps & {
6
7
  id: string;
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode, PropsWithChildren } from 'react';
3
3
  import { DeepPartialSkipArrayKey, ControllerRenderProps, FieldValues, ControllerFieldState, UseFormStateReturn, UseFormReturn, UseFieldArrayReturn, EventType, FieldErrors, UseFieldArraySwap, UseFieldArrayMove, UseFieldArrayPrepend, UseFieldArrayAppend, UseFieldArrayRemove, UseFieldArrayInsert, UseFieldArrayUpdate, UseFieldArrayReplace, FieldArrayWithId, UseFormProps } from 'react-hook-form';
4
+ export { useController as useControllerRhf } from 'react-hook-form';
4
5
 
5
6
  type ControllerWithKey = ControllerProps & {
6
7
  id: string;
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{useEffect as K,useRef as le}from"react";import{createContext as ee,useCallback as W,useContext as re,useRef as te}from"react";import{jsx as oe}from"react/jsx-runtime";var k=ee(void 0);function y(){let e=re(k);return e||{}}function T({children:e,controller:r,onSubmit:t}){let i=te([]),a=W(o=>{let p=i.current.findIndex(l=>l.id===o.id);if(p>-1){let l=[...i.current];l[p]=o,i.current=[...l]}else i.current.push(o)},[i]),s=W(o=>{i.current=i.current.filter(p=>p.id!==o)},[]),c=async(o,p)=>{r.setIsSubmit(!0);let l=p?await r.formControl.trigger():!0,f=r.getData();l&&t&&t({...f,...o},{...r})},m={...r,registerItem:a,unregisterItem:s,items:i.current,triggerSubmit:c};return oe(k.Provider,{value:m,children:e})}function b(){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 v(e,r){return typeof e=="function"?e(r):e}var 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 N(e,r){try{return JSON.stringify(e)!==JSON.stringify(r)}catch{return!1}}var R=e=>(Object.keys(e).forEach(r=>{e[r]===void 0&&(e[r]=null)}),e),C=(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 s of i){if(a==null)return t;a=a[s]}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}import{useFieldArray as ne,useForm as se,useWatch as ie}from"react-hook-form";import{useMemo as ae,useRef as me,useState as L}from"react";var E=(e,r)=>{e||(e={});let t=me(null),[i,a]=L(!1),[s,c]=L({}),m=se({...r,reValidateMode:"onSubmit",mode:"all",defaultValues:e}),o=ae(()=>b(),[]),p=u=>u?C(R(m.getValues()),u):R(m.getValues()),f={...m,ref:t,reset:u=>{u?typeof u=="string"?m.resetField(u,{}):typeof u=="object"&&D(u,0)&&u.forEach(g=>m.resetField(g)):m.reset()},updateData:u=>{let g=p();m.reset({...g,...u})},getData:p,formControl:m,useFieldArray:u=>ne({control:m.control,name:u}),useWatch:u=>ie({control:m.control,name:u}),isSubmit:i,formId:o,setIsSubmit:a,useSelected:u=>C(s,u),setSelected:c,selected:s};return[f,f]};import{Fragment as pe,jsx as P}from"react/jsx-runtime";var ue=({onSubmit:e,onChange:r=()=>{},onInvalid:t=()=>{},formData:i,controller:a,children:s,...c})=>{let m=a??E(),[o]=Array.isArray(m)?m:[m],p=le(void 0),l=async f=>{f.preventDefault(),f.stopPropagation(),o.setIsSubmit(!0);let u=await o.formControl.trigger(),g=o.getData();u?e&&e({...g},{...o}):t(o.formControl.formState.errors)};return K(()=>{i&&N(p.current||{},i)&&(o.formControl.reset(i),p.current=i)},[i,o.formControl.reset]),K(()=>{if(!r)return;let f=o.formControl.watch(r);return()=>f.unsubscribe()},[]),P(pe,{children:P(T,{controller:{...o,disabled:c?.disabled,readOnly:c?.readOnly},onSubmit:e,children:P("form",{...c,id:o.formId,ref:o.ref,onSubmit:l,children:s})})})},M=ue;import Fe,{useEffect as he}from"react";import{createContext as ce,useContext as de}from"react";import{jsx as fe}from"react/jsx-runtime";var z=ce(void 0);function I(){let e=de(z);return e||{}}function $({children:e,...r}){return fe(z.Provider,{value:r,children:e})}import{useFieldArray as ge}from"react-hook-form";import{useMemo as ye}from"react";var Z=e=>{let r=y(),t=ge({control:r.control,name:e}),a={formArrayId:ye(()=>b(),[]),...t,...r};return[a,a]};import{Fragment as be,jsx as S}from"react/jsx-runtime";var q=({name:e,defaultData:r,controller:t,children:i})=>{let a=t??Z(e),[s]=Array.isArray(a)?a:[a];return he(()=>{typeof r=="boolean"&&r?s.append({}):typeof r=="number"&&r>0?s.append([...Array(r).fill(null).map(()=>({}))]):typeof r=="object"&&r&&s.append(r)},[]),S(be,{children:s.fields.map((c,m)=>{let o=`${e}.${m}.`,p={...s,index:m,name:o,countFields:s.fields.length,removeItem:()=>s.remove(m),watchItem:l=>s.watch(l?`${o}${l}`:o.slice(0,-1)),setValueItem:(l,f)=>s.setValue(`${o}${l}`,f),useSelectedItem:l=>s.useSelected(`${o}${l}`)};return S(Fe.Fragment,{children:S($,{...p,children:v(i,p)})},c.id||m)})})};q.displayName="BgsFormArray";var xe=q;import{useMemo as Te}from"react";import{createContext as Ae,useContext as Ue}from"react";import{jsx as Ce}from"react/jsx-runtime";var H=Ae(void 0);function w(){let e=Ue(H);return e||{}}function B({children:e,...r}){return Ce(H.Provider,{value:r,children:e})}import{Fragment as Pe,jsx as j}from"react/jsx-runtime";var J=({children:e,...r})=>{let t=y(),i=Te(()=>b(),[]);return j(Pe,{children:j(B,{...t,...r,formGroupId:i,children:e})})};J.displayName="BgsFormGroup";var Re=J;import{createContext as Ie,useContext as $e}from"react";import{jsx as Se}from"react/jsx-runtime";var _=Ie(void 0);function Q(){let e=$e(_);return e||{}}function X({children:e,...r}){return Se(_.Provider,{value:r,children:e})}import{useEffect as we,useMemo as Be}from"react";import{useController as Oe}from"react-hook-form";function O({validationRules:e,label:r}){let{formControl:t,getData:i}=y(),a=[];return e&&(typeof e=="string"?Y(e,!0,r,t,i,{}).forEach(s=>a.push(s)):typeof e=="object"&&Object.keys(e).forEach(s=>{let{validate:c}=a.find(o=>o.validate)||{};if(["minLength","maxLength","min","max","match","diff","regexp","pattern","required","email"].includes(s)){let o=e[s],p="";if(s==="email"&&!o)return;["match","diff"].includes(s)&&typeof o=="object"&&(o=e[s].dataField,p=e[s].label),o!=null&&Y(s,o,r,t,i,c,p).forEach(l=>a.push(l))}else if(typeof e[s]=="object"){let o=e[s];a.push({validate:{...c,[s]:p=>o.validation(p)||o.message&&(typeof o.message=="string"?o.message:o.message(r))}})}})),Object.assign({},...a)}var Y=(e,r,t,i,a,s,c)=>{let m=[],{validationMessage:o}=Q(),{required:p,minLength:l,maxLength:f,min:u,max:g,email:h,match:x,diff:A,pattern:d}=o||{},U={required:{value:!!r,message:p?p(t):`${t} is required`},minLength:{value:r,message:l?l(t,r):`${t} must be at least ${r} characters long`},maxLength:{value:r,message:f?f(t,r):`${t} cannot be more than ${r} characters long`},min:{value:Number(r),message:u?u(t,r):`${t} should be at least ${r}`},max:{value:Number(r),message:g?g(t,r):`${t} should be at most ${r}`},regexp:(n="")=>n?new RegExp(r.regexp).test(n)||`${t} ${r.message}`:!0,email:(n="")=>n?n.match(/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/)||(h?h(t):`${t} must be type email`):!0,match:(n="")=>n?n===(a&&a(r))||(x?x(t,c||F.changeAll(r)):`${t} must be same with ${c||F.changeAll(r)}`):!0,diff:(n="")=>n?n!==(a&&a(r))||(A?A(t,c||F.changeAll(r)):`${t} must be different with ${c||F.changeAll(r)}`):!0,pattern:{alphabet:(n="")=>!!n&&new RegExp("^[A-Za-z ]*$").test(n)||(d?.alphabet?d?.alphabet(t):`${t} must be format Alphabet`),alphanumber:(n="")=>!!n&&new RegExp("^[A-Za-z0-9 ]*$").test(n)||(d?.alphanumber?d?.alphanumber(t):`${t} must be format Alphabet or Number`),number:(n="")=>!!n&&new RegExp("^[0-9]*$").test(n)||(d?.number?d?.number(t):`${t} must be format Number`),lowercase:(n="")=>!!n&&new RegExp("^[a-z0-9 ]*$").test(n)||(d?.lowercase?d?.lowercase(t):`${t} must be format Lowercase`),url:(n="")=>!!n&&/^(ftp|http|https):\/\/[^ "]+$/.test(n)||(d?.url?d?.url(t):`${t} must be a valid URL`),uppercase:(n="")=>!!n&&new RegExp("^[A-Z0-9 ]*$").test(n)||(d?.uppercase?d?.uppercase(t):`${t} must be format Uppercase`),mixedcase:(n="")=>!!n&&/[a-z]/.test(n)&&/[A-Z]/.test(n)||(d?.mixedcase?d?.mixedcase(t):`${t} must be mixed case`),specialcharacters:(n="")=>!!n&&/[^a-zA-Z0-9\s]/.test(n)||(d?.specialcharacters?d?.specialcharacters(t):`${t} must contain special characters`)}}[e];if(U){let{validate:n}=m.find(V=>V.validate)||{};typeof U=="function"?m.push({validate:{...n,...s,[e]:U}}):e==="pattern"?m.push({validate:{...n,...s,[`${e}${r}`]:U[r]}}):m.push({[e]:U})}return m};var Er=e=>{let r=Be(()=>b(),[]),{registerItem:t,unregisterItem:i,formControl:a,disabled:s,readOnly:c,formId:m}=y(),{name:o,formId:p,...l}=w(),{formId:f,name:u}=I(),g=e.label,h=e.dataField;we(()=>(t({id:r,...e}),()=>{i(r)}),[r,e]),!e.label&&!e.noLabel&&(g=F.changeAll(h)),u&&m===f&&(h=`${u}${h}`);let x=!1;typeof e.disabled=="boolean"?x=e.disabled:typeof l.disabled=="boolean"?x=l.disabled:x=!!s;let A=!1;typeof e.readOnly=="boolean"?A=e.readOnly:typeof l.readOnly=="boolean"?A=l.readOnly:A=!!c;let d=!1;typeof e.hidden=="boolean"&&(d=e.hidden);let G=Oe({name:h,control:a.control,disabled:x,defaultValue:e.defaultValue,rules:x||A||d?{required:!1}:O(e)});return{...e,label:g,dataField:h,controller:G}};var Ge=(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))(Ge||{});var Zr=M;export{xe as BgsArrayForm,Re as BgsGroupForm,X as BgsReactFormProvider,Ge as PatternTypeEnum,Zr as default,C as getFieldValue,I as useBgsArrayForm,y as useBgsForm,w as useBgsGroupForm,Er as useController,Z as useFormArrayInit,E as useFormInit};
1
+ import{useEffect as K,useRef as le}from"react";import{createContext as ee,useCallback as W,useContext as re,useRef as te}from"react";import{jsx as oe}from"react/jsx-runtime";var k=ee(void 0);function y(){let e=re(k);return e||{}}function T({children:e,controller:r,onSubmit:t}){let a=te([]),i=W(o=>{let p=a.current.findIndex(l=>l.id===o.id);if(p>-1){let l=[...a.current];l[p]=o,a.current=[...l]}else a.current.push(o)},[a]),s=W(o=>{a.current=a.current.filter(p=>p.id!==o)},[]),c=async(o,p)=>{r.setIsSubmit(!0);let l=p?await r.formControl.trigger():!0,f=r.getData();l&&t&&t({...f,...o},{...r})},m={...r,registerItem:i,unregisterItem:s,items:a.current,triggerSubmit:c};return oe(k.Provider,{value:m,children:e})}function b(){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 v(e,r){return typeof e=="function"?e(r):e}var 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,(a,i)=>i.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(a=>a?.length<=3?a?.toUpperCase():a)?.join(" "))}catch{}return t}};function N(e,r){try{return JSON.stringify(e)!==JSON.stringify(r)}catch{return!1}}var R=e=>(Object.keys(e).forEach(r=>{e[r]===void 0&&(e[r]=null)}),e),C=(e,r,t="")=>{if(!e)return t;if(e.hasOwnProperty(r))return e[r];let a=r.replace(/\[(\d+)\]/g,".$1").split("."),i=e;for(let s of a){if(i==null)return t;i=i[s]}return i===void 0?t:i};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}import{useFieldArray as ne,useForm as se,useWatch as ae}from"react-hook-form";import{useMemo as ie,useRef as me,useState as L}from"react";var E=(e,r)=>{e||(e={});let t=me(null),[a,i]=L(!1),[s,c]=L({}),m=se({...r,reValidateMode:"onSubmit",mode:"all",defaultValues:e}),o=ie(()=>b(),[]),p=u=>u?C(R(m.getValues()),u):R(m.getValues()),f={...m,ref:t,reset:u=>{u?typeof u=="string"?m.resetField(u,{}):typeof u=="object"&&D(u,0)&&u.forEach(g=>m.resetField(g)):m.reset()},updateData:u=>{let g=p();m.reset({...g,...u})},getData:p,formControl:m,useFieldArray:u=>ne({control:m.control,name:u}),useWatch:u=>ae({control:m.control,name:u}),isSubmit:a,formId:o,setIsSubmit:i,useSelected:u=>C(s,u),setSelected:c,selected:s};return[f,f]};import{Fragment as pe,jsx as P}from"react/jsx-runtime";var ue=({onSubmit:e,onChange:r=()=>{},onInvalid:t=()=>{},formData:a,controller:i,children:s,...c})=>{let m=i??E(),[o]=Array.isArray(m)?m:[m],p=le(void 0),l=async f=>{f.preventDefault(),f.stopPropagation(),o.setIsSubmit(!0);let u=await o.formControl.trigger(),g=o.getData();u?e&&e({...g},{...o}):t(o.formControl.formState.errors)};return K(()=>{a&&N(p.current||{},a)&&(o.formControl.reset(a),p.current=a)},[a,o.formControl.reset]),K(()=>{if(!r)return;let f=o.formControl.watch(r);return()=>f.unsubscribe()},[]),P(pe,{children:P(T,{controller:{...o,disabled:c?.disabled,readOnly:c?.readOnly},onSubmit:e,children:P("form",{...c,id:o.formId,ref:o.ref,onSubmit:l,children:s})})})},M=ue;import Fe,{useEffect as he}from"react";import{createContext as ce,useContext as de}from"react";import{jsx as fe}from"react/jsx-runtime";var z=ce(void 0);function I(){let e=de(z);return e||{}}function $({children:e,...r}){return fe(z.Provider,{value:r,children:e})}import{useFieldArray as ge}from"react-hook-form";import{useMemo as ye}from"react";var Z=e=>{let r=y(),t=ge({control:r.control,name:e}),i={formArrayId:ye(()=>b(),[]),...t,...r};return[i,i]};import{Fragment as be,jsx as S}from"react/jsx-runtime";var q=({name:e,defaultData:r,controller:t,children:a})=>{let i=t??Z(e),[s]=Array.isArray(i)?i:[i];return he(()=>{typeof r=="boolean"&&r?s.append({}):typeof r=="number"&&r>0?s.append([...Array(r).fill(null).map(()=>({}))]):typeof r=="object"&&r&&s.append(r)},[]),S(be,{children:s.fields.map((c,m)=>{let o=`${e}.${m}.`,p={...s,index:m,name:o,countFields:s.fields.length,removeItem:()=>s.remove(m),watchItem:l=>s.watch(l?`${o}${l}`:o.slice(0,-1)),setValueItem:(l,f)=>s.setValue(`${o}${l}`,f),useSelectedItem:l=>s.useSelected(`${o}${l}`)};return S(Fe.Fragment,{children:S($,{...p,children:v(a,p)})},c.id||m)})})};q.displayName="BgsFormArray";var xe=q;import{useMemo as Te}from"react";import{createContext as Ae,useContext as Ue}from"react";import{jsx as Ce}from"react/jsx-runtime";var H=Ae(void 0);function w(){let e=Ue(H);return e||{}}function B({children:e,...r}){return Ce(H.Provider,{value:r,children:e})}import{Fragment as Pe,jsx as j}from"react/jsx-runtime";var J=({children:e,...r})=>{let t=y(),a=Te(()=>b(),[]);return j(Pe,{children:j(B,{...t,...r,formGroupId:a,children:e})})};J.displayName="BgsFormGroup";var Re=J;import{createContext as Ie,useContext as $e}from"react";import{jsx as Se}from"react/jsx-runtime";var _=Ie(void 0);function Q(){let e=$e(_);return e||{}}function X({children:e,...r}){return Se(_.Provider,{value:r,children:e})}import{useEffect as we,useMemo as Be}from"react";import{useController as Oe}from"react-hook-form";function O({validationRules:e,label:r}){let{formControl:t,getData:a}=y(),i=[];return e&&(typeof e=="string"?Y(e,!0,r,t,a,{}).forEach(s=>i.push(s)):typeof e=="object"&&Object.keys(e).forEach(s=>{let{validate:c}=i.find(o=>o.validate)||{};if(["minLength","maxLength","min","max","match","diff","regexp","pattern","required","email"].includes(s)){let o=e[s],p="";if(s==="email"&&!o)return;["match","diff"].includes(s)&&typeof o=="object"&&(o=e[s].dataField,p=e[s].label),o!=null&&Y(s,o,r,t,a,c,p).forEach(l=>i.push(l))}else if(typeof e[s]=="object"){let o=e[s];i.push({validate:{...c,[s]:p=>o.validation(p)||o.message&&(typeof o.message=="string"?o.message:o.message(r))}})}})),Object.assign({},...i)}var Y=(e,r,t,a,i,s,c)=>{let m=[],{validationMessage:o}=Q(),{required:p,minLength:l,maxLength:f,min:u,max:g,email:h,match:x,diff:A,pattern:d}=o||{},U={required:{value:!!r,message:p?p(t):`${t} is required`},minLength:{value:r,message:l?l(t,r):`${t} must be at least ${r} characters long`},maxLength:{value:r,message:f?f(t,r):`${t} cannot be more than ${r} characters long`},min:{value:Number(r),message:u?u(t,r):`${t} should be at least ${r}`},max:{value:Number(r),message:g?g(t,r):`${t} should be at most ${r}`},regexp:(n="")=>n?new RegExp(r.regexp).test(n)||`${t} ${r.message}`:!0,email:(n="")=>n?n.match(/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/)||(h?h(t):`${t} must be type email`):!0,match:(n="")=>n?n===(i&&i(r))||(x?x(t,c||F.changeAll(r)):`${t} must be same with ${c||F.changeAll(r)}`):!0,diff:(n="")=>n?n!==(i&&i(r))||(A?A(t,c||F.changeAll(r)):`${t} must be different with ${c||F.changeAll(r)}`):!0,pattern:{alphabet:(n="")=>!!n&&new RegExp("^[A-Za-z ]*$").test(n)||(d?.alphabet?d?.alphabet(t):`${t} must be format Alphabet`),alphanumber:(n="")=>!!n&&new RegExp("^[A-Za-z0-9 ]*$").test(n)||(d?.alphanumber?d?.alphanumber(t):`${t} must be format Alphabet or Number`),number:(n="")=>!!n&&new RegExp("^[0-9]*$").test(n)||(d?.number?d?.number(t):`${t} must be format Number`),lowercase:(n="")=>!!n&&new RegExp("^[a-z0-9 ]*$").test(n)||(d?.lowercase?d?.lowercase(t):`${t} must be format Lowercase`),url:(n="")=>!!n&&/^(ftp|http|https):\/\/[^ "]+$/.test(n)||(d?.url?d?.url(t):`${t} must be a valid URL`),uppercase:(n="")=>!!n&&new RegExp("^[A-Z0-9 ]*$").test(n)||(d?.uppercase?d?.uppercase(t):`${t} must be format Uppercase`),mixedcase:(n="")=>!!n&&/[a-z]/.test(n)&&/[A-Z]/.test(n)||(d?.mixedcase?d?.mixedcase(t):`${t} must be mixed case`),specialcharacters:(n="")=>!!n&&/[^a-zA-Z0-9\s]/.test(n)||(d?.specialcharacters?d?.specialcharacters(t):`${t} must contain special characters`)}}[e];if(U){let{validate:n}=m.find(V=>V.validate)||{};typeof U=="function"?m.push({validate:{...n,...s,[e]:U}}):e==="pattern"?m.push({validate:{...n,...s,[`${e}${r}`]:U[r]}}):m.push({[e]:U})}return m};var Er=e=>{let r=Be(()=>b(),[]),{registerItem:t,unregisterItem:a,formControl:i,disabled:s,readOnly:c,formId:m}=y(),{name:o,formId:p,...l}=w(),{formId:f,name:u}=I(),g=e.label,h=e.dataField;we(()=>(t({id:r,...e}),()=>{a(r)}),[r,e]),!e.label&&!e.noLabel&&(g=F.changeAll(h)),u&&m===f&&(h=`${u}${h}`);let x=!1;typeof e.disabled=="boolean"?x=e.disabled:typeof l.disabled=="boolean"?x=l.disabled:x=!!s;let A=!1;typeof e.readOnly=="boolean"?A=e.readOnly:typeof l.readOnly=="boolean"?A=l.readOnly:A=!!c;let d=!1;typeof e.hidden=="boolean"&&(d=e.hidden);let G=Oe({name:h,control:i.control,disabled:x,defaultValue:e.defaultValue,rules:x||A||d?{required:!1}:O(e)});return{...e,label:g,dataField:h,controller:G}};var Ge=(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))(Ge||{});import{useController as nt}from"react-hook-form";var Zr=M;export{xe as BgsArrayForm,Re as BgsGroupForm,X as BgsReactFormProvider,Ge as PatternTypeEnum,Zr as default,C as getFieldValue,I as useBgsArrayForm,y as useBgsForm,w as useBgsGroupForm,Er as useController,nt as useControllerRhf,Z as useFormArrayInit,E as useFormInit};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bgscore/react-form",
3
- "version": "0.0.27",
3
+ "version": "0.0.28",
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",