فهرست منبع

Fix cherry-pick

polscm32 aka Marvout 1 سال پیش
والد
کامیت
27b70a2012

+ 0 - 272
FreeAPS/Sources/Modules/OverrideConfig/View/AddOverrideForm.swift

@@ -1,272 +0,0 @@
-import Foundation
-import SwiftUI
-
-struct AddOverrideForm: View {
-    @Environment(\.presentationMode) var presentationMode
-    @Bindable var state: OverrideConfig.StateModel
-    @State private var isEditing = false
-    @State private var overrideTarget = false
-    @Environment(\.colorScheme) var colorScheme
-    @State private var showAlert = false
-    @State private var alertString = ""
-
-    @Environment(\.dismiss) var dismiss
-    @Environment(AppState.self) var appState
-
-    private var formatter: NumberFormatter {
-        let formatter = NumberFormatter()
-        formatter.numberStyle = .decimal
-        formatter.maximumFractionDigits = 0
-        return formatter
-    }
-
-    private var glucoseFormatter: NumberFormatter {
-        let formatter = NumberFormatter()
-        formatter.numberStyle = .decimal
-        formatter.maximumFractionDigits = 0
-        if state.units == .mmolL {
-            formatter.maximumFractionDigits = 1
-        }
-        formatter.roundingMode = .halfUp
-        return formatter
-    }
-
-    private var alertMessage: String {
-        let target: String = state.units == .mgdL ? "70-270 mg/dl" : "4-15 mmol/l"
-        return "Please enter a valid target between" + " \(target)."
-    }
-
-    var body: some View {
-        NavigationView {
-            Form {
-                addOverride()
-            }.scrollContentBackground(.hidden)
-                .background(appState.trioBackgroundColor(for: colorScheme))
-                .navigationTitle("Add Override")
-                .navigationBarItems(trailing: Button("Cancel") {
-                    presentationMode.wrappedValue.dismiss()
-                })
-        }
-    }
-
-    @ViewBuilder private func addOverride() -> some View {
-        Section {
-            VStack {
-                TextField("Name", text: $state.overrideName)
-            }
-        } header: {
-            Text("Name")
-        }.listRowBackground(Color.chart)
-
-        Section {
-            VStack {
-                Spacer()
-                Text("\(state.overrideSliderPercentage.formatted(.number)) %")
-                    .foregroundColor(
-                        state
-                            .overrideSliderPercentage >= 130 ? .red :
-                            (isEditing ? .orange : Color.tabBar)
-                    )
-                    .font(.largeTitle)
-                Slider(
-                    value: $state.overrideSliderPercentage,
-                    in: 10 ... 200,
-                    step: 1,
-                    onEditingChanged: { editing in
-                        isEditing = editing
-                    }
-                )
-                Spacer()
-                Toggle(isOn: $state.indefinite) {
-                    Text("Enable indefinitely")
-                }
-            }
-            if !state.indefinite {
-                HStack {
-                    Text("Duration")
-                    TextFieldWithToolBar(text: $state.overrideDuration, placeholder: "0", numberFormatter: formatter)
-                    Text("minutes").foregroundColor(.secondary)
-                }
-            }
-
-            HStack {
-                Toggle(isOn: $state.shouldOverrideTarget) {
-                    Text("Override Profile Target")
-                }
-            }
-            if state.shouldOverrideTarget {
-                HStack {
-                    Text("Target Glucose")
-                    TextFieldWithToolBar(text: $state.target, placeholder: "0", numberFormatter: glucoseFormatter)
-                    Text(state.units.rawValue).foregroundColor(.secondary)
-                }
-            }
-            HStack {
-                Toggle(isOn: $state.advancedSettings) {
-                    Text("More options")
-                }
-            }
-            if state.advancedSettings {
-                HStack {
-                    Toggle(isOn: $state.smbIsOff) {
-                        Text("Disable SMBs")
-                    }
-                }
-                HStack {
-                    Toggle(isOn: $state.smbIsAlwaysOff) {
-                        Text("Schedule when SMBs are Off")
-                    }.disabled(!state.smbIsOff)
-                }
-                if state.smbIsAlwaysOff {
-                    HStack {
-                        Text("First Hour SMBs are Off (24 hours)")
-                        TextFieldWithToolBar(text: $state.start, placeholder: "0", numberFormatter: formatter)
-                        Text("hour").foregroundColor(.secondary)
-                    }
-                    HStack {
-                        Text("Last Hour SMBs are Off (24 hours)")
-                        TextFieldWithToolBar(text: $state.end, placeholder: "0", numberFormatter: formatter)
-                        Text("hour").foregroundColor(.secondary)
-                    }
-                }
-                HStack {
-                    Toggle(isOn: $state.isfAndCr) {
-                        Text("Change ISF and CR")
-                    }
-                }
-                if !state.isfAndCr {
-                    HStack {
-                        Toggle(isOn: $state.isf) {
-                            Text("Change ISF")
-                        }
-                    }
-                    HStack {
-                        Toggle(isOn: $state.cr) {
-                            Text("Change CR")
-                        }
-                    }
-                }
-                HStack {
-                    Text("SMB Minutes")
-                    TextFieldWithToolBar(text: $state.smbMinutes, placeholder: "0", numberFormatter: formatter)
-                    Text("minutes").foregroundColor(.secondary)
-                }
-                HStack {
-                    Text("UAM SMB Minutes")
-                    TextFieldWithToolBar(text: $state.uamMinutes, placeholder: "0", numberFormatter: formatter)
-                    Text("minutes").foregroundColor(.secondary)
-                }
-            }
-
-            startAndSaveProfiles
-        }
-        header: { Text("Add custom Override") }
-        footer: {
-            Text(
-                "Your profile basal insulin will be adjusted with the override percentage and your profile ISF and CR will be inversly adjusted with the percentage."
-            )
-        }.listRowBackground(Color.chart)
-    }
-
-    private var startAndSaveProfiles: some View {
-        HStack {
-            Button("Start new Override") {
-                if !state.isInputInvalid(target: state.target) {
-                    showAlert.toggle()
-
-                    alertString = "\(state.overrideSliderPercentage.formatted(.number)) %, " +
-                        (
-                            state.overrideDuration > 0 || !state
-                                .indefinite ?
-                                (
-                                    state
-                                        .overrideDuration
-                                        .formatted(.number.grouping(.never).rounded().precision(.fractionLength(0))) +
-                                        " min."
-                                ) :
-                                NSLocalizedString(" infinite duration.", comment: "")
-                        ) +
-                        (
-                            (state.target == 0 || !state.shouldOverrideTarget) ? "" :
-                                (" Target: " + state.target.formatted() + " " + state.units.rawValue + ".")
-                        )
-                        +
-                        (
-                            state
-                                .smbIsOff ?
-                                NSLocalizedString(
-                                    " SMBs are disabled either by schedule or during the entire duration.",
-                                    comment: ""
-                                ) : ""
-                        )
-                        +
-                        "\n\n"
-                        +
-                        NSLocalizedString(
-                            "Starting this override will change your profiles and/or your Target Glucose used for looping during the entire selected duration. Tapping ”Start Override” will start your new Override or edit your current active Override.",
-                            comment: ""
-                        )
-                }
-            }
-            .disabled(unChanged())
-            .buttonStyle(BorderlessButtonStyle())
-            .font(.callout)
-            .controlSize(.mini)
-            .alert(
-                "Start Override",
-                isPresented: $showAlert,
-                actions: {
-                    Button("Cancel", role: .cancel) { state.isEnabled = false }
-                    Button("Start Override", role: .destructive) {
-                        Task {
-                            if state.indefinite { state.overrideDuration = 0 }
-                            state.isEnabled.toggle()
-                            await state.saveCustomOverride()
-                            await state.resetStateVariables()
-                            dismiss()
-                        }
-                    }
-                },
-                message: {
-                    Text(alertString)
-                }
-            )
-            .alert(isPresented: $state.showInvalidTargetAlert) {
-                Alert(
-                    title: Text("Invalid Input"),
-                    message: Text("\(state.alertMessage)"),
-                    dismissButton: .default(Text("OK")) { state.showInvalidTargetAlert = false }
-                )
-            }
-            Button {
-                Task {
-                    if !state.isInputInvalid(target: state.target) {
-                        await state.saveOverridePreset()
-                        dismiss()
-                    }
-                }
-            }
-            label: { Text("Save as Preset") }
-                .tint(.orange)
-                .frame(maxWidth: .infinity, alignment: .trailing)
-                .buttonStyle(BorderlessButtonStyle())
-                .controlSize(.mini)
-                .disabled(unChanged())
-        }
-    }
-
-    private func unChanged() -> Bool {
-        let isChanged = (
-            state.overrideSliderPercentage == 100 && !state.shouldOverrideTarget && !state.smbIsOff && !state
-                .advancedSettings
-        ) ||
-            (!state.indefinite && state.overrideDuration == 0) || (state.shouldOverrideTarget && state.target == 0) ||
-            (
-                state.overrideSliderPercentage == 100 && !state.shouldOverrideTarget && !state.smbIsOff && state.isf && state
-                    .cr && state
-                    .smbMinutes == state.defaultSmbMinutes && state.uamMinutes == state.defaultUamMinutes
-            )
-
-        return isChanged
-    }
-}

