UNPKG

@andydowell/use-form-state

Version:

A React hook for managing form state and validation

3 lines (2 loc) 2.77 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 t=arguments[r];for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&(e[a]=t[a])}return e}).apply(this,arguments)}var t=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(a,i){void 0===i&&(i={});var n=i.errorUpdateDelayInSeconds,o=void 0===n?.5:n,u=i.reinitializeDependencies,c=void 0===u?[]:u,s=function(){var e={};for(var r in a)e[r]={value:a[r].defaultValue,label:a[r].label||"",helperText:a[r].helperText,isValid:!1,isInteracted:!1,isRequired:!!a[r].required,error:void 0};var i=function(r){switch(!0){case e[r].isRequired&&!t(e[r].value):e[r].isValid=!1;break;case Boolean(a[r].validation):e[r].isValid=Object.values(a[r].validation).every((function(t){return(0,t.validator)(e[r].value,e)}));break;default:e[r].isValid=!0}};for(var n in a)i(n);return e}(),l=e.useState(s),d=l[0],v=l[1],f=e.useRef();e.useEffect((function(){v(s)}),[].concat(c));var p=function(){b({updateErrorType:!(o>0)}),clearTimeout(f.current),o>0&&(f.current=setTimeout((function(){b()}),1e3*o))},b=function(e){var i=(e||{}).updateErrorType;v((function(e){var n=function(r){var n,o=null!=i?i:e[r].isInteracted;switch(!0){case e[r].isRequired&&!t(e[r].value):e[r].isValid=!1,e[r].error=o?{type:"required",message:null==(n=a[r].required)?void 0:n.message}:e[r].error;break;case Boolean(a[r].validation):var u=void 0;e[r].isValid=Object.entries(a[r].validation).every((function(t){var a=t[0],i=t[1],n=i.message,o=(0,i.validator)(e[r].value,e);return o||(u={type:a,message:n||""}),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)n(o);return r({},e)}))};return{state:d,set:function(e,t,a){void 0===a&&(a=!0),v((function(i){return i[e].value=t,a&&(i[e].isInteracted=!0),r({},i)})),p()},update:function(e,t){void 0===t&&(t=!0),v((function(a){return Object.entries(e).forEach((function(e){var r=e[0];a[r].value=e[1],t&&(a[r].isInteracted=!0)})),r({},a)})),p()},checkIfAllValid:function(e){var r=(e||{}).updateErrorType,t=void 0===r||r;for(var a in t&&b({updateErrorType:!0}),d)if(!d[a].isValid)return!1;return!0},extractStateValue:function(e){switch(e.format){case"formdata":var r=new FormData;return Object.entries(d).forEach((function(e){r.append(e[0],e[1].value)})),r;case"object":default:var t={};for(var a in d)t[a]=d[a].value;return t}},reset:function(){v(s),clearTimeout(f.current)}}}; //# sourceMappingURL=use-form-state.cjs.production.min.js.map