import type { IServiceDashboards } from '@openpanel/db'; import { useNavigate } from '@tanstack/react-router'; import { AnimatePresence, motion } from 'framer-motion'; import { BellIcon, BookOpenIcon, ChartLineIcon, ChevronDownIcon, CogIcon, GanttChartIcon, Globe2Icon, GridIcon, LayersIcon, LayoutDashboardIcon, LayoutPanelTopIcon, PlusIcon, SearchIcon, SparklesIcon, TrendingUpDownIcon, UndoDotIcon, UserCircleIcon, UsersIcon, WallpaperIcon, } from 'lucide-react'; import { useEffect, useState } from 'react'; import { SidebarLink } from './sidebar-link'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from './ui/dropdown-menu'; import { Button } from '@/components/ui/button'; import { pushModal } from '@/modals'; interface SidebarProjectMenuProps { dashboards: IServiceDashboards; } export default function SidebarProjectMenu({ dashboards, }: SidebarProjectMenuProps) { return ( <>
Analytics
Manage
); } export function ActionCTAButton() { const navigate = useNavigate(); const ACTIONS = [ { label: 'Create report', icon: ChartLineIcon, onClick: () => navigate({ to: '/$organizationId/$projectId/reports', from: '/$organizationId/$projectId', }), }, { label: 'Create reference', icon: BookOpenIcon, onClick: () => pushModal('AddReference'), }, { label: 'Ask AI', icon: SparklesIcon, onClick: () => navigate({ to: '/$organizationId/$projectId/chat', from: '/$organizationId/$projectId', }), }, { label: 'Create dashboard', icon: LayoutDashboardIcon, onClick: () => pushModal('AddDashboard'), }, { label: 'Create notification rule', icon: BellIcon, onClick: () => navigate({ to: '/$organizationId/$projectId/notifications/rules', from: '/$organizationId/$projectId', }), }, ]; const [currentActionIndex, setCurrentActionIndex] = useState(0); useEffect(() => { const interval = setInterval(() => { setCurrentActionIndex((prevIndex) => { const nextIndex = (prevIndex + 1) % ACTIONS.length; if (nextIndex === 0 && prevIndex !== 0) { clearInterval(interval); return 0; } return nextIndex; }); }, 2000); return () => clearInterval(interval); }, []); return (
{ACTIONS.map((action) => ( {action.label} ))}
); }