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 }