summaryrefslogtreecommitdiff
path: root/Rune/Views/Settings/WalletPaymentDetailView.swift
blob: f5ef605082c6d752fe4e6aad39b0742704c4e00b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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)
        }
    }
}