krz/rune
an ios client for njalla
clone: git clone https://gitbay.org/krz/rune.git
v1.2.0: Rune/Views/Settings/WalletPaymentDetailView.swift · raw
1import SwiftUI
2
3struct WalletPaymentDetailView: View {
4 let transactionID: String
5 @ObservedObject var viewModel: WalletViewModel
6 let client: NjallaClient
7
8 var body: some View {
9 Group {
10 if viewModel.isLoadingPayment && viewModel.selectedPayment == nil {
11 ProgressView("Loading Payment")
12 } else if let payment = viewModel.selectedPayment {
13 List {
14 Section("Payment") {
15 detailRow(label: "ID", value: payment.id ?? transactionID)
16 detailRow(label: "Status", value: payment.status ?? "Not available")
17 detailRow(label: "Amount", value: payment.amount.map { "€\($0)" } ?? "Not available")
18 detailRow(label: "Address", value: payment.address ?? "Not available")
19 detailRow(label: "URL", value: payment.url ?? "Not available")
20 }
21 }
22 .listStyle(.insetGrouped)
23 } else if let errorMessage = viewModel.paymentErrorMessage {
24 ContentUnavailableView("Payment Unavailable", systemImage: "exclamationmark.triangle", description: Text(errorMessage))
25 } else {
26 ContentUnavailableView("Payment Unavailable", systemImage: "creditcard", description: Text("No payment details were returned for this transaction."))
27 }
28 }
29 .navigationTitle("Payment")
30 .navigationBarTitleDisplayMode(.inline)
31 .task {
32 await viewModel.loadPayment(id: transactionID, client: client)
33 }
34 }
35
36 private func detailRow(label: String, value: String) -> some View {
37 HStack {
38 Text(label)
39 Spacer()
40 Text(value)
41 .foregroundStyle(.secondary)
42 .multilineTextAlignment(.trailing)
43 }
44 }
45}