metatext-app-ios-iphone-ipad/Views/SecondaryNavigationView.swift

94 lines
4.1 KiB
Swift
Raw Normal View History

2020-08-08 08:01:45 +02:00
// Copyright © 2020 Metabolist. All rights reserved.
import KingfisherSwiftUI
2020-09-05 04:31:43 +02:00
import SwiftUI
2020-09-01 09:33:49 +02:00
import ViewModels
2020-08-08 08:01:45 +02:00
struct SecondaryNavigationView: View {
2020-09-10 00:48:56 +02:00
@ObservedObject var viewModel: TabNavigationViewModel
2020-09-08 04:12:38 +02:00
@EnvironmentObject var identification: Identification
2020-09-10 00:48:56 +02:00
@EnvironmentObject var rootViewModel: RootViewModel
2020-08-08 08:01:45 +02:00
@Environment(\.displayScale) var displayScale: CGFloat
var body: some View {
NavigationView {
Form {
Section {
NavigationLink(
2020-09-08 04:12:38 +02:00
destination: IdentitiesView(viewModel: .init(identification: identification)),
2020-08-08 08:01:45 +02:00
label: {
HStack {
2020-09-10 00:48:56 +02:00
KFImage(identification.identity.image,
2020-08-08 08:01:45 +02:00
options: .downsampled(dimension: 50, scaleFactor: displayScale))
VStack(alignment: .leading) {
2020-09-10 00:48:56 +02:00
if identification.identity.authenticated {
if let account = identification.identity.account {
2020-09-09 07:40:49 +02:00
CustomEmojiText(
text: account.displayName,
emoji: account.emojis,
textStyle: .headline)
}
2020-09-10 00:48:56 +02:00
Text(identification.identity.handle)
2020-09-09 07:40:49 +02:00
.font(.subheadline)
.foregroundColor(.secondary)
.lineLimit(1)
.minimumScaleFactor(0.5)
} else {
2020-09-10 00:48:56 +02:00
Text(identification.identity.handle)
2020-09-09 07:40:49 +02:00
.font(.headline)
2020-09-10 00:48:56 +02:00
if let instance = identification.identity.instance {
2020-09-09 07:40:49 +02:00
Text(instance.uri)
.font(.subheadline)
.foregroundColor(.secondary)
.lineLimit(1)
.minimumScaleFactor(0.5)
}
2020-08-08 11:10:05 +02:00
}
2020-09-09 07:40:49 +02:00
2020-08-08 08:01:45 +02:00
Spacer()
2020-08-08 11:10:05 +02:00
Text("secondary-navigation.manage-accounts")
2020-08-08 08:01:45 +02:00
.font(.subheadline)
}
.padding()
}
})
}
2020-08-29 05:50:58 +02:00
Section {
2020-09-08 04:12:38 +02:00
NavigationLink(destination: ListsView(viewModel: .init(identification: identification))) {
2020-08-29 05:50:58 +02:00
Label("secondary-navigation.lists", systemImage: "scroll")
}
}
2020-08-08 08:01:45 +02:00
Section {
NavigationLink(
"secondary-navigation.preferences",
destination: PreferencesView(
2020-09-08 04:12:38 +02:00
viewModel: .init(identification: identification)))
2020-08-08 08:01:45 +02:00
}
}
.navigationBarTitleDisplayMode(.inline)
.toolbar {
ToolbarItem(placement: .cancellationAction) {
Button {
2020-09-10 00:48:56 +02:00
viewModel.presentingSecondaryNavigation = false
2020-08-08 08:01:45 +02:00
} label: {
Image(systemName: "xmark.circle.fill")
}
}
}
}
.navigationViewStyle(StackNavigationViewStyle())
}
}
#if DEBUG
2020-09-01 09:33:49 +02:00
import PreviewViewModels
2020-08-08 08:01:45 +02:00
struct SecondaryNavigationView_Previews: PreviewProvider {
static var previews: some View {
2020-09-10 00:48:56 +02:00
SecondaryNavigationView(viewModel: TabNavigationViewModel(identification: .preview))
2020-09-08 04:12:38 +02:00
.environmentObject(Identification.preview)
2020-09-10 00:48:56 +02:00
.environmentObject(RootViewModel.preview)
2020-08-08 08:01:45 +02:00
}
}
#endif