'use client';
import NavBar from './NavBar';
import NavSearch from './NavSearch';
import Link from 'next/link';
import Image from 'next/image';
import { useEffect, useState } from 'react';
import { motion, AnimatePresence } from 'framer-motion';
import { FAST } from '@/lib/motion';
import {
ChevronLeftIcon,
ChevronRightIcon,
Bars3Icon,
UserIcon,
ArrowRightStartOnRectangleIcon,
ShieldCheckIcon,
MoonIcon,
SunIcon,
LanguageIcon,
PlusIcon,
} from '@heroicons/react/24/outline';
import { Button } from '@/components/ui/button';
import NoteModalForm from '@/app/(authenticated)/boards/[id]/notes/components/NoteModalForm';
import UserAvatar from './UserAvatar';
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuLabel,
DropdownMenuRadioGroup,
DropdownMenuRadioItem,
DropdownMenuSeparator,
DropdownMenuTrigger,
} from '@/components/ui/dropdown-menu';
import {
Sheet,
SheetContent,
SheetHeader,
SheetTitle,
SheetTrigger,
} from '@/components/ui/sheet';
import { signout } from '@/app/(authenticated)/lib/actions';
import { cn } from '@/lib/utils';
import { changeLocale } from '@/lib/locale';
import { locales } from '@/i18n/config';
import { useLocale, useTranslations } from 'next-intl';
import { useTheme } from 'next-themes';
import { User } from '@/prisma/generated/client';
import type { AvailableUpdate } from '@/app/(authenticated)/lib/version';
import type { QuickLinks } from '@/components/NavBar';
// '@/app/(authenticated)/lib/actions';
import UpdateAvailableMenuItem, { UpdateBadge } from './UpdateAvailableMenuItem';
interface NavSidebarProps {
user: User;
update?: AvailableUpdate | null;
quickLinks?: QuickLinks;
boards?: { id: number; title: string }[];
}
export default function NavSidebar({
user,
update,
quickLinks,
boards = [],
}: NavSidebarProps) {
const t = useTranslations('Navigation');
const tRole = useTranslations('Roles');
const tLocale = useTranslations('LocaleSwitcher');
const tTheme = useTranslations('Theme');
const tNote = useTranslations('NotesPage');
const { theme, setTheme } = useTheme();
const locale = useLocale();
const [mounted, setMounted] = useState(false);
const [isCollapsed, setIsCollapsed] = useState(false);
const [isLocaleSubmitting, setIsLocaleSubmitting] = useState(false);
useEffect(() => {
setMounted(true);
}, []);
const handleLocaleChange = async (nextLocale: string) => {
setIsLocaleSubmitting(true);
await changeLocale(nextLocale, locale);
};
useEffect(() => {
const saved = localStorage.getItem('sidebar-collapsed');
if (saved !== null) {
setIsCollapsed(saved === 'true');
}
}, []);
const toggleSidebar = () => {
const newState = !isCollapsed;
setIsCollapsed(newState);
localStorage.setItem('sidebar-collapsed', String(newState));
};
if (!user) return null;
return (
<>
{/* Desktop Sidebar */}