import { Link, useNavigate } from '@tanstack/react-router'; import { AnimatePresence, motion } from 'framer-motion'; import { ChevronDownIcon, CogIcon, CreditCardIcon, LayoutListIcon, PlusIcon, UsersIcon, WorkflowIcon, } from 'lucide-react'; import { useEffect, useState } from 'react'; import { Badge } from './ui/badge'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from './ui/dropdown-menu'; import { Button } from '@/components/ui/button'; import { useAppContext } from '@/hooks/use-app-context'; import { pushModal } from '@/modals'; import type { RouterOutputs } from '@/trpc/client'; import { cn } from '@/utils/cn'; export default function SidebarOrganizationMenu({ organization, }: { organization: RouterOutputs['organization']['list'][number]; }) { const { isSelfHosted } = useAppContext(); return ( <>
Projects
Settings
{!isSelfHosted && (
Billing
{organization?.isTrial && Trial} {organization?.isExpired && Expired} {organization?.isWillBeCanceled && Canceled} {organization?.isCanceled && Canceled} )}
Members
Integrations
); } export function ActionCTAButton() { const navigate = useNavigate(); const ACTIONS = [ { label: 'Create a project', icon: PlusIcon, onClick: () => pushModal('AddProject'), }, { label: 'Invite a user', icon: UsersIcon, onClick: () => pushModal('CreateInvite'), }, { label: 'Add integration', icon: WorkflowIcon, onClick: () => navigate({ to: '/$organizationId/integrations', from: '/$organizationId', }), }, ]; const [currentActionIndex, setCurrentActionIndex] = useState(0); useEffect(() => { const interval = setInterval(() => { setCurrentActionIndex((prevIndex) => (prevIndex + 1) % ACTIONS.length); }, 2000); return () => clearInterval(interval); }, []); return (
{ACTIONS.map((action) => ( {action.label} ))}
); }