"use client"; import { ArrowLeft, Plus } from "lucide-react"; import { useEffect, useState } from "react"; import { redirect, useRouter } from "next/navigation"; import { createPair, deletePairById, getPairsByFolderId, } from "@/lib/server/services/pairService"; import AddTextPairModal from "./AddTextPairModal"; import TextPairCard from "./TextPairCard"; import { useTranslations } from "next-intl"; import PageLayout from "@/components/ui/PageLayout"; import { GreenButton } from "@/components/ui/buttons"; import { logger } from "@/lib/logger"; import { IconButton } from "@/components/ui/buttons"; import CardList from "@/components/ui/CardList"; export interface TextPair { id: number; text1: string; text2: string; language1: string; language2: string; } export default function InFolder({ folderId }: { folderId: number }) { const [textPairs, setTextPairs] = useState([]); const [loading, setLoading] = useState(true); const [openAddModal, setAddModal] = useState(false); const router = useRouter(); const t = useTranslations("folder_id"); useEffect(() => { const fetchTextPairs = async () => { setLoading(true); try { const data = await getPairsByFolderId(folderId); setTextPairs(data as TextPair[]); } catch (error) { logger.error("获取文本对失败", error); } finally { setLoading(false); } }; fetchTextPairs(); }, [folderId]); const refreshTextPairs = async () => { try { const data = await getPairsByFolderId(folderId); setTextPairs(data as TextPair[]); } catch (error) { logger.error("获取文本对失败", error); } }; return ( {/* 顶部导航和标题栏 */}
{/* 返回按钮 */} {/* 页面标题和操作按钮 */}
{/* 标题区域 */}

{t("textPairs")}

{t("itemsCount", { count: textPairs.length })}

{/* 操作按钮区域 */}
{ redirect(`/memorize?folder_id=${folderId}`); }} > {t("memorize")} { setAddModal(true); }} icon={} />
{/* 文本对列表 */} {loading ? ( // 加载状态

{t("loadingTextPairs")}

) : textPairs.length === 0 ? ( // 空状态

{t("noTextPairs")}

) : ( // 文本对卡片列表
{textPairs .toSorted((a, b) => a.id - b.id) .map((textPair) => ( { deletePairById(textPair.id); refreshTextPairs(); }} refreshTextPairs={refreshTextPairs} /> ))}
)}
{/* 添加文本对模态框 */} setAddModal(false)} onAdd={async ( text1: string, text2: string, locale1: string, locale2: string, ) => { await createPair({ text1: text1, text2: text2, language1: locale1, language2: locale2, folder: { connect: { id: folderId, }, }, }); refreshTextPairs(); }} />
); }