@visa/nova-react
Version:
Visa Product Design System Nova React library. Compatible with React ^19.
2 lines (1 loc) • 1.36 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");const t={autoProgressComplete:!0,autoProgressError:!1,defaultActiveStep:0,isExclusiveSets:!0,length:1},r=(r=t)=>{const{autoProgressComplete:s,autoProgressError:o,isExclusiveSets:n,length:a,defaultActiveStep:S}={...t,...r},[i,u]=e.useState(()=>new Set),[l,p]=e.useState(S),[d,c]=e.useState(()=>new Set),[w,v]=e.useState(S),g=e=>{c(e=>{const t=new Set(e);return t.delete(l),t});let t=e;e<0?t=0:e>=a&&(t=a-1),v(e=>Math.max(e,t)),p(t)},m=()=>{g(l+1)};return{currentStep:l,hasError:()=>d.size>0,isStepAvailable:e=>e<=w,isFirstStep:e=>0===e,isLastStep:e=>e===a-1,isStepComplete:e=>i.has(e),isStepError:e=>d.has(e),isWizardComplete:()=>i.size===a,maxStep:w,onStepChange:g,onStepNext:m,onStepPrevious:()=>{g(l-1)},onStepComplete:(e,{autoProgress:t}={})=>{u(t=>new Set(t).add(e)),n&&c(t=>{const r=new Set(t);return r.delete(e),r}),(void 0===t&&s||t)&&m()},onStepError:(e,{autoProgress:t}={})=>{c(t=>new Set(t).add(e)),n&&u(t=>{const r=new Set(t);return r.delete(e),r}),(void 0===t&&o||t)&&m()},onStepReset:e=>{c(t=>{const r=new Set(t);return r.delete(e),r}),u(t=>{const r=new Set(t);return r.delete(e),r})},onWizardReset:(e=S)=>{u(t=>new Set([...t].filter(t=>t<e))),c(t=>new Set([...t].filter(t=>t<e))),p(e),v(e)}}};r.displayName="useWizard",exports.default=r,exports.useWizard=r;