"use client"; import { useCallback, useState } from "react"; import { DiffEditor } from "@monaco-editor/react"; import { optimizeCode } from "@/app/actions/ai-improve"; import type { OptimizeCodeInput } from "@/types/ai-improve"; import { CoreEditor } from "./core-editor"; // 引入你刚刚的组件 // import { Loading } from "@/components/loading"; import type { LanguageServerConfig } from "@/generated/client"; interface AIEditorWrapperProps { language?: string; value?: string; path?: string; problemId?: string; languageServerConfigs?: LanguageServerConfig[]; onChange?: (value: string) => void; className?: string; } export const AIEditorWrapper = ({ language, value, path, problemId, languageServerConfigs, onChange, }: // className, AIEditorWrapperProps) => { const [currentCode, setCurrentCode] = useState(value ?? ""); const [optimizedCode, setOptimizedCode] = useState(""); const [isOptimizing, setIsOptimizing] = useState(false); const [error, setError] = useState(null); const [showDiff, setShowDiff] = useState(false); const handleCodeChange = useCallback( (val: string) => { setCurrentCode(val); onChange?.(val); }, [onChange] ); const handleOptimize = useCallback(async () => { if (!problemId || !currentCode) return; setIsOptimizing(true); setError(null); try { const input: OptimizeCodeInput = { code: currentCode, problemId, }; const result = await optimizeCode(input); setOptimizedCode(result.optimizedCode); setShowDiff(true); } catch (err) { setError("AI 优化失败,请稍后重试"); console.error(err); } finally { setIsOptimizing(false); } }, [currentCode, problemId]); const handleApplyOptimized = useCallback(() => { setCurrentCode(optimizedCode); onChange?.(optimizedCode); setShowDiff(false); }, [optimizedCode, onChange]); return (
{showDiff && (
)}
{error && (
{error}
)}
{showDiff ? ( ) : ( )}
); };