@bgscore/react-form 0.0.22 → 0.0.24

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