taler-ios

iOS apps for GNU Taler (wallet)
Log | Files | Refs | README | LICENSE

commit 90be8f5e124150643cdbae1fa3c0c78d9a4ee5b0
parent c2742b96cfa6cc16f349ab8d9fe2a29c89cb7ea1
Author: Marc Stibane <marc@taler.net>
Date:   Wed, 25 Sep 2024 07:58:07 +0200

hide TabBarView

Diffstat:
MTalerWallet1/Views/HelperViews/TabBarView.swift | 4++--
MTalerWallet1/Views/Main/MainView.swift | 34++++++++++++++++++++++++----------
2 files changed, 26 insertions(+), 12 deletions(-)

diff --git a/TalerWallet1/Views/HelperViews/TabBarView.swift b/TalerWallet1/Views/HelperViews/TabBarView.swift @@ -9,6 +9,7 @@ import SwiftUI struct TabBarView: View { @Binding var selection: Tab + @Binding var hidden: Int let onActionTab: () -> Void @Environment(\.keyboardShowing) var keyboardShowing @@ -38,7 +39,6 @@ struct TabBarView: View { Text(tab.title) .lineLimit(1) .talerFont(.body) - // .padding(.top, 2) } } } @@ -51,7 +51,7 @@ struct TabBarView: View { var body: some View { Group { - if keyboardShowing { + if keyboardShowing || hidden > 0 { EmptyView() } else { HStack(alignment: .bottom) { diff --git a/TalerWallet1/Views/Main/MainView.swift b/TalerWallet1/Views/Main/MainView.swift @@ -214,6 +214,19 @@ enum Tab: String, Hashable, CaseIterable { // MARK: - Content extension MainView { + class NavigationModel: ObservableObject { + @Published var tabBarHidden = 0 + + @Published var actionSelected: Int? = nil { + didSet { + if actionSelected != nil { + tabBarHidden += 1 + } else { + tabBarHidden = 0 + } + } + } + } struct Content: View { let logger: Logger let stack: CallStack @@ -233,6 +246,8 @@ extension MainView { @EnvironmentObject private var viewState: ViewState // popToRootView() @EnvironmentObject private var viewState2: ViewState2 // popToRootView() + @StateObject var navModel = NavigationModel() + @State private var shouldReloadBalances = 0 @State private var shouldReloadPending = 0 @State private var selectedTab: Tab = .balances @@ -244,7 +259,6 @@ extension MainView { @State private var amountToTransfer = Amount.zero(currency: EMPTYSTRING) // Update currency when used @State private var summary: String = "" @State private var showSpendingHint = true - @State private var actionSelected: Int? = nil @State private var myExchange: Exchange? = nil private var openKycButton: some View { @@ -307,7 +321,7 @@ extension MainView { let balancesTitle = Tab.balances.title // let actionTitle = Tab.actions.title let settingsTitle = Tab.settings.title - let tabBarView = TabBarView(selection: $selectedTab) { + let tabBarView = TabBarView(selection: tabSelection(), hidden: $navModel.tabBarHidden) { if selectedTab != .balances { selectedTab = .balances } @@ -364,19 +378,19 @@ extension MainView { cameraAction: cameraAction) .navigationTitle(balancesTitle) .background( Group { - NavigationLink(destination: sendDest, tag: 1, selection: $actionSelected) + NavigationLink(destination: sendDest, tag: 1, selection: $navModel.actionSelected) { EmptyView() }.frame(width: 0).opacity(0).hidden() - NavigationLink(destination: requestDest, tag: 2, selection: $actionSelected) + NavigationLink(destination: requestDest, tag: 2, selection: $navModel.actionSelected) { EmptyView() }.frame(width: 0).opacity(0).hidden() - NavigationLink(destination: depositDest, tag: 3, selection: $actionSelected) + NavigationLink(destination: depositDest, tag: 3, selection: $navModel.actionSelected) { EmptyView() }.frame(width: 0).opacity(0).hidden() - NavigationLink(destination: manualWithdrawDest, tag: 4, selection: $actionSelected) + NavigationLink(destination: manualWithdrawDest, tag: 4, selection: $navModel.actionSelected) { EmptyView() }.frame(width: 0).opacity(0).hidden() }) - .onNotification(.SendAction) { actionSelected = 1 } - .onNotification(.RequestAction) { actionSelected = 2 } - .onNotification(.DepositAction) { actionSelected = 3 } - .onNotification(.WithdrawAction) { actionSelected = 4 } + .onNotification(.SendAction) { navModel.actionSelected = 1 } + .onNotification(.RequestAction) { navModel.actionSelected = 2 } + .onNotification(.DepositAction) { navModel.actionSelected = 3 } + .onNotification(.WithdrawAction){ navModel.actionSelected = 4 } }.id(viewState.rootViewId) // any change to rootViewId triggers popToRootView behaviour .navigationViewStyle(.stack) .tag(Tab.balances)