annotate Simoleon/Helpers/CurrencyList.swift @ 185:2fc95efcb1ee

connect backend
author Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
date Wed, 22 Dec 2021 16:12:23 +0100
parents d2398f02e1ce
children 1ebd1c5dd302
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
183
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
1 //
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
2 // CurrencyList.swift
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
3 // Simoleon
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
4 //
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
5 // Created by Dennis Concepción Martín on 20/12/21.
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
6 //
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
7
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
8 import SwiftUI
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
9
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
10
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
11 struct CurrencyList: View {
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
12 @Binding var baseCurrency: SupportedCurrencyResult
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
13 @Binding var quoteCurrency: SupportedCurrencyResult
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
14 var selecting: Selection
185
2fc95efcb1ee connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 183
diff changeset
15 @Environment(\.dismiss) var dismiss
183
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
16
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
17 var body: some View {
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
18 NavigationView {
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
19 List {
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
20 let currencies = getCurrencies()
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
21 ForEach(currencies, id: \.self) { currency in
185
2fc95efcb1ee connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 183
diff changeset
22 CurrencyRow(currency: currency)
183
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
23 }
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
24 }
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
25 .navigationTitle("Currencies")
185
2fc95efcb1ee connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 183
diff changeset
26 .toolbar {
2fc95efcb1ee connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 183
diff changeset
27 ToolbarItem(placement: .destructiveAction) {
2fc95efcb1ee connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 183
diff changeset
28 Button(action: { dismiss() }) {
2fc95efcb1ee connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 183
diff changeset
29 Image(systemName: "multiply.circle.fill")
2fc95efcb1ee connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 183
diff changeset
30 }
2fc95efcb1ee connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 183
diff changeset
31 }
2fc95efcb1ee connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 183
diff changeset
32 }
183
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
33 }
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
34 }
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
35
185
2fc95efcb1ee connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 183
diff changeset
36 // Get compatible currencies given currency code
183
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
37 func getCurrencies() -> [SupportedCurrencyResult] {
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
38 let pairs: SupportedPairResponse = readJson(from: "SupportedCurrencies.json")
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
39 let currencies: SupportedCurrencyResponse = readJson(from: "SupportedCurrencies.json")
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
40 var supportedCurrencies = [SupportedCurrencyResult]()
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
41
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
42 if selecting == .baseCurrency {
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
43 // Get base currencies compatible with quote currency
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
44 let currencyPair = pairs.pairs.filter { $0.toCurrency == quoteCurrency.code }
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
45 for currencyPair in currencyPair {
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
46 let currency = currencies.currencies.filter { $0.code == currencyPair.fromCurrency }
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
47 supportedCurrencies.append(contentsOf: currency)
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
48 }
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
49 } else {
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
50 // Get quote currencies compatible with base currencies
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
51 let currencyPair = pairs.pairs.filter { $0.fromCurrency == baseCurrency.code }
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
52 for currencyPair in currencyPair {
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
53 let currency = currencies.currencies.filter { $0.code == currencyPair.toCurrency }
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
54 supportedCurrencies.append(contentsOf: currency)
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
55 }
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
56 }
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
57
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
58
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
59 return supportedCurrencies
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
60 }
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
61 }
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
62
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
63 struct CurrencyList_Previews: PreviewProvider {
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
64 static var previews: some View {
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
65 CurrencyList(
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
66 baseCurrency: .constant(SupportedCurrencyResult(code: "EUR", name: "Euro", isCrypto: 0)),
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
67 quoteCurrency: .constant(SupportedCurrencyResult(code: "CHF", name: "Swiss Franc", isCrypto: 0)),
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
68 selecting: .baseCurrency
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
69 )
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
70 }
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
71 }