"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 EditSolutionPanel({ problemId }: { problemId: string }) { const [locales, setLocales] = useState([]); const [currentLocale, setCurrentLocale] = useState(""); const [customLocale, setCustomLocale] = useState(""); const [solution, setSolution] = 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 fetchSolution() { const data = await getProblemData(problemId, currentLocale); setSolution({ title: (data?.title || "") + " 解析", content: data?.solution || "", }); } fetchSolution(); }, [problemId, currentLocale]); function handleAddCustomLocale() { if (customLocale && !locales.includes(customLocale)) { const newLocales = [...locales, customLocale]; setLocales(newLocales); setCurrentLocale(customLocale); setCustomLocale(""); setSolution({ title: "", content: "" }); } } return ( 题目解析 {/* 语言切换 */}
setCustomLocale(e.target.value)} />
{/* 标题输入 */}
setSolution({ ...solution, title: e.target.value })} placeholder="输入题解标题" />
{/* 编辑/预览切换 */}
{/* 编辑/预览区域 */}
{(viewMode === "edit" || viewMode === "compare") && (
setSolution({ ...solution, content: val || "" })} language="markdown" className="absolute inset-0 rounded-md border border-input" />
)} {viewMode !== "edit" && (
)}
); }