annotate Simoleon/Helpers/CurrencyList.swift @ 187:13d5a8deb6c2

add AboutView and FavoritesView
author Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
date Thu, 23 Dec 2021 16:12:22 +0100
parents 1ebd1c5dd302
children
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
186
1ebd1c5dd302 finish ConversionView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 185
diff changeset
22 Button(action: { select(currency: currency) }) {
1ebd1c5dd302 finish ConversionView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 185
diff changeset
23 CurrencyRow(currency: currency)
1ebd1c5dd302 finish ConversionView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 185
diff changeset
24 }
183
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
25 }
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
26 }
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
27 .navigationTitle("Currencies")
185
2fc95efcb1ee connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 183
diff changeset
28 .toolbar {
2fc95efcb1ee connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 183
diff changeset
29 ToolbarItem(placement: .destructiveAction) {
2fc95efcb1ee connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 183
diff changeset
30 Button(action: { dismiss() }) {
2fc95efcb1ee connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 183
diff changeset
31 Image(systemName: "multiply.circle.fill")
2fc95efcb1ee connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 183
diff changeset
32 }
2fc95efcb1ee connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 183
diff changeset
33 }
2fc95efcb1ee connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 183
diff changeset
34 }
183
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
35 }
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
36 }
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
37
185
2fc95efcb1ee connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 183
diff changeset
38 // Get compatible currencies given currency code
183
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
39 func getCurrencies() -> [SupportedCurrencyResult] {
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
40 let pairs: SupportedPairResponse = readJson(from: "SupportedCurrencies.json")
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
41 let currencies: SupportedCurrencyResponse = readJson(from: "SupportedCurrencies.json")
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
42 var supportedCurrencies = [SupportedCurrencyResult]()
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
43
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
44 if selecting == .baseCurrency {
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
45 // Get base currencies compatible with quote currency
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
46 let currencyPair = pairs.pairs.filter { $0.toCurrency == quoteCurrency.code }
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
47 for currencyPair in currencyPair {
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
48 let currency = currencies.currencies.filter { $0.code == currencyPair.fromCurrency }
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
49 supportedCurrencies.append(contentsOf: currency)
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
50 }
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
51 } else {
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
52 // Get quote currencies compatible with base currencies
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
53 let currencyPair = pairs.pairs.filter { $0.fromCurrency == baseCurrency.code }
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
54 for currencyPair in currencyPair {
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
55 let currency = currencies.currencies.filter { $0.code == currencyPair.toCurrency }
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
56 supportedCurrencies.append(contentsOf: currency)
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
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 return supportedCurrencies
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
62 }
186
1ebd1c5dd302 finish ConversionView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 185
diff changeset
63
1ebd1c5dd302 finish ConversionView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 185
diff changeset
64 // Select currency
1ebd1c5dd302 finish ConversionView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 185
diff changeset
65 private func select(currency: SupportedCurrencyResult) {
1ebd1c5dd302 finish ConversionView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 185
diff changeset
66 if selecting == .baseCurrency {
1ebd1c5dd302 finish ConversionView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 185
diff changeset
67 baseCurrency = currency
1ebd1c5dd302 finish ConversionView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 185
diff changeset
68 } else {
1ebd1c5dd302 finish ConversionView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 185
diff changeset
69 quoteCurrency = currency
1ebd1c5dd302 finish ConversionView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 185
diff changeset
70 }
1ebd1c5dd302 finish ConversionView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 185
diff changeset
71
1ebd1c5dd302 finish ConversionView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 185
diff changeset
72 dismiss()
1ebd1c5dd302 finish ConversionView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 185
diff changeset
73 }
183
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
74 }
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
75
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
76 struct CurrencyList_Previews: PreviewProvider {
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
77 static var previews: some View {
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
78 CurrencyList(
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
79 baseCurrency: .constant(SupportedCurrencyResult(code: "EUR", name: "Euro", isCrypto: 0)),
187
13d5a8deb6c2 add AboutView and FavoritesView
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 186
diff changeset
80 quoteCurrency: .constant(SupportedCurrencyResult(code: "USD", name: "U.S. Dollar", isCrypto: 0)),
183
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
81 selecting: .baseCurrency
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
82 )
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
83 }
d2398f02e1ce implement unit currency selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
84 }