+ 0 - 376
FreeAPS/Sources/Modules/OverrideConfig/View/EditOverrideForm.swift

@@ -1,376 +0,0 @@
-import Foundation
-import SwiftUI
-
-struct EditOverrideForm: View {
-    var override: OverrideStored
-    @Environment(\.presentationMode) var presentationMode
-    @Environment(\.colorScheme) var colorScheme
-    @Environment(AppState.self) var appState
-    @Bindable var state: OverrideConfig.StateModel
-
-    @State private var name: String
-    @State private var percentage: Double
-    @State private var indefinite: Bool
-    @State private var duration: Decimal
-    @State private var target: Decimal?
-    @State private var advancedSettings: Bool
-    @State private var smbIsOff: Bool
-    @State private var smbIsAlwaysOff: Bool
-    @State private var start: Decimal?
-    @State private var end: Decimal?
-    @State private var isfAndCr: Bool
-    @State private var isf: Bool
-    @State private var cr: Bool
-    @State private var smbMinutes: Decimal?
-    @State private var uamMinutes: Decimal?
-
-    @State private var hasChanges = false
-    @State private var isEditing = false
-    @State private var target_override = false
-    @State private var showAlert = false
-
-    init(overrideToEdit: OverrideStored, state: OverrideConfig.StateModel) {
-        override = overrideToEdit
-        _state = Bindable(wrappedValue: state)
-        _name = State(initialValue: overrideToEdit.name ?? "")
-        _percentage = State(initialValue: overrideToEdit.percentage)
-        _indefinite = State(initialValue: overrideToEdit.indefinite)
-        _duration = State(initialValue: overrideToEdit.duration?.decimalValue ?? 0)
-        _target = State(
-            initialValue: state.units == .mgdL ? overrideToEdit.target?.decimalValue : overrideToEdit.target?
-                .decimalValue.asMmolL
-        )
-        _target_override = State(initialValue: overrideToEdit.target?.decimalValue != 0)
-        _advancedSettings = State(initialValue: overrideToEdit.advancedSettings)
-        _smbIsOff = State(initialValue: overrideToEdit.smbIsOff)
-        _smbIsAlwaysOff = State(initialValue: overrideToEdit.smbIsAlwaysOff)
-        _start = State(initialValue: overrideToEdit.start?.decimalValue)
-        _end = State(initialValue: overrideToEdit.end?.decimalValue)
-        _isfAndCr = State(initialValue: overrideToEdit.isfAndCr)
-        _isf = State(initialValue: overrideToEdit.isf)
-        _cr = State(initialValue: overrideToEdit.cr)
-        _smbMinutes = State(initialValue: overrideToEdit.smbMinutes?.decimalValue)
-        _uamMinutes = State(initialValue: overrideToEdit.uamMinutes?.decimalValue)
-    }
-
-    var color: LinearGradient {
-        colorScheme == .dark ? LinearGradient(
-            gradient: Gradient(colors: [
-                Color.bgDarkBlue,
-                Color.bgDarkerDarkBlue
-            ]),
-            startPoint: .top,
-            endPoint: .bottom
-        ) :
-            LinearGradient(
-                gradient: Gradient(colors: [Color.gray.opacity(0.1)]),
-                startPoint: .top,
-                endPoint: .bottom
-            )
-    }
-
-    private var formatter: NumberFormatter {
-        let formatter = NumberFormatter()
-        formatter.numberStyle = .decimal
-        formatter.maximumFractionDigits = 0
-        return formatter
-    }
-
-    private var glucoseFormatter: NumberFormatter {
-        let formatter = NumberFormatter()
-        formatter.numberStyle = .decimal
-        formatter.maximumFractionDigits = 0
-        if state.units == .mmolL {
-            formatter.maximumFractionDigits = 1
-        }
-        formatter.roundingMode = .halfUp
-        return formatter
-    }
-
-    var body: some View {
-        NavigationView {
-            Form {
-                editOverride()
-
-                saveButton
-
-            }.scrollContentBackground(.hidden)
-                .background(appState.trioBackgroundColor(for: colorScheme))
-                .navigationTitle("Edit Override")
-                .navigationBarTitleDisplayMode(.inline)
-                .navigationBarItems(leading: Button("Close") {
-                    presentationMode.wrappedValue.dismiss()
-                })
-                .onDisappear {
-                    if !hasChanges {
-                        // Reset UI changes
-                        resetValues()
-                    }
-                }
-                .alert(isPresented: $state.showInvalidTargetAlert) {
-                    Alert(
-                        title: Text("Invalid Input"),
-                        message: Text("\(state.alertMessage)"),
-                        dismissButton: .default(Text("OK")) { state.showInvalidTargetAlert = false }
-                    )
-                }
-        }
-    }
-
-    @ViewBuilder private func editOverride() -> some View {
-        if override.name != nil {
-            Section {
-                VStack {
-                    TextField("Name", text: $name)
-                        .onChange(of: name) { _ in hasChanges = true }
-                }
-            } header: {
-                Text("Name")
-            }.listRowBackground(Color.chart)
-        }
-        Section {
-            VStack {
-                Spacer()
-                Text("\(percentage.formatted(.number)) %")
-                    .foregroundColor(
-                        state
-                            .overrideSliderPercentage >= 130 ? .red :
-                            (isEditing ? .orange : Color.tabBar)
-                    )
-                    .font(.largeTitle)
-                Slider(
-                    value: $percentage,
-                    in: 10 ... 200,
-                    step: 1
-                ).onChange(of: percentage) { _ in hasChanges = true }
-                Spacer()
-                Toggle(isOn: $indefinite) {
-                    Text("Enable indefinitely")
-                }.onChange(of: indefinite) { _ in hasChanges = true }
-            }
-            if !indefinite {
-                HStack {
-                    Text("Duration")
-                    TextFieldWithToolBar(
-                        text: Binding(
-                            get: { duration },
-                            set: {
-                                duration = $0
-                                hasChanges = true
-                            }
-                        ),
-                        placeholder: "0",
-                        numberFormatter: formatter
-                    )
-                    Text("minutes").foregroundColor(.secondary)
-                }
-            }
-
-            HStack {
-                Toggle(isOn: $target_override) {
-                    Text("Override Override Target")
-                }.onChange(of: target_override) { _ in
-                    hasChanges = true
-                }
-            }
-            if target_override {
-                HStack {
-                    Text("Target Glucose")
-                    TextFieldWithToolBar(text: Binding(
-                        get: {
-                            target ?? 0
-                        },
-                        set: {
-                            target = $0
-                            hasChanges = true
-                        }
-                    ), placeholder: "0", numberFormatter: glucoseFormatter)
-                    Text(state.units.rawValue).foregroundColor(.secondary)
-                }
-            }
-
-            Toggle(isOn: $advancedSettings) {
-                Text("More options")
-            }.onChange(of: advancedSettings) { _ in hasChanges = true }
-
-            if advancedSettings {
-                Toggle(isOn: $smbIsOff) {
-                    Text("Disable SMBs")
-                }.onChange(of: smbIsOff) { _ in hasChanges = true }
-
-                Toggle(isOn: $smbIsAlwaysOff) {
-                    Text("Schedule when SMBs are Off")
-                }.onChange(of: smbIsAlwaysOff) { _ in hasChanges = true }
-
-                if smbIsAlwaysOff {
-                    HStack {
-                        Text("First Hour SMBs are Off (24 hours)")
-                        TextFieldWithToolBar(
-                            text: Binding(
-                                get: { start ?? 0 },
-                                set: {
-                                    start = $0
-                                    hasChanges = true
-                                }
-                            ),
-                            placeholder: "0",
-                            numberFormatter: formatter
-                        )
-                        Text("hour").foregroundColor(.secondary)
-                    }
-
-                    HStack {
-                        Text("Last Hour SMBs are Off (24 hours)")
-                        TextFieldWithToolBar(
-                            text: Binding(
-                                get: { end ?? 23 },
-                                set: {
-                                    end = $0
-                                    hasChanges = true
-                                }
-                            ),
-                            placeholder: "0",
-                            numberFormatter: formatter
-                        )
-                        Text("hour").foregroundColor(.secondary)
-                    }
-                }
-
-                Toggle(isOn: $isfAndCr) {
-                    Text("Change ISF and CR")
-                }.onChange(of: isfAndCr) { _ in hasChanges = true }
-
-                if !isfAndCr {
-                    Toggle(isOn: $isf) {
-                        Text("Change ISF")
-                    }.onChange(of: isf) { _ in hasChanges = true }
-
-                    Toggle(isOn: $cr) {
-                        Text("Change CR")
-                    }.onChange(of: cr) { _ in hasChanges = true }
-                }
-
-                HStack {
-                    Text("SMB Minutes")
-                    TextFieldWithToolBar(
-                        text: Binding(
-                            get: { smbMinutes ?? state.defaultSmbMinutes },
-                            set: {
-                                smbMinutes = $0
-                                hasChanges = true
-                            }
-                        ),
-                        placeholder: "0",
-                        numberFormatter: formatter
-                    )
-                    Text("minutes").foregroundColor(.secondary)
-                }
-
-                HStack {
-                    Text("UAM SMB Minutes")
-                    TextFieldWithToolBar(
-                        text: Binding(
-                            get: { uamMinutes ?? state.defaultUamMinutes },
-                            set: {
-                                uamMinutes = $0
-                                hasChanges = true
-                            }
-                        ),
-                        placeholder: "0",
-                        numberFormatter: formatter
-                    )
-                    Text("minutes").foregroundColor(.secondary)
-                }
-            }
-        }.listRowBackground(Color.chart)
-    }
-
-    private var saveButton: some View {
-        HStack {
-            Spacer()
-            Button(action: {
-                if !state.isInputInvalid(target: target ?? 0) {
-                    saveChanges()
-
-                    do {
-                        guard let moc = override.managedObjectContext else { return }
-                        guard moc.hasChanges else { return }
-                        try moc.save()
-                        Task {
-                            await state.nightscoutManager.uploadProfiles()
-                        }
-                        if let currentActiveOverride = state.currentActiveOverride {
-                            Task {
-                                await state.disableAllActiveOverrides(
-                                    except: currentActiveOverride.objectID,
-                                    createOverrideRunEntry: false
-                                )
-                            }
-                        }
-
-                        // Update View
-                        state.updateLatestOverrideConfiguration()
-                        hasChanges = false
-                        presentationMode.wrappedValue.dismiss()
-                    } catch {
-                        debugPrint("\(DebuggingIdentifiers.failed) \(#file) \(#function) Failed to edit Override")
-                    }
-                }
-            }, label: {
-                Text("Save")
-            })
-                .disabled(!hasChanges)
-                .frame(maxWidth: .infinity, alignment: .center)
-                .tint(.white)
-
-            Spacer()
-        }.listRowBackground(hasChanges ? Color(.systemBlue) : Color(.systemGray4))
-    }
-
-    private func saveChanges() {
-        if !override.isPreset, hasChanges, name == (override.name ?? "") {
-            override.name = "Custom Override"
-        } else {
-            override.name = name
-        }
-        override.percentage = percentage
-        override.indefinite = indefinite
-        override.duration = NSDecimalNumber(decimal: duration)
-        if target_override {
-            override.target = target.map {
-                state.units == .mmolL ? NSDecimalNumber(decimal: $0.asMgdL) : NSDecimalNumber(decimal: $0)
-            }
-        } else {
-            override.target = 0
-        }
-        override.advancedSettings = advancedSettings
-        override.smbIsOff = smbIsOff
-        override.smbIsAlwaysOff = smbIsAlwaysOff
-        override.start = start.map { NSDecimalNumber(decimal: $0) }
-        override.end = end.map { NSDecimalNumber(decimal: $0) }
-        override.isfAndCr = isfAndCr
-        override.isf = isf
-        override.cr = cr
-        override.smbMinutes = smbMinutes.map { NSDecimalNumber(decimal: $0) }
-        override.uamMinutes = uamMinutes.map { NSDecimalNumber(decimal: $0) }
-        override.isUploadedToNS = false
-    }
-
-    private func resetValues() {
-        name = override.name ?? ""
-        percentage = override.percentage
-        indefinite = override.indefinite
-        duration = override.duration?.decimalValue ?? 0
-        target = override.target?.decimalValue
-        advancedSettings = override.advancedSettings
-        smbIsOff = override.smbIsOff
-        smbIsAlwaysOff = override.smbIsAlwaysOff
-        start = override.start?.decimalValue
-        end = override.end?.decimalValue
-        isfAndCr = override.isfAndCr
-        isf = override.isf
-        cr = override.cr
-        smbMinutes = override.smbMinutes?.decimalValue ?? state.defaultSmbMinutes
-        uamMinutes = override.uamMinutes?.decimalValue ?? state.defaultUamMinutes
-    }
-}

