///
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,
};
})}
/>
);
};