/// import { createContext, useContext, useState, useCallback, useMemo } from 'react'; import { Steppers } from './Steppers.component'; import { Box } from '../box/Box'; export interface StepperContextType { next: (props: Record) => void; prev: (props: Record) => void; } declare global { interface Window { StepperContext: React.Context; } } if (!window.StepperContext) { window.StepperContext = createContext(null); } //@ts-ignore export const useStepper: UseStepper = (index, steps) => { const context = useContext(window.StepperContext); if (context === null) { throw new Error('Cannot use useStepper outside of Stepper'); } const { next, prev } = context; return { next, prev }; }; export const Stepper: Stepper = ({ steps }) => { const [stepProps, setStepProps] = useState<{ step: number; props: Record; }>({ step: 0, props: {} }); const next = useCallback((props: Record) => { setStepProps(current => ({ step: current.step + 1, props })); }, []); const prev = useCallback((props: Record) => { setStepProps(current => ({ step: current.step - 1, props })); }, []); const { Component } = steps[stepProps.step]; const StepperContext = window.StepperContext; const stepperValue = useMemo(() => ({ next, prev }), [next, prev]); return ( { return { title: step.label, }; })} /> ); };