UNPKG

mobx-easy-form

Version:

Simple and performant form library built with MobX

3 lines (2 loc) 3.95 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var r,e=require("mobx"),t=(r=require("react"))&&"object"==typeof r&&"default"in r?r.default:r,i=require("use-memo-one");function n(r,e){return Object.fromEntries(Object.entries(r).map((function(r){return[r[0],e(r[1])]})))}function o(r){var t=r.onSubmit,i=e.observable({}),o=e.observable({isSubmitting:!1,valuesAtLastSubmit:void 0,submitCount:0}),u=e.observable({get isDirty(){return Object.values(i).some((function(r){return r.computed.isDirty}))},get errorList(){return Object.values(i).map((function(r){return r.computed.error})).filter((function(r){return void 0!==r}))},get isError(){return Object.values(i).some((function(r){return!!r.computed.error}))},get isValid(){return!this.isError},get valueList(){return String(Object.values(i).map((function(r){return r.state.value})))},get isChangedSinceLastSubmit(){return 0===o.submitCount?this.isDirty:this.valueList!==o.valuesAtLastSubmit}}),a={add:function(r){i[r.state.id]=r},submit:e.action((function(){for(var r in o.isSubmitting=!0,o.submitCount++,o.valuesAtLastSubmit=u.valueList,i){var a=i[r];a.state.wasEverFocused=!0,a.state.wasEverBlurred=!0}if(!u.isError){var s,c=t({fields:i,rawValues:n(i,(function(r){return r.state.value})),values:n(i,(function(r){return r.computed.parsed}))});return(s=c)&&"object"==typeof s&&"then"in s&&"function"==typeof s.then?Promise.resolve(c).finally((function(){e.runInAction((function(){o.isSubmitting=!1}))})):(e.runInAction((function(){o.isSubmitting=!1})),c)}o.isSubmitting=!1}))};return{fields:i,state:o,computed:u,actions:a}}function u(){return(u=Object.assign?Object.assign.bind():function(r){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(r[i]=t[i])}return r}).apply(this,arguments)}var a=["id","initialValue","initialError","form"];function s(r){var t=r.id,i=r.initialValue,n=r.initialError,o=r.form,u=function(r,e){if(null==r)return{};var t,i,n={},o=Object.keys(r);for(i=0;i<o.length;i++)e.indexOf(t=o[i])>=0||(n[t]=r[t]);return n}(r,a),s="validate"in u&&u.validate?u.validate:"validationSchema"in u&&u.validationSchema?function(r){if(!u.validationSchema)throw new Error("Missing validation schema");try{return{parsed:u.validationSchema.validateSync(""===r?void 0:r,{abortEarly:!0}),error:void 0}}catch(r){if(r instanceof Error&&"ValidationError"===r.name)return{parsed:void 0,error:r};throw r}}:function(r){return{parsed:r,error:void 0}},c=e.observable({id:t,errorOverride:n,value:i,isFocused:!1,wasEverFocused:!1,wasEverBlurred:!1}),l=e.observable({get parsed(){var r=s(c.value);if(!r.error)return r.parsed},get isDirty(){return JSON.stringify(c.value)!==JSON.stringify(i)},get error(){var r,e,t,i=s(c.value).error;return c.errorOverride?c.errorOverride:i instanceof Error&&"ValidationError"===i.name?String(null!=(r=null!=(e=null==(t=i.message)?void 0:t.value)?e:i.message)?r:i):i instanceof Error?i.message:i},get ifWasEverFocusedThenError(){if(c.wasEverFocused&&l.error)return String(l.error)},get ifWasEverBlurredThenError(){if(c.wasEverBlurred&&l.error)return String(l.error)}}),v={onFocus:e.action((function(){c.isFocused=!0,c.wasEverFocused=!0})),onBlur:e.action((function(){c.isFocused=!1,c.wasEverBlurred=!0})),onChange:e.action((function(r){c.errorOverride&&(c.errorOverride=void 0),c.value=r})),setError:e.action((function(r){c.errorOverride=r}))},d={state:c,computed:l,actions:v};return o.actions.add(d),d}exports.createField=s,exports.createForm=o,exports.useField=function(r,e){return void 0===e&&(e=[]),i.useMemoOne((function(){return s(r)}),e)},exports.useForm=function(r,e){void 0===e&&(e=[]);var n,a,s=(n=r.onSubmit,a=t.useRef(null),t.useLayoutEffect((function(){a.current=n})),t.useCallback((function(){var r=a.current;return r.apply(void 0,arguments)}),[]));return i.useMemoOne((function(){return o(u({},r,{onSubmit:s}))}),e)}; //# sourceMappingURL=mobx-easy-form.cjs.production.min.js.map