From fdd905480708cf3feedcccdd80d1cc67e12085ae Mon Sep 17 00:00:00 2001 From: kugel3 Date: Mon, 8 Apr 2024 23:28:23 +0200 Subject: [PATCH 1/2] Show/hide title --- .../TransactionReview+View.swift | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/RadixWallet/Features/TransactionReviewFeature/TransactionReview+View.swift b/RadixWallet/Features/TransactionReviewFeature/TransactionReview+View.swift index d7e3de145b..ea6ab35150 100644 --- a/RadixWallet/Features/TransactionReviewFeature/TransactionReview+View.swift +++ b/RadixWallet/Features/TransactionReviewFeature/TransactionReview+View.swift @@ -93,8 +93,13 @@ extension TransactionReview { @MainActor public struct View: SwiftUI.View { + @SwiftUI.State private var showNavigationTitle: Bool = false + private let store: StoreOf + private let coordSpace: String = "TransactionReviewCoordSpace" + private let navTitleID: String = "TransactionReview.title" + public init(store: StoreOf) { self.store = store } @@ -122,6 +127,8 @@ extension TransactionReview { } } } + .navigationTitle(showNavigationTitle ? L10n.TransactionReview.title : "") + .navigationBarTitleDisplayMode(.inline) .destinations(with: store) .onAppear { viewStore.send(.appeared) @@ -220,6 +227,10 @@ extension TransactionReview { .background(.app.gray5.gradient.shadow(.inner(color: shadowColor, radius: 15))) .animation(.easeInOut, value: viewStore.canToggleViewMode ? viewStore.rawTransaction : nil) } + .coordinateSpace(name: coordSpace) + .onPreferenceChange(PositionsPreferenceKey.self) { positions in + showNavigationTitle = (positions[navTitleID]?.maxY ?? 0) <= 0 + } } private let shadowColor: Color = .app.gray2.opacity(0.4) @@ -232,6 +243,7 @@ extension TransactionReview { .lineLimit(2) .multilineTextAlignment(.leading) .foregroundColor(.app.gray1) + .measurePosition(navTitleID, coordSpace: coordSpace) Spacer(minLength: 0) From e1b8e85fd03c617b20967302f5dea9166676af47 Mon Sep 17 00:00:00 2001 From: kugel3 Date: Tue, 9 Apr 2024 15:28:45 +0200 Subject: [PATCH 2/2] Subtitle + hysteresis --- .../TransactionReview+View.swift | 35 +++++++++++++++---- 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/RadixWallet/Features/TransactionReviewFeature/TransactionReview+View.swift b/RadixWallet/Features/TransactionReviewFeature/TransactionReview+View.swift index ea6ab35150..b9c48a3e0b 100644 --- a/RadixWallet/Features/TransactionReviewFeature/TransactionReview+View.swift +++ b/RadixWallet/Features/TransactionReviewFeature/TransactionReview+View.swift @@ -99,6 +99,9 @@ extension TransactionReview { private let coordSpace: String = "TransactionReviewCoordSpace" private let navTitleID: String = "TransactionReview.title" + private let showTitleHysteresis: CGFloat = .small3 + + private let shadowColor: Color = .app.gray2.opacity(0.4) public init(store: StoreOf) { self.store = store @@ -126,9 +129,23 @@ extension TransactionReview { .brightness(viewStore.rawTransaction == nil ? 0 : -0.15) } } + + ToolbarItem(placement: .principal) { + if showNavigationTitle { + VStack(spacing: 0) { + Text(L10n.TransactionReview.title) + .textStyle(.body2Header) + .foregroundColor(.app.gray1) + + if let name = viewStore.proposingDappMetadata?.name { + Text(L10n.TransactionReview.proposingDappSubtitle(name.rawValue)) + .textStyle(.body2Regular) + .foregroundColor(.app.gray2) + } + } + } + } } - .navigationTitle(showNavigationTitle ? L10n.TransactionReview.title : "") - .navigationBarTitleDisplayMode(.inline) .destinations(with: store) .onAppear { viewStore.send(.appeared) @@ -141,6 +158,7 @@ extension TransactionReview { ScrollView(showsIndicators: false) { VStack(spacing: 0) { header(viewStore.proposingDappMetadata) + .measurePosition(navTitleID, coordSpace: coordSpace) .padding(.horizontal, .medium3) .padding(.bottom, .medium3) .background { @@ -229,12 +247,18 @@ extension TransactionReview { } .coordinateSpace(name: coordSpace) .onPreferenceChange(PositionsPreferenceKey.self) { positions in - showNavigationTitle = (positions[navTitleID]?.maxY ?? 0) <= 0 + guard let offset = positions[navTitleID]?.maxY else { + showNavigationTitle = true + return + } + if showNavigationTitle, offset > showTitleHysteresis { + showNavigationTitle = false + } else if !showNavigationTitle, offset < 0 { + showNavigationTitle = true + } } } - private let shadowColor: Color = .app.gray2.opacity(0.4) - private func header(_ proposingDappMetadata: DappMetadata.Ledger?) -> some SwiftUI.View { VStack(alignment: .leading, spacing: .small3) { HStack(spacing: .zero) { @@ -243,7 +267,6 @@ extension TransactionReview { .lineLimit(2) .multilineTextAlignment(.leading) .foregroundColor(.app.gray1) - .measurePosition(navTitleID, coordSpace: coordSpace) Spacer(minLength: 0)