diff options
| author | Christian Cleberg <[email protected]> | 2026-04-13 22:37:22 -0500 |
|---|---|---|
| committer | Christian Cleberg <[email protected]> | 2026-04-13 22:37:22 -0500 |
| commit | 5dcfe0f147c7871eaf5f3a88bd9e9fded38d4633 (patch) | |
| tree | 6bcbda4f02a131d3e3b870a3904ccd42f4af2f26 /Rune/Views/Settings/WalletPaymentDetailView.swift | |
| parent | fcf864a15b70e4ecb5bd789b1db3116221c34394 (diff) | |
| download | rune-1.2.0.tar.gz rune-1.2.0.tar.bz2 rune-1.2.0.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.swift | 45 |
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) + } + } +} |
