import { CellContext, createColumnHelper } from '@tanstack/react-table'; import { BarChart, FileText, Terminal } from 'lucide-react'; import { Authorized } from '@/react/hooks/useUser'; import { pluralize } from '@/react/common/string-utils'; import { Badge } from '@@/Badge'; import { Tooltip } from '@@/Tip/Tooltip'; import { ExternalLink } from '@@/ExternalLink'; import { Link } from '@@/Link'; import { Icon } from '@@/Icon'; import { TooltipWithChildren } from '@@/Tip/TooltipWithChildren'; import { ContainerRowData } from '../types'; const columnHelper = createColumnHelper(); const name = columnHelper.accessor('name', { header: 'Name', id: 'name', cell: ({ row: { original: container } }) => (
{container.name}
), }); function ContainerTypeBadge({ container }: { container: ContainerRowData }) { if (container.isSidecar) { return ( Sidecar Sidecar containers {' '} run continuously alongside the main application, starting before other containers. } /> ); } if (container.isInit) { return ( Init Init containers {' '} run and complete before the main application containers start. } /> ); } return null; } const image = columnHelper.accessor('image', { header: 'Image', cell: ({ getValue }) => (
{getValue()}
), }); const imagePullPolicy = columnHelper.accessor('imagePullPolicy', { header: 'Image Pull Policy', id: 'imagePullPolicy', }); const status = columnHelper.accessor('status', { header: 'Status', cell: StatusCell, }); function StatusCell({ getValue, }: CellContext) { const statusData = getValue(); return (
{statusData.status} {statusData.restartCount && ` (Restarted ${statusData.restartCount} ${pluralize( statusData.restartCount, 'time' )})`}
{statusData.message && }
); } function buildActionsColumn(isServerMetricsEnabled: boolean) { return columnHelper.accessor(() => '', { header: 'Actions', enableSorting: false, cell: ({ row: { original: container } }) => (
{container.status.status.includes('Running') && isServerMetricsEnabled && ( )} {container.status.hasLogs !== false && ( )} {container.status.status.includes('Running') && ( )}
), }); } export function getContainerColumns(isServerMetricsEnabled: boolean) { return [ name, image, imagePullPolicy, status, buildActionsColumn(isServerMetricsEnabled), ]; }