import { useState, useEffect } from "react"; import { apiGet, apiPost } from "../../lib/api"; import { ModelSelector } from "../ModelSelector"; interface Prompt { id: number; name: string; content: string; user_id: number; author_email?: string; } interface PromptEditorProps { promptContent: string; onPromptChange: (content: string) => void; sessionId: number; onRunSummary: (model: string) => void; isGenerating: boolean; } export function PromptEditor({ promptContent, onPromptChange, sessionId, onRunSummary, isGenerating, }: PromptEditorProps) { const [prompts, setPrompts] = useState([]); const [allPrompts, setAllPrompts] = useState([]); const [saveName, setSaveName] = useState(""); const [showSave, setShowSave] = useState(false); const [showOthers, setShowOthers] = useState(false); const [saving, setSaving] = useState(false); const [model, setModel] = useState("gpt-5.4"); useEffect(() => { loadPrompts(); }, []); const loadPrompts = async () => { try { const [mine, all] = await Promise.all([ apiGet<{ prompts: Prompt[] }>("/api/prompts"), apiGet<{ prompts: Prompt[] }>("/api/prompts/all"), ]); setPrompts(mine.prompts); setAllPrompts(all.prompts); } catch {} }; const handleSave = async () => { if (!saveName.trim()) return; setSaving(true); try { await apiPost("/api/prompts", { name: saveName, content: promptContent }); setSaveName(""); setShowSave(false); await loadPrompts(); } catch {} setSaving(false); }; const handleLoadPrompt = (prompt: Prompt) => { onPromptChange(prompt.content); setShowOthers(false); }; return (
{/* Toolbar */}
{/* Load own prompts */} {prompts.length > 0 && ( )} {/* Load others' prompts */} {/* Save button */} {/* Model selector - right aligned */}
{/* Others' prompts dropdown */} {showOthers && (

所有提示詞

{allPrompts.length === 0 ? (

目前沒有其他人的提示詞

) : (
{allPrompts.map((p) => ( ))}
)}
)} {/* Save prompt form */} {showSave && (
setSaveName(e.target.value)} placeholder="提示詞名稱..." className="input !py-2 text-sm flex-1" />
)} {/* Prompt textarea */}