@@ -4,12 +4,39 @@ import { ThemeProvider } from "../contexts/ThemeContext";
4
4
import { DeepLinkProvider } from "../contexts/DeepLinkContext" ;
5
5
import { Toaster } from "sonner" ;
6
6
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" ;
7
11
8
12
export default function RootLayout ( {
9
13
children,
10
14
} : {
11
15
children : React . ReactNode ;
12
16
} ) {
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
+
13
40
return (
14
41
< >
15
42
< ThemeProvider >
0 commit comments