/* Copyright (C) 2023-2026 QuantumNous This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . For commercial licensing, please contact support@quantumnous.com */ import { type Table } from '@tanstack/react-table' import { useState } from 'react' 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')} /> ) }