(
+ undefined,
+);
+
+export const useLeftPanel = () => {
+ const context = useContext(LeftPanelContext);
+ if (!context) {
+ throw new Error(
+ "useLeftPanel must be used within a LeftPanelProvider",
+ );
+ }
+ return context;
+};
+
+interface LeftPanelProviderProps {
+ children: ReactNode;
+}
+
+export const LeftPanelProvider = ({ children }: LeftPanelProviderProps) => {
+ const [isLeftPanelOpen, setIsLeftPanelOpen] = useState(false);
+
+ const value = useMemo(
+ () => ({ isLeftPanelOpen, setIsLeftPanelOpen }),
+ [isLeftPanelOpen, setIsLeftPanelOpen],
+ );
+
+ return (
+
+ {children}
+
+ );
+};
diff --git a/src/frontend/apps/calendars/src/pages/_app.tsx b/src/frontend/apps/calendars/src/pages/_app.tsx
index 451bbc9..f56a847 100644
--- a/src/frontend/apps/calendars/src/pages/_app.tsx
+++ b/src/frontend/apps/calendars/src/pages/_app.tsx
@@ -33,6 +33,7 @@ import {
} from "@/features/ui/cunningham/useCunninghamTheme";
import { FeedbackFooterMobile } from "@/features/feedback/Feedback";
import { useDynamicFavicon } from "@/features/ui/hooks/useDynamicFavicon";
+import { LeftPanelProvider } from "@/features/layouts/contexts/LeftPanelContext";
export type NextPageWithLayout = NextPage
& {
getLayout?: (page: ReactElement) => ReactNode;
@@ -134,8 +135,10 @@ const MyAppInner = ({ Component, pageProps }: AppPropsWithLayout) => {
- {getLayout()}
-
+
+ {getLayout()}
+
+
diff --git a/src/frontend/apps/calendars/src/pages/calendar.tsx b/src/frontend/apps/calendars/src/pages/calendar.tsx
index 2757810..a0c5810 100644
--- a/src/frontend/apps/calendars/src/pages/calendar.tsx
+++ b/src/frontend/apps/calendars/src/pages/calendar.tsx
@@ -15,6 +15,7 @@ import {
HeaderIcon,
HeaderRight,
} from "@/features/layouts/components/header/Header";
+import { useLeftPanel } from "@/features/layouts/contexts/LeftPanelContext";
import { SpinnerPage } from "@/features/ui/components/spinner/SpinnerPage";
import { Toaster } from "@/features/ui/components/toaster/Toaster";
import { Scheduler } from "@/features/calendar/components/scheduler/Scheduler";
@@ -56,7 +57,9 @@ export default function CalendarPage() {
);
}
-CalendarPage.getLayout = function getLayout(page: React.ReactElement) {
+const CalendarLayout = ({ children }: { children: React.ReactNode }) => {
+ const { isLeftPanelOpen, setIsLeftPanelOpen } = useLeftPanel();
+
return (
@@ -66,11 +69,17 @@ CalendarPage.getLayout = function getLayout(page: React.ReactElement) {
leftPanelContent={}
icon={}
rightHeaderContent={}
+ isLeftPanelOpen={isLeftPanelOpen}
+ setIsLeftPanelOpen={setIsLeftPanelOpen}
>
- {page}
+ {children}
);
};
+
+CalendarPage.getLayout = function getLayout(page: React.ReactElement) {
+ return {page};
+};