129 lines
3.2 KiB
Swift
129 lines
3.2 KiB
Swift
import Foundation
|
|
import Library
|
|
import SwiftUI
|
|
|
|
public enum NavigationPage: Int, CaseIterable, Identifiable {
|
|
public var id: Self {
|
|
self
|
|
}
|
|
|
|
case dashboard
|
|
#if os(macOS)
|
|
case groups
|
|
case connections
|
|
#endif
|
|
case logs
|
|
case tools
|
|
case settings
|
|
}
|
|
|
|
public extension NavigationPage {
|
|
init?(snapshotValue: String) {
|
|
switch snapshotValue.trimmingCharacters(in: .whitespacesAndNewlines).lowercased() {
|
|
case "dashboard":
|
|
self = .dashboard
|
|
case "logs":
|
|
self = .logs
|
|
case "tools":
|
|
self = .tools
|
|
case "settings":
|
|
self = .settings
|
|
#if os(macOS)
|
|
case "groups":
|
|
self = .groups
|
|
case "connections":
|
|
self = .connections
|
|
#endif
|
|
default:
|
|
return nil
|
|
}
|
|
}
|
|
|
|
#if os(macOS)
|
|
static var macosDefaultPages: [NavigationPage] {
|
|
[.logs, .tools, .settings]
|
|
}
|
|
#endif
|
|
|
|
var label: some View {
|
|
Label(title, systemImage: iconImage)
|
|
.tint(.textColor)
|
|
}
|
|
|
|
var title: String {
|
|
switch self {
|
|
case .dashboard:
|
|
return String(localized: "Dashboard")
|
|
#if os(macOS)
|
|
case .groups:
|
|
return String(localized: "Groups")
|
|
case .connections:
|
|
return String(localized: "Connections")
|
|
#endif
|
|
case .logs:
|
|
return String(localized: "Logs")
|
|
case .tools:
|
|
return String(localized: "Tools")
|
|
case .settings:
|
|
return String(localized: "Settings")
|
|
}
|
|
}
|
|
|
|
private var iconImage: String {
|
|
switch self {
|
|
case .dashboard:
|
|
return "text.and.command.macwindow"
|
|
#if os(macOS)
|
|
case .groups:
|
|
return "rectangle.3.group.fill"
|
|
case .connections:
|
|
return "list.bullet.rectangle.portrait.fill"
|
|
#endif
|
|
case .logs:
|
|
return "list.bullet.rectangle"
|
|
case .tools:
|
|
return "terminal.fill"
|
|
case .settings:
|
|
return "gear.circle.fill"
|
|
}
|
|
}
|
|
|
|
@MainActor
|
|
var contentView: some View {
|
|
Group {
|
|
switch self {
|
|
case .dashboard:
|
|
DashboardView()
|
|
#if os(macOS)
|
|
case .groups:
|
|
GroupListView()
|
|
case .connections:
|
|
ConnectionListView()
|
|
#endif
|
|
case .logs:
|
|
LogView()
|
|
case .tools:
|
|
ToolsView()
|
|
case .settings:
|
|
SettingView()
|
|
}
|
|
}
|
|
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .center)
|
|
#if os(iOS)
|
|
.background(Color(uiColor: .systemGroupedBackground))
|
|
#endif
|
|
}
|
|
|
|
#if os(macOS)
|
|
@MainActor
|
|
func visible(_ profile: ExtensionProfile?) -> Bool {
|
|
switch self {
|
|
case .groups, .connections:
|
|
return profile?.status.isConnectedStrict == true
|
|
default:
|
|
return true
|
|
}
|
|
}
|
|
#endif
|
|
}
|