Files
buzz/desktop/src/app/useReloadShortcut.ts
Tyler 4cf5694075 fix(desktop): own native WebSocket lifecycle (#2076)
Signed-off-by: npub1mprnacetjua2xx3p5eddmhxyk6wv929ymm5py8kd2xfxurxahspqqlgyta <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@sprout-oss.stage.blox.sqprod.co>
Co-authored-by: npub1mprnacetjua2xx3p5eddmhxyk6wv929ymm5py8kd2xfxurxahspqqlgyta <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@sprout-oss.stage.blox.sqprod.co>
2026-07-18 18:52:56 +00:00

35 lines
975 B
TypeScript

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