Skip to content
Source
Sign inSign up

navigationHistory.ts

22 lines895 Bytes

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;
13​
14export function navigateHistory(direction: HistoryDirection) {
15 if (direction === "back") window.history.back();
16 else window.history.forward();
18​
19/** Only for Electron: the Navigation API is Chromium-only. */
20export function useCanNavigateHistory(direction: HistoryDirection): boolean {
21 return useSyncExternalStore(subscribeToNavigationHistory, () => canNavigateHistory(direction));