feature-form 0.0.40 → 0.0.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- "use strict";var _=require("@blgc/utils"),g=require("feature-state"),P=require("./form-field/create-form-field.js"),p=require("./types/form-field.js"),k=Object.defineProperty,j=Object.getOwnPropertySymbols,C=Object.prototype.hasOwnProperty,I=Object.prototype.propertyIsEnumerable,E=(s,l,i)=>l in s?k(s,l,{enumerable:!0,configurable:!0,writable:!0,value:i}):s[l]=i,w=(s,l)=>{for(var i in l||(l={}))C.call(l,i)&&E(s,i,l[i]);if(j)for(var i of j(l))I.call(l,i)&&E(s,i,l[i]);return s},y=(s,l,i)=>new Promise((V,v)=>{var O=o=>{try{u(i.next(o))}catch(d){v(d)}},S=o=>{try{u(i.throw(o))}catch(d){v(d)}},u=o=>o.done?V(o.value):Promise.resolve(o.value).then(O,S);u((i=i.apply(s,l)).next())});function D(s){const{fields:l,collectErrorMode:i="firstError",disabled:V=!1,validateMode:v=_.bitwiseFlag(p.FormFieldValidateMode.OnSubmit),reValidateMode:O=_.bitwiseFlag(p.FormFieldReValidateMode.OnBlur),onValidSubmit:S,onInvalidSubmit:u,notifyOnStatusChange:o=!0}=s,d={_features:[],_config:{collectErrorMode:i,disabled:V},_validSubmitCallbacks:S!=null?[S]:[],_invalidSubmitCallbacks:u!=null?[u]:[],fields:Object.fromEntries(Object.entries(l).map(([t,e])=>{var r,m,h,c;return[t,P.createFormField(e.defaultValue,{key:t,validator:e.validator,collectErrorMode:(r=e.collectErrorMode)!=null?r:i,validateMode:(m=e.validateMode)!=null?m:v,reValidateMode:(h=e.reValidateMode)!=null?h:O,editable:(c=e.editable)!=null?c:!0,notifyOnStatusChange:o})]})),isValid:g.createState(!1),isValidating:g.createState(!1),isSubmitted:g.createState(!1),isSubmitting:g.createState(!1),init(){for(const t of Object.values(this.fields))t.status.listen(()=>y(this,null,function*(){yield d._revalidate(!0)}),{key:"form_revalidate"});return delete this.init,this},_revalidate(t=!1){return y(this,null,function*(){const e=Object.values(this.fields);return t||(this.isValidating.set(!0),yield Promise.all(e.map(r=>r.validate())),this.isValidating.set(!1)),this.isValid.set(e.every(r=>r.isValid())),this.isValid.get()})},submit(){return y(this,arguments,function*(t={}){const{context:e,assignToInitial:r=!1,onInvalidSubmit:m,onValidSubmit:h,postSubmitCallback:c}=t;this.isSubmitting.set(!0);const M=[];for(const a of Object.values(this.fields))a.isSubmitting=!0,(a.isSubmitted&&a._config.reValidateMode.has(p.FormFieldReValidateMode.OnSubmit)||!a.isSubmitted&&a._config.validateMode.has(p.FormFieldValidateMode.OnSubmit))&&M.push(a.validate());yield Promise.all(M),this._revalidate(!0);const f=this.getValidData(),b=[];if(f!=null){for(const a of this._validSubmitCallbacks)b.push(a(f,e));typeof h=="function"&&b.push(h(f,e))}else{const a=this.getErrors();for(const n of this._invalidSubmitCallbacks)b.push(n(a,e));typeof m=="function"&&b.push(m(a,e))}let F=null;c!=null?F=(yield Promise.all(b)).reduce((a,n)=>n!=null&&typeof n=="object"?w(w({},a),n):a,{}):yield Promise.all(b);for(const[a,n]of Object.entries(this.fields))f!=null&&Object.prototype.hasOwnProperty.call(f,a)&&r&&(n._intialValue=_.deepCopy(f[a])),n.isSubmitted=!0,n.isSubmitting=!1;return this.isSubmitted.set(!0),this.isSubmitting.set(!1),c==null||c(this,F!=null?F:{}),this.isValid.get()})},validate(){return y(this,null,function*(){return this._revalidate(!1)})},getField(t){return this.fields[t]},getValidData(){if(!this.isValid.get())return null;const t={};for(const[e,r]of Object.entries(this.fields))t[e]=r.get();return t},getErrors(){const t={};for(const[e,r]of Object.entries(this.fields))switch(r.status._v.type){case"INVALID":t[e]=r.status._v.errors;break;case"UNVALIDATED":t[e]=[{code:"unvalidated",message:`${e.toString()} was not yet validated!`,path:e}];break}return t},reset(){for(const t of Object.values(this.fields))t.reset();this.isSubmitted.set(!1),this._revalidate(!0)}};return d.init()}exports.createForm=D;
1
+ "use strict";var _=require("@blgc/utils"),S=require("feature-state"),k=require("./form-field/create-form-field.js"),C=require("./form-field/is-form-field.js"),p=require("./types/form-field.js"),E=Object.defineProperty,M=Object.getOwnPropertySymbols,I=Object.prototype.hasOwnProperty,D=Object.prototype.propertyIsEnumerable,w=(s,l,i)=>l in s?E(s,l,{enumerable:!0,configurable:!0,writable:!0,value:i}):s[l]=i,P=(s,l)=>{for(var i in l||(l={}))I.call(l,i)&&w(s,i,l[i]);if(M)for(var i of M(l))D.call(l,i)&&w(s,i,l[i]);return s},y=(s,l,i)=>new Promise((V,h)=>{var F=o=>{try{u(i.next(o))}catch(d){h(d)}},g=o=>{try{u(i.throw(o))}catch(d){h(d)}},u=o=>o.done?V(o.value):Promise.resolve(o.value).then(F,g);u((i=i.apply(s,l)).next())});function q(s){const{fields:l,collectErrorMode:i="firstError",disabled:V=!1,validateMode:h=_.bitwiseFlag(p.FormFieldValidateMode.OnSubmit),reValidateMode:F=_.bitwiseFlag(p.FormFieldReValidateMode.OnBlur),onValidSubmit:g,onInvalidSubmit:u,notifyOnStatusChange:o=!0}=s,d={_features:[],_config:{disabled:V},_validSubmitCallbacks:g!=null?[g]:[],_invalidSubmitCallbacks:u!=null?[u]:[],fields:Object.fromEntries(Object.entries(l).map(([t,e])=>{var r,m,v,c;return[t,C.isFormField(e)?e:k.createFormField(e.defaultValue,{key:t,validator:e.validator,collectErrorMode:(r=e.collectErrorMode)!=null?r:i,validateMode:(m=e.validateMode)!=null?m:h,reValidateMode:(v=e.reValidateMode)!=null?v:F,editable:(c=e.editable)!=null?c:!0,notifyOnStatusChange:o})]})),isValid:S.createState(!1),isValidating:S.createState(!1),isSubmitted:S.createState(!1),isSubmitting:S.createState(!1),init(){for(const t of Object.values(this.fields))t.status.listen(()=>y(this,null,function*(){yield d._revalidate(!0)}),{key:"form_revalidate"});return delete this.init,this},_revalidate(t=!1){return y(this,null,function*(){const e=Object.values(this.fields);return t||(this.isValidating.set(!0),yield Promise.all(e.map(r=>r.validate())),this.isValidating.set(!1)),this.isValid.set(e.every(r=>r.isValid())),this.isValid.get()})},submit(){return y(this,arguments,function*(t={}){const{context:e,assignToInitial:r=!1,onInvalidSubmit:m,onValidSubmit:v,postSubmitCallback:c}=t;this.isSubmitting.set(!0);const j=[];for(const a of Object.values(this.fields))a.isSubmitting.set(!0),(a.isSubmitted.get()&&a._config.reValidateMode.has(p.FormFieldReValidateMode.OnSubmit)||!a.isSubmitted.get()&&a._config.validateMode.has(p.FormFieldValidateMode.OnSubmit))&&j.push(a.validate());yield Promise.all(j),this._revalidate(!0);const f=this.getValidData(),b=[];if(f!=null){for(const a of this._validSubmitCallbacks)b.push(a(f,e));typeof v=="function"&&b.push(v(f,e))}else{const a=this.getErrors();for(const n of this._invalidSubmitCallbacks)b.push(n(a,e));typeof m=="function"&&b.push(m(a,e))}let O=null;c!=null?O=(yield Promise.all(b)).reduce((a,n)=>n!=null&&typeof n=="object"?P(P({},a),n):a,{}):yield Promise.all(b);for(const[a,n]of Object.entries(this.fields))f!=null&&Object.prototype.hasOwnProperty.call(f,a)&&r&&(n._intialValue=_.deepCopy(f[a])),n.isSubmitted.set(!0),n.isSubmitting.set(!1);return this.isSubmitted.set(!0),this.isSubmitting.set(!1),c==null||c(this,O!=null?O:{}),this.isValid.get()})},validate(){return y(this,null,function*(){return this._revalidate(!1)})},getField(t){return this.fields[t]},getValidData(){if(!this.isValid.get())return null;const t={};for(const[e,r]of Object.entries(this.fields))t[e]=r.get();return t},getErrors(){const t={};for(const[e,r]of Object.entries(this.fields))switch(r.status._v.type){case"INVALID":t[e]=r.status._v.errors;break;case"UNVALIDATED":t[e]=[{code:"unvalidated",message:`${e.toString()} was not yet validated!`,path:e}];break}return t},reset(){for(const t of Object.values(this.fields))t.reset();this.isSubmitted.set(!1),this._revalidate(!0)}};return d.init()}exports.createForm=q;
@@ -1 +1 @@
1
- "use strict";var c=require("@blgc/utils"),F=require("feature-state"),g=require("validation-adapter"),t=require("../types/form-field.js"),_=require("./create-form-field-validation-context.js"),M=require("./create-status.js"),V=(r,d,a)=>new Promise((o,l)=>{var n=e=>{try{s(a.next(e))}catch(i){l(i)}},u=e=>{try{s(a.throw(e))}catch(i){l(i)}},s=e=>e.done?o(e.value):Promise.resolve(e.value).then(n,u);s((a=a.apply(r,d)).next())});function y(r,d){const{key:a,validator:o=g.createValidator([]),editable:l=!0,reValidateMode:n=c.bitwiseFlag(t.FormFieldReValidateMode.OnBlur),validateMode:u=c.bitwiseFlag(t.FormFieldValidateMode.OnSubmit),collectErrorMode:s="firstError",notifyOnStatusChange:e=!0}=d,i=F.createState(r),m={_config:{editable:l,validateMode:u,reValidateMode:n,collectErrorMode:s},_intialValue:c.deepCopy(i._v),_validator:o,key:a,isTouched:!1,isSubmitted:!1,isSubmitting:!1,isValidating:!1,status:M.createStatus({type:"UNVALIDATED"}),validate(){return V(this,null,function*(){const h=_.createFormFieldValidationContext(this);return this.isValidating=!0,yield this._validator.validate(h),this.isValidating=!1,this.status._nextValue==null?this.status.set({type:"VALID"}):this.status.set(this.status._nextValue),this.status._nextValue=void 0,this.status.get().type==="VALID"})},isValid(){return this.status.get().type==="VALID"},blur(){(this.isSubmitted&&this._config.reValidateMode.has(t.FormFieldReValidateMode.OnBlur)||!this.isSubmitted&&(this._config.validateMode.has(t.FormFieldValidateMode.OnBlur)||this._config.validateMode.has(t.FormFieldValidateMode.OnTouched)&&!this.isTouched))&&this.validate(),this.isTouched=!0},reset(){this.set(this._intialValue,{listenerContext:{source:"form-field_reset"}}),this.isTouched=!1,this.isSubmitted=!1,this.isSubmitting=!1,this.status.set({type:"UNVALIDATED"})}},f=Object.assign(i,m,{init({notifyOnStatusChange:h}){return h&&this.status.listen(v=>{i._notify({listenerContext:{source:"form-field_status-change",status:v.value}})},{key:"form-field_status-change"}),this.listen(()=>V(this,null,function*(){(this.isSubmitted&&this._config.reValidateMode.has(t.FormFieldReValidateMode.OnChange)||!this.isSubmitted&&this._config.validateMode.has(t.FormFieldValidateMode.OnChange)||this._config.validateMode.has(t.FormFieldValidateMode.OnTouched)&&this.isTouched)&&(yield this.validate())}),{key:"form-field_validate"}),delete this.init,this}});return f._features.push("form-field"),f.init({notifyOnStatusChange:e})}exports.createFormField=y;
1
+ "use strict";var f=require("@blgc/utils"),r=require("feature-state"),F=require("validation-adapter"),t=require("../types/form-field.js"),_=require("./create-form-field-validation-context.js"),M=require("./create-status.js"),m=(d,o,a)=>new Promise((n,l)=>{var u=e=>{try{s(a.next(e))}catch(i){l(i)}},h=e=>{try{s(a.throw(e))}catch(i){l(i)}},s=e=>e.done?n(e.value):Promise.resolve(e.value).then(u,h);s((a=a.apply(d,o)).next())});function S(d,o){const{key:a,validator:n=F.createValidator([]),editable:l=!0,reValidateMode:u=f.bitwiseFlag(t.FormFieldReValidateMode.OnBlur),validateMode:h=f.bitwiseFlag(t.FormFieldValidateMode.OnSubmit),collectErrorMode:s="firstError",notifyOnStatusChange:e=!0}=o,i=r.createState(d),V={_config:{editable:l,validateMode:h,reValidateMode:u,collectErrorMode:s},_intialValue:f.deepCopy(i._v),_validator:n,key:a,isTouched:r.createState(!1),isSubmitted:r.createState(!1),isSubmitting:r.createState(!1),isValidating:r.createState(!1),status:M.createStatus({type:"UNVALIDATED"}),validate(){return m(this,null,function*(){const c=_.createFormFieldValidationContext(this);return this.isValidating.set(!0),yield this._validator.validate(c),this.isValidating.set(!1),this.status._nextValue==null?this.status.set({type:"VALID"}):this.status.set(this.status._nextValue),this.status._nextValue=void 0,this.status.get().type==="VALID"})},isValid(){return this.status.get().type==="VALID"},blur(){(this.isSubmitted.get()&&this._config.reValidateMode.has(t.FormFieldReValidateMode.OnBlur)||!this.isSubmitted.get()&&(this._config.validateMode.has(t.FormFieldValidateMode.OnBlur)||this._config.validateMode.has(t.FormFieldValidateMode.OnTouched)&&!this.isTouched.get()))&&this.validate(),this.isTouched.set(!0)},reset(){this.set(this._intialValue,{listenerContext:{source:"form-field_reset"}}),this.isTouched.set(!1),this.isSubmitted.set(!1),this.isSubmitting.set(!1),this.status.set({type:"UNVALIDATED"})}},g=Object.assign(i,V,{init({notifyOnStatusChange:c}){return c&&this.status.listen(v=>{i._notify({listenerContext:{source:"form-field_status-change",status:v.value}})},{key:"form-field_status-change"}),this.listen(()=>m(this,null,function*(){(this.isSubmitted.get()&&this._config.reValidateMode.has(t.FormFieldReValidateMode.OnChange)||!this.isSubmitted.get()&&this._config.validateMode.has(t.FormFieldValidateMode.OnChange)||this._config.validateMode.has(t.FormFieldValidateMode.OnTouched)&&this.isTouched.get())&&(yield this.validate())}),{key:"form-field_validate"}),delete this.init,this}});return g._features.push("form-field"),g.init({notifyOnStatusChange:e})}exports.createFormField=S;
@@ -1 +1 @@
1
- "use strict";function s(e){e.isSubmitted.set(!1),e.isSubmitting.set(!1);for(const t of Object.values(e.fields))t.isSubmitted=!1,t.isSubmitting=!1}exports.resetFormSubmitted=s;
1
+ "use strict";function s(e){e.isSubmitted.set(!1),e.isSubmitting.set(!1);for(const t of Object.values(e.fields))t.isSubmitted.set(!1),t.isSubmitting.set(!1)}exports.resetFormSubmitted=s;
@@ -1 +1 @@
1
- import{bitwiseFlag as j,deepCopy as w}from"@blgc/utils";import{createState as g}from"feature-state";import{createFormField as C}from"./form-field/create-form-field.js";import{FormFieldValidateMode as M,FormFieldReValidateMode as F}from"./types/form-field.js";var I=Object.defineProperty,E=Object.getOwnPropertySymbols,D=Object.prototype.hasOwnProperty,x=Object.prototype.propertyIsEnumerable,P=(r,a,i)=>a in r?I(r,a,{enumerable:!0,configurable:!0,writable:!0,value:i}):r[a]=i,k=(r,a)=>{for(var i in a||(a={}))D.call(a,i)&&P(r,i,a[i]);if(E)for(var i of E(a))x.call(a,i)&&P(r,i,a[i]);return r},y=(r,a,i)=>new Promise((S,v)=>{var O=o=>{try{u(i.next(o))}catch(d){v(d)}},p=o=>{try{u(i.throw(o))}catch(d){v(d)}},u=o=>o.done?S(o.value):Promise.resolve(o.value).then(O,p);u((i=i.apply(r,a)).next())});function A(r){const{fields:a,collectErrorMode:i="firstError",disabled:S=!1,validateMode:v=j(M.OnSubmit),reValidateMode:O=j(F.OnBlur),onValidSubmit:p,onInvalidSubmit:u,notifyOnStatusChange:o=!0}=r,d={_features:[],_config:{collectErrorMode:i,disabled:S},_validSubmitCallbacks:p!=null?[p]:[],_invalidSubmitCallbacks:u!=null?[u]:[],fields:Object.fromEntries(Object.entries(a).map(([e,t])=>{var s,m,h,c;return[e,C(t.defaultValue,{key:e,validator:t.validator,collectErrorMode:(s=t.collectErrorMode)!=null?s:i,validateMode:(m=t.validateMode)!=null?m:v,reValidateMode:(h=t.reValidateMode)!=null?h:O,editable:(c=t.editable)!=null?c:!0,notifyOnStatusChange:o})]})),isValid:g(!1),isValidating:g(!1),isSubmitted:g(!1),isSubmitting:g(!1),init(){for(const e of Object.values(this.fields))e.status.listen(()=>y(this,null,function*(){yield d._revalidate(!0)}),{key:"form_revalidate"});return delete this.init,this},_revalidate(e=!1){return y(this,null,function*(){const t=Object.values(this.fields);return e||(this.isValidating.set(!0),yield Promise.all(t.map(s=>s.validate())),this.isValidating.set(!1)),this.isValid.set(t.every(s=>s.isValid())),this.isValid.get()})},submit(){return y(this,arguments,function*(e={}){const{context:t,assignToInitial:s=!1,onInvalidSubmit:m,onValidSubmit:h,postSubmitCallback:c}=e;this.isSubmitting.set(!0);const _=[];for(const l of Object.values(this.fields))l.isSubmitting=!0,(l.isSubmitted&&l._config.reValidateMode.has(F.OnSubmit)||!l.isSubmitted&&l._config.validateMode.has(M.OnSubmit))&&_.push(l.validate());yield Promise.all(_),this._revalidate(!0);const f=this.getValidData(),b=[];if(f!=null){for(const l of this._validSubmitCallbacks)b.push(l(f,t));typeof h=="function"&&b.push(h(f,t))}else{const l=this.getErrors();for(const n of this._invalidSubmitCallbacks)b.push(n(l,t));typeof m=="function"&&b.push(m(l,t))}let V=null;c!=null?V=(yield Promise.all(b)).reduce((l,n)=>n!=null&&typeof n=="object"?k(k({},l),n):l,{}):yield Promise.all(b);for(const[l,n]of Object.entries(this.fields))f!=null&&Object.prototype.hasOwnProperty.call(f,l)&&s&&(n._intialValue=w(f[l])),n.isSubmitted=!0,n.isSubmitting=!1;return this.isSubmitted.set(!0),this.isSubmitting.set(!1),c==null||c(this,V!=null?V:{}),this.isValid.get()})},validate(){return y(this,null,function*(){return this._revalidate(!1)})},getField(e){return this.fields[e]},getValidData(){if(!this.isValid.get())return null;const e={};for(const[t,s]of Object.entries(this.fields))e[t]=s.get();return e},getErrors(){const e={};for(const[t,s]of Object.entries(this.fields))switch(s.status._v.type){case"INVALID":e[t]=s.status._v.errors;break;case"UNVALIDATED":e[t]=[{code:"unvalidated",message:`${t.toString()} was not yet validated!`,path:t}];break}return e},reset(){for(const e of Object.values(this.fields))e.reset();this.isSubmitted.set(!1),this._revalidate(!0)}};return d.init()}export{A as createForm};
1
+ import{bitwiseFlag as j,deepCopy as C}from"@blgc/utils";import{createState as g}from"feature-state";import{createFormField as E}from"./form-field/create-form-field.js";import{isFormField as I}from"./form-field/is-form-field.js";import{FormFieldValidateMode as F,FormFieldReValidateMode as M}from"./types/form-field.js";var D=Object.defineProperty,w=Object.getOwnPropertySymbols,x=Object.prototype.hasOwnProperty,A=Object.prototype.propertyIsEnumerable,P=(r,s,i)=>s in r?D(r,s,{enumerable:!0,configurable:!0,writable:!0,value:i}):r[s]=i,k=(r,s)=>{for(var i in s||(s={}))x.call(s,i)&&P(r,i,s[i]);if(w)for(var i of w(s))A.call(s,i)&&P(r,i,s[i]);return r},S=(r,s,i)=>new Promise((y,v)=>{var O=o=>{try{u(i.next(o))}catch(d){v(d)}},p=o=>{try{u(i.throw(o))}catch(d){v(d)}},u=o=>o.done?y(o.value):Promise.resolve(o.value).then(O,p);u((i=i.apply(r,s)).next())});function T(r){const{fields:s,collectErrorMode:i="firstError",disabled:y=!1,validateMode:v=j(F.OnSubmit),reValidateMode:O=j(M.OnBlur),onValidSubmit:p,onInvalidSubmit:u,notifyOnStatusChange:o=!0}=r,d={_features:[],_config:{disabled:y},_validSubmitCallbacks:p!=null?[p]:[],_invalidSubmitCallbacks:u!=null?[u]:[],fields:Object.fromEntries(Object.entries(s).map(([e,t])=>{var a,m,h,f;return[e,I(t)?t:E(t.defaultValue,{key:e,validator:t.validator,collectErrorMode:(a=t.collectErrorMode)!=null?a:i,validateMode:(m=t.validateMode)!=null?m:v,reValidateMode:(h=t.reValidateMode)!=null?h:O,editable:(f=t.editable)!=null?f:!0,notifyOnStatusChange:o})]})),isValid:g(!1),isValidating:g(!1),isSubmitted:g(!1),isSubmitting:g(!1),init(){for(const e of Object.values(this.fields))e.status.listen(()=>S(this,null,function*(){yield d._revalidate(!0)}),{key:"form_revalidate"});return delete this.init,this},_revalidate(e=!1){return S(this,null,function*(){const t=Object.values(this.fields);return e||(this.isValidating.set(!0),yield Promise.all(t.map(a=>a.validate())),this.isValidating.set(!1)),this.isValid.set(t.every(a=>a.isValid())),this.isValid.get()})},submit(){return S(this,arguments,function*(e={}){const{context:t,assignToInitial:a=!1,onInvalidSubmit:m,onValidSubmit:h,postSubmitCallback:f}=e;this.isSubmitting.set(!0);const _=[];for(const l of Object.values(this.fields))l.isSubmitting.set(!0),(l.isSubmitted.get()&&l._config.reValidateMode.has(M.OnSubmit)||!l.isSubmitted.get()&&l._config.validateMode.has(F.OnSubmit))&&_.push(l.validate());yield Promise.all(_),this._revalidate(!0);const c=this.getValidData(),b=[];if(c!=null){for(const l of this._validSubmitCallbacks)b.push(l(c,t));typeof h=="function"&&b.push(h(c,t))}else{const l=this.getErrors();for(const n of this._invalidSubmitCallbacks)b.push(n(l,t));typeof m=="function"&&b.push(m(l,t))}let V=null;f!=null?V=(yield Promise.all(b)).reduce((l,n)=>n!=null&&typeof n=="object"?k(k({},l),n):l,{}):yield Promise.all(b);for(const[l,n]of Object.entries(this.fields))c!=null&&Object.prototype.hasOwnProperty.call(c,l)&&a&&(n._intialValue=C(c[l])),n.isSubmitted.set(!0),n.isSubmitting.set(!1);return this.isSubmitted.set(!0),this.isSubmitting.set(!1),f==null||f(this,V!=null?V:{}),this.isValid.get()})},validate(){return S(this,null,function*(){return this._revalidate(!1)})},getField(e){return this.fields[e]},getValidData(){if(!this.isValid.get())return null;const e={};for(const[t,a]of Object.entries(this.fields))e[t]=a.get();return e},getErrors(){const e={};for(const[t,a]of Object.entries(this.fields))switch(a.status._v.type){case"INVALID":e[t]=a.status._v.errors;break;case"UNVALIDATED":e[t]=[{code:"unvalidated",message:`${t.toString()} was not yet validated!`,path:t}];break}return e},reset(){for(const e of Object.values(this.fields))e.reset();this.isSubmitted.set(!1),this._revalidate(!0)}};return d.init()}export{T as createForm};
@@ -1 +1 @@
1
- import{bitwiseFlag as m,deepCopy as _}from"@blgc/utils";import{createState as y}from"feature-state";import{createValidator as p}from"validation-adapter";import{FormFieldReValidateMode as f,FormFieldValidateMode as a}from"../types/form-field.js";import{createFormFieldValidationContext as b}from"./create-form-field-validation-context.js";import{createStatus as M}from"./create-status.js";var g=(l,r,i)=>new Promise((n,o)=>{var d=t=>{try{s(i.next(t))}catch(e){o(e)}},u=t=>{try{s(i.throw(t))}catch(e){o(e)}},s=t=>t.done?n(t.value):Promise.resolve(t.value).then(d,u);s((i=i.apply(l,r)).next())});function S(l,r){const{key:i,validator:n=p([]),editable:o=!0,reValidateMode:d=m(f.OnBlur),validateMode:u=m(a.OnSubmit),collectErrorMode:s="firstError",notifyOnStatusChange:t=!0}=r,e=y(l),V={_config:{editable:o,validateMode:u,reValidateMode:d,collectErrorMode:s},_intialValue:_(e._v),_validator:n,key:i,isTouched:!1,isSubmitted:!1,isSubmitting:!1,isValidating:!1,status:M({type:"UNVALIDATED"}),validate(){return g(this,null,function*(){const h=b(this);return this.isValidating=!0,yield this._validator.validate(h),this.isValidating=!1,this.status._nextValue==null?this.status.set({type:"VALID"}):this.status.set(this.status._nextValue),this.status._nextValue=void 0,this.status.get().type==="VALID"})},isValid(){return this.status.get().type==="VALID"},blur(){(this.isSubmitted&&this._config.reValidateMode.has(f.OnBlur)||!this.isSubmitted&&(this._config.validateMode.has(a.OnBlur)||this._config.validateMode.has(a.OnTouched)&&!this.isTouched))&&this.validate(),this.isTouched=!0},reset(){this.set(this._intialValue,{listenerContext:{source:"form-field_reset"}}),this.isTouched=!1,this.isSubmitted=!1,this.isSubmitting=!1,this.status.set({type:"UNVALIDATED"})}},c=Object.assign(e,V,{init({notifyOnStatusChange:h}){return h&&this.status.listen(v=>{e._notify({listenerContext:{source:"form-field_status-change",status:v.value}})},{key:"form-field_status-change"}),this.listen(()=>g(this,null,function*(){(this.isSubmitted&&this._config.reValidateMode.has(f.OnChange)||!this.isSubmitted&&this._config.validateMode.has(a.OnChange)||this._config.validateMode.has(a.OnTouched)&&this.isTouched)&&(yield this.validate())}),{key:"form-field_validate"}),delete this.init,this}});return c._features.push("form-field"),c.init({notifyOnStatusChange:t})}export{S as createFormField};
1
+ import{bitwiseFlag as g,deepCopy as y}from"@blgc/utils";import{createState as a}from"feature-state";import{createValidator as p}from"validation-adapter";import{FormFieldReValidateMode as c,FormFieldValidateMode as o}from"../types/form-field.js";import{createFormFieldValidationContext as b}from"./create-form-field-validation-context.js";import{createStatus as M}from"./create-status.js";var V=(r,n,i)=>new Promise((d,l)=>{var u=t=>{try{s(i.next(t))}catch(e){l(e)}},h=t=>{try{s(i.throw(t))}catch(e){l(e)}},s=t=>t.done?d(t.value):Promise.resolve(t.value).then(u,h);s((i=i.apply(r,n)).next())});function S(r,n){const{key:i,validator:d=p([]),editable:l=!0,reValidateMode:u=g(c.OnBlur),validateMode:h=g(o.OnSubmit),collectErrorMode:s="firstError",notifyOnStatusChange:t=!0}=n,e=a(r),v={_config:{editable:l,validateMode:h,reValidateMode:u,collectErrorMode:s},_intialValue:y(e._v),_validator:d,key:i,isTouched:a(!1),isSubmitted:a(!1),isSubmitting:a(!1),isValidating:a(!1),status:M({type:"UNVALIDATED"}),validate(){return V(this,null,function*(){const f=b(this);return this.isValidating.set(!0),yield this._validator.validate(f),this.isValidating.set(!1),this.status._nextValue==null?this.status.set({type:"VALID"}):this.status.set(this.status._nextValue),this.status._nextValue=void 0,this.status.get().type==="VALID"})},isValid(){return this.status.get().type==="VALID"},blur(){(this.isSubmitted.get()&&this._config.reValidateMode.has(c.OnBlur)||!this.isSubmitted.get()&&(this._config.validateMode.has(o.OnBlur)||this._config.validateMode.has(o.OnTouched)&&!this.isTouched.get()))&&this.validate(),this.isTouched.set(!0)},reset(){this.set(this._intialValue,{listenerContext:{source:"form-field_reset"}}),this.isTouched.set(!1),this.isSubmitted.set(!1),this.isSubmitting.set(!1),this.status.set({type:"UNVALIDATED"})}},m=Object.assign(e,v,{init({notifyOnStatusChange:f}){return f&&this.status.listen(_=>{e._notify({listenerContext:{source:"form-field_status-change",status:_.value}})},{key:"form-field_status-change"}),this.listen(()=>V(this,null,function*(){(this.isSubmitted.get()&&this._config.reValidateMode.has(c.OnChange)||!this.isSubmitted.get()&&this._config.validateMode.has(o.OnChange)||this._config.validateMode.has(o.OnTouched)&&this.isTouched.get())&&(yield this.validate())}),{key:"form-field_validate"}),delete this.init,this}});return m._features.push("form-field"),m.init({notifyOnStatusChange:t})}export{S as createFormField};
@@ -1 +1 @@
1
- function s(e){e.isSubmitted.set(!1),e.isSubmitting.set(!1);for(const t of Object.values(e.fields))t.isSubmitted=!1,t.isSubmitting=!1}export{s as resetFormSubmitted};
1
+ function s(e){e.isSubmitted.set(!1),e.isSubmitting.set(!1);for(const t of Object.values(e.fields))t.isSubmitted.set(!1),t.isSubmitting.set(!1)}export{s as resetFormSubmitted};
@@ -1,11 +1,16 @@
1
1
  import { type BitwiseFlag } from '@blgc/utils';
