Ivan Valkou 4 лет назад
Родитель
Сommit
6de058ba13

+ 14 - 0
FreeAPS/Sources/Modules/Home/HomeStateModel.swift

@@ -1,3 +1,4 @@
+import Combine
 import LoopKitUI
 import SwiftDate
 import SwiftUI
@@ -142,6 +143,19 @@ extension Home {
                     }
                 }
                 .store(in: &lifetime)
+
+            $setupPump
+                .removeDuplicates()
+                .sink { [weak self] show in
+                    guard let self = self else { return }
+                    if show, let pumpManager = self.provider.apsManager.pumpManager {
+                        let view = PumpConfig.PumpSettingsView(pumpManager: pumpManager, completionDelegate: self).asAny()
+                        self.router.mainSecondaryModalView.value = view
+                    } else {
+                        self.router.mainSecondaryModalView.value = nil
+                    }
+                }
+                .store(in: &lifetime)
         }
 
         func addCarbs() {

+ 0 - 5
FreeAPS/Sources/Modules/Home/View/HomeRootView.swift

@@ -73,11 +73,6 @@ extension Home {
                         state.setupPump = true
                     }
                 }
-                .sheet(isPresented: $state.setupPump) {
-                    if let pumpManager = state.provider.apsManager.pumpManager {
-                        PumpConfig.PumpSettingsView(pumpManager: pumpManager, completionDelegate: state)
-                    }
-                }
                 Spacer()
                 LoopView(
                     suggestion: $state.suggestion,

+ 18 - 0
FreeAPS/Sources/Modules/Main/MainStateModel.swift

@@ -5,8 +5,10 @@ extension Main {
     final class StateModel: BaseStateModel<Provider> {
         private(set) var modal: Modal?
         @Published var isModalPresented = false
+        @Published var isSecondaryModalPresented = false
         @Published var isAlertPresented = false
         @Published var alertMessage = ""
+        @Published var secondaryModalView: AnyView? = nil
 
         override func subscribe() {
             router.mainModalScreen
@@ -33,6 +35,22 @@ extension Main {
                     self.alertMessage = message
                 }
                 .store(in: &lifetime)
+
+            router.mainSecondaryModalView
+                .receive(on: DispatchQueue.main)
+                .sink { view in
+                    self.secondaryModalView = view
+                    self.isSecondaryModalPresented = view != nil
+                }
+                .store(in: &lifetime)
+
+            $isSecondaryModalPresented
+                .removeDuplicates()
+                .filter { !$0 }
+                .sink { _ in
+                    self.router.mainSecondaryModalView.send(nil)
+                }
+                .store(in: &lifetime)
         }
     }
 }

+ 7 - 0
FreeAPS/Sources/Modules/Main/View/MainRootView.swift

@@ -13,6 +13,13 @@ extension Main {
                     NavigationView { self.state.modal!.view }
                         .navigationViewStyle(StackNavigationViewStyle())
                 }
+                .sheet(isPresented: $state.isSecondaryModalPresented) {
+                    if let view = state.secondaryModalView {
+                        view
+                    } else {
+                        EmptyView()
+                    }
+                }
                 .alert(isPresented: $state.isAlertPresented) {
                     Alert(
                         title: Text("Important message"),

+ 2 - 0
FreeAPS/Sources/Router/Router.swift

@@ -4,12 +4,14 @@ import Swinject
 
 protocol Router {
     var mainModalScreen: CurrentValueSubject<Screen?, Never> { get }
+    var mainSecondaryModalView: CurrentValueSubject<AnyView?, Never> { get }
     var alertMessage: PassthroughSubject<String, Never> { get }
     func view(for screen: Screen) -> AnyView
 }
 
 final class BaseRouter: Router {
     let mainModalScreen = CurrentValueSubject<Screen?, Never>(nil)
+    let mainSecondaryModalView = CurrentValueSubject<AnyView?, Never>(nil)
     let alertMessage = PassthroughSubject<String, Never>()
 
     private let resolver: Resolver