import React from 'react'; import Link from '@docusaurus/Link'; import styles from './styles.module.css'; // Per-page deployment-mode badge. Paired with . // // Canonical mode slugs: // cloud-shared — Mattermost Cloud (multi-tenant) // cloud-dedicated — Mattermost Cloud Dedicated (single-tenant managed) // cloud-government — Mattermost Cloud Government (FedRAMP Moderate) // self-hosted — customer-managed, internet-connected // air-gapped — customer-managed, network-isolated // tactical-edge — DDIL forward-deployed // // Usage: // type Mode = | 'cloud-shared' | 'cloud-dedicated' | 'cloud-government' | 'self-hosted' | 'air-gapped' | 'tactical-edge'; const MODE_LABEL: Record = { 'cloud-shared': 'Cloud', 'cloud-dedicated': 'Cloud Dedicated', 'cloud-government': 'Cloud Government', 'self-hosted': 'Self-Hosted', 'air-gapped': 'Air-Gapped', 'tactical-edge': 'Tactical Edge', }; const KNOWN_MODES = Object.keys(MODE_LABEL) as Mode[]; function parseModes(value: string): {valid: Mode[]; invalid: string[]} { const valid: Mode[] = []; const invalid: string[] = []; for (const raw of value.split(',').map((s) => s.trim()).filter(Boolean)) { if ((KNOWN_MODES as string[]).includes(raw)) valid.push(raw as Mode); else invalid.push(raw); } return {valid, invalid}; } export default function DeploymentAvailability({modes}: {modes: string}) { const {valid, invalid} = parseModes(modes || ''); if (invalid.length > 0) { return ( ); } if (valid.length === 0) { return ( ); } const labels = valid.map((m) => MODE_LABEL[m]).join(', '); return ( ); }