metatext/Shared/Views/SettingsView.swift

67 lines
2.1 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 {
NavigationView {
Form {
2020-08-02 00:15:45 +00:00
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-07-31 21:40:57 +00:00
}
2020-08-02 00:15:45 +00:00
.navigationBarTitleAndItems(sceneViewModel: sceneViewModel)
2020-07-31 21:40:57 +00:00
}
2020-08-02 00:15:45 +00:00
.navigationViewStyle
}
}
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
}
}
#if DEBUG
struct SettingsView_Previews: PreviewProvider {
static var previews: some View {
SettingsView(viewModel: SettingsViewModel(identity: .development))
.environmentObject(SceneViewModel.development)
}
}
#endif