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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }