metatext/Shared/Views/SettingsView.swift

90 lines
2.7 KiB
Swift
Raw Normal View History

2020-07-31 21:40:57 +00:00
// Copyright © 2020 Metabolist. All rights reserved.
import SwiftUI
2020-08-02 00:15:45 +00:00
import KingfisherSwiftUI
import struct Kingfisher.DownsamplingImageProcessor
import struct Kingfisher.RoundCornerImageProcessor
2020-07-31 21:40:57 +00:00
struct SettingsView: View {
@StateObject var viewModel: SettingsViewModel
@EnvironmentObject var sceneViewModel: SceneViewModel
var body: some View {
2020-08-03 05:54:47 +00:00
VStack(spacing: 0) {
NavigationView {
Form {
HStack {
KFImage(viewModel.identity.account?.avatar,
options: [
.processor(
DownsamplingImageProcessor(size: CGSize(width: 50, height: 50))
.append(another: RoundCornerImageProcessor(radius: .widthFraction(0.5)))
),
.scaleFactor(Screen.scale),
.cacheOriginalImage
])
Text(viewModel.identity.handle)
.font(.subheadline)
}
2020-08-02 00:15:45 +00:00
}
2020-08-03 05:54:47 +00:00
.navigationBarTitleAndItems(sceneViewModel: sceneViewModel)
2020-07-31 21:40:57 +00:00
}
2020-08-03 05:54:47 +00:00
.navigationViewStyle
#if os(macOS)
Divider()
HStack {
Spacer()
Button(action: { sceneViewModel.presentingSettings.toggle() }) {
Text("Done")
}
.keyboardShortcut(.defaultAction)
}
.padding()
#endif
2020-07-31 21:40:57 +00:00
}
2020-08-03 05:54:47 +00:00
.frame
2020-08-02 00:15:45 +00:00
}
}
private extension View {
func navigationBarTitleAndItems(sceneViewModel: SceneViewModel) -> some View {
#if os(iOS)
return navigationBarTitle(Text("settings"), displayMode: .inline)
.navigationBarItems(
leading: Button {
sceneViewModel.presentingSettings.toggle()
} label: {
Image(systemName: "xmark.circle.fill").imageScale(.large)
})
#else
return self
#endif
}
var navigationViewStyle: some View {
#if os(iOS)
return navigationViewStyle(StackNavigationViewStyle())
#else
return self
#endif
2020-07-31 21:40:57 +00:00
}
2020-08-03 05:54:47 +00:00
var frame: some View {
#if os(macOS)
return frame(minWidth: 400, maxWidth: 600, minHeight: 350, maxHeight: 500)
#else
return self
#endif
}
2020-07-31 21:40:57 +00:00
}
#if DEBUG
struct SettingsView_Previews: PreviewProvider {
static var previews: some View {
SettingsView(viewModel: SettingsViewModel(identity: .development))
.environmentObject(SceneViewModel.development)
}
}
#endif