Jelajahi Sumber

refactor @ViewBuilder private func overridesView

Address feedback from @dnzxy

> Pretty sure this can be halved with some guards here and there instead of having many nullish coalesce and nullish ternary checks for empty strings.
Mike Plante 1 tahun lalu
induk
melakukan
5ce0e1dcee

+ 43 - 27
FreeAPS/Sources/Modules/OverrideConfig/View/OverrideRootView.swift

@@ -494,32 +494,46 @@ extension OverrideConfig {
         }
 
         @ViewBuilder private func overridesView(for preset: OverrideStored) -> some View {
-            let duration = (preset.duration ?? 0) as Decimal
+            let isSelected = preset.id == selectedPresetID
             let name = preset.name ?? ""
+            let indefinite = preset.indefinite
+            let duration = preset.duration?.decimalValue ?? Decimal(0)
             let percentage = preset.percentage
-            let perpetual = preset.indefinite
-            let durationString = perpetual ? "" : "\(formatHrMin(Int(duration)))"
-            let scheduledSMBstring = preset.smbIsScheduledOff && preset.start != preset.end
-                ? " \(formatTimeRange(start: preset.start?.stringValue, end: preset.end?.stringValue))"
-                : ""
-            let smbString = (preset.smbIsOff || preset.smbIsScheduledOff) ? "SMBs Off\(scheduledSMBstring)" : ""
-            let targetValue = (preset.target == 0 || preset.target == nil) ? "" :
-                (state.units == .mgdL ? preset.target?.description ?? "" : preset.target?.decimalValue.formattedAsMmolL)
-
-            let targetString = (targetValue?.isEmpty ?? true) ? "" : "\(targetValue!) \(state.units.rawValue)"
-            let maxMinutesSMB = (preset.smbMinutes as Decimal?) != nil ? (preset.smbMinutes ?? 0) as Decimal : 0
-            let maxMinutesUAM = (preset.uamMinutes as Decimal?) != nil ? (preset.uamMinutes ?? 0) as Decimal : 0
-            let maxSmbMinsString = (
-                maxMinutesSMB != 0 && preset.advancedSettings && !preset.smbIsOff && maxMinutesSMB != state
-                    .defaultSmbMinutes
-            ) ?
-                "\(maxMinutesSMB.formatted()) min SMB" : ""
-            let maxUamMinsString = (
-                maxMinutesUAM != 0 && preset.advancedSettings && !preset.smbIsOff && maxMinutesUAM != state
-                    .defaultUamMinutes
-            ) ?
-                "\(maxMinutesUAM.formatted()) min UAM" : ""
-            let isfAndCRstring: String = {
+            let smbMinutes = preset.smbMinutes?.decimalValue ?? Decimal(0)
+            let uamMinutes = preset.uamMinutes?.decimalValue ?? Decimal(0)
+
+            let target: String = {
+                guard let targetValue = preset.target, targetValue != 0 else { return "" }
+                return state.units == .mgdL ? targetValue.description : targetValue.decimalValue.formattedAsMmolL
+            }()
+
+            let targetString = target.isEmpty ? "" : "\(target) \(state.units.rawValue)"
+
+            let durationString = indefinite ? "" : "\(formatHrMin(Int(duration)))"
+
+            let scheduledSMBString: String = {
+                guard preset.smbIsScheduledOff, preset.start != preset.end else { return "" }
+                return " \(formatTimeRange(start: preset.start?.stringValue, end: preset.end?.stringValue))"
+            }()
+
+            let smbString: String = {
+                guard preset.smbIsOff || preset.smbIsScheduledOff else { return "" }
+                return "SMBs Off\(scheduledSMBString)"
+            }()
+
+            let maxSmbMinsString: String = {
+                guard smbMinutes != 0, preset.advancedSettings, !preset.smbIsOff,
+                      smbMinutes != state.defaultSmbMinutes else { return "" }
+                return "\(smbMinutes.formatted()) min SMB"
+            }()
+
+            let maxUamMinsString: String = {
+                guard uamMinutes != 0, preset.advancedSettings, !preset.smbIsOff,
+                      uamMinutes != state.defaultUamMinutes else { return "" }
+                return "\(uamMinutes.formatted()) min UAM"
+            }()
+
+            let isfAndCrString: String = {
                 switch (preset.isfAndCr, preset.isf, preset.cr) {
                 case (_, true, true),
                      (true, _, _):
@@ -532,16 +546,18 @@ extension OverrideConfig {
                     return ""
                 }
             }()
-            let isSelected = preset.id == selectedPresetID
 
+            let percentageString = percentage != 100 ? "\(Int(percentage))%\(isfAndCrString)" : ""
+
+            // Combine all labels into a single array, filtering out empty strings
             let labels: [String] = [
                 durationString,
-                percentage != 100 ? "\(Int(percentage))%\(isfAndCRstring)" : "",
+                percentageString,
                 targetString,
                 smbString,
                 maxSmbMinsString,
                 maxUamMinsString
-            ].filter { !$0.isEmpty } // filter out empty labels
+            ].filter { !$0.isEmpty }
 
             if !name.isEmpty {
                 ZStack(alignment: .trailing) {