import { useRef, useState } from "react"; import { TbLayoutSidebarLeftCollapse, TbLayoutSidebarLeftExpand, TbLayoutSidebarRightCollapse, TbLayoutSidebarRightExpand, } from "react-icons/tb"; import { authClient } from "@kan/auth/client"; import { useClickOutside } from "~/hooks/useClickOutside"; import { useModal } from "~/providers/modal"; import { useTheme } from "next-themes"; import { WorkspaceProvider } from "~/providers/workspace"; import FeedbackModal from "./FeedbackModal"; import Modal from "./modal"; import SideNavigation from "./SideNavigation"; interface DashboardProps { children: React.ReactNode; rightPanel?: React.ReactNode; hasRightPanel?: boolean; } export function getDashboardLayout( page: React.ReactElement, rightPanel?: React.ReactNode, hasRightPanel = false, ) { return ( {page} ); } export default function Dashboard({ children, rightPanel, hasRightPanel = false, }: DashboardProps) { const { theme } = useTheme(); const { modalContentType } = useModal(); const { data: session, isPending: sessionLoading } = authClient.useSession(); const [isSideNavOpen, setIsSideNavOpen] = useState(false); const [isRightPanelOpen, setIsRightPanelOpen] = useState(false); const sideNavRef = useRef(null); const rightPanelRef = useRef(null); const sideNavButtonRef = useRef(null); const rightPanelButtonRef = useRef(null); const toggleSideNav = () => { setIsSideNavOpen(!isSideNavOpen); if (!isSideNavOpen) { setIsRightPanelOpen(false); } }; const closeSideNav = () => { setIsSideNavOpen(false); }; const toggleRightPanel = () => { setIsRightPanelOpen(!isRightPanelOpen); if (!isRightPanelOpen) { setIsSideNavOpen(false); } }; useClickOutside(sideNavRef, (event) => { if (sideNavButtonRef.current?.contains(event.target as Node)) { return; } if (isSideNavOpen) { setIsSideNavOpen(false); } }); useClickOutside(rightPanelRef, (event) => { if (rightPanelButtonRef.current?.contains(event.target as Node)) { return; } if (isRightPanelOpen) { setIsRightPanelOpen(false); } }); const isDarkMode = theme === "dark"; return ( <>
{/* Mobile Header */}
{hasRightPanel && ( )}
{children}
{/* Mobile Right Panel */} {hasRightPanel && rightPanel && (
{rightPanel}
)} {/* Desktop Right Panel */} {hasRightPanel && rightPanel && (
{rightPanel}
)}
); }