40 lines
922 B
TypeScript
40 lines
922 B
TypeScript
"use client"
|
|
|
|
import { useCallback, useEffect } from "react"
|
|
|
|
import { useEnterDetailsStore } from "@/stores/enter-details"
|
|
|
|
export default function HistoryStateManager() {
|
|
const setCurrentStep = useEnterDetailsStore((state) => state.actions.setStep)
|
|
const currentStep = useEnterDetailsStore((state) => state.currentStep)
|
|
|
|
const handleBackButton = useCallback(
|
|
(event: PopStateEvent) => {
|
|
if (event.state.step) {
|
|
setCurrentStep(event.state.step)
|
|
}
|
|
},
|
|
[setCurrentStep]
|
|
)
|
|
|
|
useEffect(() => {
|
|
window.addEventListener("popstate", handleBackButton)
|
|
|
|
return () => {
|
|
window.removeEventListener("popstate", handleBackButton)
|
|
}
|
|
}, [handleBackButton])
|
|
|
|
useEffect(() => {
|
|
if (!window.history.state.step) {
|
|
window.history.replaceState(
|
|
{ step: currentStep },
|
|
"",
|
|
document.location.href
|
|
)
|
|
}
|
|
}, [currentStep])
|
|
|
|
return null
|
|
}
|