UNPKG

form-test-victor

Version:

# Performant forms and wizard library for React

3 lines (2 loc) 15 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react")):"function"==typeof define&&define.amd?define(["exports","react"],t):t((e||self).formTestVictor={},e.react)}(this,function(e,t){function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var r,u=/*#__PURE__*/n(t),o={formInternal:{registerField:function(){},unregisterField:function(){},addValueSubscriber:function(){},removeValueSubscriber:function(){},addValidationStatusSubscriber:function(){},removeValidationStatusSubscriber:function(){},handleOnChange:function(){},handleOnBlur:function(){},getFormValuesForNames:function(){return{}},getFormErrorsForNames:function(){return{}},updateValidationStatus:function(){}},getFormValues:function(){return{}},resetForm:function(){},setFormValues:function(){}},a=/*#__PURE__*/t.createContext(o);function i(){return t.useContext(a)}function c(t){var n=!1,r=!1;return Object.values(t).forEach(function(t){t.status===e.VALIDATION_OUTCOME.UNDETERMINED?r=!0:t.status===e.VALIDATION_OUTCOME.INVALID&&(n=!0)}),n?e.VALIDATION_OUTCOME.INVALID:r?e.VALIDATION_OUTCOME.UNDETERMINED:e.VALIDATION_OUTCOME.VALID}e.VALIDATION_OUTCOME=void 0,(r=e.VALIDATION_OUTCOME||(e.VALIDATION_OUTCOME={})).VALID="VALID",r.INVALID="INVALID",r.UNDETERMINED="UNDETERMINED";var s,l={status:e.VALIDATION_OUTCOME.VALID,message:void 0},f={status:e.VALIDATION_OUTCOME.UNDETERMINED,message:void 0},d=/*#__PURE__*/t.createContext({registerRule:function(){},unregisterRule:function(){}});function v(n){var r=n.name,o=n.children,a=n.render,c=n.data,s=i().formInternal,v=s.registerField,O=s.unregisterField,h=s.handleOnChange,C=s.handleOnBlur,b=s.updateValidationStatus,E=function(){var e=t.useState([]),n=e[0],r=e[1],u=t.useState([]),o=u[0],a=u[1],i=t.useCallback(function(e,t,n){n?a(function(n){return[].concat(n,[{validatorFn:e,errorMessage:t}])}):r(function(n){return[].concat(n,[{validatorFn:e,errorMessage:t}])})},[]),c=t.useCallback(function(e,t){t?a(function(t){return t.filter(function(t){return t.validatorFn!==e})}):r(function(t){return t.filter(function(t){return t.validatorFn!==e})})},[]),s=t.useMemo(function(){return{registerRule:i,unregisterRule:c}},[i,c]);return t.useMemo(function(){return{ruleContext:s,rules:n,debouncedRules:o}},[o,s,n])}(),m=E.ruleContext,g=E.rules,p=E.debouncedRules,S=t.useState(void 0),N=S[0],V=S[1],I=t.useState(!0),A=I[0],R=I[1],T=function(n,r,u){var o=n.length+r.length,a=t.useState(o?f:l),i=a[0],c=a[1],s=t.useRef({countRulesResolved:0,phaseId:0,hasError:!1}),d=t.useCallback(function(t,n,r){t.forEach(function(t){var u=t.errorMessage;s.current.hasError||Promise.resolve((0,t.validatorFn)(n)).then(function(e){if(r===s.current.phaseId){if(s.current.countRulesResolved+=1,!e&&!s.current.hasError)throw new Error(u);e&&s.current.countRulesResolved===o&&c(l)}}).catch(function(t){var n={status:e.VALIDATION_OUTCOME.INVALID,message:t.message};s.current.hasError=!0,c(n)})})},[o]);return t.useEffect(function(){if(!o)return c(l),function(){};c(f);var e=s.current;e.phaseId+=1,e.countRulesResolved=0,e.hasError=!1;var t=e.phaseId;d(n,u,t);var a=setTimeout(function(){d(r,u,t)},500);return function(){return clearTimeout(a)}},[r,o,n,d,u]),i}(g,p,N),F=t.useRef(!1);t.useEffect(function(){return v(r,V),function(){return O(r)}},[r,v,O]),t.useEffect(function(){A&&F.current&&R(!1)},[A,N]),t.useEffect(function(){b(r,T)},[r,b,T]);var k=t.useCallback(function(e){h(r,e,F.current)},[h,r]),D=t.useCallback(function(){F.current=!1,C(r,c)},[C,r,c]),L=t.useCallback(function(){F.current=!0},[]);/*#__PURE__*/return u.default.createElement(d.Provider,{value:m},a({name:r,value:N,onFocus:L,onBlur:D,onChange:k},{isPristine:A,validationStatus:T}),o)}function O(){return O=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},O.apply(this,arguments)}function h(e){/*#__PURE__*/return u.default.createElement(v,O({},e,{render:function(){return null}}))}function C(e){var n=e.message,r=e.children,u=e.validationFn,o=e.isDebounced,a=void 0!==o&&o,i=t.useContext(d),c=i.registerRule,s=i.unregisterRule;return t.useEffect(function(){return c(u,n,a),function(){return s(u,a)}},[a,n,c,s,u]),r}function b(n){var r,u,o=(void 0===n?{}:n).onUpdateAfterBlur,a=t.useRef({errors:{},values:{}}).current,i=t.useRef({}).current,c=t.useRef(),l=t.useCallback(function(e){Object.keys(i).forEach(function(t){e(i[t])})},[i]),d=t.useRef(((r={})[s.ON_CHANGE]={global:new Set,scoped:{}},r[s.ON_BLUR]={global:new Set,scoped:{}},r)).current,v=t.useRef(((u={})[s.ON_CHANGE]={global:new Set,scoped:{}},u[s.ON_BLUR]={global:new Set,scoped:{}},u)).current,h=t.useCallback(function(e){var t=e||Object.keys(i),n={};return t.forEach(function(e){var t;null!=(t=i[e])&&t.isRegistered&&(n[e]=i[e].value)}),n},[i]),C=t.useCallback(function(e){var t=e||Object.keys(i),n={};return t.forEach(function(e){var t;null!=(t=i[e])&&t.isRegistered&&(n[e]=i[e].validation)}),n},[i]),b=t.useCallback(function(){return h()},[h]),E=t.useCallback(function(e,t){d[t].scoped[e]&&d[t].scoped[e].forEach(function(t){t(function(t){var n;return O({},t,((n={})[e]=i[e].isRegistered?i[e].value:void 0,n))})}),d[t].global.size&&(clearTimeout(a.values[t]),a.values[t]=setTimeout(function(){var e=b();d[t].global.forEach(function(t){t(e)})},0))},[d,i,b,a]),m=t.useCallback(function(e,t){v[t].scoped[e]&&v[t].scoped[e].forEach(function(t){t(function(t){var n=t;return i[e].isRegistered?n[e]=i[e].validation:delete n[e],n})}),v[t].global.size&&(clearTimeout(a.errors[t]),a.errors[t]=setTimeout(function(){var e=C();v[t].global.forEach(function(t){t(e)})},0))},[v,i,C,a]),g=t.useCallback(function(e){E(e,s.ON_CHANGE),E(e,s.ON_BLUR)},[E]),p=t.useCallback(function(e){m(e,s.ON_CHANGE),m(e,s.ON_BLUR)},[m]),S=t.useCallback(function(e){i[e].isRegistered=!1,g(e),p(e)},[i,g,p]),N=t.useCallback(function(e,t,n,r){var u=n;r?r.forEach(function(n){u[t].scoped[n]||(u[t].scoped[n]=new Set),u[t].scoped[n].add(e)}):u[t].global.add(e)},[]),V=t.useCallback(function(e,t,n){N(e,t,d,n),e(h(n))},[N,d,h]),I=t.useCallback(function(e,t){N(e,s.ON_CHANGE,v,t),e(C(t))},[N,v,C]),A=t.useCallback(function(e,t){var n,r,u=null==(n=i[e])?void 0:n.value;if(null!=(r=i[e])&&r.isRegistered)throw new Error('Attempting to register field "'+e+'" a second time');i[e]={name:e,isRegistered:!0,value:u,validation:f},V(function(n){var r="function"==typeof n?n({}):n;t(null==r?void 0:r[e])},s.ON_CHANGE,[e]),g(e)},[i,V,g]),R=t.useCallback(function(e,t,n,r){r?r.forEach(function(r){n[t].scoped[r].delete(e)}):n[t].global.delete(e)},[]),T=t.useCallback(function(e,t,n){R(e,t,d,n)},[d,R]),F=t.useCallback(function(e,t){R(e,s.ON_CHANGE,v,t)},[v,R]),k=t.useCallback(function(e,t){void 0===t&&(t=!1),t&&l(function(e){var t=e.name;i[t].value=void 0,g(t)}),Object.keys(e).forEach(function(t){i[t]?i[t].value=e[t]:i[t]={name:t,isRegistered:!1,value:e[t],validation:f},g(t)})},[l,i,g]),D=t.useCallback(function(e,t,n){i[e].value!==t&&(n&&(c.current=e),i[e].value=t,E(e,s.ON_CHANGE))},[i,E]),L=t.useCallback(function(t,n){void 0===n&&(n={});try{var r=function(){c.current=void 0};E(t,s.ON_BLUR);var u=function(){if(o&&c.current===t&&i[t].validation.status===e.VALIDATION_OUTCOME.VALID)return Promise.resolve(o(t,i[t].value,n,{getFormValues:b,setFormValues:k})).then(function(){})}();return Promise.resolve(u&&u.then?u.then(r):r())}catch(e){return Promise.reject(e)}},[E,o,i,b,k]),P=t.useCallback(function(e,t){i[e].validation=t,m(e,s.ON_CHANGE)},[i,m]),_=t.useCallback(function(){return k({},!0)},[k]);return t.useMemo(function(){return{formInternal:{registerField:A,unregisterField:S,addValueSubscriber:V,removeValueSubscriber:T,addValidationStatusSubscriber:I,removeValidationStatusSubscriber:F,handleOnChange:D,handleOnBlur:L,getFormValuesForNames:h,getFormErrorsForNames:C,updateValidationStatus:P},getFormValues:b,resetForm:_,setFormValues:k}},[A,S,V,T,I,F,D,L,h,C,P,b,_,k])}function E(e,n,r){var u=i(),a=(r||u).formInternal,c=a.addValueSubscriber,s=a.removeValueSubscriber,l=t.useState({}),f=l[0],d=l[1];if(!r&&u===o)throw new Error('No form context could be found while calling "useValues".');return t.useEffect(function(){return c(d,e,n),function(){return s(d,e,n)}},[c,s,e,null==n?void 0:n.join()]),f}function m(e,t){return E(s.ON_CHANGE,e,t)}function g(e,n){var r=i(),u=(n||r).formInternal,a=u.addValidationStatusSubscriber,c=u.removeValidationStatusSubscriber,s=t.useState({}),l=s[0],f=s[1];if(!n&&r===o)throw new Error('No form context could be found while calling "useValidations".');return t.useEffect(function(){return a(f,e),function(){return c(f,e)}},[a,null==e?void 0:e.join(),c]),l}v.defaultProps={children:null},h.defaultProps={children:null},C.defaultProps={children:null,isDebounced:!1},function(e){e.ON_CHANGE="ON_CHANGE",e.ON_BLUR="ON_BLUR"}(s||(s={}));var p={steps:[],currentStep:void 0,registerStep:function(){},unregisterStep:function(){},handleOnNext:function(){return Promise.resolve()},handleOnPrevious:function(){},updatePlaceholderContent:function(){},resetPlaceholderContent:function(){},registerPlaceholder:function(){},unregisterPlaceholder:function(){},isLastStep:!1,isFirstStep:!1,hasNoFooter:!0,stepStatusSetter:function(){},isStepReady:!1,stepsTitles:[],setIsStepReady:function(){},setValuesGetterForCurrentStep:function(){},getValuesOfCurrentStep:function(){},getValuesOfStep:function(){},getValuesOfSteps:function(){return{}}},S=/*#__PURE__*/t.createContext(p);function N(){return t.useContext(S)}e.Field=v,e.Form=function(e){/*#__PURE__*/return u.default.createElement(a.Provider,{value:e.form},e.children)},e.HiddenField=h,e.Placeholder=function(e){var n=e.placement,r=e.children,u=N(),o=u.updatePlaceholderContent,a=u.resetPlaceholderContent;return t.useEffect(function(){return o(n,r),function(){return a(n)}},[o,n,r,a]),null},e.Rule=C,e.Step=function(e){var n=e.children,r=e.name,u=e.onNext,o=e.noFooter,a=e.title,i=N(),c=i.registerStep,s=i.unregisterStep,l=i.currentStep,f=i.setIsStepReady;if(i===p)throw new Error("Step not in wizard");return t.useEffect(function(){return c(r,u,o,a),function(){return s(r)}},[c,s,r,u,o,a]),t.useEffect(function(){l===r&&f(!0)},[l,r,f]),l!==r?null:n},e.WizardContext=S,e.composeEventHandlers=function(e,t){return function(){var n=[].slice.call(arguments);e&&e.apply(void 0,n),t.apply(void 0,n)}},e.useForm=b,e.useFormContext=i,e.useFormStatus=function(n){var r=g(void 0,n),u=t.useState(e.VALIDATION_OUTCOME.UNDETERMINED),o=u[0],a=u[1];return t.useEffect(function(){a(c(r))},[r]),t.useMemo(function(){return{formStatus:o,isFormValid:o===e.VALIDATION_OUTCOME.VALID}},[o])},e.useHiddenField=function(e,n){var r=i().setFormValues,u=m([e],n)[e];return t.useMemo(function(){return{name:e,value:u,setValue:function(t){var u,o;return n?n.setFormValues(((u={})[e]=t,u)):r(((o={})[e]=t,o))}}},[e,u,n,r])},e.useOnBlurValues=function(e,t){return E(s.ON_BLUR,e,t)},e.useOnChangeValues=m,e.usePlaceholder=function(){var n=N(),r=n.handleOnNext,u=n.handleOnPrevious,o=n.registerPlaceholder,a=n.unregisterPlaceholder,i=t.useState({}),c=i[0],s=i[1],l=t.useState(!1),f=l[0],d=l[1],v=t.useState(e.VALIDATION_OUTCOME.VALID),O=v[0],h=v[1];return t.useEffect(function(){return o(s,h),function(){return a(s,h)}},[o,a,s,h]),{handleOnNext:t.useCallback(function(){try{return d(!0),Promise.resolve(r()).then(function(){d(!1)})}catch(e){return Promise.reject(e)}},[r]),handleOnPrevious:u,placeholderContent:c,isLoading:f,stepStatus:O}},e.useStepForm=function(n){var r=b(n),u=N(),o=u.stepStatusSetter,a=u.setValuesGetterForCurrentStep,i=u.getValuesOfCurrentStep,s=t.useRef(!1),l=r.formInternal.addValidationStatusSubscriber,f=r.getFormValues,d=r.setFormValues;return t.useEffect(function(){o(e.VALIDATION_OUTCOME.UNDETERMINED);var t=function(e){o(c(e))};return setTimeout(function(){return l(t)},0),function(){a(function(){}),o(e.VALIDATION_OUTCOME.VALID)}},[o,a,l]),t.useEffect(function(){a(f)},[f,a]),t.useEffect(function(){var e=i();e&&(s.current=!0,d(e))},[i,d]),{initFormValues:t.useCallback(function(e){s.current||d(e)},[d]),form:r}},e.useValidations=g,e.useWizard=function(e,n){var r=t.useRef({}),u=t.useRef(function(){}),o=t.useState(),a=o[0],i=o[1],c=t.useState([]),s=c[0],l=c[1],f=t.useRef({}),d=t.useRef(new Set),v=t.useState(!1),h=v[0],C=v[1],b=t.useRef(new Set),E=t.useRef(new Set),m=t.useRef([]),g=function(e){return e-1>=0},p=function(e,t){return e+1<=t.length-1},S=t.useCallback(function(){if(a){var e=u.current();e&&(r.current[a]=e)}},[a]),N=t.useCallback(function(e){return r.current[e]},[]),V=t.useCallback(function(){return a?N(a):void 0},[a,N]),I=t.useCallback(function(){return r.current},[]),A=t.useCallback(function(e,t,n,r){l(function(t){if(-1!==t.indexOf(e))throw new Error('Attempting to register step "'+e+'" a second time');return 0===t.length&&i(e),[].concat(t,[e])}),t&&(f.current[e]=t),n&&d.current.add(e),m.current=[].concat(m.current,[{name:e,title:r}])},[i]),R=t.useCallback(function(e){l(function(t){var n,r=t.indexOf(e);if(-1===r)throw new Error("No step "+e+" to be unregistered was found.");return g(r)?n=t[r-1]:p(r,t)&&(n=t[r+1]),i(n),[].concat(t.slice(0,r),t.slice(r+1))}),delete f.current[e],d.current.delete(e),m.current=m.current.filter(function(t){return t.name!==e})},[i]),T=t.useCallback(function(){try{var t,n=function(n){if(t)return n;S();var u=s.indexOf(a);return p(u,s)?(C(!1),void setTimeout(function(){return i(s[u+1])},0)):Promise.resolve(e(r.current)).then(function(){})};if(!a)return Promise.resolve();var u=function(){if(f.current[a])return Promise.resolve(f.current[a](V())).then(function(e){e||(t=1)})}();return Promise.resolve(u&&u.then?u.then(n):n(u))}catch(e){return Promise.reject(e)}},[a,V,e,S,s]),F=t.useCallback(function(){if(a&&a){var e=s.indexOf(a);if(g(e))return C(!1),S(),void setTimeout(function(){return i(s[e-1])},0);n()}},[a,n,S,s]),k=t.useCallback(function(e,t){b.current.add(e),E.current.add(t)},[b,E]),D=t.useCallback(function(e,t){b.current.delete(e),E.current.delete(t)},[b,E]),L=t.useCallback(function(e,t){b.current.forEach(function(n){n(function(n){var r;return O({},n,((r={})[e]=t,r))})})},[b]),P=t.useCallback(function(e){e?L(e,void 0):b.current.forEach(function(e){e({})})},[L,b]),_=t.useCallback(function(e){u.current=e},[]),M=t.useCallback(function(e){E.current.forEach(function(t){t(e)})},[]);return t.useMemo(function(){return Object.defineProperties({steps:s,currentStep:a,registerStep:A,unregisterStep:R,handleOnNext:T,handleOnPrevious:F,updatePlaceholderContent:L,resetPlaceholderContent:P,registerPlaceholder:k,unregisterPlaceholder:D,stepStatusSetter:M,isStepReady:h,setIsStepReady:C,setValuesGetterForCurrentStep:_,getValuesOfCurrentStep:V,getValuesOfStep:N,getValuesOfSteps:I},{isLastStep:{get:function(){return!s.length||a===s[s.length-1]}},isFirstStep:{get:function(){return!s.length||a===s[0]}},hasNoFooter:{get:function(){return a&&d.current.has(a)}},stepsTitles:{get:function(){return m.current}}})},[s,a,A,R,T,F,L,P,k,D,M,h,_,V,N,I])},e.useWizardContext=N}); //# sourceMappingURL=index.umd.js.map