spb/datacenterindex
Public
HTML 53.9%
TypeScript 44.5%
JavaScript 0.6%
SQL 0.5%
1import type { CloudRegionSummary } from "@dci/core";2import { Badge, type BadgeTone } from "@/components/ui/badge";3import { api } from "@/lib/api";4import { routes } from "@/lib/routes";56export type CloudStatus = CloudRegionSummary["status"];78export const CLOUD_STATUSES: CloudStatus[] = ["operational", "announced", "restricted", "retired"];910export const CLOUD_STATUS_LABEL: Record<CloudStatus, string> = {11 operational: "Operational",12 announced: "Announced",13 restricted: "Restricted",14 retired: "Retired",15};1617const TONE: Record<CloudStatus, BadgeTone> = { operational: "ok", announced: "info", restricted: "warn", retired: "neutral" };1819export function CloudStatusBadge({ status, size = "xs" }: { status: CloudStatus; size?: "xs" | "sm" }) {20 return (21 <Badge tone={TONE[status]} size={size} title={`Region status: ${CLOUD_STATUS_LABEL[status]}`}>22 {CLOUD_STATUS_LABEL[status]}23 </Badge>24 );25}2627/** iso2 → canonical country page href (falls back to the facility index filtered by country). */28export async function countryHrefMap(): Promise<(iso2: string | null | undefined) => string | null> {29 const c = await api.countries();30 const map = new Map<string, string>();31 for (const x of c.items) map.set(x.iso2.toUpperCase(), x.slug);32 return (iso2) => {33 if (!iso2) return null;34 const slug = map.get(iso2.toUpperCase());35 return slug ? routes.country(slug) : routes.datacenters(`country=${iso2.toUpperCase()}`);36 };37}38