import React, { useEffect, useMemo, useState } from "react"; import { useTranslation } from "react-i18next"; import { Plus, FileText, Check } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { type AppId } from "@/lib/api"; import { usePromptActions } from "@/hooks/usePromptActions"; import PromptListItem from "./PromptListItem"; import PromptFormModal from "./PromptFormModal"; import { ConfirmDialog } from "../ConfirmDialog"; interface PromptPanelProps { open: boolean; onOpenChange: (open: boolean) => void; appId: AppId; } const PromptPanel: React.FC = ({ open, onOpenChange, appId, }) => { const { t } = useTranslation(); const [isFormOpen, setIsFormOpen] = useState(false); const [editingId, setEditingId] = useState(null); const [confirmDialog, setConfirmDialog] = useState<{ isOpen: boolean; titleKey: string; messageKey: string; messageParams?: Record; onConfirm: () => void; } | null>(null); const { prompts, loading, reload, savePrompt, deletePrompt, toggleEnabled } = usePromptActions(appId); useEffect(() => { if (open) reload(); }, [open, reload]); const handleAdd = () => { setEditingId(null); setIsFormOpen(true); }; const handleEdit = (id: string) => { setEditingId(id); setIsFormOpen(true); }; const handleDelete = (id: string) => { const prompt = prompts[id]; setConfirmDialog({ isOpen: true, titleKey: "prompts.confirm.deleteTitle", messageKey: "prompts.confirm.deleteMessage", messageParams: { name: prompt?.name }, onConfirm: async () => { try { await deletePrompt(id); setConfirmDialog(null); } catch (e) { // Error handled by hook } }, }); }; const promptEntries = useMemo(() => Object.entries(prompts), [prompts]); const enabledPrompt = promptEntries.find(([_, p]) => p.enabled); const appName = t(`apps.${appId}`); const panelTitle = t("prompts.title", { appName }); return ( <>
{panelTitle}
{t("prompts.count", { count: promptEntries.length })} ยท{" "} {enabledPrompt ? t("prompts.enabledName", { name: enabledPrompt[1].name }) : t("prompts.noneEnabled")}
{loading ? (
{t("prompts.loading")}
) : promptEntries.length === 0 ? (

{t("prompts.empty")}

{t("prompts.emptyDescription")}

) : (
{promptEntries.map(([id, prompt]) => ( ))}
)}
{isFormOpen && ( setIsFormOpen(false)} /> )} {confirmDialog && ( setConfirmDialog(null)} /> )} ); }; export default PromptPanel;