"use client"; import { useEffect, useState } from "react"; import { Label } from "@/components/ui/label"; import { Input } from "@/components/ui/input"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { CoreEditor } from "@/components/core-editor"; import MdxPreview from "@/components/mdx-preview"; import { getProblemData } from "@/app/actions/getProblem"; import { getProblemLocales } from "@/app/actions/getProblemLocales"; import { Accordion } from "@/components/ui/accordion"; import { VideoEmbed } from "@/components/content/video-embed"; export default function EditDescriptionPanel({ problemId }: { problemId: string }) { const [locales, setLocales] = useState([]); const [currentLocale, setCurrentLocale] = useState(""); const [customLocale, setCustomLocale] = useState(""); const [description, setDescription] = useState({ title: "", content: "" }); const [viewMode, setViewMode] = useState<"edit" | "preview" | "compare">("edit"); // 获取语言列表 useEffect(() => { async function fetchLocales() { const langs = await getProblemLocales(problemId); setLocales(langs); if (langs.length > 0) { setCurrentLocale(langs[0]); } } fetchLocales(); }, [problemId]); // 获取对应语言的题目数据 useEffect(() => { if (!currentLocale) return; async function fetchProblem() { const data = await getProblemData(problemId, currentLocale); setDescription({ title: data?.title || "", content: data?.description || "", }); } fetchProblem(); }, [problemId, currentLocale]); // 添加新语言(仅前端) function handleAddCustomLocale() { if (customLocale && !locales.includes(customLocale)) { const newLocales = [...locales, customLocale]; setLocales(newLocales); setCurrentLocale(customLocale); setCustomLocale(""); setDescription({ title: "", content: "" }); } } return ( 题目描述 {/* 语言切换 */}
setCustomLocale(e.target.value)} />
{/* 标题输入 */}
setDescription({ ...description, title: e.target.value })} placeholder="输入题目标题" />
{/* 编辑/预览切换 */}
{/* 编辑/预览区域 */}
{(viewMode === "edit" || viewMode === "compare") && (
setDescription({ ...description, content: newVal || "" })} language="markdown" className="absolute inset-0 rounded-md border border-input" />
)} {viewMode !== "edit" && (
)}
); }