"use client"; import { ChevronRight, Folder as Fd, FolderPen, FolderPlus, Trash2, } from "lucide-react"; import { useEffect, useState } from "react"; import { useRouter } from "next/navigation"; import { Folder } from "../../../generated/prisma/browser"; import { createFolder, deleteFolderById, getFoldersWithTotalPairsByUserId, renameFolderById, } from "@/lib/server/services/folderService"; import { useTranslations } from "next-intl"; import { toast } from "sonner"; import PageLayout from "@/components/ui/PageLayout"; import PageHeader from "@/components/ui/PageHeader"; import CardList from "@/components/ui/CardList"; interface FolderProps { folder: Folder & { total: number }; refresh: () => void; } const FolderCard = ({ folder, refresh }: FolderProps) => { const router = useRouter(); const t = useTranslations("folders"); return (
{ router.push(`/folders/${folder.id}`); }} >

{folder.name}

{t("folderInfo", { id: folder.id, name: folder.name, totalPairs: folder.total, })}

); }; export default function FoldersClient({ userId }: { userId: string }) { const t = useTranslations("folders"); const [folders, setFolders] = useState<(Folder & { total: number })[]>( [], ); const [loading, setLoading] = useState(false); useEffect(() => { setLoading(true); getFoldersWithTotalPairsByUserId(userId) .then((folders) => { setFolders(folders); setLoading(false); }) .catch((error) => { console.error(error); toast.error("加载出错,请重试。"); }); }, [userId]); const updateFolders = async () => { try { const updatedFolders = await getFoldersWithTotalPairsByUserId(userId); setFolders(updatedFolders); } catch (error) { console.error(error); } }; return ( {/* 新建文件夹按钮 */} {/* 文件夹列表 */}
{folders.length === 0 ? ( // 空状态

{t("noFoldersYet")}

) : ( // 文件夹卡片列表
{folders .toSorted((a, b) => a.id - b.id) .map((folder) => ( ))}
)}
); }