"use client"; import { useCallback, useState } from "react"; import { useTranslation } from "react-i18next"; import { ConfirmActionDialog } from "@/components/admin/confirm-action-dialog"; export type ConfirmActionRequest = { title: string; description: string; confirmLabel?: string; cancelLabel?: string; confirmVariant?: "default" | "destructive"; onConfirm: () => void | Promise; }; export function useConfirmAction() { const { t } = useTranslation("common"); const [pending, setPending] = useState(null); const [busy, setBusy] = useState(false); const request = useCallback((req: ConfirmActionRequest) => { setPending(req); }, []); const dismiss = useCallback(() => { if (!busy) { setPending(null); } }, [busy]); const confirm = useCallback(async () => { if (!pending || busy) { return; } setBusy(true); try { await pending.onConfirm(); setPending(null); } finally { setBusy(false); } }, [pending, busy]); const ConfirmDialog = useCallback( () => ( { if (!open) { dismiss(); } }} title={pending?.title ?? ""} description={pending?.description ?? ""} confirmLabel={pending?.confirmLabel ?? t("confirm.confirm")} cancelLabel={pending?.cancelLabel ?? t("confirm.cancel")} confirmVariant={pending?.confirmVariant ?? "destructive"} busy={busy} onConfirm={() => void confirm()} /> ), [pending, busy, dismiss, confirm, t], ); return { request, dismiss, busy, ConfirmDialog }; }