damus

nostr ios client
git clone git://jb55.com/damus
Log | Files | Refs | README | LICENSE

NWCScannerView.swift (1980B)


      1 //
      2 //  QRScannerView.swift
      3 //  damus
      4 //
      5 //  Created by William Casarin on 2023-05-09.
      6 //
      7 
      8 import SwiftUI
      9 import CodeScanner
     10 
     11 enum WalletScanResult: Equatable {
     12     static func == (lhs: WalletScanResult, rhs: WalletScanResult) -> Bool {
     13         switch lhs {
     14         case .success(let a):
     15             switch rhs {
     16             case .success(let b):
     17                 return a == b
     18             case .failed:
     19                 return false
     20             case .scanning:
     21                 return false
     22             }
     23         case .failed:
     24             switch rhs {
     25             case .success:
     26                 return false
     27             case .failed:
     28                 return true
     29             case .scanning:
     30                 return false
     31             }
     32         case .scanning:
     33             switch rhs {
     34             case .success:
     35                 return false
     36             case .failed:
     37                 return false
     38             case .scanning:
     39                 return true
     40             }
     41         }
     42     }
     43     
     44     case success(WalletConnectURL)
     45     case failed
     46     case scanning
     47 }
     48 
     49 struct WalletScannerView: View {
     50     @Binding var result: WalletScanResult
     51     
     52     @Environment(\.dismiss) var dismiss
     53     
     54     var body: some View {
     55         VStack {
     56             CodeScannerView(codeTypes: [.qr]) { res in
     57                 switch res {
     58                 case .success(let success):
     59                     guard let url = WalletConnectURL(str: success.string) else {
     60                         result = .failed
     61                         dismiss()
     62                         return
     63                     }
     64                     
     65                     result = .success(url)
     66                 case .failure:
     67                     result = .failed
     68                 }
     69                 
     70                 dismiss()
     71             }
     72         }
     73     }
     74 }
     75 
     76 struct QRScannerView_Previews: PreviewProvider {
     77     @State static var result: WalletScanResult = .scanning
     78     static var previews: some View {
     79         WalletScannerView(result: $result)
     80     }
     81 }