"use client"; import { invoke } from "@tauri-apps/api/core"; import { useCallback, useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; 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 { translateBackendError } from "@/lib/backend-errors"; import type { ProfileGroup } from "@/types"; import { RippleButton } from "./ui/ripple"; interface EditGroupDialogProps { isOpen: boolean; onClose: () => void; group: ProfileGroup | null; onGroupUpdated: (group: ProfileGroup) => void; } export function EditGroupDialog({ isOpen, onClose, group, onGroupUpdated, }: EditGroupDialogProps) { const { t } = useTranslation(); const [groupName, setGroupName] = useState(""); const [isUpdating, setIsUpdating] = useState(false); const [error, setError] = useState(null); useEffect(() => { if (group) { setGroupName(group.name); } else { setGroupName(""); } setError(null); }, [group]); const handleUpdate = useCallback(async () => { if (!group || !groupName.trim()) return; setIsUpdating(true); setError(null); try { const updatedGroup = await invoke("update_profile_group", { groupId: group.id, name: groupName.trim(), }); toast.success(t("groups.updateSuccess")); onGroupUpdated(updatedGroup); onClose(); } catch (err) { console.error("Failed to update group:", err); const errorMessage = translateBackendError(t, err); setError(errorMessage); toast.error(errorMessage); } finally { setIsUpdating(false); } }, [group, groupName, onGroupUpdated, onClose, t]); const handleClose = useCallback(() => { setError(null); onClose(); }, [onClose]); return ( {t("groups.editTitle")} {t("groups.editDescription")}
{ setGroupName(e.target.value); }} onKeyDown={(e) => { if (e.key === "Enter" && groupName.trim()) { void handleUpdate(); } }} disabled={isUpdating} />
{error && (
{error}
)}
{t("common.buttons.cancel")} void handleUpdate()} disabled={!groupName.trim() || groupName === group?.name} > {t("groups.edit")}
); }