'use client'; import { useEffect } from 'react'; import { Button } from '@/components/ui/button'; import { useAppParams } from '@/hooks/useAppParams'; import { pushModal } from '@/modals'; import { cn } from '@/utils/cn'; import { useUser } from '@clerk/nextjs'; import { GanttChartIcon, Globe2Icon, LayersIcon, LayoutPanelTopIcon, PlusIcon, ScanEyeIcon, UsersIcon, WallpaperIcon, } from 'lucide-react'; import type { LucideProps } from 'lucide-react'; import Link from 'next/link'; import { usePathname } from 'next/navigation'; import type { IServiceDashboards } from '@openpanel/db'; function LinkWithIcon({ href, icon: Icon, label, active: overrideActive, className, }: { href: string; icon: React.ElementType; label: React.ReactNode; active?: boolean; className?: string; }) { const pathname = usePathname(); const active = overrideActive || href === pathname; return (
{label}
); } interface LayoutMenuProps { dashboards: IServiceDashboards; } export default function LayoutMenu({ dashboards }: LayoutMenuProps) { const { user } = useUser(); const params = useAppParams(); const hasProjectId = params.projectId && params.projectId !== 'null' && params.projectId !== 'undefined'; const projectId = hasProjectId ? params.projectId : (user?.unsafeMetadata.projectId as string); useEffect(() => { if (hasProjectId) { user?.update({ unsafeMetadata: { ...user.unsafeMetadata, projectId: params.projectId, }, }); } }, [params.projectId, hasProjectId]); return ( <>
Your dashboards
{dashboards.map((item) => ( ))}
); }