1import { useSyncExternalStore } from "react";
2
3export type HistoryDirection = "back" | "forward";
4
5function subscribeToNavigationHistory(onChange: () => void): () => void {
6 window.navigation.addEventListener("currententrychange", onChange);
7 return () => window.navigation.removeEventListener("currententrychange", onChange);
8}
9
10export function canNavigateHistory(direction: HistoryDirection): boolean {
11 return direction === "back" ? window.navigation.canGoBack : window.navigation.canGoForward;
12}
13
14export function navigateHistory(direction: HistoryDirection) {
15 if (direction === "back") window.history.back();
16 else window.history.forward();
17}
18
19/** Only for Electron: the Navigation API is Chromium-only. */
20export function useCanNavigateHistory(direction: HistoryDirection): boolean {
21 return useSyncExternalStore(subscribeToNavigationHistory, () => canNavigateHistory(direction));
22}