summaryrefslogtreecommitdiff
path: root/Rune/Views/Settings/WalletPaymentDetailView.swift
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2026-04-13 22:37:22 -0500
committerChristian Cleberg <[email protected]>2026-04-13 22:37:22 -0500
commit5dcfe0f147c7871eaf5f3a88bd9e9fded38d4633 (patch)
tree6bcbda4f02a131d3e3b870a3904ccd42f4af2f26 /Rune/Views/Settings/WalletPaymentDetailView.swift
parentfcf864a15b70e4ecb5bd789b1db3116221c34394 (diff)
downloadrune-5dcfe0f147c7871eaf5f3a88bd9e9fded38d4633.tar.gz
rune-5dcfe0f147c7871eaf5f3a88bd9e9fded38d4633.tar.bz2
rune-5dcfe0f147c7871eaf5f3a88bd9e9fded38d4633.zip
v1.2.0 domain management and wallet expansionv1.2.0
Complete v1.1-aligned domain flows with forwards and glue CRUD, improve API payload resilience, and add wallet transaction/payment views. Harden error handling and UX states across domain screens, remove out-of-scope DNSSEC/renewal record flows for now, and keep auth/session behavior aligned with token-based usage.
Diffstat (limited to 'Rune/Views/Settings/WalletPaymentDetailView.swift')
-rw-r--r--Rune/Views/Settings/WalletPaymentDetailView.swift45
1 files changed, 45 insertions, 0 deletions
diff --git a/Rune/Views/Settings/WalletPaymentDetailView.swift b/Rune/Views/Settings/WalletPaymentDetailView.swift
new file mode 100644
index 0000000..f5ef605
--- /dev/null
+++ b/Rune/Views/Settings/WalletPaymentDetailView.swift
@@ -0,0 +1,45 @@
+import SwiftUI
+
+struct WalletPaymentDetailView: View {
+ let transactionID: String
+ @ObservedObject var viewModel: WalletViewModel
+ let client: NjallaClient
+
+ var body: some View {
+ Group {
+ if viewModel.isLoadingPayment && viewModel.selectedPayment == nil {
+ ProgressView("Loading Payment")
+ } else if let payment = viewModel.selectedPayment {
+ List {
+ Section("Payment") {
+ detailRow(label: "ID", value: payment.id ?? transactionID)
+ detailRow(label: "Status", value: payment.status ?? "Not available")
+ detailRow(label: "Amount", value: payment.amount.map { "€\($0)" } ?? "Not available")
+ detailRow(label: "Address", value: payment.address ?? "Not available")
+ detailRow(label: "URL", value: payment.url ?? "Not available")
+ }
+ }
+ .listStyle(.insetGrouped)
+ } else if let errorMessage = viewModel.paymentErrorMessage {
+ ContentUnavailableView("Payment Unavailable", systemImage: "exclamationmark.triangle", description: Text(errorMessage))
+ } else {
+ ContentUnavailableView("Payment Unavailable", systemImage: "creditcard", description: Text("No payment details were returned for this transaction."))
+ }
+ }
+ .navigationTitle("Payment")
+ .navigationBarTitleDisplayMode(.inline)
+ .task {
+ await viewModel.loadPayment(id: transactionID, client: client)
+ }
+ }
+
+ private func detailRow(label: String, value: String) -> some View {
+ HStack {
+ Text(label)
+ Spacer()
+ Text(value)
+ .foregroundStyle(.secondary)
+ .multilineTextAlignment(.trailing)
+ }
+ }
+}