Mercurial > public > simoleon
annotate Simoleon/UI/CurrencyList.swift @ 170:f4e0c414cf6d
minor UI changes
author | Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com> |
---|---|
date | Thu, 23 Sep 2021 15:14:48 +0200 |
parents | 1940db1ef321 |
children |
rev | line source |
---|---|
157
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
1 // |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
2 // CurrencyList.swift |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
3 // Simoleon |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
4 // |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
5 // Created by Dennis Concepción Martín on 24/8/21. |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
6 // |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
7 |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
8 import SwiftUI |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
9 |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
10 struct CurrencyList: View { |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
11 var currencies: [String] |
161
3913aff613e8
Fix bug that didn't request API on symbol change
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
160
diff
changeset
|
12 var selection: Selection |
3913aff613e8
Fix bug that didn't request API on symbol change
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
160
diff
changeset
|
13 @ObservedObject var currencyConversion: CurrencyConversion |
157
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
14 @State private var searchCurrency = "" |
161
3913aff613e8
Fix bug that didn't request API on symbol change
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
160
diff
changeset
|
15 |
157
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
16 @Environment(\.presentationMode) private var presentation |
160
0c589138a6f3
Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
157
diff
changeset
|
17 let currencyDetails: [String: CurrencyModel] = try! readJson(from: "Currencies.json") |
157
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
18 |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
19 var searchResults: [String] { |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
20 if searchCurrency.isEmpty { |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
21 return currencies.sorted() |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
22 } else { |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
23 return currencies.filter {$0.contains(searchCurrency.uppercased())} |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
24 } |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
25 } |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
26 |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
27 var body: some View { |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
28 NavigationView { |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
29 List { |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
30 SearchBar(placeholder: "Search...", text: $searchCurrency) |
167
1940db1ef321
Minor changes
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
161
diff
changeset
|
31 .padding(.vertical, 4) |
157
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
32 .accessibilityIdentifier("CurrencySearchBar") |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
33 |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
34 ForEach(searchResults, id: \.self) { symbol in |
161
3913aff613e8
Fix bug that didn't request API on symbol change
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
160
diff
changeset
|
35 Button(action: { |
3913aff613e8
Fix bug that didn't request API on symbol change
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
160
diff
changeset
|
36 if selection == .baseSymbol { |
3913aff613e8
Fix bug that didn't request API on symbol change
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
160
diff
changeset
|
37 currencyConversion.baseSymbol = symbol |
3913aff613e8
Fix bug that didn't request API on symbol change
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
160
diff
changeset
|
38 } else { |
3913aff613e8
Fix bug that didn't request API on symbol change
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
160
diff
changeset
|
39 currencyConversion.quoteSymbol = symbol |
3913aff613e8
Fix bug that didn't request API on symbol change
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
160
diff
changeset
|
40 } |
3913aff613e8
Fix bug that didn't request API on symbol change
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
160
diff
changeset
|
41 |
3913aff613e8
Fix bug that didn't request API on symbol change
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
160
diff
changeset
|
42 presentation.wrappedValue.dismiss() |
3913aff613e8
Fix bug that didn't request API on symbol change
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
160
diff
changeset
|
43 }) { |
157
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
44 let currency = currencyDetails[symbol]! |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
45 CurrencyRow(currency: currency) |
167
1940db1ef321
Minor changes
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
161
diff
changeset
|
46 .padding(.vertical, 4) |
157
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
47 } |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
48 } |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
49 } |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
50 .listStyle() |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
51 .navigationTitle("Currencies") |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
52 .navigationBarTitleDisplayMode(.inline) |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
53 .toolbar { |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
54 ToolbarItem(placement: .cancellationAction) { |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
55 Button(action: { presentation.wrappedValue.dismiss() }) { |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
56 Text("Cancel") |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
57 } |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
58 } |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
59 } |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
60 } |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
61 } |
161
3913aff613e8
Fix bug that didn't request API on symbol change
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
160
diff
changeset
|
62 |
3913aff613e8
Fix bug that didn't request API on symbol change
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
160
diff
changeset
|
63 enum Selection { |
3913aff613e8
Fix bug that didn't request API on symbol change
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
160
diff
changeset
|
64 case baseSymbol, quoteSymbol |
3913aff613e8
Fix bug that didn't request API on symbol change
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
160
diff
changeset
|
65 } |
157
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
66 } |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
67 extension View { |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
68 func listStyle() -> some View { |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
69 self.modifier(ListModifier()) |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
70 } |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
71 } |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
72 |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
73 struct CurrencyList_Previews: PreviewProvider { |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
74 static var previews: some View { |
161
3913aff613e8
Fix bug that didn't request API on symbol change
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
160
diff
changeset
|
75 CurrencyList(currencies: ["USD"], selection: .baseSymbol, currencyConversion: CurrencyConversion()) |
157
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
76 } |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
77 } |