taler-ios

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

commit ecb2d78a4f11f8dc2e9386c165f47c4954a8aeea
parent 5c3654d10474bf04f55651855aad768fbb7432f2
Author: Marc Stibane <marc@taler.net>
Date:   Sat, 25 Nov 2023 07:45:08 +0100

Fix KYC/Confirm

Diffstat:
MTalerWallet1/Views/Transactions/TransactionDetailView.swift | 89+++++++++++++++++++++++++++++++++++++++++++++++++------------------------------
1 file changed, 55 insertions(+), 34 deletions(-)

diff --git a/TalerWallet1/Views/Transactions/TransactionDetailView.swift b/TalerWallet1/Views/Transactions/TransactionDetailView.swift @@ -76,6 +76,8 @@ struct TransactionDetailView: View { return true } } + } else { // no sheet but the details view -> reload + checkReload(notification, logStr) } return false } @@ -134,7 +136,7 @@ struct TransactionDetailView: View { Text("Status: \(common.txState.major.localizedState)") } .listRowSeparator(.automatic) .accessibilityFont(.title) - SwitchCase(transaction: $transaction, hasDone: doneAction != nil) + TypeDetail(transaction: $transaction, hasDone: doneAction != nil) if transaction.isAbortable { if let abortAction { TransactionButton(transactionId: common.transactionId, @@ -192,10 +194,47 @@ struct TransactionDetailView: View { //} // //extension TransactionDetail { - struct SwitchCase: View { + struct KycButton: View { + let destination: URL + @AppStorage("iconOnly") var iconOnly: Bool = false + + var body: some View { + VStack(alignment: .leading) { // Show Hint that User must pass KYC on website + if !iconOnly { + Text("You need to pass a KYC procedure") + .fixedSize(horizontal: false, vertical: true) // wrap in scrollview + .multilineTextAlignment(.leading) // otherwise + .listRowSeparator(.hidden) + } + Link("Open KYC website", destination: destination) + .buttonStyle(TalerButtonStyle(type: .prominent, badge: NEEDS_KYC)) + .accessibilityHint("Will go to KYC website to confirm this withdrawal.") + } + } + } + + struct ConfirmationButton: View { + let destination: URL + @AppStorage("iconOnly") var iconOnly: Bool = false + + var body: some View { + VStack(alignment: .leading) { // Show Hint that User should Confirm on bank website + if !iconOnly { + Text("Waiting for bank confirmation") + .fixedSize(horizontal: false, vertical: true) // wrap in scrollview + .multilineTextAlignment(.leading) // otherwise + .listRowSeparator(.hidden) + } + Link("Confirm with bank", destination: destination) + .buttonStyle(TalerButtonStyle(type: .prominent, badge: CONFIRM_BANK)) + .accessibilityHint("Will go to bank website to confirm this withdrawal.") + } + } + } + + struct TypeDetail: View { @Binding var transaction: Transaction let hasDone: Bool - @AppStorage("iconOnly") var iconOnly: Bool = false var body: some View { let common = transaction.common @@ -209,43 +248,25 @@ struct TransactionDetailView: View { case .withdrawal(let withdrawalTransaction): let details = withdrawalTransaction.details if pending { + if transaction.isPendingKYC { + if let kycUrl = common.kycUrl { + if let destination = URL(string: kycUrl) { + KycButton(destination: destination) + } + } + } let withdrawalDetails = details.withdrawalDetails switch withdrawalDetails.type { case .manual: // "Make a wire transfer of \(amount) to" - if transaction.isPendingKYC { - if let kycUrl = common.kycUrl { - if let destination = URL(string: kycUrl) { - VStack(alignment: .leading) { // Show Hint that User must pass KYC on website - if !iconOnly { - Text("You need to pass a KYC procedure") - .fixedSize(horizontal: false, vertical: true) // wrap in scrollview - .multilineTextAlignment(.leading) // otherwise - .listRowSeparator(.hidden) - } - Link("Open KYC website", destination: destination) - .buttonStyle(TalerButtonStyle(type: .prominent, badge: NEEDS_KYC)) - .accessibilityHint("Will go to KYC website to confirm this withdrawal.") - } - } - } - } ManualDetailsV(common: common, details: withdrawalDetails) case .bankIntegrated: // "Confirm with bank" - let confirmed = withdrawalDetails.confirmed ?? false - if !confirmed { - if let confirmationUrl = withdrawalDetails.bankConfirmationUrl { - if let destination = URL(string: confirmationUrl) { - VStack(alignment: .leading) { // Show Hint that User should Confirm on bank website - if !iconOnly { - Text("Waiting for bank confirmation") - .fixedSize(horizontal: false, vertical: true) // wrap in scrollview - .multilineTextAlignment(.leading) // otherwise - .listRowSeparator(.hidden) - } - Link("Confirm with bank", destination: destination) - .buttonStyle(TalerButtonStyle(type: .prominent, badge: CONFIRM_BANK)) - .accessibilityHint("Will go to bank website to confirm this withdrawal.") + if !transaction.isPendingKYC { // both should never happen, but... + let confirmed = withdrawalDetails.confirmed ?? false + if !confirmed { + if let confirmationUrl = withdrawalDetails.bankConfirmationUrl { + if let destination = URL(string: confirmationUrl) { + ConfirmationButton(destination: destination) } } }