@bgscore/react-form 0.0.31 → 0.0.32

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 g(){let e=_react.useContext.call(void 0, N);return e||{}}function S({children:e,controller:r,onSubmit:t}){let i=_react.useRef.call(void 0, []),m=_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,a=r.getData();u&&t&&t({...a,...o},{...r})},l={...r,registerItem:m,unregisterItem:n,items:i.current,triggerSubmit:c};return _jsxruntime.jsx.call(void 0, N.Provider,{value:l,children:e})}function h(){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 y={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,m)=>m.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=y.snackCase(y.camelCase(e)),r&&(t=_optionalChain([t, 'optionalAccess', _14 => _14.split, 'call', _15 => _15(" "), 'optionalAccess', _16 => _16.map, 'call', _17 => _17(i=>_optionalChain([i, 'optionalAccess', _18 => _18.length])<=3?_optionalChain([i, 'optionalAccess', _19 => _19.toUpperCase, 'call', _20 => _20()]):i), 'optionalAccess', _21 => _21.join, 'call', _22 => _22(" ")]))}catch (e2){}return t}};function K(e,r){try{return JSON.stringify(e)!==JSON.stringify(r)}catch (e3){return!1}}var R=e=>(Object.keys(e).forEach(r=>{e[r]===void 0&&(e[r]=null)}),e),U= exports.getFieldValue =(e,r,t="")=>{if(!e)return t;if(e.hasOwnProperty(r))return e[r];let i=r.replace(/\[(\d+)\]/g,".$1").split("."),m=e;for(let n of i){if(m==null)return t;m=m[n]}return m===void 0?t:m};function M(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');function D(e){let r=e,t=new Set;function i(){return r}function m(l){return t.add(l),()=>t.delete(l)}function n(l){typeof l=="function"?r=l(r):r=l,t.forEach(o=>o())}function c(l){return _react.useSyncExternalStore.call(void 0, m,()=>l?l(r):r,()=>l?l(r):r)}return{getSnapshot:i,subscribe:m,setState:n,useStore:c}}var P=new WeakMap;function C(e){return P.has(e)||P.set(e,D({})),P.get(e)}var E=(e,r)=>{e||(e={});let t=_react.useRef.call(void 0, null),[i,m]=_react.useState.call(void 0, !1),n=_reacthookform.useForm.call(void 0, {...r,reValidateMode:"onSubmit",mode:"all",defaultValues:e}),c=C(n),l=_react.useMemo.call(void 0, ()=>h(),[]),o=a=>a?U(R(n.getValues()),a):R(n.getValues()),u={...n,ref:t,reset:a=>{a?typeof a=="string"?n.resetField(a,{}):typeof a=="object"&&M(a,0)&&a.forEach(f=>n.resetField(f)):n.reset()},updateData:a=>{let f=o();n.reset({...f,...a})},getData:o,formControl:n,useFieldArray:a=>_reacthookform.useFieldArray.call(void 0, {control:n.control,name:a}),useWatch:a=>_reacthookform.useWatch.call(void 0, {control:n.control,name:a}),isSubmit:i,formId:l,setIsSubmit:m,useSelected:a=>c.useStore(f=>U(f,a)),setSelected:c.setState};return[u,u]};var fe=({onSubmit:e,onChange:r=()=>{},onInvalid:t=()=>{},formData:i,controller:m,children:n,...c})=>{let l=_nullishCoalesce(m, () => (E())),[o]=Array.isArray(l)?l:[l],p=_react.useRef.call(void 0, void 0),u=async a=>{a.preventDefault(),a.stopPropagation(),o.setIsSubmit(!0);let f=await o.formControl.trigger(),b=o.getData();f?e&&e({...b},{...o}):t(o.formControl.formState.errors)};return _react.useEffect.call(void 0, ()=>{i&&K(p.current||{},i)&&(o.formControl.reset(i),p.current=i)},[i,o.formControl.reset]),_react.useEffect.call(void 0, ()=>{if(!r)return;let a=o.formControl.watch(r);return()=>a.unsubscribe()},[]),_jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:_jsxruntime.jsx.call(void 0, S,{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})})})},Z=fe;var q=_react.createContext.call(void 0, void 0);function $(){let e=_react.useContext.call(void 0, q);return e||{}}function w({children:e,...r}){return _jsxruntime.jsx.call(void 0, q.Provider,{value:r,children:e})}var H=e=>{let r=g(),t=_reacthookform.useFieldArray.call(void 0, {control:r.control,name:e}),m={formArrayId:_react.useMemo.call(void 0, ()=>h(),[]),...t,...r};return[m,m]};var j=({name:e,defaultData:r,controller:t,children:i})=>{let m=_nullishCoalesce(t, () => (H(e))),[n]=Array.isArray(m)?m:[m];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,l)=>{let o=C(n.formControl),p=`${e}.${l}.`,u={...n,index:l,name:p,countFields:n.fields.length,removeItem:()=>n.remove(l),watchItem:a=>n.watch(a?`${p}${a}`:p.slice(0,-1)),setValueItem:(a,f)=>n.setValue(`${p}${a}`,f),useSelectedItem:a=>n.useSelected(`${p}${a}`)};return _jsxruntime.jsx.call(void 0, _react2.default.Fragment,{children:_jsxruntime.jsx.call(void 0, w,{...u,children:L(i,u)})},c.id||l)})})};j.displayName="BgsFormArray";var Ue=j;var J=_react.createContext.call(void 0, void 0);function O(){let e=_react.useContext.call(void 0, J);return e||{}}function v({children:e,...r}){return _jsxruntime.jsx.call(void 0, J.Provider,{value:r,children:e})}var Q=({children:e,...r})=>{let t=g(),i=_react.useMemo.call(void 0, ()=>h(),[]);return _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:_jsxruntime.jsx.call(void 0, v,{...t,...r,formGroupId:i,children:e})})};Q.displayName="BgsFormGroup";var $e=Q;var X=_react.createContext.call(void 0, void 0);function Y(){let e=_react.useContext.call(void 0, X);return e||{}}function V({children:e,...r}){return _jsxruntime.jsx.call(void 0, X.Provider,{value:r,children:e})}function W({validationRules:e,label:r}){let{formControl:t,getData:i}=g(),m=[];return e&&(typeof e=="string"?ee(e,!0,r,t,i,{}).forEach(n=>m.push(n)):typeof e=="object"&&Object.keys(e).forEach(n=>{let{validate:c}=m.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&&ee(n,o,r,t,i,c,p).forEach(u=>m.push(u))}else if(typeof e[n]=="object"){let o=e[n];m.push({validate:{...c,[n]:p=>o.validation(p)||o.message&&(typeof o.message=="string"?o.message:o.message(r))}})}})),Object.assign({},...m)}var ee=(e,r,t,i,m,n,c)=>{let l=[],{validationMessage:o}=Y(),{required:p,minLength:u,maxLength:a,min:f,max:b,email:F,match:x,diff:T,pattern:d}=o||{},A={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:a?a(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,}))$/)||(F?F(t):`${t} must be type email`):!0,match:(s="")=>s?s===(m&&m(r))||(x?x(t,c||y.changeAll(r)):`${t} must be same with ${c||y.changeAll(r)}`):!0,diff:(s="")=>s?s!==(m&&m(r))||(T?T(t,c||y.changeAll(r)):`${t} must be different with ${c||y.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(A){let{validate:s}=l.find(re=>re.validate)||{};typeof A=="function"?l.push({validate:{...s,...n,[e]:A}}):e==="pattern"?l.push({validate:{...s,...n,[`${e}${r}`]:A[r]}}):l.push({[e]:A})}return l};var Qr=e=>{let r=_react.useMemo.call(void 0, ()=>h(),[]),{registerItem:t,unregisterItem:i,formControl:m,disabled:n,readOnly:c,formId:l}=g(),{name:o,formId:p,...u}=O(),{formId:a,name:f}=$(),b=e.label,F=e.dataField;_react.useEffect.call(void 0, ()=>(t({id:r,...e}),()=>{i(r)}),[r,e]),!e.label&&!e.noLabel&&(b=y.changeAll(F)),f&&l===a&&(F=`${f}${F}`);let x=!1;typeof e.disabled=="boolean"?x=e.disabled:typeof u.disabled=="boolean"?x=u.disabled:x=!!n;let T=!1;typeof e.readOnly=="boolean"?T=e.readOnly:typeof u.readOnly=="boolean"?T=u.readOnly:T=!!c;let d=!1;typeof e.hidden=="boolean"&&(d=e.hidden);let k=_reacthookform.useController.call(void 0, {name:F,control:m.control,disabled:x,defaultValue:e.defaultValue,rules:x||T||d?{required:!1}:W(e)});return{...e,label:b,dataField:F,controller:k}};var Ne=(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))(Ne||{});var et=Z;exports.BgsArrayForm = Ue; exports.BgsGroupForm = $e; exports.BgsReactFormProvider = V; exports.PatternTypeEnum = Ne; exports.createStore = D; exports.default = et; exports.getFieldValue = U; exports.useBgsArrayForm = $; exports.useBgsForm = g; exports.useBgsGroupForm = O; exports.useController = Qr; exports.useFormArrayInit = H; 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 N=_react.createContext.call(void 0, void 0);function g(){let e=_react.useContext.call(void 0, N);return e||{}}function R({children:e,controller:r,onSubmit:t}){let i=_react.useRef.call(void 0, []),m=_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,a=r.getData();u&&t&&t({...a,...o},{...r})},l={...r,registerItem:m,unregisterItem:n,items:i.current,triggerSubmit:c};return _jsxruntime.jsx.call(void 0, N.Provider,{value:l,children:e})}function h(){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 y={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,m)=>m.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=y.snackCase(y.camelCase(e)),r&&(t=_optionalChain([t, 'optionalAccess', _14 => _14.split, 'call', _15 => _15(" "), 'optionalAccess', _16 => _16.map, 'call', _17 => _17(i=>_optionalChain([i, 'optionalAccess', _18 => _18.length])<=3?_optionalChain([i, 'optionalAccess', _19 => _19.toUpperCase, 'call', _20 => _20()]):i), 'optionalAccess', _21 => _21.join, 'call', _22 => _22(" ")]))}catch (e2){}return t}};function E(e,r){try{return JSON.stringify(e)!==JSON.stringify(r)}catch (e3){return!1}}var P=e=>(Object.keys(e).forEach(r=>{e[r]===void 0&&(e[r]=null)}),e),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("."),m=e;for(let n of i){if(m==null)return t;m=m[n]}return m===void 0?t:m};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}var _reacthookform = require('react-hook-form');function M(e){let r=e,t=new Set;function i(){return r}function m(l){return t.add(l),()=>t.delete(l)}function n(l){typeof l=="function"?r=l(r):r=l,t.forEach(o=>o())}function c(l){return _react.useSyncExternalStore.call(void 0, m,()=>l?l(r):r,()=>l?l(r):r)}return{getSnapshot:i,subscribe:m,setState:n,useStore:c}}var I=new WeakMap;function S(e){return I.has(e)||I.set(e,M({})),I.get(e)}var D=(e,r)=>{e||(e={});let t=_react.useRef.call(void 0, null),[i,m]=_react.useState.call(void 0, !1),n=_reacthookform.useForm.call(void 0, {...r,reValidateMode:"onSubmit",mode:"all",defaultValues:e}),c=S(n),l=_react.useMemo.call(void 0, ()=>h(),[]),o=a=>a?C(P(n.getValues()),a):P(n.getValues()),u={...n,ref:t,reset:a=>{a?typeof a=="string"?n.resetField(a,{}):typeof a=="object"&&K(a,0)&&a.forEach(f=>n.resetField(f)):n.reset()},updateData:a=>{let f=o();n.reset({...f,...a})},getData:o,formControl:n,useFieldArray:a=>_reacthookform.useFieldArray.call(void 0, {control:n.control,name:a}),useWatch:a=>_reacthookform.useWatch.call(void 0, {control:n.control,name:a}),isSubmit:i,formId:l,setIsSubmit:m,useSelected:a=>c.useStore(f=>C(f,a)),setSelected:c.setState};return[u,u]};var fe=({onSubmit:e,onChange:r=()=>{},onInvalid:t=()=>{},formData:i,controller:m,children:n,...c})=>{let l=_nullishCoalesce(m, () => (D())),[o]=Array.isArray(l)?l:[l],p=_react.useRef.call(void 0, void 0),u=async a=>{a.preventDefault(),a.stopPropagation(),o.setIsSubmit(!0);let f=await o.formControl.trigger(),b=o.getData();f?e&&e({...b},{...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 a=o.formControl.watch(r);return()=>a.unsubscribe()},[]),_jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:_jsxruntime.jsx.call(void 0, R,{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})})})},Z=fe;var q=_react.createContext.call(void 0, void 0);function w(){let e=_react.useContext.call(void 0, q);return e||{}}function B({children:e,...r}){return _jsxruntime.jsx.call(void 0, q.Provider,{value:r,children:e})}var H=e=>{let r=g(),t=_reacthookform.useFieldArray.call(void 0, {control:r.control,name:e}),m={formArrayId:_react.useMemo.call(void 0, ()=>h(),[]),...t,...r};return[m,m]};var j=({name:e,defaultData:r,controller:t,children:i})=>{let m=_nullishCoalesce(t, () => (H(e))),[n]=Array.isArray(m)?m:[m];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,l)=>{let o=S(n.formControl),p=`${e}.${l}.`,u={...n,index:l,name:p,countFields:n.fields.length,removeItem:()=>n.remove(l),watchItem:a=>n.watch(a?`${p}${a}`:p.slice(0,-1)),setValueItem:(a,f)=>n.setValue(`${p}${a}`,f),useSelectedItem:a=>n.useSelected(`${p}${a}`)};return _jsxruntime.jsx.call(void 0, _react2.default.Fragment,{children:_jsxruntime.jsx.call(void 0, B,{...u,children:L(i,u)})},c.id||l)})})};j.displayName="BgsFormArray";var Ue=j;var J=_react.createContext.call(void 0, void 0);function O(){let e=_react.useContext.call(void 0, J);return e||{}}function W({children:e,...r}){return _jsxruntime.jsx.call(void 0, J.Provider,{value:r,children:e})}var Q=({children:e,...r})=>{let t=g(),i=_react.useMemo.call(void 0, ()=>h(),[]);return _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:_jsxruntime.jsx.call(void 0, W,{...t,...r,formGroupId:i,children:e})})};Q.displayName="BgsFormGroup";var $e=Q;var X=_react.createContext.call(void 0, void 0);function Y(){let e=_react.useContext.call(void 0, X);return e||{}}function V({children:e,...r}){return _jsxruntime.jsx.call(void 0, X.Provider,{value:r,children:e})}function k({validationRules:e,label:r}){let{formControl:t,getData:i}=g(),m=[];return e&&(typeof e=="string"?ee(e,!0,r,t,i,{}).forEach(n=>m.push(n)):typeof e=="object"&&Object.keys(e).forEach(n=>{let{validate:c}=m.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&&ee(n,o,r,t,i,c,p).forEach(u=>m.push(u))}else if(typeof e[n]=="object"){let o=e[n];m.push({validate:{...c,[n]:p=>o.validation(p)||o.message&&(typeof o.message=="string"?o.message:o.message(r))}})}})),Object.assign({},...m)}var ee=(e,r,t,i,m,n,c)=>{let l=[],{validationMessage:o}=Y(),{required:p,minLength:u,maxLength:a,min:f,max:b,email:F,match:x,diff:T,pattern:d}=o||{},A={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:a?a(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,}))$/)||(F?F(t):`${t} must be type email`):!0,match:(s="")=>s?s===(m&&m(r))||(x?x(t,c||y.changeAll(r)):`${t} must be same with ${c||y.changeAll(r)}`):!0,diff:(s="")=>s?s!==(m&&m(r))||(T?T(t,c||y.changeAll(r)):`${t} must be different with ${c||y.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(A){let{validate:s}=l.find(re=>re.validate)||{};typeof A=="function"?l.push({validate:{...s,...n,[e]:A}}):e==="pattern"?l.push({validate:{...s,...n,[`${e}${r}`]:A[r]}}):l.push({[e]:A})}return l};var Qr=e=>{let r=_react.useMemo.call(void 0, ()=>h(),[]),{registerItem:t,unregisterItem:i,formControl:m,disabled:n,readOnly:c,formId:l}=g(),{name:o,formId:p,...u}=O(),{formId:a,name:f}=w(),b=e.label,F=e.dataField;_react.useEffect.call(void 0, ()=>(t({id:r,...e}),()=>{i(r)}),[r,e]),!e.label&&!e.noLabel&&(b=y.changeAll(F)),f&&l===a&&(F=`${f}${F}`);let x=!1;typeof e.disabled=="boolean"?x=e.disabled:typeof u.disabled=="boolean"?x=u.disabled:x=!!n;let T=!1;typeof e.readOnly=="boolean"?T=e.readOnly:typeof u.readOnly=="boolean"?T=u.readOnly:T=!!c;let d=!1;typeof e.hidden=="boolean"&&(d=e.hidden);let U=_reacthookform.useController.call(void 0, {name:F,control:m.control,disabled:x,defaultValue:e.defaultValue,rules:x||T||d?{required:!1}:k(e)}),A=U.fieldState.invalid,s=_optionalChain([U, 'access', _49 => _49.fieldState, 'access', _50 => _50.error, 'optionalAccess', _51 => _51.message]);return{...e,label:b,dataField:F,controller:U,invalid:A,messageError:s}};var Ne=(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))(Ne||{});var et=Z;exports.BgsArrayForm = Ue; exports.BgsGroupForm = $e; exports.BgsReactFormProvider = V; exports.PatternTypeEnum = Ne; exports.createStore = M; exports.default = et; exports.getFieldValue = C; exports.useBgsArrayForm = w; exports.useBgsForm = g; exports.useBgsGroupForm = O; exports.useController = Qr; exports.useFormArrayInit = H; exports.useFormInit = D;
package/dist/index.d.cts CHANGED
@@ -143,6 +143,8 @@ type UseFormArray<T> = UseFormArrayInitReturn<T> & {
143
143
  };
144
144
  type UseController = ControllerProps & {
145
145
  controller: Controller;
146
+ invalid: boolean;
147
+ messageError?: string;
146
148
  };
147
149
 
148
150
  declare const BgsForm: <T>({ onSubmit, onChange, onInvalid, formData, controller: controllerProps, children, ...others }: PropsWithChildren<FormProps<T>>) => react_jsx_runtime.JSX.Element;
package/dist/index.d.ts CHANGED
@@ -143,6 +143,8 @@ type UseFormArray<T> = UseFormArrayInitReturn<T> & {
143
143
  };
144
144
  type UseController = ControllerProps & {
145
145
  controller: Controller;
146
+ invalid: boolean;
147
+ messageError?: string;
146
148
  };
147
149
 
148
150
  declare const BgsForm: <T>({ onSubmit, onChange, onInvalid, formData, controller: controllerProps, children, ...others }: PropsWithChildren<FormProps<T>>) => react_jsx_runtime.JSX.Element;
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{useEffect as z,useRef as de}from"react";import{createContext as te,useCallback as G,useContext as oe,useRef as ne}from"react";import{jsx as se}from"react/jsx-runtime";var N=te(void 0);function g(){let e=oe(N);return e||{}}function S({children:e,controller:r,onSubmit:t}){let i=ne([]),m=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,a=r.getData();u&&t&&t({...a,...o},{...r})},l={...r,registerItem:m,unregisterItem:n,items:i.current,triggerSubmit:c};return se(N.Provider,{value:l,children:e})}function h(){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 y={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,m)=>m.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=y.snackCase(y.camelCase(e)),r&&(t=t?.split(" ")?.map(i=>i?.length<=3?i?.toUpperCase():i)?.join(" "))}catch{}return t}};function K(e,r){try{return JSON.stringify(e)!==JSON.stringify(r)}catch{return!1}}var R=e=>(Object.keys(e).forEach(r=>{e[r]===void 0&&(e[r]=null)}),e),U=(e,r,t="")=>{if(!e)return t;if(e.hasOwnProperty(r))return e[r];let i=r.replace(/\[(\d+)\]/g,".$1").split("."),m=e;for(let n of i){if(m==null)return t;m=m[n]}return m===void 0?t:m};function M(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 ae,useForm as me,useWatch as le}from"react-hook-form";import{useMemo as pe,useRef as ue,useState as ce}from"react";import{useSyncExternalStore as ie}from"react";function D(e){let r=e,t=new Set;function i(){return r}function m(l){return t.add(l),()=>t.delete(l)}function n(l){typeof l=="function"?r=l(r):r=l,t.forEach(o=>o())}function c(l){return ie(m,()=>l?l(r):r,()=>l?l(r):r)}return{getSnapshot:i,subscribe:m,setState:n,useStore:c}}var P=new WeakMap;function C(e){return P.has(e)||P.set(e,D({})),P.get(e)}var E=(e,r)=>{e||(e={});let t=ue(null),[i,m]=ce(!1),n=me({...r,reValidateMode:"onSubmit",mode:"all",defaultValues:e}),c=C(n),l=pe(()=>h(),[]),o=a=>a?U(R(n.getValues()),a):R(n.getValues()),u={...n,ref:t,reset:a=>{a?typeof a=="string"?n.resetField(a,{}):typeof a=="object"&&M(a,0)&&a.forEach(f=>n.resetField(f)):n.reset()},updateData:a=>{let f=o();n.reset({...f,...a})},getData:o,formControl:n,useFieldArray:a=>ae({control:n.control,name:a}),useWatch:a=>le({control:n.control,name:a}),isSubmit:i,formId:l,setIsSubmit:m,useSelected:a=>c.useStore(f=>U(f,a)),setSelected:c.setState};return[u,u]};import{Fragment as ge,jsx as I}from"react/jsx-runtime";var fe=({onSubmit:e,onChange:r=()=>{},onInvalid:t=()=>{},formData:i,controller:m,children:n,...c})=>{let l=m??E(),[o]=Array.isArray(l)?l:[l],p=de(void 0),u=async a=>{a.preventDefault(),a.stopPropagation(),o.setIsSubmit(!0);let f=await o.formControl.trigger(),b=o.getData();f?e&&e({...b},{...o}):t(o.formControl.formState.errors)};return z(()=>{i&&K(p.current||{},i)&&(o.formControl.reset(i),p.current=i)},[i,o.formControl.reset]),z(()=>{if(!r)return;let a=o.formControl.watch(r);return()=>a.unsubscribe()},[]),I(ge,{children:I(S,{controller:{...o,disabled:c?.disabled,readOnly:c?.readOnly},onSubmit:e,children:I("form",{...c,id:o.formId,ref:o.ref,onSubmit:u,children:n})})})},Z=fe;import Te,{useEffect as Ae}from"react";import{createContext as ye,useContext as Fe}from"react";import{jsx as xe}from"react/jsx-runtime";var q=ye(void 0);function $(){let e=Fe(q);return e||{}}function w({children:e,...r}){return xe(q.Provider,{value:r,children:e})}import{useFieldArray as he}from"react-hook-form";import{useMemo as be}from"react";var H=e=>{let r=g(),t=he({control:r.control,name:e}),m={formArrayId:be(()=>h(),[]),...t,...r};return[m,m]};import{Fragment as Ce,jsx as B}from"react/jsx-runtime";var j=({name:e,defaultData:r,controller:t,children:i})=>{let m=t??H(e),[n]=Array.isArray(m)?m:[m];return Ae(()=>{typeof r=="boolean"&&r?n.append({}):typeof r=="number"&&r>0?n.append([...Array(r).fill(null).map(()=>({}))]):typeof r=="object"&&r&&n.append(r)},[]),B(Ce,{children:n.fields.map((c,l)=>{let o=C(n.formControl),p=`${e}.${l}.`,u={...n,index:l,name:p,countFields:n.fields.length,removeItem:()=>n.remove(l),watchItem:a=>n.watch(a?`${p}${a}`:p.slice(0,-1)),setValueItem:(a,f)=>n.setValue(`${p}${a}`,f),useSelectedItem:a=>n.useSelected(`${p}${a}`)};return B(Te.Fragment,{children:B(w,{...u,children:L(i,u)})},c.id||l)})})};j.displayName="BgsFormArray";var Ue=j;import{useMemo as Ie}from"react";import{createContext as Se,useContext as Re}from"react";import{jsx as Pe}from"react/jsx-runtime";var J=Se(void 0);function O(){let e=Re(J);return e||{}}function v({children:e,...r}){return Pe(J.Provider,{value:r,children:e})}import{Fragment as we,jsx as _}from"react/jsx-runtime";var Q=({children:e,...r})=>{let t=g(),i=Ie(()=>h(),[]);return _(we,{children:_(v,{...t,...r,formGroupId:i,children:e})})};Q.displayName="BgsFormGroup";var $e=Q;import{createContext as Be,useContext as Oe}from"react";import{jsx as ve}from"react/jsx-runtime";var X=Be(void 0);function Y(){let e=Oe(X);return e||{}}function V({children:e,...r}){return ve(X.Provider,{value:r,children:e})}import{useEffect as We,useMemo as ke}from"react";import{useController as Ge}from"react-hook-form";function W({validationRules:e,label:r}){let{formControl:t,getData:i}=g(),m=[];return e&&(typeof e=="string"?ee(e,!0,r,t,i,{}).forEach(n=>m.push(n)):typeof e=="object"&&Object.keys(e).forEach(n=>{let{validate:c}=m.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&&ee(n,o,r,t,i,c,p).forEach(u=>m.push(u))}else if(typeof e[n]=="object"){let o=e[n];m.push({validate:{...c,[n]:p=>o.validation(p)||o.message&&(typeof o.message=="string"?o.message:o.message(r))}})}})),Object.assign({},...m)}var ee=(e,r,t,i,m,n,c)=>{let l=[],{validationMessage:o}=Y(),{required:p,minLength:u,maxLength:a,min:f,max:b,email:F,match:x,diff:T,pattern:d}=o||{},A={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:a?a(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,}))$/)||(F?F(t):`${t} must be type email`):!0,match:(s="")=>s?s===(m&&m(r))||(x?x(t,c||y.changeAll(r)):`${t} must be same with ${c||y.changeAll(r)}`):!0,diff:(s="")=>s?s!==(m&&m(r))||(T?T(t,c||y.changeAll(r)):`${t} must be different with ${c||y.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(A){let{validate:s}=l.find(re=>re.validate)||{};typeof A=="function"?l.push({validate:{...s,...n,[e]:A}}):e==="pattern"?l.push({validate:{...s,...n,[`${e}${r}`]:A[r]}}):l.push({[e]:A})}return l};var Qr=e=>{let r=ke(()=>h(),[]),{registerItem:t,unregisterItem:i,formControl:m,disabled:n,readOnly:c,formId:l}=g(),{name:o,formId:p,...u}=O(),{formId:a,name:f}=$(),b=e.label,F=e.dataField;We(()=>(t({id:r,...e}),()=>{i(r)}),[r,e]),!e.label&&!e.noLabel&&(b=y.changeAll(F)),f&&l===a&&(F=`${f}${F}`);let x=!1;typeof e.disabled=="boolean"?x=e.disabled:typeof u.disabled=="boolean"?x=u.disabled:x=!!n;let T=!1;typeof e.readOnly=="boolean"?T=e.readOnly:typeof u.readOnly=="boolean"?T=u.readOnly:T=!!c;let d=!1;typeof e.hidden=="boolean"&&(d=e.hidden);let k=Ge({name:F,control:m.control,disabled:x,defaultValue:e.defaultValue,rules:x||T||d?{required:!1}:W(e)});return{...e,label:b,dataField:F,controller:k}};var Ne=(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))(Ne||{});var et=Z;export{Ue as BgsArrayForm,$e as BgsGroupForm,V as BgsReactFormProvider,Ne as PatternTypeEnum,D as createStore,et as default,U as getFieldValue,$ as useBgsArrayForm,g as useBgsForm,O as useBgsGroupForm,Qr as useController,H as useFormArrayInit,E as useFormInit};
1
+ import{useEffect as z,useRef as de}from"react";import{createContext as te,useCallback as G,useContext as oe,useRef as ne}from"react";import{jsx as se}from"react/jsx-runtime";var N=te(void 0);function g(){let e=oe(N);return e||{}}function R({children:e,controller:r,onSubmit:t}){let i=ne([]),m=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,a=r.getData();u&&t&&t({...a,...o},{...r})},l={...r,registerItem:m,unregisterItem:n,items:i.current,triggerSubmit:c};return se(N.Provider,{value:l,children:e})}function h(){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 y={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,m)=>m.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=y.snackCase(y.camelCase(e)),r&&(t=t?.split(" ")?.map(i=>i?.length<=3?i?.toUpperCase():i)?.join(" "))}catch{}return t}};function E(e,r){try{return JSON.stringify(e)!==JSON.stringify(r)}catch{return!1}}var P=e=>(Object.keys(e).forEach(r=>{e[r]===void 0&&(e[r]=null)}),e),C=(e,r,t="")=>{if(!e)return t;if(e.hasOwnProperty(r))return e[r];let i=r.replace(/\[(\d+)\]/g,".$1").split("."),m=e;for(let n of i){if(m==null)return t;m=m[n]}return m===void 0?t:m};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}import{useFieldArray as ae,useForm as me,useWatch as le}from"react-hook-form";import{useMemo as pe,useRef as ue,useState as ce}from"react";import{useSyncExternalStore as ie}from"react";function M(e){let r=e,t=new Set;function i(){return r}function m(l){return t.add(l),()=>t.delete(l)}function n(l){typeof l=="function"?r=l(r):r=l,t.forEach(o=>o())}function c(l){return ie(m,()=>l?l(r):r,()=>l?l(r):r)}return{getSnapshot:i,subscribe:m,setState:n,useStore:c}}var I=new WeakMap;function S(e){return I.has(e)||I.set(e,M({})),I.get(e)}var D=(e,r)=>{e||(e={});let t=ue(null),[i,m]=ce(!1),n=me({...r,reValidateMode:"onSubmit",mode:"all",defaultValues:e}),c=S(n),l=pe(()=>h(),[]),o=a=>a?C(P(n.getValues()),a):P(n.getValues()),u={...n,ref:t,reset:a=>{a?typeof a=="string"?n.resetField(a,{}):typeof a=="object"&&K(a,0)&&a.forEach(f=>n.resetField(f)):n.reset()},updateData:a=>{let f=o();n.reset({...f,...a})},getData:o,formControl:n,useFieldArray:a=>ae({control:n.control,name:a}),useWatch:a=>le({control:n.control,name:a}),isSubmit:i,formId:l,setIsSubmit:m,useSelected:a=>c.useStore(f=>C(f,a)),setSelected:c.setState};return[u,u]};import{Fragment as ge,jsx as $}from"react/jsx-runtime";var fe=({onSubmit:e,onChange:r=()=>{},onInvalid:t=()=>{},formData:i,controller:m,children:n,...c})=>{let l=m??D(),[o]=Array.isArray(l)?l:[l],p=de(void 0),u=async a=>{a.preventDefault(),a.stopPropagation(),o.setIsSubmit(!0);let f=await o.formControl.trigger(),b=o.getData();f?e&&e({...b},{...o}):t(o.formControl.formState.errors)};return z(()=>{i&&E(p.current||{},i)&&(o.formControl.reset(i),p.current=i)},[i,o.formControl.reset]),z(()=>{if(!r)return;let a=o.formControl.watch(r);return()=>a.unsubscribe()},[]),$(ge,{children:$(R,{controller:{...o,disabled:c?.disabled,readOnly:c?.readOnly},onSubmit:e,children:$("form",{...c,id:o.formId,ref:o.ref,onSubmit:u,children:n})})})},Z=fe;import Te,{useEffect as Ae}from"react";import{createContext as ye,useContext as Fe}from"react";import{jsx as xe}from"react/jsx-runtime";var q=ye(void 0);function w(){let e=Fe(q);return e||{}}function B({children:e,...r}){return xe(q.Provider,{value:r,children:e})}import{useFieldArray as he}from"react-hook-form";import{useMemo as be}from"react";var H=e=>{let r=g(),t=he({control:r.control,name:e}),m={formArrayId:be(()=>h(),[]),...t,...r};return[m,m]};import{Fragment as Ce,jsx as v}from"react/jsx-runtime";var j=({name:e,defaultData:r,controller:t,children:i})=>{let m=t??H(e),[n]=Array.isArray(m)?m:[m];return Ae(()=>{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)},[]),v(Ce,{children:n.fields.map((c,l)=>{let o=S(n.formControl),p=`${e}.${l}.`,u={...n,index:l,name:p,countFields:n.fields.length,removeItem:()=>n.remove(l),watchItem:a=>n.watch(a?`${p}${a}`:p.slice(0,-1)),setValueItem:(a,f)=>n.setValue(`${p}${a}`,f),useSelectedItem:a=>n.useSelected(`${p}${a}`)};return v(Te.Fragment,{children:v(B,{...u,children:L(i,u)})},c.id||l)})})};j.displayName="BgsFormArray";var Ue=j;import{useMemo as Ie}from"react";import{createContext as Se,useContext as Re}from"react";import{jsx as Pe}from"react/jsx-runtime";var J=Se(void 0);function O(){let e=Re(J);return e||{}}function W({children:e,...r}){return Pe(J.Provider,{value:r,children:e})}import{Fragment as we,jsx as _}from"react/jsx-runtime";var Q=({children:e,...r})=>{let t=g(),i=Ie(()=>h(),[]);return _(we,{children:_(W,{...t,...r,formGroupId:i,children:e})})};Q.displayName="BgsFormGroup";var $e=Q;import{createContext as Be,useContext as ve}from"react";import{jsx as Oe}from"react/jsx-runtime";var X=Be(void 0);function Y(){let e=ve(X);return e||{}}function V({children:e,...r}){return Oe(X.Provider,{value:r,children:e})}import{useEffect as We,useMemo as ke}from"react";import{useController as Ge}from"react-hook-form";function k({validationRules:e,label:r}){let{formControl:t,getData:i}=g(),m=[];return e&&(typeof e=="string"?ee(e,!0,r,t,i,{}).forEach(n=>m.push(n)):typeof e=="object"&&Object.keys(e).forEach(n=>{let{validate:c}=m.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&&ee(n,o,r,t,i,c,p).forEach(u=>m.push(u))}else if(typeof e[n]=="object"){let o=e[n];m.push({validate:{...c,[n]:p=>o.validation(p)||o.message&&(typeof o.message=="string"?o.message:o.message(r))}})}})),Object.assign({},...m)}var ee=(e,r,t,i,m,n,c)=>{let l=[],{validationMessage:o}=Y(),{required:p,minLength:u,maxLength:a,min:f,max:b,email:F,match:x,diff:T,pattern:d}=o||{},A={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:a?a(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,}))$/)||(F?F(t):`${t} must be type email`):!0,match:(s="")=>s?s===(m&&m(r))||(x?x(t,c||y.changeAll(r)):`${t} must be same with ${c||y.changeAll(r)}`):!0,diff:(s="")=>s?s!==(m&&m(r))||(T?T(t,c||y.changeAll(r)):`${t} must be different with ${c||y.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(A){let{validate:s}=l.find(re=>re.validate)||{};typeof A=="function"?l.push({validate:{...s,...n,[e]:A}}):e==="pattern"?l.push({validate:{...s,...n,[`${e}${r}`]:A[r]}}):l.push({[e]:A})}return l};var Qr=e=>{let r=ke(()=>h(),[]),{registerItem:t,unregisterItem:i,formControl:m,disabled:n,readOnly:c,formId:l}=g(),{name:o,formId:p,...u}=O(),{formId:a,name:f}=w(),b=e.label,F=e.dataField;We(()=>(t({id:r,...e}),()=>{i(r)}),[r,e]),!e.label&&!e.noLabel&&(b=y.changeAll(F)),f&&l===a&&(F=`${f}${F}`);let x=!1;typeof e.disabled=="boolean"?x=e.disabled:typeof u.disabled=="boolean"?x=u.disabled:x=!!n;let T=!1;typeof e.readOnly=="boolean"?T=e.readOnly:typeof u.readOnly=="boolean"?T=u.readOnly:T=!!c;let d=!1;typeof e.hidden=="boolean"&&(d=e.hidden);let U=Ge({name:F,control:m.control,disabled:x,defaultValue:e.defaultValue,rules:x||T||d?{required:!1}:k(e)}),A=U.fieldState.invalid,s=U.fieldState.error?.message;return{...e,label:b,dataField:F,controller:U,invalid:A,messageError:s}};var Ne=(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))(Ne||{});var et=Z;export{Ue as BgsArrayForm,$e as BgsGroupForm,V as BgsReactFormProvider,Ne as PatternTypeEnum,M as createStore,et as default,C as getFieldValue,w as useBgsArrayForm,g as useBgsForm,O as useBgsGroupForm,Qr as useController,H as useFormArrayInit,D as useFormInit};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bgscore/react-form",
3
- "version": "0.0.31",
3
+ "version": "0.0.32",
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",