row.toggleSelected(!!value)}
aria-label={`Select model ${row.original.model}`}
/>
),
enableSorting: false,
enableHiding: false,
size: 40,
},
{
accessorKey: 'model',
header: 'Model',
cell: ({ row }) => {
const model = row.original.model
const isDefault = defaultTestModel === model
return (
{model}
{isDefault && (
)}
)
},
},
{
id: 'status',
header: 'Status',
cell: ({ row }) => {
const model = row.original.model
const result = testResults[model]
if (!result || result.status === 'idle') {
return (
)
}
if (result.status === 'testing') {
return (
Testing...
)
}
if (result.status === 'success') {
return (
{typeof result.responseTime === 'number' && (
{formatResponseTime(result.responseTime, t)}
)}
)
}
return (
{result.error && (
{result.error}
)}
{result.errorCode === 'model_price_error' && (
)}
)
},
enableSorting: false,
size: 220,
},
{
id: 'actions',
header: 'Actions',
cell: ({ row }) => {
const model = row.original.model
const isTestingModel = testingModels.has(model)
return (
)
},
enableSorting: false,
size: 120,
},
],
[
defaultTestModel,
isBatchTesting,
t,
testResults,
testingModels,
testSingleModel,
]
)
const table = useReactTable({
data: tableData,
columns,
state: {
rowSelection,
pagination,
},
enableRowSelection: true,
getCoreRowModel: getCoreRowModel(),
getPaginationRowModel: getPaginationRowModel(),
onRowSelectionChange: setRowSelection,
onPaginationChange: setPagination,
})
if (!currentRow) {
return null
}
return (
)
}
function TestModelsBulkActions({
table,
disabled,
onTestSelected,
}: {
table: TanStackTable
disabled?: boolean
onTestSelected: (models: string[]) => void
}) {
const { t } = useTranslation()
const selectedRows = table.getFilteredSelectedRowModel().rows
const selectedModels = selectedRows.map((row) => row.original.model)
const buttonLabel =
selectedModels.length > 0
? `Test ${selectedModels.length} selected`
: 'Test selected models'
return (
onTestSelected(selectedModels)}
disabled={disabled || selectedModels.length === 0}
/>
}
>
{disabled ? (
<>
{t('Testing...')}
>
) : (
buttonLabel
)}
{t('Run tests for the selected models')}
)
}