import { useState } from 'react' import { useQueryClient } from '@tanstack/react-query' import { type Table } from '@tanstack/react-table' import { Power, PowerOff, Trash2, Copy } 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 { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/dialog' import { Tooltip, TooltipContent, TooltipTrigger, } from '@/components/ui/tooltip' import { DataTableBulkActions as BulkActionsToolbar } from '@/components/data-table' import { handleBatchEnableModels, handleBatchDisableModels, handleBatchDeleteModels, } from '../lib' import type { Model } from '../types' interface DataTableBulkActionsProps { table: Table } export function DataTableBulkActions({ table, }: DataTableBulkActionsProps) { const { t } = useTranslation() const queryClient = useQueryClient() const [showDeleteConfirm, setShowDeleteConfirm] = useState(false) const selectedRows = table.getFilteredSelectedRowModel().rows const selectedIds = selectedRows.reduce((ids, row) => { const id = (row.original as Model).id if (typeof id === 'number') { ids.push(id) } return ids }, []) const selectedModels = selectedRows.map((row) => row.original as Model) const handleClearSelection = () => { table.resetRowSelection() } const handleEnableAll = () => { handleBatchEnableModels(selectedIds, queryClient, handleClearSelection) } const handleDisableAll = () => { handleBatchDisableModels(selectedIds, queryClient, handleClearSelection) } const handleDeleteAll = () => { handleBatchDeleteModels(selectedIds, queryClient, () => { setShowDeleteConfirm(false) handleClearSelection() }) } const handleCopyNames = async () => { const names = selectedModels.map((m) => m.model_name).join(',') const success = await copyToClipboard(names) if (success) { toast.success(t('Model names copied to clipboard')) } else { toast.error(t('Failed to copy model names')) } } return ( <> } > {t('Enable selected models')}

{t('Enable selected models')}

} > {t('Disable selected models')}

{t('Disable selected models')}

} > {t('Copy model names')}

{t('Copy model names')}

setShowDeleteConfirm(true)} className='size-8' aria-label={t('Delete selected models')} title={t('Delete selected models')} /> } > {t('Delete selected models')}

{t('Delete selected models')}

{/* Delete Confirmation Dialog */} {t('Delete Models?')} {t('Are you sure you want to delete')} {selectedIds.length}{' '} {t('model(s)? This action cannot be undone.')} ) }