taler-ios

iOS apps for GNU Taler (wallet)
Log | Files | Refs | README | LICENSE

OIMp2pReadyView.swift (2073B)


      1 /*
      2  * This file is part of GNU Taler, ©2022-25 Taler Systems S.A.
      3  * See LICENSE.md
      4  */
      5 /**
      6  * @author Marc Stibane
      7  */
      8 import SwiftUI
      9 import taler_swift
     10 
     11 // MARK: -
     12 @available(iOS 16.4, *)
     13 struct OIMp2pReadyView: View {
     14     let stack: CallStack
     15     @Binding var transactionId: String?
     16     let talerTX: TalerTransaction
     17     let scope: ScopeInfo
     18     let action: () -> Void
     19 
     20     @EnvironmentObject private var wrapper: NamespaceWrapper
     21 
     22     @State private var sending = false              // user tapped on Send
     23     @State private var appeared = false
     24     @State private var qrImage: UIImage? = nil
     25 
     26     var body: some View {
     27 //        let _ = Self._printChanges()
     28 
     29         OIMbackground() {
     30             VStack {
     31                 if let transactionId {
     32                     if talerTX.isPendingReady {
     33                         let details = talerTX.detailsToShow()
     34                         let keys = details.keys
     35                         if keys.contains(TALERURI) {
     36                             if let talerURI = details[TALERURI] {
     37                                 if talerURI.count > 10 {
     38                                     Group {
     39                                         Spacer()
     40                                         let size = 240.0
     41                                         QRGeneratorView(text: talerURI, size: size, image: $qrImage)
     42                                             .frame(maxWidth: .infinity, alignment: .center)
     43                                             .accessibilityLabel(Text("QR Code", comment: "a11y"))
     44                                         Spacer()
     45                                     }
     46                                 }
     47                             }
     48                         }
     49                     }
     50                 } else {
     51                     LoadingView(stack: stack.push(),
     52                             scopeInfo: scope,
     53                               message: nil)
     54                 }
     55             }
     56 //              .border(.red)
     57         }.task {
     58             withAnimation(.basic1) {
     59                 appeared = true
     60             }
     61         }
     62     }
     63 }