summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Stibane <marc@taler.net>2024-01-28 14:49:28 +0100
committerMarc Stibane <marc@taler.net>2024-01-28 14:49:28 +0100
commitd5038ac7de016493dfe7d2f13bde6526e7172b95 (patch)
tree50eeb3aa5b7ea1564bb0a94c344e6ac283db19a7
parentc26d217ba97bed51f320b376e3dd45bae17209f5 (diff)
downloadtaler-ios-d5038ac7de016493dfe7d2f13bde6526e7172b95.tar.gz
taler-ios-d5038ac7de016493dfe7d2f13bde6526e7172b95.tar.bz2
taler-ios-d5038ac7de016493dfe7d2f13bde6526e7172b95.zip
PaymentDone
-rw-r--r--TalerWallet.xcodeproj/project.pbxproj6
-rw-r--r--TalerWallet1/Views/Sheets/Payment/PaymentDone.swift67
-rw-r--r--TalerWallet1/Views/Sheets/Payment/PaymentView.swift55
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: -