"use client" import React, {useCallback, useEffect, useState} from "react" import {usePathname} from "next/navigation" import Link from "next/link" import {AnimatePresence, motion} from "framer-motion" import {LogOut, Mail, MailPlus, X} from "lucide-react" import {Button} from "@/components/ui/button" import {Avatar, AvatarFallback} from "@/components/ui/avatar" import {Separator} from "@/components/ui/separator" import {ScrollArea} from "@/components/ui/scroll-area" import {GearIcon} from "@radix-ui/react-icons" import Image from "next/image"; import MobileHeader from "@/components/main/sidebar/mobile"; import {useUser} from "@/contexts/user"; import {useRefs, useUIState} from "@/hooks/shared-states"; import {useToast} from "@/hooks/use-toast"; import {useTheme} from "next-themes"; import {Tooltip, TooltipContent, TooltipProvider, TooltipTrigger} from "@/components/ui/tooltip"; import {DropdownMenu, DropdownMenuContent, DropdownMenuTrigger} from "@/components/ui/dropdown-menu"; type SidebarProps = { children?: React.ReactNode } function Sidebar( { children }: SidebarProps ) { const pathname = usePathname() const [selectedThreads, setSelectedThreads] = useState(""); const [threads, setThreads] = useState([]); const [threadMenu, setThreadMenu] = useState([]); const [copied, setCopied] = useState(false); const {theme, systemTheme} = useTheme() const {toast} = useToast(); const {isDrawerOpen, setIsDrawerOpen} = useUIState() const {drawerRef} = useRefs(); const [pendingRequest, setPendingRequest] = useState(0); const user = useUser().user!; const { username, suuid } = user useEffect(() => { setPendingRequest(user.requests?.length || 0); }, [user]) useEffect(() => { const getThreads = async () => { try { const req = await fetch("/api/user/get/threads") if (req.ok) { const {threads} = await req.json() as { threads: SiPher.Messages[] | [] } setThreads(threads) } else { setThreads([]) toast({ title: "Error", description: "An unknown error occurred", variant: "destructive", duration: 5000, }) } } catch (error) { setThreads([]) } } getThreads() return () => setThreads([]) }, [toast]) const generateThreads = useCallback(() => { threads.map(async (thread) => { if (thread.participants.length > 2) { return (
  • ) } else { const fetchOtherUser = await useUser().getUser("fetchOtherUser - const", thread.id) } }) }, [threads]) const isDarkMode = theme === "system" ? systemTheme === "dark" : theme === "dark" const RightSidebarContent = () => (
    Copied SUUID to clipboard!
    { setCopied(true) navigator.clipboard.writeText(suuid) }} className={`flex items-center p-3 m-2 ${isDarkMode ? "hover:bg-accent/90" : "hover:bg-secondary/20"} rounded-full transition-colors duration-200 cursor-pointer select-none`}> {username.charAt(0)}

    {username}

    ${suuid}

    ) return ( <> {isDrawerOpen && (
    )}
    { children ?? null } ) } export default Sidebar