UNPKG

react-bulk-form

Version:

A simple React library for managing form-related states in bulk.

2 lines (1 loc) 2.67 kB
import{useState as l,useMemo as y,useEffect as N,useCallback as d}from"react";function x(r,e){if(r===e)return!0;if(typeof r!="object"||r===null||typeof e!="object"||e===null)return r===e;var t=Object.keys(r).filter(o=>r[o]!==void 0),n=Object.keys(e).filter(o=>e[o]!==void 0);return t.length!==n.length?!1:t.every(o=>Object.prototype.hasOwnProperty.call(e,o)?x(r[o],e[o]):!1)}function _(r,e){var t=Object.keys(r);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(r);e&&(n=n.filter(function(o){return Object.getOwnPropertyDescriptor(r,o).enumerable})),t.push.apply(t,n)}return t}function s(r){for(var e=1;e<arguments.length;e++){var t=arguments[e]!=null?arguments[e]:{};e%2?_(Object(t),!0).forEach(function(n){q(r,n,t[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(t)):_(Object(t)).forEach(function(n){Object.defineProperty(r,n,Object.getOwnPropertyDescriptor(t,n))})}return r}function q(r,e,t){return(e=T(e))in r?Object.defineProperty(r,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):r[e]=t,r}function T(r){var e=M(r,"string");return typeof e=="symbol"?e:e+""}function M(r,e){if(typeof r!="object"||!r)return r;var t=r[Symbol.toPrimitive];if(t!==void 0){var n=t.call(r,e||"default");if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(r)}function I(r){var[e,t]=l(r.defaultValues),[n,o]=l({}),[c,D]=l(r.defaultValues),[v]=l(r.rules),O=y(()=>Object.keys(e).reduce((u,a)=>{var i=a;return x(e[i],c[i])||(u[i]=!0),u},{}),[e,c]),[S,C]=l({}),w=y(()=>Object.keys(n).length===0,[n]),h=y(()=>Object.keys(O).length>0,[O]);N(()=>{var u={};v&&Object.keys(v).forEach(a=>{var i=a,f=v[i];f(e)||(u[i]=!0)}),o(u)},[e,v]);var j=d(u=>{t(a=>{var i=Object.entries(typeof u=="function"?u(a):u).reduce((f,P)=>{var[m,b]=P,p=m,V=b;return V!==void 0&&(f[p]=V,C(K=>s(s({},K),{},{[p]:!0}))),f},{});return s(s({},a),i)})},[]),E=d(u=>{o(a=>{var i=Object.entries(typeof u=="function"?u(a):u).reduce((f,P)=>{var[m,b]=P,p=b;return p?f[m]=!0:delete f[m],f},{});return s(s({},a),i)})},[]),F=d(()=>{t(c),o({})},[c]),k=d(()=>{D(e)},[e]);return y(()=>({values:e,errors:n,dirtyFields:O,touchedFields:S,flags:{isValid:w,isDirty:h},setValues:j,setErrors:E,reset:F,commit:k}),[e,n,w,h,j,E,F,k])}import{useContext as A}from"react";import R,{createContext as z}from"react";var g=z(null);function Q(r){var{form:e,children:t}=r;return R.createElement(g.Provider,{value:e},t)}function Y(){var r=A(g);if(!r)throw new Error("useFormContext must be used within a FormProvider");return r}export{g as FormContext,Q as FormProvider,I as useForm,Y as useFormContext};