+ 0 - 516
FreeAPS/Sources/Modules/OverrideConfig/View/OverrideRootView.swift

@@ -1,516 +0,0 @@
-import CoreData
-import SwiftUI
-import Swinject
-
-extension OverrideConfig {
-    struct RootView: BaseView {
-        let resolver: Resolver
-
-        @State var state = StateModel()
-
-        @State private var isEditing = false
-        @State private var showOverrideCreationSheet = false
-        @State private var showingDetail = false
-        @State private var showCheckmark: Bool = false
-        @State private var selectedPresetID: String?
-        @State private var selectedOverride: OverrideStored?
-        // temp targets
-        @State private var isPromptPresented = false
-        @State private var isRemoveAlertPresented = false
-        @State private var removeAlert: Alert?
-        @State private var isEditingTT = false
-
-        @Environment(\.managedObjectContext) var moc
-        @Environment(\.colorScheme) var colorScheme
-        @Environment(AppState.self) var appState
-
-        @FetchRequest(
-            entity: TempTargetsSlider.entity(),
-            sortDescriptors: [NSSortDescriptor(key: "date", ascending: false)]
-        ) var isEnabledArray: FetchedResults<TempTargetsSlider>
-
-        private var formatter: NumberFormatter {
-            let formatter = NumberFormatter()
-            formatter.numberStyle = .decimal
-            formatter.maximumFractionDigits = 0
-            return formatter
-        }
-
-        private var glucoseFormatter: NumberFormatter {
-            let formatter = NumberFormatter()
-            formatter.numberStyle = .decimal
-            formatter.maximumFractionDigits = 0
-            if state.units == .mmolL {
-                formatter.maximumFractionDigits = 1
-            }
-            formatter.roundingMode = .halfUp
-            return formatter
-        }
-
-        var body: some View {
-            VStack {
-                Picker("Tab", selection: $state.selectedTab) {
-                    ForEach(Tab.allCases) { tab in
-                        Text(NSLocalizedString(tab.name, comment: "")).tag(tab)
-                    }
-                }
-                .pickerStyle(.segmented).padding(.horizontal, 10)
-
-                Form {
-                    switch state.selectedTab {
-                    case .overrides: overrides()
-                    case .tempTargets: tempTargets() }
-                }.scrollContentBackground(.hidden).background(appState.trioBackgroundColor(for: colorScheme))
-                    .onAppear(perform: configureView)
-                    .navigationBarTitle("Adjustments")
-                    .navigationBarTitleDisplayMode(.large)
-                    .toolbar {
-                        ToolbarItem(placement: .topBarTrailing) {
-                            switch state.selectedTab {
-                            case .overrides:
-                                Button(action: {
-                                    showOverrideCreationSheet = true
-                                }, label: {
-                                    HStack {
-                                        Text("Add Override")
-                                        Image(systemName: "plus")
-                                    }
-                                })
-                            default:
-                                EmptyView()
-                            }
-                        }
-                    }
-                    .sheet(isPresented: $state.showOverrideEditSheet, onDismiss: {
-                        Task {
-                            await state.resetStateVariables()
-                            state.showOverrideEditSheet = false
-                        }
-
-                    }) {
-                        if let override = selectedOverride {
-                            EditOverrideForm(overrideToEdit: override, state: state)
-                        }
-                    }
-                    .sheet(isPresented: $showOverrideCreationSheet, onDismiss: {
-                        Task {
-                            await state.resetStateVariables()
-                            showOverrideCreationSheet = false
-                        }
-                    }) {
-                        AddOverrideForm(state: state)
-                    }
-            }.background(appState.trioBackgroundColor(for: colorScheme))
-        }
-
-        @ViewBuilder func overrides() -> some View {
-            if state.overridePresets.isNotEmpty {
-                overridePresets
-            } else {
-                defaultText
-            }
-
-            if state.isEnabled, state.activeOverrideName.isNotEmpty {
-                currentActiveOverride
-            }
-
-            if state.overridePresets.isNotEmpty || state.currentActiveOverride != nil {
-                cancelOverrideButton
-            }
-        }
-
-        private var defaultText: some View {
-            Section {} header: {
-                Text("Add Preset or Override by tapping 'Add Override +' in the top right-hand corner of the screen.")
-                    .textCase(nil)
-                    .foregroundStyle(.secondary)
-            }
-        }
-
-        private var overridePresets: some View {
-            Section {
-                ForEach(state.overridePresets) { preset in
-                    overridesView(for: preset)
-                        .swipeActions(edge: .trailing, allowsFullSwipe: true) {
-                            Button(role: .none) {
-                                Task {
-                                    await state.invokeOverridePresetDeletion(preset.objectID)
-                                }
-                            } label: {
-                                Label("Delete", systemImage: "trash")
-                                    .tint(.red)
-                            }
-                            Button(action: {
-                                // Set the selected Override to the chosen Preset and pass it to the Edit Sheet
-                                selectedOverride = preset
-                                state.showOverrideEditSheet = true
-                            }, label: {
-                                Label("Edit", systemImage: "pencil")
-                                    .tint(.blue)
-                            })
-                        }
-                }
-                .onMove(perform: state.reorderOverride)
-                .listRowBackground(Color.chart)
-            } header: {
-                Text("Presets")
-            } footer: {
-                HStack {
-                    Image(systemName: "hand.draw.fill")
-                    Text("Swipe left to edit or delete an override preset. Hold, drag and drop to reorder a preset.")
-                }
-            }
-        }
-
-        private var currentActiveOverride: some View {
-            Section {
-                HStack {
-                    Text("\(state.activeOverrideName) is running")
-
-                    Spacer()
-                    Image(systemName: "square.and.pencil")
-                        .foregroundStyle(Color.blue)
-                }
-                .contentShape(Rectangle())
-                .onTapGesture {
-                    Task {
-                        /// To avoid editing the Preset when a Preset-Override is running we first duplicate the Preset-Override as a non-Preset Override
-                        /// The currentActiveOverride variable in the State will update automatically via MOC notification
-                        await state.duplicateOverridePresetAndCancelPreviousOverride()
-
-                        /// selectedOverride is used for passing the chosen Override to the EditSheet so we have to set the updated currentActiveOverride to be the selectedOverride
-                        selectedOverride = state.currentActiveOverride
-
-                        /// Now we can show the Edit sheet
-                        state.showOverrideEditSheet = true
-                    }
-                }
-            }
-            .listRowBackground(Color.blue.opacity(0.2))
-        }
-
-        private var cancelOverrideButton: some View {
-            Button(action: {
-                Task {
-                    // Save cancelled Override in OverrideRunStored Entity
-                    // Cancel ALL active Override
-                    await state.disableAllActiveOverrides(createOverrideRunEntry: true)
-                }
-            }, label: {
-                Text("Cancel Override")
-
-            })
-                .frame(maxWidth: .infinity, alignment: .center)
-                .disabled(!state.isEnabled)
-                .listRowBackground(!state.isEnabled ? Color(.systemGray4) : Color(.systemRed))
-                .tint(.white)
-        }
-
-        @ViewBuilder func tempTargets() -> some View {
-            if !state.presetsTT.isEmpty {
-                Section(header: Text("Presets")) {
-                    ForEach(state.presetsTT) { preset in
-                        presetView(for: preset)
-                    }
-                }.listRowBackground(Color.chart)
-            }
-
-            HStack {
-                Text("Experimental")
-                Toggle(isOn: $state.viewPercantage) {}.controlSize(.mini)
-                Image(systemName: "figure.highintensity.intervaltraining")
-                Image(systemName: "fork.knife")
-            }.listRowBackground(Color.chart)
-
-            if state.viewPercantage {
-                Section {
-                    VStack {
-                        Text("\(state.percentageTT.formatted(.number)) % Insulin")
-                            .foregroundColor(isEditingTT ? .orange : .blue)
-                            .font(.largeTitle)
-                            .padding(.vertical)
-                        Slider(
-                            value: $state.percentageTT,
-                            in: 15 ...
-                                min(Double(state.maxValue * 100), 200),
-                            step: 1,
-                            onEditingChanged: { editing in
-                                isEditingTT = editing
-                            }
-                        )
-                        // Only display target slider when not 100 %
-                        if state.percentageTT != 100 {
-                            Spacer()
-                            Divider()
-                            Text(
-                                (
-                                    state
-                                        .units == .mmolL ?
-                                        "\(state.computeTarget().asMmolL.formatted(.number.grouping(.never).rounded().precision(.fractionLength(1)))) mmol/L" :
-                                        "\(state.computeTarget().formatted(.number.grouping(.never).rounded().precision(.fractionLength(0)))) mg/dl"
-                                )
-                                    + NSLocalizedString(" Target Glucose", comment: "")
-                            )
-                            .foregroundColor(.green)
-                            .padding(.vertical)
-
-                            Slider(
-                                value: $state.hbt,
-                                in: 101 ... 295,
-                                step: 1
-                            ).accentColor(.green)
-                        }
-                    }
-                }.listRowBackground(Color.chart)
-            } else {
-                Section(header: Text("Custom")) {
-                    HStack {
-                        Text("Target")
-                        Spacer()
-                        TextFieldWithToolBar(text: $state.low, placeholder: "0", numberFormatter: glucoseFormatter)
-                        Text(state.units.rawValue).foregroundColor(.secondary)
-                    }
-                    HStack {
-                        Text("Duration")
-                        Spacer()
-                        TextFieldWithToolBar(text: $state.durationTT, placeholder: "0", numberFormatter: formatter)
-                        Text("minutes").foregroundColor(.secondary)
-                    }
-                    DatePicker("Date", selection: $state.date)
-                    HStack {
-                        Button { state.enact() }
-                        label: { Text("Enact") }
-                            .disabled(state.durationTT == 0)
-                            .buttonStyle(BorderlessButtonStyle())
-                            .font(.callout)
-                            .controlSize(.mini)
-
-                        Button { isPromptPresented = true }
-                        label: { Text("Save as preset") }
-                            .disabled(state.durationTT == 0)
-                            .tint(.orange)
-                            .frame(maxWidth: .infinity, alignment: .trailing)
-                            .buttonStyle(BorderlessButtonStyle())
-                            .controlSize(.mini)
-                    }
-                }.listRowBackground(Color.chart)
-            }
-            if state.viewPercantage {
-                Section {
-                    HStack {
-                        Text("Duration")
-                        Spacer()
-                        TextFieldWithToolBar(text: $state.durationTT, placeholder: "0", numberFormatter: formatter)
-                        Text("minutes").foregroundColor(.secondary)
-                    }
-                    DatePicker("Date", selection: $state.date)
-                    HStack {
-                        Button { state.enact() }
-                        label: { Text("Enact") }
-                            .disabled(state.durationTT == 0)
-                            .buttonStyle(BorderlessButtonStyle())
-                            .font(.callout)
-                            .controlSize(.mini)
-
-                        Button { isPromptPresented = true }
-                        label: { Text("Save as preset") }
-                            .disabled(state.durationTT == 0)
-                            .tint(.orange)
-                            .frame(maxWidth: .infinity, alignment: .trailing)
-                            .buttonStyle(BorderlessButtonStyle())
-                            .controlSize(.mini)
-                    }
-                }.listRowBackground(Color.chart)
-            }
-
-            Section {
-                Button { state.cancel() }
-                label: {
-                    HStack {
-                        Spacer()
-                        Text("Cancel Temp Target")
-                        Spacer()
-                        Image(systemName: "xmark.app")
-                            .font(.title)
-                    }
-                }
-                .frame(maxWidth: .infinity, alignment: .center)
-                .disabled(state.storage.current() == nil)
-                .listRowBackground(state.storage.current() == nil ? Color(.systemGray4) : Color(.systemRed))
-                .tint(.white)
-            }.popover(isPresented: $isPromptPresented) {
-                Form {
-                    Section(header: Text("Enter preset name")) {
-                        TextField("Name", text: $state.newPresetName)
-                        Button {
-                            state.save()
-                            isPromptPresented = false
-                        }
-                        label: { Text("Save") }
-                        Button { isPromptPresented = false }
-                        label: { Text("Cancel") }
-                    }
-                }
-            }
-            .onAppear {
-                configureView()
-                state.hbt = isEnabledArray.first?.hbt ?? 160
-            }
-        }
-
-        private func presetView(for preset: TempTarget) -> some View {
-            var low = preset.targetBottom
-            var high = preset.targetTop
-            if state.units == .mmolL {
-                low = low?.asMmolL
-                high = high?.asMmolL
-            }
-            let isSelected = preset.id == selectedPresetID
-
-            return ZStack(alignment: .trailing, content: {
-                HStack {
-                    VStack {
-                        HStack {
-                            Text(preset.displayName)
-                            Spacer()
-                        }
-                        HStack(spacing: 2) {
-                            Text(
-                                "\(formatter.string(from: (low ?? 0) as NSNumber)!) - \(formatter.string(from: (high ?? 0) as NSNumber)!)"
-                            )
-                            .foregroundColor(.secondary)
-                            .font(.caption)
-
-                            Text(state.units.rawValue)
-                                .foregroundColor(.secondary)
-                                .font(.caption)
-                            Text("for")
-                                .foregroundColor(.secondary)
-                                .font(.caption)
-                            Text("\(formatter.string(from: preset.duration as NSNumber)!)")
-                                .foregroundColor(.secondary)
-                                .font(.caption)
-                            Text("min")
-                                .foregroundColor(.secondary)
-                                .font(.caption)
-
-                            Spacer()
-                        }.padding(.top, 2)
-                    }
-                    .contentShape(Rectangle())
-                    .onTapGesture {
-                        state.enactPreset(id: preset.id)
-                        selectedPresetID = preset.id
-                        showCheckmark.toggle()
-
-                        // deactivate showCheckmark after 3 seconds
-                        DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
-                            showCheckmark = false
-                        }
-                    }
-
-                    Image(systemName: "xmark.circle").foregroundColor(showCheckmark && isSelected ? Color.clear : Color.secondary)
-                        .contentShape(Rectangle())
-                        .padding(.vertical)
-                        .onTapGesture {
-                            removeAlert = Alert(
-                                title: Text("Are you sure?"),
-                                message: Text("Delete preset \"\(preset.displayName)\""),
-                                primaryButton: .destructive(Text("Delete"), action: { state.removePreset(id: preset.id) }),
-                                secondaryButton: .cancel()
-                            )
-                            isRemoveAlertPresented = true
-                        }
-                        .alert(isPresented: $isRemoveAlertPresented) {
-                            removeAlert!
-                        }
-                }
-                if showCheckmark && isSelected {
-                    // show checkmark to indicate if the preset was actually pressed
-                    Image(systemName: "checkmark.circle.fill")
-                        .imageScale(.large)
-                        .fontWeight(.bold)
-                        .foregroundStyle(Color.green)
-                }
-            })
-        }
-
-        @ViewBuilder private func overridesView(for preset: OverrideStored) -> some View {
-            let target = (state.units == .mgdL ? preset.target : preset.target?.decimalValue.asMmolL as NSDecimalNumber?) ?? 0
-
-            let duration = (preset.duration ?? 0) as Decimal
-            let name = ((preset.name ?? "") == "") || (preset.name?.isEmpty ?? true) ? "" : preset.name!
-            let percent = preset.percentage / 100
-            let perpetual = preset.indefinite
-            let durationString = perpetual ? "" : "\(formatter.string(from: duration as NSNumber)!)"
-            let scheduledSMBstring = (preset.smbIsOff && preset.smbIsAlwaysOff) ? "Scheduled SMBs" : ""
-            let smbString = (preset.smbIsOff && scheduledSMBstring == "") ? "SMBs are off" : ""
-            let targetString = target != 0 ? target.description : ""
-            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 isfString = preset.isf ? "ISF" : ""
-            let crString = preset.cr ? "CR" : ""
-            let dash = crString != "" ? "/" : ""
-            let isfAndCRstring = isfString + dash + crString
-            let isSelected = preset.id == selectedPresetID
-
-            if name != "" {
-                ZStack(alignment: .trailing, content: {
-                    HStack {
-                        VStack {
-                            HStack {
-                                Text(name)
-                                Spacer()
-                            }
-                            HStack(spacing: 5) {
-                                Text(percent.formatted(.percent.grouping(.never).rounded().precision(.fractionLength(0))))
-                                if targetString != "" {
-                                    Text(targetString)
-                                    Text(targetString != "" ? state.units.rawValue : "")
-                                }
-                                if durationString != "" { Text(durationString + (perpetual ? "" : "min")) }
-                                if smbString != "" { Text(smbString).foregroundColor(.secondary).font(.caption) }
-                                if scheduledSMBstring != "" { Text(scheduledSMBstring) }
-                                if preset.advancedSettings {
-                                    Text(maxMinutesSMB == 0 ? "" : maxMinutesSMB.formatted() + " SMB")
-                                    Text(maxMinutesUAM == 0 ? "" : maxMinutesUAM.formatted() + " UAM")
-                                    Text(isfAndCRstring)
-                                }
-                                Spacer()
-                            }
-                            .padding(.top, 2)
-                            .foregroundColor(.secondary)
-                            .font(.caption)
-                        }
-                        .contentShape(Rectangle())
-                        .onTapGesture {
-                            Task {
-                                let objectID = preset.objectID
-                                await state.enactOverridePreset(withID: objectID)
-                                state.hideModal()
-                                showCheckmark.toggle()
-                                selectedPresetID = preset.id
-
-                                // deactivate showCheckmark after 3 seconds
-                                DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
-                                    showCheckmark = false
-                                }
-                            }
-                        }
-                    }
-                    // show checkmark to indicate if the preset was actually pressed
-                    if showCheckmark && isSelected {
-                        Image(systemName: "checkmark.circle.fill")
-                            .imageScale(.large)
-                            .fontWeight(.bold)
-                            .foregroundStyle(Color.green)
-                    } else {
-                        Image(systemName: "line.3.horizontal")
-                            .imageScale(.medium)
-                            .foregroundStyle(.secondary)
-                    }
-                })
-            }
-        }
-    }
-}