@andydowell/use-form-state
Version:
A React hook for managing form state and validation
3 lines (2 loc) • 5.08 kB
JavaScript
;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 n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e}).apply(this,arguments)}var t=function e(r,t,n){if(n instanceof FileList)Array.from(n).forEach((function(e){return r.append(t,e)}));else if(n instanceof Blob)r.append(t,n);else if(n instanceof Date)r.append(t,n.toISOString());else if(n instanceof Map){var i=Array.from(n.entries());r.append(t,JSON.stringify(i))}else if(n instanceof Set){var a=Array.from(n.values());r.append(t,JSON.stringify(a))}else Array.isArray(n)?n.forEach((function(n){return e(r,t,n)})):r.append(t,null===n||"object"!=typeof n?null==n?"":String(n):JSON.stringify(n))},n=function(e,t,n){var i=(n||{}).updateAllFieldsError,a=function(e){var t={};for(var n in e)t[n]=r({},e[n],{value:u(e[n].value)}),Object.freeze(t[n]);return Object.freeze(t)}(e),o={},s=!0;for(var l in a){var f=l,d=a[f],v=null!=i?i:d.isInteracted,p=c(f,t,a),y=p.isValid;y||(s=!1),o[f]=r({},d,{isValid:y,error:v?p.error:d.error})}return{nextState:o,allValid:s}},i=function(e){switch(typeof e){case"number":return!(isNaN(e)||!Number.isFinite(e));case"object":return Array.isArray(e)?e.length>0:null!=e&&(e instanceof Date?!isNaN(e.getTime()):e instanceof Map||e instanceof Set?e.size>0:"undefined"!=typeof FileList&&e instanceof FileList?e.length>0:Object.keys(e).length>0);case"boolean":return!0;case"string":default:return Boolean(e)}},a=function(e){var r={};for(var t in e)r[t]={value:u(e[t].defaultValue),label:e[t].label||"",helperText:e[t].helperText,isValid:!1,isInteracted:!1,isRequired:!!e[t].required,error:void 0};for(var n in e){var i=n,a=c(i,e,r);r[i].isValid=a.isValid}return r},u=function e(r){var t=globalThis.structuredClone;if(t)try{return t(r)}catch(e){}if(null===r||"object"!=typeof r)return r;if(r instanceof Date)return new Date(r.getTime());if(r instanceof Map){var n=Array.from(r.entries(),(function(r){var t=r[1];return[e(r[0]),e(t)]}));return new Map(n)}if(r instanceof Set){var i=Array.from(r.values()).map(e);return new Set(i)}return"undefined"!=typeof FileList&&r instanceof FileList?function(e){if("undefined"==typeof DataTransfer)return e;var r=new DataTransfer;return Array.from(e).forEach((function(e){return r.items.add(e)})),r.files}(r):r instanceof Blob?r:Array.isArray(r)?r.map(e):Object.entries(r).reduce((function(r,t){return r[t[0]]=e(t[1]),r}),{})},o=function(e){return Object.entries(e).map((function(e,r){var t,n=e[1];return{entry:[e[0],n],order:null!=(t=n.order)?t:r,index:r}})).sort((function(e,r){return e.order!==r.order?e.order-r.order:e.index-r.index})).map((function(e){return e.entry}))},c=function(e,r,t){var n,a,u=r[e],c=t[e];return c.isRequired&&!i(c.value)?{isValid:!1,error:{type:"required",message:null==(n=u.required)?void 0:n.message}}:u.validation?{isValid:o(u.validation).every((function(e){var r=e[0],n=e[1],i=n.message,u=(0,n.validator)(c.value,t);return u||(a={type:r,message:i||""}),u})),error:a}:{isValid:!0,error:void 0}};exports.appendToFormData=t,exports.applyValidation=n,exports.checkIfRequiredValueFilled=i,exports.createInitialStateSnapshot=a,exports.getFieldValidationOutcome=c,exports.getOrderedValidationEntries=o,exports.useFormState=function(i,u){void 0===u&&(u={});var o=u.errorUpdateDelayInSeconds,c=void 0===o?.5:o,s=u.reinitializeDependencies,l=void 0===s?[]:s,f=e.useState((function(){return a(i)})),d=f[0],v=f[1],p=e.useRef({timer:null,runId:0}),y=e.useRef(null),m=function(){p.current.runId+=1,y.current=null,null!==p.current.timer&&(clearTimeout(p.current.timer),p.current.timer=null)};e.useEffect((function(){m(),v(a(i))}),[].concat(l)),e.useEffect((function(){return function(){return m()}}),[]);var b=function(){m();var e=p.current.runId,t=c>0;v((function(e){var a=n(e,i).nextState;return t?(y.current=a,Object.keys(a).reduce((function(t,n){return t[n]=r({},a[n],{error:e[n].error}),t}),{})):(y.current=null,a)})),t&&(p.current.timer=setTimeout((function(){if(e===p.current.runId){var t=y.current;t&&(y.current=null,v((function(){return r({},t)})))}}),1e3*c))};return{state:d,set:function(e,t,n){void 0===n&&(n=!0),v((function(i){var a,u=i[e],o=r({},u,{value:t,isInteracted:!!n||u.isInteracted});return r({},i,((a={})[e]=o,a))})),b()},setMany:function(e,t){void 0===t&&(t=!0),v((function(n){var i=r({},n);return Object.entries(e).forEach((function(e){var a=e[0],u=n[a];i[a]=r({},u,{value:e[1],isInteracted:!!t||u.isInteracted})})),i})),b()},checkIfAllValid:function(e){var r=(e||{}).commitState;if(void 0!==r&&!r)return n(d,i).allValid;m();var t=!0;return v((function(e){var r=n(e,i,{updateAllFieldsError:!0});return t=r.allValid,r.nextState})),t},getValues:function(e){switch(e.format){case"formdata":var r=new FormData;return Object.entries(d).forEach((function(e){t(r,e[0],e[1].value)})),r;case"object":default:var n={};for(var i in d)n[i]=d[i].value;return n}},reset:function(){m(),v(a(i))}}};
//# sourceMappingURL=use-form-state.cjs.production.min.js.map