"use client"; import { invoke } from "@tauri-apps/api/core"; import { useCallback, useState } from "react"; import { toast } from "sonner"; import { LoadingButton } from "@/components/loading-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 type { ProfileGroup } from "@/types"; import { RippleButton } from "./ui/ripple"; interface CreateGroupDialogProps { isOpen: boolean; onClose: () => void; onGroupCreated: (group: ProfileGroup) => void; } export function CreateGroupDialog({ isOpen, onClose, onGroupCreated, }: CreateGroupDialogProps) { const [groupName, setGroupName] = useState(""); const [isCreating, setIsCreating] = useState(false); const [error, setError] = useState(null); const handleCreate = useCallback(async () => { if (!groupName.trim()) return; setIsCreating(true); setError(null); try { const newGroup = await invoke("create_profile_group", { name: groupName.trim(), }); toast.success("Group created successfully"); onGroupCreated(newGroup); setGroupName(""); onClose(); } catch (err) { console.error("Failed to create group:", err); const errorMessage = err instanceof Error ? err.message : "Failed to create group"; setError(errorMessage); toast.error(errorMessage); } finally { setIsCreating(false); } }, [groupName, onGroupCreated, onClose]); const handleClose = useCallback(() => { setGroupName(""); setError(null); onClose(); }, [onClose]); return ( Create New Group Create a new group to organize your browser profiles.
setGroupName(e.target.value)} onKeyDown={(e) => { if (e.key === "Enter" && groupName.trim()) { void handleCreate(); } }} disabled={isCreating} />
{error && (
{error}
)}
Cancel void handleCreate()} disabled={!groupName.trim()} > Create
); }