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 { Textarea } from "@/components/ui/textarea"; import { getErrorMessage } from "@/lib/store"; import { useCreateFolderMutation, useUpdateFolderMutation } from "@/lib/store/apis/promptsApi"; import { Folder } from "@/lib/types/prompts"; import { useEffect } from "react"; import { useForm } from "react-hook-form"; import { toast } from "sonner"; interface FolderFormData { name: string; description: string; } interface FolderSheetProps { open: boolean; onOpenChange: (open: boolean) => void; folder?: Folder; onSaved: () => void; } export function FolderSheet({ open, onOpenChange, folder, onSaved }: FolderSheetProps) { const [createFolder, { isLoading: isCreating }] = useCreateFolderMutation(); const [updateFolder, { isLoading: isUpdating }] = useUpdateFolderMutation(); const isLoading = isCreating || isUpdating; const isEditing = !!folder; const { register, handleSubmit, reset, formState: { errors }, } = useForm({ defaultValues: { name: "", description: "" }, }); useEffect(() => { if (open) { reset({ name: folder?.name ?? "", description: folder?.description ?? "", }); } }, [open, folder, reset]); async function onSubmit(data: FolderFormData) { try { if (isEditing) { await updateFolder({ id: folder.id, data: { name: data.name.trim(), description: data.description.trim() || undefined }, }).unwrap(); toast.success("Folder updated"); } else { await createFolder({ name: data.name.trim(), description: data.description.trim() || undefined, }).unwrap(); toast.success("Folder created"); } onSaved(); onOpenChange(false); } catch (err) { toast.error(`Failed to ${isEditing ? "update" : "create"} folder`, { description: getErrorMessage(err), }); } } return ( { e.preventDefault(); document.getElementById("name")?.focus(); }} >
{isEditing ? "Edit Folder" : "Create Folder"} {isEditing ? "Update the folder name and description." : "Create a new folder to organize your prompts."}
v.trim().length > 0 || "Folder name cannot be blank", })} autoFocus /> {errors.name &&

{errors.name.message}

}