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 (
);
}