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

Calculate insulin % based on saved preset target
- when entering edit mode. This way you can choose "normal" target/duration entries or use the slider to do your edits

dsnallfot 2 лет назад
Родитель
Сommit
c6adbda2c0

+ 13 - 0
FreeAPS/Sources/Modules/AddTempTarget/AddTempTargetStateModel.swift

@@ -196,6 +196,19 @@ extension AddTempTarget {
             return Decimal(Double(target))
             return Decimal(Double(target))
         }
         }
 
 
+        func computePercentage(target: Decimal) -> Decimal {
+            let c = Decimal(hbt - 100)
+            var ratio = c / (c + target - 100)
+
+            if ratio > maxValue {
+                ratio = maxValue
+            }
+
+            let adjustedPercentage = ratio * 100
+            let roundedPercentage = (adjustedPercentage as NSDecimalNumber).rounding(accordingToBehavior: nil)
+            return roundedPercentage as Decimal
+        }
+
         func updatePreset(_ preset: TempTarget) {
         func updatePreset(_ preset: TempTarget) {
             var lowTarget = low
             var lowTarget = low
 
 

+ 13 - 0
FreeAPS/Sources/Modules/AddTempTarget/View/AddTempTargetRootView.swift

@@ -130,6 +130,14 @@ extension AddTempTarget {
                 Text("Experimental")
                 Text("Experimental")
                 Toggle(isOn: $state.viewPercantage) {}
                 Toggle(isOn: $state.viewPercantage) {}
                     .controlSize(.mini)
                     .controlSize(.mini)
+                    .onChange(of: state.viewPercantage) { newValue in
+                        if newValue {
+                            guard let selectedPreset = selectedPreset,
+                                  let targetBottom = selectedPreset.targetBottom else { return }
+                            let computedPercentage = state.computePercentage(target: targetBottom)
+                            state.percentage = Double(truncating: computedPercentage as NSNumber)
+                        }
+                    }
                 Image(systemName: "figure.highintensity.intervaltraining")
                 Image(systemName: "figure.highintensity.intervaltraining")
                 Image(systemName: "fork.knife")
                 Image(systemName: "fork.knife")
             }
             }
@@ -227,6 +235,11 @@ extension AddTempTarget {
                     }
                     }
                 }
                 }
             }
             }
+            .onAppear {
+                guard let selectedPreset = selectedPreset, let targetBottom = selectedPreset.targetBottom else { return }
+                let computedPercentage = state.computePercentage(target: targetBottom)
+                state.percentage = Double(truncating: computedPercentage as NSNumber)
+            }
             .onDisappear {
             .onDisappear {
                 if isEditSheetPresented == false {
                 if isEditSheetPresented == false {
                     resetFields()
                     resetFields()