2
- import { FormFieldReValidateMode, FormFieldValidateMode, type TForm, type TFormConfig, type TFormData, type TFormFieldStateConfig, type TFormFieldValidator, type TInvalidSubmitCallback, type TValidSubmitCallback } from './types';
2
+ import { TCollectErrorMode } from 'validation-adapter';
3
+ import { FormFieldReValidateMode, FormFieldValidateMode, TFormField, type TForm, type TFormConfig, type TFormData, type TFormFieldStateConfig, type TFormFieldValidator, type TInvalidSubmitCallback, type TValidSubmitCallback } from './types';
3
4
  export declare function createForm<GFormData extends TFormData>(config: TCreateFormConfig<GFormData>): TForm<GFormData, []>;
4
5
  export interface TCreateFormConfig<GFormData extends TFormData> extends Partial<TFormConfig> {
5
6
  /**
6
7
  * Form fields
7
8
  */
8
9
  fields: TCreateFormConfigFormFields<GFormData>;
10
+ /**
11
+ * Error collection mode. 'firstError' gathers only the first error per field, 'all' gathers all errors.
12
+ */
13
+ collectErrorMode: TCollectErrorMode;
9
14
  /**
10
15
  * Validation strategy **before** submitting.
11
16
  */
@@ -22,7 +27,7 @@ export interface TCreateFormConfig<GFormData extends TFormData> extends Partial<
22
27
  onValidSubmit?: TValidSubmitCallback<GFormData>;
23
28
  }
