import { useState } from 'react' import { type Table } from '@tanstack/react-table' import { useTranslation } from 'react-i18next' import { toast } from 'sonner' import { ConfirmDialog } from '@/components/confirm-dialog' import { batchDeleteApiKeys } from '../api' import { ERROR_MESSAGES } from '../constants' import { type ApiKey } from '../types' import { useApiKeys } from './api-keys-provider' type ApiKeysMultiDeleteDialogProps = { open: boolean onOpenChange: (open: boolean) => void table: Table } export function ApiKeysMultiDeleteDialog({ open, onOpenChange, table, }: ApiKeysMultiDeleteDialogProps) { const { t } = useTranslation() const { triggerRefresh } = useApiKeys() const [isDeleting, setIsDeleting] = useState(false) const selectedRows = table.getFilteredSelectedRowModel().rows const handleConfirm = async () => { setIsDeleting(true) try { const ids = selectedRows.map((row) => (row.original as ApiKey).id) const result = await batchDeleteApiKeys(ids) if (result.success) { const count = result.data || ids.length toast.success(t('Successfully deleted {{count}} API key(s)', { count })) table.resetRowSelection() triggerRefresh() onOpenChange(false) } else { toast.error(result.message || t(ERROR_MESSAGES.BATCH_DELETE_FAILED)) } } catch (_error) { toast.error(t(ERROR_MESSAGES.UNEXPECTED)) } finally { setIsDeleting(false) } } return ( {t('You are about to delete {{count}} API key(s).', { count: selectedRows.length, })}{' '}
{t('This action cannot be undone.')} } confirmText={t('Delete')} /> ) }