metatext-app-ios-iphone-ipad/Views/SwiftUI/RootView.swift

67 lines
1.9 KiB
Swift
Raw Normal View History

2020-08-03 17:20:51 +02:00
// Copyright © 2020 Metabolist. All rights reserved.
import SwiftUI
import UIKit
2020-09-01 09:33:49 +02:00
import ViewModels
2020-08-03 17:20:51 +02:00
struct RootView: View {
@StateObject var viewModel: RootViewModel
var body: some View {
2020-09-10 00:48:56 +02:00
if let navigationViewModel = viewModel.navigationViewModel {
2021-01-21 00:33:53 +01:00
MainNavigationView { navigationViewModel }
2021-01-26 01:06:35 +01:00
.id(navigationViewModel.identityContext.identity.id)
2020-08-07 03:41:59 +02:00
.environmentObject(viewModel)
.transition(.opacity)
2021-01-21 00:33:53 +01:00
.edgesIgnoringSafeArea(.all)
.onReceive(navigationViewModel.identityContext.$appPreferences.map(\.colorScheme),
perform: setColorScheme)
2020-08-07 03:41:59 +02:00
} else {
2020-09-11 11:55:06 +02:00
NavigationView {
2021-01-27 21:31:32 +01:00
AddIdentityView(
viewModelClosure: { viewModel.addIdentityViewModel() },
displayWelcome: true)
.navigationBarTitleDisplayMode(.inline)
.navigationBarHidden(true)
2020-09-11 11:55:06 +02:00
}
.environmentObject(viewModel)
2020-09-12 09:36:59 +02:00
.navigationViewStyle(StackNavigationViewStyle())
2020-09-11 11:55:06 +02:00
.transition(.opacity)
2020-08-03 17:20:51 +02:00
}
}
}
private extension RootView {
func setColorScheme(_ colorScheme: AppPreferences.ColorScheme) {
for scene in UIApplication.shared.connectedScenes.compactMap({ $0 as? UIWindowScene }) {
for window in scene.windows {
window.overrideUserInterfaceStyle = colorScheme.uiKit
}
}
}
}
extension AppPreferences.ColorScheme {
var uiKit: UIUserInterfaceStyle {
switch self {
case .system:
return .unspecified
case .light:
return .light
case .dark:
return .dark
}
}
}
2020-08-03 17:20:51 +02:00
#if DEBUG
2020-09-08 04:12:38 +02:00
import Combine
2020-09-01 09:33:49 +02:00
import PreviewViewModels
2020-08-03 17:20:51 +02:00
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
2020-09-08 04:12:38 +02:00
RootView(viewModel: .preview)
2020-08-03 17:20:51 +02:00
}
}
#endif