UNPKG

@andydowell/use-form-state

Version:

A React hook for managing form state and validation

3 lines (2 loc) 2.67 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");function r(){return(r=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var a=arguments[r];for(var t in a)Object.prototype.hasOwnProperty.call(a,t)&&(e[t]=a[t])}return e}).apply(this,arguments)}var a=function(e){switch(typeof e){case"number":return!(isNaN(e)||!Number.isFinite(e));case"object":return Array.isArray(e)?e.length>0:null!=e&&Boolean(e);case"string":case"boolean":default:return Boolean(e)}};exports.useFormState=function(t,n){void 0===n&&(n={});var i=n.errorUpdateDelayInSeconds,o=void 0===i?.5:i,u=function(){var e={};for(var r in t)e[r]={value:t[r].defaultValue,label:t[r].label||"",helperText:t[r].helperText,isValid:!1,isInteracted:!1,isRequired:!!t[r].required,error:void 0};var n=function(r){switch(!0){case e[r].isRequired&&!a(e[r].value):e[r].isValid=!1;break;case Boolean(t[r].validation):e[r].isValid=Object.values(t[r].validation).every((function(a){return(0,a.validator)(e[r].value,e)}));break;default:e[r].isValid=!0}};for(var i in t)n(i);return e}(),c=e.useState(u),s=c[0],l=c[1],d=e.useRef(),v=function(){f({updateErrorType:!(o>0)}),clearTimeout(d.current),o>0&&(d.current=setTimeout((function(){f()}),1e3*o))},f=function(e){var n=(e||{}).updateErrorType;l((function(e){var i=function(r){var i,o=null!=n?n:e[r].isInteracted;switch(!0){case e[r].isRequired&&!a(e[r].value):e[r].isValid=!1,e[r].error=o?{type:"required",message:null==(i=t[r].required)?void 0:i.message}:e[r].error;break;case Boolean(t[r].validation):var u=void 0;e[r].isValid=Object.entries(t[r].validation).every((function(a){var t=a[0],n=a[1],i=n.message,o=(0,n.validator)(e[r].value,e);return o||(u={type:t,message:i||""}),o})),e[r].error=o?u:e[r].error;break;default:e[r].isValid=!0,e[r].error=o?void 0:e[r].error}};for(var o in e)i(o);return r({},e)}))};return{state:s,set:function(e,a,t){void 0===t&&(t=!0),l((function(n){return n[e].value=a,t&&(n[e].isInteracted=!0),r({},n)})),v()},update:function(e,a){void 0===a&&(a=!0),l((function(t){return Object.entries(e).forEach((function(e){var r=e[0];t[r].value=e[1],a&&(t[r].isInteracted=!0)})),r({},t)})),v()},checkIfAllValid:function(e){var r=(e||{}).updateErrorType,a=void 0===r||r;for(var t in a&&f({updateErrorType:!0}),s)if(!s[t].isValid)return!1;return!0},extractStateValue:function(e){switch(e.format){case"formdata":var r=new FormData;return Object.entries(s).forEach((function(e){r.append(e[0],e[1].value)})),r;case"object":default:var a={};for(var t in s)a[t]=s[t].value;return a}},reset:function(){l(u),clearTimeout(d.current)}}}; //# sourceMappingURL=use-form-state.cjs.production.min.js.map