import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Sheet, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle } from "@/components/ui/sheet"; import { getErrorMessage } from "@/lib/store"; import { useCreatePromptMutation, useUpdatePromptMutation } from "@/lib/store/apis/promptsApi"; import { Prompt } from "@/lib/types/prompts"; import { useEffect } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; interface PromptFormData { name: string; } interface PromptSheetProps { open: boolean; onOpenChange: (open: boolean) => void; prompt?: Prompt; folderId?: string; onSaved: (promptId?: string) => void; } export function PromptSheet({ open, onOpenChange, prompt, folderId, onSaved }: PromptSheetProps) { const [createPrompt, { isLoading: isCreating }] = useCreatePromptMutation(); const [updatePrompt, { isLoading: isUpdating }] = useUpdatePromptMutation(); const isLoading = isCreating || isUpdating; const isEditing = !!prompt; const { register, handleSubmit, reset, formState: { errors }, } = useForm({ defaultValues: { name: "" }, }); useEffect(() => { if (open) { reset({ name: prompt?.name ?? "" }); } }, [open, prompt, reset]); async function onSubmit(data: PromptFormData) { try { if (isEditing) { await updatePrompt({ id: prompt.id, data: { name: data.name.trim() }, }).unwrap(); toast.success("Prompt updated"); onSaved(); } else { const result = await createPrompt({ name: data.name.trim(), ...(folderId ? { folder_id: folderId } : {}), }).unwrap(); toast.success("Prompt created"); onSaved(result.prompt.id); } onOpenChange(false); } catch (err) { toast.error(`Failed to ${isEditing ? "update" : "create"} prompt`, { description: getErrorMessage(err), }); } } return ( { e.preventDefault(); document.getElementById("name")?.focus(); }} >
{isEditing ? "Rename Prompt" : "Create Prompt"} {isEditing ? "Update the prompt name." : folderId ? "Create a new prompt in this folder." : "Create a new prompt."}
v.trim().length > 0 || "Prompt name cannot be blank", })} autoFocus /> {errors.name &&

{errors.name.message}

}
); }