Files
cloudflare-domain-manager/apps/web/src/lib/app-switcher-config.ts
T
DenozordecandCursor 9d8c2aff86
Build and Push CFDM Docker Image / build-and-push (push) Successful in 1m58s
Build and Push CFDM Docker Image / create-release (push) Skipped
Build and Push CFDM Docker Image / update-wiki (push) Successful in 5s
feat(app-switcher): читать конфиг из auth-portal вместо локального editor
CURRENT_APP_ID cfdm; настройка ссылок только на портале.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-18 20:59:03 +07:00

67 lines
1.6 KiB
TypeScript

import {
ChartBarIcon,
CloudIcon,
GlobeIcon,
LayoutDashboardIcon,
ServerIcon,
type LucideIcon,
} from 'lucide-react'
import type { AppSwitcherConfig, AppSwitcherEntry } from '@cfdm/shared'
/** JWT / portal app id for this product */
export const CURRENT_APP_ID = 'cfdm'
export type AppSwitcherIconName = keyof typeof APP_SWITCHER_ICONS
export const APP_SWITCHER_ICONS: Record<
'server' | 'cloud' | 'globe' | 'dashboard' | 'chart',
LucideIcon
> = {
server: ServerIcon,
cloud: CloudIcon,
globe: GlobeIcon,
dashboard: LayoutDashboardIcon,
chart: ChartBarIcon,
}
/** Offline fallback when auth-portal is unreachable */
export const DEFAULT_APP_SWITCHER_CONFIG: AppSwitcherConfig = {
menuLabel: 'Приложения',
apps: [
{
id: 'vps',
name: 'VPS Tracker',
subtitle: 'Учёт виртуальных серверов',
url: 'https://vps.shnt.top',
icon: 'server',
},
{
id: 'cfdm',
name: 'CF Domain Manager',
subtitle: 'Управление доменами',
url: 'https://cfdm.shnt.top',
icon: 'cloud',
},
{
id: 'bgp',
name: 'EvoBGP',
subtitle: 'BGP маршрутизация',
url: 'https://bgp.shnt.top',
icon: 'globe',
},
],
}
export function getAppUrl(
appId: string,
config: AppSwitcherConfig = DEFAULT_APP_SWITCHER_CONFIG,
): string | undefined {
return config.apps.find((app) => app.id === appId)?.url
}
export function getCurrentApp(
config: AppSwitcherConfig = DEFAULT_APP_SWITCHER_CONFIG,
): AppSwitcherEntry {
return config.apps.find((app) => app.id === CURRENT_APP_ID) ?? config.apps[0]!
}