import { AppShell, Container } from "@mantine/core"; import React, { useCallback, useEffect, useRef, useState } from "react"; import { useLocation } from "react-router-dom"; import SettingsSidebar from "@/components/settings/settings-sidebar.tsx"; import { useAtom } from "jotai"; import { asideStateAtom, desktopSidebarAtom, mobileSidebarAtom, sidebarWidthAtom, } from "@/components/layouts/global/hooks/atoms/sidebar-atom.ts"; import { SpaceSidebar } from "@/features/space/components/sidebar/space-sidebar.tsx"; import { AppHeader } from "@/components/layouts/global/app-header.tsx"; import Aside from "@/components/layouts/global/aside.tsx"; import classes from "./app-shell.module.css"; export default function GlobalAppShell({ children, }: { children: React.ReactNode; }) { const [mobileOpened] = useAtom(mobileSidebarAtom); const [desktopOpened] = useAtom(desktopSidebarAtom); const [{ isAsideOpen }] = useAtom(asideStateAtom); const [sidebarWidth, setSidebarWidth] = useAtom(sidebarWidthAtom); const [isResizing, setIsResizing] = useState(false); const sidebarRef = useRef(null); const startResizing = React.useCallback((mouseDownEvent) => { setIsResizing(true); }, []); const stopResizing = React.useCallback(() => { setIsResizing(false); }, []); const resize = React.useCallback( (mouseMoveEvent) => { if (isResizing) { const newWidth = mouseMoveEvent.clientX - sidebarRef.current.getBoundingClientRect().left; if (newWidth < 220) { setSidebarWidth(220); return; } if (newWidth > 600) { setSidebarWidth(600); return; } setSidebarWidth(newWidth); } }, [isResizing] ); useEffect(() => { //https://codesandbox.io/p/sandbox/kz9de window.addEventListener("mousemove", resize); window.addEventListener("mouseup", stopResizing); return () => { window.removeEventListener("mousemove", resize); window.removeEventListener("mouseup", stopResizing); }; }, [resize, stopResizing]); const location = useLocation(); const isSettingsRoute = location.pathname.startsWith("/settings"); const isSpaceRoute = location.pathname.startsWith("/s/"); const isHomeRoute = location.pathname.startsWith("/home"); const isPageRoute = location.pathname.includes("/p/"); return ( {!isHomeRoute && ( e.preventDefault()} >
{isSpaceRoute && } {isSettingsRoute && } )} {isSettingsRoute ? ( {children} ) : ( children )} {isPageRoute && (