effector-form-solid
Version:
Effector Form by 42-px for Solidjs
2 lines (1 loc) • 7.02 kB
JavaScript
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("effector"),r=require("effector-solid");const t={store:function({init:r,domain:t,existing:i},o){return i||(t?t.createStore(r,o):e.createStore(r,o))},event:function({domain:r,existing:t}){return t||(r?r.createEvent():e.createEvent())}};function i(r,i,o){var n,s,l,u,a,d,c,m,v,f,h,p;const g="function"==typeof i.init?i.init():i.init,$=t.store({domain:o,existing:null===(n=i.units)||void 0===n?void 0:n.$value,init:g},{sid:`${r}-$value`}),x=t.store({domain:o,existing:null===(s=i.units)||void 0===s?void 0:s.$errors,init:[]},{sid:`${r}-$errors`}),V=x.map((e=>e[0]?e[0]:null)),b=t.store({domain:o,existing:null===(l=i.units)||void 0===l?void 0:l.$initValue,init:g},{sid:`${r}-$initValue`}),E=t.store({domain:o,existing:null===(u=i.units)||void 0===u?void 0:u.$isTouched,init:!1},{sid:`${r}-$touched`}),y=e.combine($,b,((e,r)=>e!==r)),T=t.event({domain:o,existing:null===(a=i.units)||void 0===a?void 0:a.onChange}),F=t.event({domain:o,existing:null===(d=i.units)||void 0===d?void 0:d.onBlur}),S=t.event({domain:o,existing:null===(c=i.units)||void 0===c?void 0:c.changed}),O=t.event({domain:o,existing:null===(m=i.units)||void 0===m?void 0:m.addError}),k=t.event({domain:o,existing:null===(v=i.units)||void 0===v?void 0:v.validate}),w=t.event({domain:o,existing:null===(f=i.units)||void 0===f?void 0:f.resetErrors}),C=t.event({domain:o,existing:null===(h=i.units)||void 0===h?void 0:h.resetValue}),D=t.event({domain:o,existing:null===(p=i.units)||void 0===p?void 0:p.reset}),P=V.map((e=>null===e)),B=V.map((e=>(null==e?void 0:e.errorText)||"")),j=e.combine({value:$,errors:x,firstError:V,isValid:P,isDirty:y,isTouched:E}),I={value:$,initValue:b,isValid:P,isDirty:y,touched:E,errors:x,firstError:V,errorText:B,onChange:T,onBlur:F,addError:O,validate:k,reset:D,resetErrors:w,resetValue:C};return{changed:S,name:r,$initValue:b,$value:$,$errors:x,$firstError:V,$errorText:B,$isValid:P,$isDirty:y,$isTouched:E,$touched:E,$field:j,onChange:T,onBlur:F,addError:O,validate:k,set:T,reset:D,resetErrors:w,resetValue:C,filter:i.filter,"@@unitShape":()=>I}}function o(r){const{form:t,field:i,fieldConfig:o}=r,n=o.rules||[],s=t.validateOn||["submit"],l=o.validateOn||[],{$value:u,$errors:a,onBlur:d,changed:c,addError:m,validate:v,resetErrors:f,resetValue:h,reset:p}=i,g="function"==typeof n?e.createStore([],{sid:`${i.name}-$rulesSources`}):e.combine(n.map((({source:r},t)=>{const o=`${i.name}-$rulesSources-${t}`;return r||e.createStore(null,{sid:o})}))),$=function(e){return(r,t,i)=>{const o=[],n="function"==typeof e?e(r,t):e;for(let e=0;e<n.length;e++){const s=n[e],l=i?i[e]:null,u=s.validator(r,t,l);"boolean"!=typeof u||u||o.push({rule:s.name,errorText:s.errorText,value:r}),"object"!=typeof u||u.isValid||o.push({rule:s.name,errorText:u.errorText,value:r})}return o}}(n),x=[...s,...l],V=[];if(x.includes("submit")){const r=e.sample({source:e.combine({fieldValue:u,form:t.$values,rulesSources:g}),clock:t.submit});V.push(r)}x.includes("blur")&&V.push(e.sample({source:e.combine({fieldValue:u,form:t.$values,rulesSources:g}),clock:d})),x.includes("change")&&V.push(e.sample({source:e.combine({fieldValue:u,form:t.$values,rulesSources:g}),clock:e.merge([c,h,t.resetValues])})),V.push(e.sample({source:e.combine({fieldValue:u,form:t.$values,rulesSources:g}),clock:v})),V.push(e.sample({source:e.combine({fieldValue:u,form:t.$values,rulesSources:g}),clock:t.validate}));const b=e.sample({source:u,clock:m,fn:(e,{rule:r,errorText:t})=>({rule:r,value:e,errorText:t})}),E=e.sample({source:u,clock:t.addErrors,fn:(e,r)=>({value:e,newErrors:r})});a.on(V,((e,{form:r,fieldValue:t,rulesSources:i})=>$(t,r,i))).on(b,((e,r)=>[r,...e])).on(E,((e,{value:r,newErrors:t})=>{const o=[];for(const e of t)e.field===i.name&&o.push({value:r,rule:e.rule,errorText:e.errorText});return[...o,...e]})).reset(f,t.reset,p,t.resetErrors),x.includes("change")||a.reset(c)}function n({field:r,form:t}){const{$value:i,$initValue:o,$touched:n,onChange:s,changed:l,name:u,reset:a,resetValue:d,filter:c}=r,{setForm:m,setInitialForm:v,resetForm:f,resetTouched:h,resetValues:p}=t,g=e.sample({source:o,clock:e.merge([a,d,p,f])});n.on(l,(()=>!0)).reset(a,f,h),c?e.sample({source:s,filter:c,target:l}):e.sample({source:s,filter:()=>!0,target:l}),o.on(v,((e,r)=>r.hasOwnProperty(u)?r[u]:e)),i.on(l,((e,r)=>r)).on([m,v],((e,r)=>r.hasOwnProperty(u)?r[u]:e)).on(g,((e,r)=>r))}const s=e=>[Object,Array].includes((e||{}).constructor)&&0===Object.entries(e||{}).length;function l(e,t){const i=Object.keys(e.fields);let o={};return s(t)?i.forEach((t=>{o={...o,[t]:r.useUnit(e.fields[t])}})):t.forEach((t=>{o={...o,[t]:r.useUnit(e.fields[t])}})),o}exports.createForm=function(r){const{filter:s,domain:l,fields:u,validateOn:a,units:d}=r,c={},m=[],v=[];for(const e in u){if(!u.hasOwnProperty(e))continue;const r=i(e,u[e],l);c[e]=r,m.push(r.$isDirty),v.push(r.$touched)}const f=function(r){const t={};for(const e in r)r.hasOwnProperty(e)&&(t[e]=r[e].$value);return e.combine(t)}(c),h=function(r){const t=[];for(const e in r){if(!r.hasOwnProperty(e))continue;const{$firstError:i}=r[e];t.push(i)}return e.combine(t).map((e=>e.every((e=>null===e))))}(c),p=s?e.combine(h,s,((e,r)=>e&&r)):h,g=e.combine(m).map((e=>e.some(Boolean))),$=e.combine(v).map((e=>e.some(Boolean))),x=e.combine({isValid:h,isDirty:g,touched:$}),V=t.event({domain:l,existing:null==d?void 0:d.validate}),b=t.event({domain:l,existing:null==d?void 0:d.submit}),E=t.event({domain:l,existing:null==d?void 0:d.formValidated}),y=t.event({domain:l,existing:null==d?void 0:d.setInitialForm}),T=t.event({domain:l,existing:null==d?void 0:d.setForm}),F=t.event({domain:l,existing:null==d?void 0:d.addErrors}),S=t.event({domain:l,existing:null==d?void 0:d.reset}),O=t.event({domain:l,existing:null==d?void 0:d.resetValues}),k=t.event({domain:l,existing:null==d?void 0:d.resetErrors}),w=t.event({domain:l,existing:null==d?void 0:d.resetTouched}),C=e.sample({source:f,clock:b}),D=e.sample({source:f,clock:V});for(const e in c){if(!c.hasOwnProperty(e))continue;const r=u[e],t=c[e];n({form:{setForm:T,setInitialForm:y,resetForm:S,resetTouched:w,resetValues:O},field:t}),o({form:{$values:f,submit:b,reset:S,addErrors:F,resetValues:O,resetErrors:k,validate:V,validateOn:a},fieldConfig:r,field:t})}e.sample({source:C,filter:p,target:E}),e.sample({source:D,filter:p,target:E});const P={isValid:h,isDirty:g,touched:$,submit:b,reset:S,addErrors:F,validate:V,setForm:T,setInitialForm:y,resetTouched:w,resetValues:O,resetErrors:k,formValidated:E};return{fields:c,$values:f,$eachValid:h,$isValid:h,$isDirty:g,$touched:$,$meta:x,submit:b,validate:V,resetTouched:w,addErrors:F,reset:S,resetValues:O,resetErrors:k,setForm:T,setInitialForm:y,set:T,formValidated:E,"@@unitShape":()=>P}},exports.useForm=function(e,t){const i=r.useUnit(e),o=l(e,t);return{...i,submit:e=>{e.preventDefault(),i.submit()},fields:o}},exports.useFormField=function(e,t){const i=r.useUnit(e.fields[t]);return{...i,onChangeField:e=>{i.onChange(e.target.value)}}},exports.useFormSignals=l;