"use client"; import Link from "next/link"; import { usePathname } from "next/navigation"; import { useEffect, useState, useCallback } from "react"; import { FileText, FolderArchive, Settings, Globe, FileStack, Settings2, } from "lucide-react"; import { cn } from "@/lib/utils"; import { Separator } from "@/components/ui/separator"; import { Button } from "@/components/ui/button"; import { HistoricalReferences } from "@/components/historical-references"; import { cloudDocsApi, portalLinksApi, type CloudDocLinkRead, type PortalLinkRead } from "@/lib/api/client"; export function AppSidebar() { const pathname = usePathname(); const [cloudDocs, setCloudDocs] = useState([]); const [portalLinks, setPortalLinks] = useState([]); const loadCloudDocs = useCallback(async () => { try { const list = await cloudDocsApi.list(); setCloudDocs(list); } catch { setCloudDocs([]); } }, []); useEffect(() => { loadCloudDocs(); }, [loadCloudDocs]); useEffect(() => { const onCloudDocsChanged = () => loadCloudDocs(); window.addEventListener("cloud-docs-changed", onCloudDocsChanged); return () => window.removeEventListener("cloud-docs-changed", onCloudDocsChanged); }, [loadCloudDocs]); const loadPortalLinks = useCallback(async () => { try { const list = await portalLinksApi.list(); setPortalLinks(list); } catch { setPortalLinks([]); } }, []); useEffect(() => { loadPortalLinks(); }, [loadPortalLinks]); useEffect(() => { const onPortalLinksChanged = () => loadPortalLinks(); window.addEventListener("portal-links-changed", onPortalLinksChanged); return () => window.removeEventListener("portal-links-changed", onPortalLinksChanged); }, [loadPortalLinks]); const nav = [ { href: "/workspace", label: "需求与方案", icon: FileText }, { href: "/finance", label: "财务归档", icon: FolderArchive }, { href: "/settings", label: "设置", icon: Settings }, ]; return ( ); }