commit b8635ef50af639db230a8323712a2d2022ccda13
parent 7f433950fe7e47ec23c7e58dccd9a4ff0993f733
Author: Marc Stibane <marc@taler.net>
Date: Mon, 19 Feb 2024 12:44:31 +0100
templateParams
Diffstat:
2 files changed, 42 insertions(+), 20 deletions(-)
diff --git a/TalerWallet1/Model/Model+Payment.swift b/TalerWallet1/Model/Model+Payment.swift
@@ -147,15 +147,22 @@ fileprivate struct PreparePayForUri: WalletBackendFormattedRequest {
var talerPayUri: String
}
}
+
+struct TemplateParams: Codable {
+ let amount: Amount? // Total amount payable
+ let summary: String? // Human-readable short summary of the contract
+}
/// A request to get an exchange's payment contract terms.
fileprivate struct PreparePayForTemplate: WalletBackendFormattedRequest {
typealias Response = PreparePayResult
func operation() -> String { "preparePayForTemplate" }
- func args() -> Args { Args(talerPayTemplateUri: talerPayTemplateUri) }
+ func args() -> Args { Args(talerPayTemplateUri: talerPayTemplateUri, templateParams: templateParams) }
var talerPayTemplateUri: String
+ var templateParams: TemplateParams
struct Args: Encodable {
var talerPayTemplateUri: String
+ var templateParams: TemplateParams
}
}
// MARK: -
@@ -187,9 +194,10 @@ extension WalletModel {
return response
}
@MainActor
- func preparePayForTemplateM(_ talerPayTemplateUri: String) // M for MainActor
+ func preparePayForTemplateM(_ talerPayTemplateUri: String, amount: Amount?, summary: String?) // M for MainActor
async throws -> PreparePayResult {
- let request = PreparePayForTemplate(talerPayTemplateUri: talerPayTemplateUri)
+ let templateParams = TemplateParams(amount: amount, summary: summary)
+ let request = PreparePayForTemplate(talerPayTemplateUri: talerPayTemplateUri, templateParams: templateParams)
let response = try await sendRequest(request, ASYNCDELAY)
return response
}
diff --git a/TalerWallet1/Views/Sheets/Payment/PayTemplateView.swift b/TalerWallet1/Views/Sheets/Payment/PayTemplateView.swift
@@ -20,11 +20,15 @@ struct PayTemplateView: View {
@EnvironmentObject private var model: WalletModel
@AppStorage("myListStyle") var myListStyle: MyListStyle = .automatic
+ @State private var preparePayResult: PreparePayResult? = nil
+ @State private var amount: Amount? = nil // templateParam
+ @State private var summary: String? = nil // templateParam
+
func acceptAction(preparePayResult: PreparePayResult) {
Task { // runs on MainActor
do {
let confirmPayResult = try await model.confirmPayM(preparePayResult.transactionId)
- // symLog.log(confirmPayResult as Any)
+// symLog.log(confirmPayResult as Any)
if confirmPayResult.type != "done" {
controller.playSound(0)
// TODO: show error
@@ -38,16 +42,30 @@ struct PayTemplateView: View {
}
}
- @State var preparePayResult: PreparePayResult? = nil
+ func queryURL() -> Bool {
+ if let queryParameters = url.queryParameters {
+ if let amountStr = queryParameters["amount"] {
+ amount = Amount.zero(currency: amountStr)
+ }
+ if let summaryStr = queryParameters["summary"] {
+ summary = summaryStr
+ }
+ return true
+ }
+ return false
+ }
- func query(url: URL) -> String? {
- if let query = url.query {
- let array = query.components(separatedBy: "&")
+ func preparePayForTemplate() async {
+ do {
+ let result = try await model.preparePayForTemplateM(url.absoluteString, amount: amount, summary: summary)
+ preparePayResult = result
+ } catch { // TODO: error
+ symLog.log(error.localizedDescription)
}
- return nil
}
var body: some View {
+ Group {
if let preparePayResult {
let effective = preparePayResult.amountEffective
List {
@@ -106,21 +124,17 @@ struct PayTemplateView: View {
}
}
.navigationTitle(navTitle)
- .onAppear() {
- symLog.log("onAppear")
- DebugViewC.shared.setSheetID(SHEET_PAY_TEMPLATE)
- }
} else {
LoadingView(url: url, message: nil)
.task {
- do {
- symLog.log(".task")
- let result = try await model.preparePayForTemplateM(url.absoluteString)
- preparePayResult = result
- } catch { // TODO: error
- symLog.log(error.localizedDescription)
- }
+ symLog.log(".task")
+ let hasParams = queryURL()
+ await preparePayForTemplate()
}
}
+ }.onAppear() {
+ symLog.log("onAppear")
+ DebugViewC.shared.setSheetID(SHEET_PAY_TEMPLATE)
+ }
}
}