Просмотр исходного кода

Fix faulty conditional navigation for meal bolus combo

Co-Authored-By: polscm32 <polscm32@users.noreply.github.com>
Deniz Cengiz 1 год назад
Родитель
Сommit
a40e360b7d

+ 4 - 5
Trio Watch App Extension/Helper/Helper+Enums.swift

@@ -1,16 +1,15 @@
 import SwiftUI
 
 enum NavigationDestinations: String {
-    case acknowledgmentPending
-    case carbInput
-    case bolusInput
-    case bolusConfirm
+    case acknowledgmentPending = "AcknowledgmentPendingView"
+    case carbsInput = "CarbsInputView"
+    case bolusInput = "BolusInputView"
+    case bolusConfirm = "BolusConfirmView"
 }
 
 enum MealBolusStep: String {
     case savingCarbs = "Saving Carbs..."
     case enactingBolus = "Enacting Bolus..."
-    case completed = ""
 }
 
 enum AcknowledgementStatus: String, CaseIterable {

+ 2 - 2
Trio Watch App Extension/Views/AcknowledgementPendingView.swift

@@ -1,7 +1,7 @@
 import SwiftUI
 
 struct AcknowledgementPendingView: View {
-    @Binding var navigationPath: [NavigationDestinations]
+    @Binding var navigationPath: NavigationPath
     let state: WatchState
 
     var trioBackgroundColor = LinearGradient(
@@ -44,7 +44,7 @@ struct AcknowledgementPendingView: View {
         .onChange(of: state.showAcknowledgmentBanner) { _, newValue in
             if !newValue {
                 // Navigate back to the root when acknowledgment banner disappears
-                navigationPath.removeAll()
+                navigationPath.removeLast(navigationPath.count)
             }
         }
     }

+ 2 - 2
Trio Watch App Extension/Views/BolusConfirmationView.swift

@@ -3,7 +3,7 @@ import SwiftUI
 import WatchKit
 
 struct BolusConfirmationView: View {
-    @Binding var navigationPath: [NavigationDestinations]
+    @Binding var navigationPath: NavigationPath
     let state: WatchState
     @Binding var bolusAmount: Double
     @Binding var confirmationProgress: Double
@@ -52,7 +52,7 @@ struct BolusConfirmationView: View {
                 }
                 bolusAmount = 0 // reset bolus in state
                 confirmationProgress = 0 // reset auth progress
-                navigationPath.removeAll()
+                navigationPath.removeLast(navigationPath.count)
             }
             .buttonStyle(.bordered)
         }

+ 1 - 1
Trio Watch App Extension/Views/BolusInputView.swift

@@ -5,7 +5,7 @@ import WatchKit
 // MARK: - Bolus Input View
 
 struct BolusInputView: View {
-    @Binding var navigationPath: [NavigationDestinations]
+    @Binding var navigationPath: NavigationPath
     @State private var bolusAmount = 0.0
 
     let state: WatchState

+ 1 - 1
Trio Watch App Extension/Views/CarbsInputView.swift

@@ -4,7 +4,7 @@ import SwiftUI
 // MARK: - Carbs Input View
 
 struct CarbsInputView: View {
-    @Binding var navigationPath: [NavigationDestinations]
+    @Binding var navigationPath: NavigationPath
     @State private var carbsAmount: Double = 0.0 // Needs to be Double due to .digitalCrownRotation() stride
     @FocusState private var isCrownFocused: Bool // Manage crown focus
 

+ 14 - 5
Trio Watch App Extension/Views/TrioMainWatchView.swift

@@ -14,7 +14,8 @@ struct TrioMainWatchView: View {
     @State private var showingOverrideSheet: Bool = false
     // navigation flag for meal bolus combo
     @State private var continueToBolus = false
-    @State private var navigationPath: [NavigationDestinations] = []
+//    @State private var navigationPath: [NavigationDestinations] = []
+    @State private var navigationPath = NavigationPath()
 
     // treatments
     @State private var selectedTreatment: TreatmentOption?
@@ -112,6 +113,7 @@ struct TrioMainWatchView: View {
                     handleTreatmentSelection()
                 }
                 .onAppear {
+                    // reset the conditional navigation flag when opening
                     continueToBolus = false
                 }
             }
@@ -134,11 +136,11 @@ struct TrioMainWatchView: View {
                         navigationPath: $navigationPath,
                         state: state
                     )
-                case .carbInput:
+                case .carbsInput:
                     CarbsInputView(
                         navigationPath: $navigationPath,
                         state: state,
-                        continueToBolus: selectedTreatment == .mealBolusCombo
+                        continueToBolus: continueToBolus
                     )
                 case .bolusInput:
                     BolusInputView(
@@ -154,6 +156,12 @@ struct TrioMainWatchView: View {
                     )
                 }
             }
+            .onChange(of: navigationPath) { _, newPath in
+                if newPath.isEmpty {
+                    // Reset conditional view navigation when returning to root view
+                    continueToBolus = false
+                }
+            }
         }
         .blur(radius: state.showBolusProgressOverlay ? 3 : 0)
         .overlay {
@@ -190,11 +198,12 @@ struct TrioMainWatchView: View {
 
         switch treatment {
         case .meal:
-            navigationPath.append(NavigationDestinations.carbInput)
+            navigationPath.append(NavigationDestinations.carbsInput)
         case .bolus:
             navigationPath.append(NavigationDestinations.bolusInput)
         case .mealBolusCombo:
-            navigationPath.append(NavigationDestinations.carbInput)
+            continueToBolus = true // Explicitely set subsequent view navigation
+            navigationPath.append(NavigationDestinations.carbsInput)
         }
     }
 }