import Link from "next/link"; 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 { useTheme } from "~/providers/theme"; import FeedbackButton from "./FeedbackButton"; import SideNavigation from "./SideNavigation"; interface DashboardProps { children: React.ReactNode; rightPanel?: React.ReactNode; hasRightPanel?: boolean; } export default function Dashboard({ children, rightPanel, hasRightPanel = false, }: DashboardProps) { const theme = useTheme(); 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 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.activeTheme === "dark"; return ( <>

kan.bn

{hasRightPanel && ( )}
{children}
{/* Mobile Right Panel */} {hasRightPanel && rightPanel && (
{rightPanel}
)} {/* Desktop Right Panel */} {hasRightPanel && rightPanel && (
{rightPanel}
)}
); }