Skip to content

Commit 3ce81e5

Browse files
authored
Intercept ctrl/command R for refresh (#759)
Fixes #209
1 parent 475483d commit 3ce81e5

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed

src/app/layout.tsx

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,39 @@ import { ThemeProvider } from "../contexts/ThemeContext";
44
import { DeepLinkProvider } from "../contexts/DeepLinkContext";
55
import { Toaster } from "sonner";
66
import { TitleBar } from "./TitleBar";
7+
import { useEffect } from "react";
8+
import { useRunApp } from "@/hooks/useRunApp";
9+
import { useAtomValue } from "jotai";
10+
import { previewModeAtom } from "@/atoms/appAtoms";
711

812
export default function RootLayout({
913
children,
1014
}: {
1115
children: React.ReactNode;
1216
}) {
17+
const { refreshAppIframe } = useRunApp();
18+
const previewMode = useAtomValue(previewModeAtom);
19+
// Global keyboard listener for refresh events
20+
useEffect(() => {
21+
const handleKeyDown = (event: KeyboardEvent) => {
22+
// Check for Ctrl+R (Windows/Linux) or Cmd+R (macOS)
23+
if (event.key === "r" && (event.ctrlKey || event.metaKey)) {
24+
event.preventDefault(); // Prevent default browser refresh
25+
if (previewMode === "preview") {
26+
refreshAppIframe(); // Use our custom refresh function instead
27+
}
28+
}
29+
};
30+
31+
// Add event listener to document
32+
document.addEventListener("keydown", handleKeyDown);
33+
34+
// Cleanup function to remove event listener
35+
return () => {
36+
document.removeEventListener("keydown", handleKeyDown);
37+
};
38+
}, [refreshAppIframe, previewMode]);
39+
1340
return (
1441
<>
1542
<ThemeProvider>

0 commit comments

Comments
 (0)