Преглед изворни кода

feat: add initiating state to TreatmentView

bastiaanv пре 3 недеља
родитељ
комит
5a26db0ab8

+ 4 - 0
Trio/Sources/Localizations/Main/Localizable.xcstrings

@@ -145481,6 +145481,10 @@
         }
       }
     },
+    "Initiating…" : {
+      "comment" : "A label displayed when the pump is waiting to start bolusing.",
+      "isCommentAutoGenerated" : true
+    },
     "Insert Cannula" : {
       "extractionState" : "manual",
       "localizations" : {

+ 1 - 1
Trio/Sources/Modules/Home/View/HomeRootView.swift

@@ -815,7 +815,7 @@ extension Home {
                                     .font(.subheadline)
                                     .frame(maxWidth: .infinity, alignment: .leading)
                             } else if state.bolusStatus == .initiating {
-                                Text("Bolus Initiating")
+                                Text("Initiating")
                                     .font(.subheadline)
                                     .frame(maxWidth: .infinity, alignment: .leading)
                             }

+ 6 - 1
Trio/Sources/Modules/Treatments/TreatmentsStateModel.swift

@@ -139,7 +139,7 @@ extension Treatments {
         typealias PumpEvent = PumpEventStored.EventType
 
         var bolusProgress: Decimal?
-        var isBolusInProgress: Bool { bolusProgress != nil }
+        var bolusStatus: BolusStatus = .noBolus
         var lastPumpBolus: PumpEventStored?
 
         func unsubscribe() {
@@ -221,6 +221,11 @@ extension Treatments {
                 .receive(on: DispatchQueue.main)
                 .weakAssign(to: \.bolusProgress, on: self)
                 .store(in: &lifetime)
+
+            provider.deviceManager.bolusTrigger
+                .receive(on: DispatchQueue.main)
+                .weakAssign(to: \.bolusStatus, on: self)
+                .store(in: &lifetime)
         }
 
         func cancelBolus() {

+ 21 - 11
Trio/Sources/Modules/Treatments/View/TreatmentsRootView.swift

@@ -492,7 +492,7 @@ extension Treatments {
         }
 
         var treatmentButton: some View {
-            let shouldDisplayBolusProgress = state.isBolusInProgress && state.amount > 0 &&
+            let shouldDisplayBolusProgress = state.bolusStatus != .noBolus && state.amount > 0 &&
                 !state.externalInsulin && (state.carbs == 0 || state.fat == 0 || state.protein == 0)
 
             var treatmentButtonBackground = Color(.systemBlue)
@@ -593,9 +593,15 @@ extension Treatments {
                     Spacer()
 
                     VStack {
-                        Text("Bolusing")
-                            .font(.subheadline)
-                            .frame(maxWidth: .infinity, alignment: .leading)
+                        if state.bolusStatus == .inProcess {
+                            Text("Bolusing")
+                                .font(.subheadline)
+                                .frame(maxWidth: .infinity, alignment: .leading)
+                        } else if state.bolusStatus == .initiating {
+                            Text("Initiating…")
+                                .font(.subheadline)
+                                .frame(maxWidth: .infinity, alignment: .leading)
+                        }
                         Text(bolusString)
                             .font(.caption)
                             .frame(maxWidth: .infinity, alignment: .leading)
@@ -604,12 +610,16 @@ extension Treatments {
 
                     Spacer()
 
-                    Button { state.cancelBolus() } label: {
-                        Image(systemName: "xmark.app")
-                            .font(.system(size: 25))
-                    }.tint(Color.tabBar)
-                        .buttonStyle(.borderless)
-                        .accessibilityLabel("Cancel bolus")
+                    if state.bolusStatus == .inProcess {
+                        Button { state.cancelBolus() } label: {
+                            Image(systemName: "xmark.app")
+                                .font(.system(size: 25))
+                        }.tint(Color.tabBar)
+                            .buttonStyle(.borderless)
+                            .accessibilityLabel("Cancel bolus")
+                    } else if state.bolusStatus == .initiating {
+                        ProgressView()
+                    }
                 }
                 .padding(.horizontal, 10)
                 .padding(.trailing, 8)
@@ -690,7 +700,7 @@ extension Treatments {
 
         private var disableTaskButton: Bool {
             (
-                state.isBolusInProgress && state
+                state.bolusStatus != .noBolus && state
                     .amount > 0 && !state.externalInsulin && (state.carbs == 0 || state.fat == 0 || state.protein == 0)
             ) || state
                 .addButtonPressed || limitExceeded