Browse Source

go back to home screen after enacted bolus or after 'continue without bolus' button has been pressed

polscm32 2 years ago
parent
commit
4a21959c71

FreeAPS/Resources/Assets.xcassets/Colors/Tap_Bar.colorset/Contents.json → FreeAPS/Resources/Assets.xcassets/Colors/TabBar.colorset/Contents.json


+ 1 - 1
FreeAPS/Sources/Helpers/Color+Extensions.swift

@@ -56,7 +56,7 @@ extension Color {
     static let bgDarkBlue = Color("Background_DarkBlue")
     static let bgDarkerDarkBlue = Color("Background_DarkerDarkBlue")
     static let chart = Color("Chart")
-    static let tapBar = Color("Tap_Bar")
+    static let tabBar = Color("TabBar")
     //   static let insulin = Color("Insulin")
     static let uam = Color("UAM")
     static let zt = Color("ZT")

+ 4 - 1
FreeAPS/Sources/Modules/Bolus/View/AlternativeBolusCalcRootView.swift

@@ -14,6 +14,8 @@ extension Bolus {
         @State private var keepForNextWiew: Bool = false
         @State private var calculatorDetent = PresentationDetent.medium
 
+        @ObservedObject var appState: AppState
+
         private enum Config {
             static let dividerHeight: CGFloat = 2
             static let spacing: CGFloat = 3
@@ -178,6 +180,7 @@ extension Bolus {
                         Button {
                             keepForNextWiew = true
                             state.add()
+                            appState.currentTab = .home
                         }
                         label: { Text(exceededMaxBolus ? "Max Bolus exceeded!" : "Enact bolus") }
                             .frame(maxWidth: .infinity, alignment: .center)
@@ -190,7 +193,7 @@ extension Bolus {
                     Section {
                         Button {
                             keepForNextWiew = true
-                            state.showModal(for: nil)
+                            appState.currentTab = .home
                         }
                         label: { Text("Continue without bolus") }.frame(maxWidth: .infinity, alignment: .center)
                     }.listRowBackground(colorScheme == .dark ? Color.chart : Color.white)

+ 15 - 2
FreeAPS/Sources/Modules/Bolus/View/BolusRootView.swift

@@ -7,14 +7,27 @@ extension Bolus {
         let waitForSuggestion: Bool
         let fetch: Bool
         @StateObject var state = StateModel()
+        @ObservedObject var appState = AppState()
 
         var body: some View {
             if state.useCalc {
                 // show alternative bolus calc based on toggle in bolus calc settings
-                AlternativeBolusCalcRootView(resolver: resolver, waitForSuggestion: waitForSuggestion, fetch: fetch, state: state)
+                AlternativeBolusCalcRootView(
+                    resolver: resolver,
+                    waitForSuggestion: waitForSuggestion,
+                    fetch: fetch,
+                    state: state,
+                    appState: appState
+                )
             } else {
                 // show iAPS standard bolus calc
-                DefaultBolusCalcRootView(resolver: resolver, waitForSuggestion: waitForSuggestion, fetch: fetch, state: state)
+                DefaultBolusCalcRootView(
+                    resolver: resolver,
+                    waitForSuggestion: waitForSuggestion,
+                    fetch: fetch,
+                    state: state,
+                    appState: appState
+                )
             }
         }
     }

+ 3 - 1
FreeAPS/Sources/Modules/Bolus/View/DefaultBolusCalcRootView.swift

@@ -14,6 +14,7 @@ extension Bolus {
         @State private var presentInfo = false
         @State private var displayError = false
         @State private var keepForNextWiew: Bool = false
+        @ObservedObject var appState: AppState
 
         @Environment(\.colorScheme) var colorScheme
 
@@ -119,6 +120,7 @@ extension Bolus {
                         Button {
                             keepForNextWiew = true
                             state.add()
+                            appState.currentTab = .home
                         }
                         label: { Text(!(state.amount > state.maxBolus) ? "Enact bolus" : "Max Bolus exceeded!") }
                             .frame(maxWidth: .infinity, alignment: .center)
@@ -132,7 +134,7 @@ extension Bolus {
                     Section {
                         Button {
                             keepForNextWiew = true
-                            state.showModal(for: nil)
+                            appState.currentTab = .home
                         }
                         label: { Text("Continue without bolus") }.frame(maxWidth: .infinity, alignment: .center)
                     }.listRowBackground(colorScheme == .dark ? Color.chart : Color.white)

+ 2 - 0
FreeAPS/Sources/Modules/Home/HomeStateModel.swift

@@ -70,6 +70,8 @@ extension Home {
         @Published var cob: Decimal = 0
         @Published var roundedTotalBolus: String = ""
 
+        @Published var selectedTab: Int = 0
+
         let coredataContext = CoreDataStack.shared.persistentContainer.viewContext
 
         override func subscribe() {

+ 29 - 7
FreeAPS/Sources/Modules/Home/View/HomeRootView.swift

@@ -8,10 +8,13 @@ extension Home {
     struct RootView: BaseView {
         let resolver: Resolver
 
+        @ObservedObject var appState = AppState()
         @StateObject var state = StateModel()
         @State var isStatusPopupPresented = false
         @State var showCancelAlert = false
         @State var isMenuPresented = false
+        @State var selectedTab: Int = 0
+        @State var currentTab: Tab
 
         struct Buttons: Identifiable {
             let label: String
@@ -966,18 +969,24 @@ extension Home {
             }
         }
 
-        @ViewBuilder func tapBar() -> some View {
-            TabView {
-                mainView().tabItem { Label("Home", systemImage: "house") }
+        @ViewBuilder func tabBar() -> some View {
+            TabView(selection: $appState.currentTab) {
+                mainView()
+                    .tabItem { Label("Home", systemImage: "house") }
+                    .tag(Tab.home)
 
                 NavigationStack { DataTable.RootView(resolver: resolver) }
                     .tabItem { Label("History", systemImage: historySFSymbol) }
+                    .tag(Tab.history)
 
                 NavigationStack { AddCarbs.RootView(resolver: resolver, editMode: false, override: false) }
                     .tabItem { Label("Carbs", systemImage: "fork.knife") }
+                    .tag(Tab.carbs)
 
-                NavigationStack { Bolus.RootView(resolver: resolver, waitForSuggestion: false, fetch: false) }
-                    .tabItem { Label("Bolus", systemImage: "syringe.fill") }
+                NavigationStack { Bolus.RootView(resolver: resolver, waitForSuggestion: false, fetch: false, appState: appState)
+                }
+                .tabItem { Label("Bolus", systemImage: "syringe.fill") }
+                .tag(Tab.bolus)
 
                 NavigationStack { OverrideProfilesConfig.RootView(resolver: resolver) }
                     .tabItem {
@@ -985,12 +994,13 @@ extension Home {
                             "Profile",
                             systemImage: state.isTempTargetActive || overrideString != nil ? "person.fill" : "person"
                         ) }
-            }.tint(Color.tapBar)
+                    .tag(Tab.profile)
+            }.tint(Color.tabBar)
         }
 
         var body: some View {
             ZStack(alignment: .trailing) {
-                tapBar()
+                tabBar()
                 // burger menu
                 if isMenuPresented {
                     HStack {
@@ -1028,3 +1038,15 @@ extension Home {
         }
     }
 }
+
+class AppState: ObservableObject {
+    @Published var currentTab: Tab = .home
+}
+
+enum Tab {
+    case home
+    case history
+    case carbs
+    case bolus
+    case profile
+}

+ 1 - 1
FreeAPS/Sources/Modules/OverrideProfilesConfig/View/OverrideProfilesRootView.swift

@@ -94,7 +94,7 @@ extension OverrideProfilesConfig {
                             .foregroundColor(
                                 state
                                     .percentage >= 130 ? .red :
-                                    (isEditing ? .orange : Color.tapBar)
+                                    (isEditing ? .orange : Color.tabBar)
                             )
                             .font(.largeTitle)
                         Slider(

+ 1 - 1
FreeAPS/Sources/Router/Screen.swift

@@ -44,7 +44,7 @@ extension Screen {
         case .loading:
             ProgressView()
         case .home:
-            Home.RootView(resolver: resolver)
+            Home.RootView(resolver: resolver, currentTab: .home)
         case .settings:
             Settings.RootView(resolver: resolver)
         case let .configEditor(file):