import { useT } from "@agent-native/core/client/i18n"; import { IconLoader2 } from "@tabler/icons-react"; import { FormEvent, useState } from "react"; import { toast } from "sonner"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { useCreateFolder } from "@/hooks/use-library"; interface CreatedFolder { id: string; } interface CreateFolderDialogProps { open: boolean; onOpenChange: (open: boolean) => void; spaceId?: string | null; parentId?: string | null; onCreated?: (folder: CreatedFolder) => void; } export function CreateFolderDialog({ open, onOpenChange, spaceId, parentId, onCreated, }: CreateFolderDialogProps) { const t = useT(); const createFolder = useCreateFolder(); const [name, setName] = useState(""); function reset() { setName(""); } function handleSubmit(event: FormEvent) { event.preventDefault(); const trimmed = name.trim(); if (!trimmed || createFolder.isPending) return; createFolder.mutate( { name: trimmed, ...(spaceId ? { spaceId } : {}), ...(parentId ? { parentId } : {}), }, { onSuccess: (folder) => { toast.success(t("navigation.folderCreated")); onCreated?.(folder); reset(); onOpenChange(false); }, onError: (err: any) => { toast.error(err?.message ?? t("navigation.createFolderError")); }, }, ); } return ( { onOpenChange(nextOpen); if (!nextOpen) reset(); }} > {t("navigation.newFolder")} {t("navigation.folderNamePlaceholder")}
setName(event.target.value)} placeholder={t("navigation.folderNamePlaceholder")} disabled={createFolder.isPending} />
); }