24
29
  export type TCreateFormConfigFormFields<GFormData extends TFormData> = {
25
- [Key in keyof GFormData]: TCreateFormConfigFormField<GFormData[Key]>;
30
+ [Key in keyof GFormData]: TCreateFormConfigFormField<GFormData[Key]> | TFormField<GFormData[Key]>;
26
31
  };
27
32
  export interface TCreateFormConfigFormField<GValue> extends Partial<TFormFieldStateConfig> {
28
33
  defaultValue?: GValue;
@@ -9,10 +9,10 @@ export interface TFormFieldStateFeature<GValue> {
9
9
  _intialValue: GValue | undefined;
10
10
  _validator: TFormFieldValidator<GValue>;
11
11
  key: string;
12
- isTouched: boolean;
13
- isSubmitted: boolean;
14
- isSubmitting: boolean;
15
- isValidating: boolean;
12
+ isTouched: TState<boolean, []>;
13
+ isSubmitted: TState<boolean, []>;
14
+ isSubmitting: TState<boolean, []>;
15
+ isValidating: TState<boolean, []>;
16
16
  status: TFormFieldStatus;
17
17
  validate: () => Promise<boolean>;
18
18
  isValid: () => boolean;
@@ -1,6 +1,5 @@
1
1
  import { TFeatureDefinition, TWithFeatures } from '@blgc/types/features';
2
2
  import { type TState } from 'feature-state';
3
- import { type TCollectErrorMode } from 'validation-adapter';
4
3
  import { type TFormField, type TInvalidFormFieldError } from './form-field';
5
4
  export type TForm<GFormData extends TFormData, GFeatures extends TFeatureDefinition[]> = TWithFeatures<{
6
5
  _config: TFormConfig;
@@ -47,8 +46,4 @@ export interface TFormConfig {
47
46
  * Indicates if the form is disabled.
48
47
  */
49
48
  disabled: boolean;
50
- /**
51
- * Error collection mode. 'firstError' gathers only the first error per field, 'all' gathers all errors.
52
- */
53
- collectErrorMode: TCollectErrorMode;
54
49
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "feature-form",
3
- "version": "0.0.40",
3
+ "version": "0.0.42",
4
4
  "private": false,
5
5
  "description": "Straightforward, typesafe, and feature-based form library for ReactJs",
6
6
  "keywords": [],
@@ -24,9 +24,9 @@
24
24
  ],
25
25
  "dependencies": {
26
26
  "@blgc/types": "0.0.15",
27
- "@blgc/utils": "0.0.36",
27
+ "feature-state": "0.0.47",
28
28
  "validation-adapter": "0.0.19",
29
- "feature-state": "0.0.47"
29
+ "@blgc/utils": "0.0.36"
30
30
  },
31
31
  "devDependencies": {
32
32
  "@types/node": "^22.13.5",