import { useState, useCallback } from 'react' import { type Table } from '@tanstack/react-table' import { Copy, Trash2, Loader2 } from 'lucide-react' import { useTranslation } from 'react-i18next' import { toast } from 'sonner' import { copyToClipboard } from '@/lib/copy-to-clipboard' import { Button } from '@/components/ui/button' import { Tooltip, TooltipContent, TooltipTrigger, } from '@/components/ui/tooltip' import { DataTableBulkActions as BulkActionsToolbar } from '@/components/data-table' import { type ApiKey } from '../types' import { ApiKeysMultiDeleteDialog } from './api-keys-multi-delete-dialog' import { useApiKeys } from './api-keys-provider' type DataTableBulkActionsProps = { table: Table } export function DataTableBulkActions({ table, }: DataTableBulkActionsProps) { const { t } = useTranslation() const { resolveRealKeysBatch } = useApiKeys() const [showDeleteConfirm, setShowDeleteConfirm] = useState(false) const [isCopying, setIsCopying] = useState(false) const selectedRows = table.getFilteredSelectedRowModel().rows const handleBatchCopy = useCallback(async () => { if (selectedRows.length === 0) return setIsCopying(true) try { const ids = selectedRows.map((row) => (row.original as ApiKey).id) const keysMap = await resolveRealKeysBatch(ids) const lines: string[] = [] for (const row of selectedRows) { const apiKey = row.original as ApiKey const realKey = keysMap[apiKey.id] if (realKey) { lines.push(`${apiKey.name}\t${realKey}`) } } if (lines.length > 0) { const ok = await copyToClipboard(lines.join('\n')) if (ok) { toast.success(t('Copied {{count}} key(s)', { count: lines.length })) } else { toast.error(t('Failed to copy keys')) } } } catch { toast.error(t('Failed to copy keys')) } finally { setIsCopying(false) } }, [selectedRows, resolveRealKeysBatch, t]) return ( <>

{t('Copy selected keys')}

{t('Delete selected API keys')}

) }