diff options
author | Marc Stibane <marc@taler.net> | 2024-01-28 14:49:28 +0100 |
---|---|---|
committer | Marc Stibane <marc@taler.net> | 2024-01-28 14:49:28 +0100 |
commit | d5038ac7de016493dfe7d2f13bde6526e7172b95 (patch) | |
tree | 50eeb3aa5b7ea1564bb0a94c344e6ac283db19a7 | |
parent | c26d217ba97bed51f320b376e3dd45bae17209f5 (diff) | |
download | taler-ios-d5038ac7de016493dfe7d2f13bde6526e7172b95.tar.gz taler-ios-d5038ac7de016493dfe7d2f13bde6526e7172b95.tar.bz2 taler-ios-d5038ac7de016493dfe7d2f13bde6526e7172b95.zip |
PaymentDone
-rw-r--r-- | TalerWallet.xcodeproj/project.pbxproj | 6 | ||||
-rw-r--r-- | TalerWallet1/Views/Sheets/Payment/PaymentDone.swift | 67 | ||||
-rw-r--r-- | TalerWallet1/Views/Sheets/Payment/PaymentView.swift | 55 |
3 files changed, 94 insertions, 34 deletions
diff --git a/TalerWallet.xcodeproj/project.pbxproj b/TalerWallet.xcodeproj/project.pbxproj index d845680..37109e0 100644 --- a/TalerWallet.xcodeproj/project.pbxproj +++ b/TalerWallet.xcodeproj/project.pbxproj @@ -150,6 +150,8 @@ 4E605DBB2AB05FB6002FB9A7 /* BarGraph.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E605DB92AB05FB6002FB9A7 /* BarGraph.swift */; }; 4E6EDD852A3615BE0031D520 /* ManualDetailsV.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E6EDD842A3615BE0031D520 /* ManualDetailsV.swift */; }; 4E6EDD872A363D8D0031D520 /* ListStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E6EDD862A363D8D0031D520 /* ListStyle.swift */; }; + 4E6EF56B2B65A33300AF252A /* PaymentDone.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E6EF56A2B65A33300AF252A /* PaymentDone.swift */; }; + 4E6EF56C2B65A33300AF252A /* PaymentDone.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E6EF56A2B65A33300AF252A /* PaymentDone.swift */; }; 4E753A062A0952F8002D9328 /* DebugViewC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E753A052A0952F7002D9328 /* DebugViewC.swift */; }; 4E753A082A0B6A5F002D9328 /* ShareSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E753A072A0B6A5F002D9328 /* ShareSheet.swift */; }; 4E7940DE29FC307C00A9AEA1 /* P2PSubjectV.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E7940DD29FC307C00A9AEA1 /* P2PSubjectV.swift */; }; @@ -328,6 +330,7 @@ 4E605DB92AB05FB6002FB9A7 /* BarGraph.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BarGraph.swift; sourceTree = "<group>"; }; 4E6EDD842A3615BE0031D520 /* ManualDetailsV.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManualDetailsV.swift; sourceTree = "<group>"; }; 4E6EDD862A363D8D0031D520 /* ListStyle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListStyle.swift; sourceTree = "<group>"; }; + 4E6EF56A2B65A33300AF252A /* PaymentDone.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentDone.swift; sourceTree = "<group>"; }; 4E753A042A08E720002D9328 /* transactions.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = transactions.json; sourceTree = "<group>"; }; 4E753A052A0952F7002D9328 /* DebugViewC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DebugViewC.swift; sourceTree = "<group>"; }; 4E753A072A0B6A5F002D9328 /* ShareSheet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ShareSheet.swift; sourceTree = "<group>"; }; @@ -679,6 +682,7 @@ isa = PBXGroup; children = ( 4EB0952D2989CBFE0043A8A1 /* PaymentView.swift */, + 4E6EF56A2B65A33300AF252A /* PaymentDone.swift */, 4EBA56402A7FF5200084948B /* PayTemplateView.swift */, ); path = Payment; @@ -1130,6 +1134,7 @@ 4E3EAE6B2A990778009F1BE8 /* Model+Withdraw.swift in Sources */, 4E3EAE6C2A990778009F1BE8 /* ExchangeSectionView.swift in Sources */, 4E3EAE6D2A990778009F1BE8 /* P2PSubjectV.swift in Sources */, + 4E6EF56B2B65A33300AF252A /* PaymentDone.swift in Sources */, 4E3EAE6E2A990778009F1BE8 /* Model+P2P.swift in Sources */, 4E3EAE6F2A990778009F1BE8 /* TalerStrings.swift in Sources */, 4E3EAE702A990778009F1BE8 /* CurrencyInputView.swift in Sources */, @@ -1236,6 +1241,7 @@ 4EB095622989CBFE0043A8A1 /* Model+Withdraw.swift in Sources */, 4EC90C782A1B528B0071DC58 /* ExchangeSectionView.swift in Sources */, 4E7940DE29FC307C00A9AEA1 /* P2PSubjectV.swift in Sources */, + 4E6EF56C2B65A33300AF252A /* PaymentDone.swift in Sources */, 4ECB62802A0BA6DF004ABBB7 /* Model+P2P.swift in Sources */, 4EB0950A2989CB7C0043A8A1 /* TalerStrings.swift in Sources */, 4EA551252A2C923600FEC9A8 /* CurrencyInputView.swift in Sources */, diff --git a/TalerWallet1/Views/Sheets/Payment/PaymentDone.swift b/TalerWallet1/Views/Sheets/Payment/PaymentDone.swift new file mode 100644 index 0000000..1b240e8 --- /dev/null +++ b/TalerWallet1/Views/Sheets/Payment/PaymentDone.swift @@ -0,0 +1,67 @@ +/* + * This file is part of GNU Taler, ©2022-23 Taler Systems S.A. + * See LICENSE.md + */ +import SwiftUI +import SymLog + +struct PaymentDone: View { + private let symLog = SymLogV(0) + let stack: CallStack + let transactionId: String + + @EnvironmentObject private var controller: Controller + @EnvironmentObject private var model: WalletModel + + func reloadOneAction(_ transactionId: String) async throws -> Transaction { + return try await model.getTransactionByIdT(transactionId) + } + func dismissTopAnimated(_ stack: CallStack) { + dismissTop() + } + + var body: some View { +#if PRINT_CHANGES + let _ = Self._printChanges() + let _ = symLog.vlog() // just to get the # to compare it with .onAppear & onDisappear +#endif + let navTitle = String(localized: "Paid", comment: "Title, short") + TransactionSummaryV(stack: stack.push(), + transactionId: transactionId, + reloadAction: reloadOneAction, + navTitle: navTitle, + doneAction: dismissTopAnimated, + abortAction: nil, + deleteAction: nil, + failAction: nil, + suspendAction: nil, + resumeAction: nil) + .navigationBarBackButtonHidden(true) + .interactiveDismissDisabled() // can only use "Done" button to dismiss + .navigationTitle(navTitle) + .onAppear() { + symLog.log("onAppear") + DebugViewC.shared.setSheetID(SHEET_PAY_ACCEPT) + } + .task { + do { + let confirmPayResult = try await model.confirmPayM(transactionId) +// symLog.log(confirmPayResult as Any) + if confirmPayResult.type != "done" { + controller.playSound(0) + // TODO: show error + } + } catch { + controller.playSound(0) + // TODO: error + symLog.log(error.localizedDescription) + } + dismissTop() + } + } +} + +// MARK: - +//#Preview { +// PaymentDone(stack: CallStack("Preview")) +//} diff --git a/TalerWallet1/Views/Sheets/Payment/PaymentView.swift b/TalerWallet1/Views/Sheets/Payment/PaymentView.swift index 1124006..8d8e15d 100644 --- a/TalerWallet1/Views/Sheets/Payment/PaymentView.swift +++ b/TalerWallet1/Views/Sheets/Payment/PaymentView.swift @@ -16,31 +16,13 @@ struct PaymentView: View { // the scanned URL let url: URL - @EnvironmentObject private var controller: Controller @EnvironmentObject private var model: WalletModel @AppStorage("myListStyle") var myListStyle: MyListStyle = .automatic - func acceptAction(preparePayResult: PreparePayResult) { - Task { // runs on MainActor - do { - let confirmPayResult = try await model.confirmPayM(preparePayResult.transactionId) -// symLog.log(confirmPayResult as Any) - if confirmPayResult.type != "done" { - controller.playSound(0) - // TODO: show error - } - } catch { - controller.playSound(0) - // TODO: error - symLog.log(error.localizedDescription) - } - dismissTop() - } - } - @State var preparePayResult: PreparePayResult? = nil var body: some View { + Group { if let preparePayResult { let effective = preparePayResult.amountEffective let terms = preparePayResult.contractTerms @@ -87,9 +69,14 @@ struct PaymentView: View { .listStyle(myListStyle.style).anyView .safeAreaInset(edge: .bottom) { if let effective { - Button(navTitle, action: { acceptAction(preparePayResult: preparePayResult) }) - .buttonStyle(TalerButtonStyle(type: .prominent)) - .padding(.horizontal) + NavigationLink(destination: LazyView { + PaymentDone(stack: stack.push(), + transactionId: preparePayResult.transactionId) + }) { + Text(navTitle) // Confirm Payment + } + .buttonStyle(TalerButtonStyle(type: .prominent)) + .padding(.horizontal) } else { Button("Cancel", action: { dismissTop() }) .buttonStyle(TalerButtonStyle(type: .bordered)) @@ -97,22 +84,22 @@ struct PaymentView: View { } } .navigationTitle(navTitle) - .onAppear() { - symLog.log("onAppear") - DebugViewC.shared.setSheetID(SHEET_PAYMENT) - } } else { LoadingView(url: url, message: nil) - .task { - do { - symLog.log(".task") - let result = try await model.preparePayForUriM(url.absoluteString) - preparePayResult = result - } catch { // TODO: error - symLog.log(error.localizedDescription) - } + .task { // this runs only once + do { // TODO: cancelled + symLog.log(".task") + let result = try await model.preparePayForUriM(url.absoluteString) + preparePayResult = result + } catch { // TODO: error + symLog.log(error.localizedDescription) } + } } + }.onAppear() { + symLog.log("onAppear") + DebugViewC.shared.setSheetID(SHEET_PAYMENT) + } } } // MARK: - |