import {useCallback, useMemo, useState} from 'react';
export default function useStep(maxStep) {
const [step, setStepState] = useState(1);
const setStep = useCallback(
(value) => {
setStepState((prev) => {
const val =
typeof value === 'function'
? value(prev)
: value;
if (val > maxStep) {
return 1;
}
return Math.max(1, Math.min(val, maxStep));
});
},
[maxStep],
);
const next = useCallback(() => {
setStepState((prev) => Math.min(prev + 1, maxStep));
}, [maxStep]);
const previous = useCallback(() => {
setStepState((prev) => Math.max(prev - 1, 1));
}, []);
const reset = useCallback(() => {
setStepState(1);
}, []);
const hasNext = useMemo(() => step < maxStep, [step, maxStep]);
const hasPrevious = useMemo(() => step > 1, [step]);
return {
step,
next,
previous,
reset,
setStep,
hasNext,
hasPrevious
};
}