CI / changes (push) Successful in 13s
CI / commitlint (push) Has been skipped
CI / openapi (push) Has been skipped
CI / web (push) Successful in 1m6s
CI / go (push) Has been skipped
CI / bird2 (push) Has been skipped
CI / release (push) Successful in 4m17s
Updated multiple components to utilize the new PanelCard for better organization and presentation of content. Refactored DataGridShell, DataGridCard, and various analytics components to streamline layouts and enhance user experience. Adjusted styles for consistency across components, including pagination and toolbar elements, ensuring a cohesive interface throughout the application.
39 lines
1.2 KiB
TypeScript
39 lines
1.2 KiB
TypeScript
import { aggregateNetworkMetrics } from '@/queries/overview'
|
|
import type { PeerRow, SpeakerRow } from '@/types/api'
|
|
|
|
function Row({ label, value, variant = 'default' }: { label: string; value: string; variant?: 'default' | 'warning' }) {
|
|
return (
|
|
<div className="flex items-center justify-between gap-2 px-1 text-sm">
|
|
<span className="text-muted-foreground">{label}</span>
|
|
<span
|
|
className={
|
|
variant === 'warning'
|
|
? 'font-medium text-warning-foreground tabular-nums'
|
|
: 'font-medium tabular-nums'
|
|
}
|
|
>
|
|
{value}
|
|
</span>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
export function DashboardNetworkPanel({
|
|
peers,
|
|
speakers,
|
|
}: {
|
|
peers: PeerRow[]
|
|
speakers: SpeakerRow[]
|
|
}) {
|
|
const m = aggregateNetworkMetrics(peers, speakers)
|
|
return (
|
|
<div className="flex flex-col gap-2 p-3">
|
|
<Row label="Пиры с установленной сессией" value={`${m.peersEstablished} / ${m.peersEnabled}`} />
|
|
<Row label="Спикеры в сети" value={`${m.speakersOnline} / ${m.speakersTotal}`} />
|
|
{m.peersMismatch > 0 ? (
|
|
<Row label="Расхождения сессий" value={String(m.peersMismatch)} variant="warning" />
|
|
) : null}
|
|
</div>
|
|
)
|
|
}
|