33 lines
610 B
TypeScript
33 lines
610 B
TypeScript
"use client"
|
|
|
|
import { useEffect, useRef } from "react"
|
|
|
|
const callbacks = new Set<() => void>()
|
|
|
|
if (typeof window !== "undefined") {
|
|
window.addEventListener("popstate", () => {
|
|
callbacks.forEach((callback) => callback())
|
|
})
|
|
}
|
|
|
|
export default function usePopStateHandler(
|
|
callback: () => void,
|
|
enabled = true
|
|
) {
|
|
const callbackRef = useRef(callback)
|
|
callbackRef.current = callback
|
|
|
|
useEffect(() => {
|
|
if (!enabled) {
|
|
return
|
|
}
|
|
|
|
const handler = () => callbackRef.current()
|
|
callbacks.add(handler)
|
|
|
|
return () => {
|
|
callbacks.delete(handler)
|
|
}
|
|
}, [enabled])
|
|
}
|