67 lines
2.2 KiB
Swift
67 lines
2.2 KiB
Swift
import ApplicationLibrary
|
|
import Library
|
|
import SwiftUI
|
|
|
|
public struct SidebarView: View {
|
|
@Environment(\.selection) private var selection
|
|
@EnvironmentObject private var environments: ExtensionEnvironments
|
|
|
|
public init() {}
|
|
public var body: some View {
|
|
VStack {
|
|
if environments.extensionProfileLoading {
|
|
ProgressView()
|
|
} else if let profile = environments.extensionProfile {
|
|
SidebarView0().environmentObject(profile)
|
|
} else {
|
|
SidebarView1()
|
|
}
|
|
}.frame(minWidth: 150)
|
|
}
|
|
|
|
struct SidebarView0: View {
|
|
@Environment(\.selection) private var selection
|
|
@EnvironmentObject private var extensionProfile: ExtensionProfile
|
|
|
|
var body: some View {
|
|
VStack {
|
|
if extensionProfile.status.isConnectedStrict {
|
|
List(selection: selection) {
|
|
Section(NavigationPage.dashboard.title) {
|
|
Label("Overview", systemImage: "text.and.command.macwindow").tag(NavigationPage.dashboard)
|
|
NavigationPage.groups.label.tag(NavigationPage.groups)
|
|
}
|
|
Divider()
|
|
ForEach(NavigationPage.macosDefaultPages, id: \.self) { it in
|
|
it.label
|
|
}
|
|
}
|
|
} else {
|
|
List(NavigationPage.allCases.filter { it in
|
|
it.visible(extensionProfile)
|
|
}, selection: selection) { it in
|
|
it.label
|
|
}
|
|
}
|
|
}
|
|
.onChangeCompat(of: extensionProfile.status) {
|
|
if !selection.wrappedValue.visible(extensionProfile) {
|
|
selection.wrappedValue = NavigationPage.dashboard
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
struct SidebarView1: View {
|
|
@Environment(\.selection) private var selection
|
|
|
|
var body: some View {
|
|
List(NavigationPage.allCases.filter { it in
|
|
it.visible(nil)
|
|
}, selection: selection) { it in
|
|
it.label
|
|
}
|
|
}
|
|
}
|
|
}
|