26 lines
1.1 KiB
TypeScript
26 lines
1.1 KiB
TypeScript
import { Badge } from "@/components/reui/badge"
|
|
|
|
type OptimizerSiteSummaryProps = {
|
|
kind: "JumpHost" | "Exit Node"
|
|
sites?: readonly string[]
|
|
}
|
|
|
|
export function OptimizerSiteSummary({kind,sites}:OptimizerSiteSummaryProps){
|
|
const labels:string[]=[]
|
|
if(sites===undefined)labels.push("Площадки неизвестны")
|
|
else if(!sites.length)labels.push("Нет узлов в расчёте")
|
|
else {
|
|
const known=sites.map(site=>site.trim()).filter(site=>site && site!=="—")
|
|
const distinct=[...new Set(known)]
|
|
const missing=sites.length-known.length
|
|
if(distinct.length){
|
|
const names=distinct.length<=3 ? distinct.join(" · ") : ""
|
|
labels.push(distinct.length<=3 && names.length<=24 ? names : `Площадки: ${distinct.length}`)
|
|
}
|
|
if(missing)labels.push(`Без площадки: ${missing}`)
|
|
}
|
|
return <div role="group" aria-label={`Площадки ${kind}`} className="flex min-w-0 max-w-full flex-wrap gap-1">
|
|
{labels.map(label=><Badge key={label} variant="outline" size="sm" className="max-w-full whitespace-normal break-all text-left">{label}</Badge>)}
|
|
</div>
|
|
}
|