Files
openclaw/apps/macos/Sources/OpenClaw/DashboardGatewayMenuModel.swift
Peter Steinberger f0b7542a22 feat(mac): gateway menu-bar surfaces and Gateways main menu (#114038)
* feat(mac): add gateway menu surfaces

* docs(mac): document gateway menu surfaces

* test(mac): make dashboard frame assertions display-independent
2026-07-26 02:13:13 -04:00

57 lines
1.8 KiB
Swift

import Foundation
struct DashboardGatewayMenuItem: Equatable, Identifiable, Sendable {
let target: DashboardGatewayTarget
let name: String
let health: DashboardGatewayHealth
let isPrimary: Bool
let canPromote: Bool
let shortcutNumber: Int?
var id: String {
self.target.bridgeID
}
}
enum DashboardGatewayMenuModel {
static func items(from entries: [DashboardGatewayEntry]) -> [DashboardGatewayMenuItem] {
guard entries.count >= 2 else { return [] }
return entries.enumerated().compactMap { index, entry in
guard let target = DashboardGatewayTarget(bridgeID: entry.id) else { return nil }
return DashboardGatewayMenuItem(
target: target,
name: entry.name,
health: entry.health,
isPrimary: entry.isPrimary,
canPromote: entry.canPromote,
shortcutNumber: index < 9 ? index + 1 : nil)
}
}
static func connectionLabel(
mode: AppState.ConnectionMode,
entries: [DashboardGatewayEntry]) -> String
{
guard entries.count >= 2,
let primaryName = entries.first(where: \.isPrimary)?.name.nonEmpty
else {
return switch mode {
case .unconfigured:
String(localized: "OpenClaw Not Configured")
case .remote:
String(localized: "Remote OpenClaw Active")
case .local:
String(localized: "OpenClaw Active")
}
}
return switch mode {
case .unconfigured:
String(localized: "OpenClaw Not Configured — \(primaryName)")
case .remote:
String(localized: "Remote OpenClaw Active — \(primaryName)")
case .local:
String(localized: "OpenClaw Active — \(primaryName)")
}
}
}