Files
moreminimore-vibe/src/app/layout.tsx
Kunthawat Greethong 11986a0196 Add project files
2025-12-05 09:26:53 +07:00

57 lines
1.8 KiB
TypeScript

import { SidebarProvider } from "@/components/ui/sidebar";
import { AppSidebar } from "@/components/app-sidebar";
import { ThemeProvider } from "../contexts/ThemeContext";
import { DeepLinkProvider } from "../contexts/DeepLinkContext";
import { Toaster } from "sonner";
import { TitleBar } from "./TitleBar";
import { useEffect } from "react";
import { useRunApp } from "@/hooks/useRunApp";
import { useAtomValue } from "jotai";
import { previewModeAtom } from "@/atoms/appAtoms";
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
const { refreshAppIframe } = useRunApp();
const previewMode = useAtomValue(previewModeAtom);
// Global keyboard listener for refresh events
useEffect(() => {
const handleKeyDown = (event: KeyboardEvent) => {
// Check for Ctrl+R (Windows/Linux) or Cmd+R (macOS)
if (event.key === "r" && (event.ctrlKey || event.metaKey)) {
event.preventDefault(); // Prevent default browser refresh
if (previewMode === "preview") {
refreshAppIframe(); // Use our custom refresh function instead
}
}
};
// Add event listener to document
document.addEventListener("keydown", handleKeyDown);
// Cleanup function to remove event listener
return () => {
document.removeEventListener("keydown", handleKeyDown);
};
}, [refreshAppIframe, previewMode]);
return (
<>
<ThemeProvider>
<DeepLinkProvider>
<SidebarProvider>
<TitleBar />
<AppSidebar />
<div className="flex h-screenish w-full overflow-x-hidden mt-12 mb-4 mr-4 border-t border-l border-border rounded-lg bg-background">
{children}
</div>
<Toaster richColors />
</SidebarProvider>
</DeepLinkProvider>
</ThemeProvider>
</>
);
}