2026-05-29 10:24:56 -04:00
|
|
|
import * as React from "react";
|
|
|
|
|
|
2026-07-18 14:52:56 -04:00
|
|
|
import { closeAllWebSockets } from "@/shared/api/relayWebSocketClose";
|
2026-05-29 10:24:56 -04:00
|
|
|
import { hasPrimaryShortcutModifier } from "@/shared/lib/platform";
|
|
|
|
|
|
2026-07-18 14:52:56 -04:00
|
|
|
const RELOAD_TEARDOWN_TIMEOUT_MS = 500;
|
|
|
|
|
|
|
|
|
|
/** Reloads the webview after bounded native WebSocket teardown. */
|
2026-05-29 10:24:56 -04:00
|
|
|
export function useReloadShortcut() {
|
|
|
|
|
React.useEffect(() => {
|
2026-07-18 14:52:56 -04:00
|
|
|
async function handleKeyDown(event: KeyboardEvent) {
|
2026-05-29 10:24:56 -04:00
|
|
|
if (
|
|
|
|
|
!hasPrimaryShortcutModifier(event) ||
|
|
|
|
|
event.altKey ||
|
2026-07-18 14:52:56 -04:00
|
|
|
event.shiftKey ||
|
|
|
|
|
event.key.toLowerCase() !== "r"
|
2026-05-29 10:24:56 -04:00
|
|
|
) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
event.preventDefault();
|
2026-07-18 14:52:56 -04:00
|
|
|
await Promise.race([
|
|
|
|
|
closeAllWebSockets(),
|
|
|
|
|
new Promise<void>((resolve) =>
|
|
|
|
|
window.setTimeout(resolve, RELOAD_TEARDOWN_TIMEOUT_MS),
|
|
|
|
|
),
|
|
|
|
|
]);
|
2026-05-29 10:24:56 -04:00
|
|
|
window.location.reload();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
window.addEventListener("keydown", handleKeyDown);
|
2026-07-18 14:52:56 -04:00
|
|
|
return () => window.removeEventListener("keydown", handleKeyDown);
|
2026-05-29 10:24:56 -04:00
|
|
|
}, []);
|
|
|
|
|
}
|