Обновлены переводы на русский язык для компонентов, включая карточки мониторинга, сетевые панели и настройки. Исправлены описания и метки для улучшения пользовательского интерфейса, а также добавлены новые элементы для поддержки локализации в компонентах, таких как DataGrid и ResourcePage.
79 lines
2.4 KiB
TypeScript
79 lines
2.4 KiB
TypeScript
import type { ColumnDef } from '@tanstack/react-table'
|
|
|
|
import { CategoryBadge } from '@/components/category-badge'
|
|
import { DataGridPrimaryCell } from '@/components/data-grid-cell'
|
|
import { StatusBadge } from '@/components/status-badge'
|
|
import { Badge } from '@/components/reui/badge'
|
|
import { DataGridColumnHeader } from '@/components/reui/data-grid/data-grid-column-header'
|
|
import { speakerOnlineLabel, speakerRoleRu } from '@/lib/ui-labels'
|
|
import type { SpeakerRow } from '@/types/api'
|
|
|
|
export const speakerColumns: ColumnDef<SpeakerRow, unknown>[] = [
|
|
{
|
|
accessorKey: 'endpoint',
|
|
header: ({ column }) => <DataGridColumnHeader column={column} title="Конечная точка" />,
|
|
cell: ({ row }) => (
|
|
<DataGridPrimaryCell title={row.original.endpoint} accent="mono" />
|
|
),
|
|
meta: { headerTitle: 'Конечная точка' },
|
|
},
|
|
{
|
|
accessorKey: 'role',
|
|
header: ({ column }) => <DataGridColumnHeader column={column} title="Роль" />,
|
|
cell: ({ row }) => <CategoryBadge>{speakerRoleRu(row.original.role)}</CategoryBadge>,
|
|
meta: { headerTitle: 'Роль' },
|
|
},
|
|
{
|
|
id: 'agent',
|
|
enableSorting: false,
|
|
header: 'Агент',
|
|
cell: ({ row }) => {
|
|
const live = row.original.live
|
|
if (live?.agent_ok === true) {
|
|
return <StatusBadge status="ok" label={speakerOnlineLabel(true)} />
|
|
}
|
|
if (live?.agent_ok === false) {
|
|
return <StatusBadge status="error" label={speakerOnlineLabel(false)} />
|
|
}
|
|
return (
|
|
<Badge variant="outline" size="sm" radius="full">
|
|
—
|
|
</Badge>
|
|
)
|
|
},
|
|
meta: { headerTitle: 'Агент' },
|
|
},
|
|
{
|
|
id: 'bgp',
|
|
enableSorting: false,
|
|
header: 'BGP',
|
|
cell: ({ row }) => {
|
|
const live = row.original.live
|
|
if (!live) return '—'
|
|
return (
|
|
<span className="text-xs">
|
|
{live.bgp_established ?? 0} / {live.bgp_sessions_total ?? 0}
|
|
</span>
|
|
)
|
|
},
|
|
meta: { headerTitle: 'BGP' },
|
|
},
|
|
]
|
|
|
|
export function getSpeakerFilterFieldValue(item: SpeakerRow, field: string): unknown {
|
|
switch (field) {
|
|
case 'endpoint':
|
|
return item.endpoint
|
|
case 'role':
|
|
return item.role
|
|
default:
|
|
return undefined
|
|
}
|
|
}
|
|
|
|
export function speakerTabFilter(item: SpeakerRow, tabId: string): boolean {
|
|
if (tabId === 'online') return item.live?.agent_ok === true
|
|
if (tabId === 'offline') return item.live?.agent_ok !== true
|
|
return true
|
|
}
|