annotate Simoleon/Conversion.swift @ 129:1fd9e27df5be

Add accessibilityIdentifier
author Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
date Mon, 16 Aug 2021 18:22:16 +0100
parents cd801949925b
children 6eac99e99b96
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
19
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
1 //
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
2 // Conversion.swift
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
3 // Simoleon
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
4 //
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
5 // Created by Dennis Concepción Martín on 18/07/2021.
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
6 //
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
7
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
8 import SwiftUI
42
d25b02d439d4 Minor updates subscription and legal requirements
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 35
diff changeset
9 import Purchases
19
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
10
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
11 struct Conversion: View {
43
2eb05f396fcd Fixes NavigationView bugs
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 42
diff changeset
12 var showNavigationView: Bool?
50
7a6a7c677851 Handle errors with alerts
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 47
diff changeset
13
24
bda6a55d027a Add Conversion to Favourites
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 23
diff changeset
14 @State var currencyPair: String
120
cd801949925b Remove 1000 from default currency conversion
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 118
diff changeset
15 @State private var amountToConvert = ""
19
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
16 @State private var price: Double = 1.00
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
17 @State private var showingConversion = false
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
18 @State private var showingCurrencySelector = false
42
d25b02d439d4 Minor updates subscription and legal requirements
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 35
diff changeset
19 @State private var amountIsEditing = false
28
4f862c618b44 Implemented RevenueCat
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 27
diff changeset
20
19
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
21 let currencyMetadata: [String: CurrencyMetadataModel] = parseJson("CurrencyMetadata.json")
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
22
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
23 var body: some View {
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
24 ScrollView(showsIndicators: false) {
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
25 VStack(alignment: .leading) {
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
26 HStack {
21
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 19
diff changeset
27 Button(action: { showingCurrencySelector = true }) {
27
d95582268b44 Fix bug CoreData and minor UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 25
diff changeset
28 RoundedRectangle(cornerRadius: 15)
21
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 19
diff changeset
29 .foregroundColor(Color(.secondarySystemBackground))
27
d95582268b44 Fix bug CoreData and minor UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 25
diff changeset
30 .frame(height: 60)
42
d25b02d439d4 Minor updates subscription and legal requirements
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 35
diff changeset
31 .overlay(
75
b6f8661300f2 Added isLocked to CurrencyPairs
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 68
diff changeset
32 CurrencyRow(currencyPairName: currencyPair)
42
d25b02d439d4 Minor updates subscription and legal requirements
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 35
diff changeset
33 .padding(.horizontal)
d25b02d439d4 Minor updates subscription and legal requirements
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 35
diff changeset
34 )
19
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
35 }
129
1fd9e27df5be Add accessibilityIdentifier
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 120
diff changeset
36 .accessibilityIdentifier("OpenCurrencySelector")
19
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
37
53
b0bce2c8e4a9 Refactor UK spelling to US
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 50
diff changeset
38 FavoriteButton(currencyPair: currencyPair)
19
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
39 }
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
40
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
41 ConversionBox(
21
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 19
diff changeset
42 currencyPair: $currencyPair,
19
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
43 amountToConvert: $amountToConvert,
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
44 price: $price,
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
45 showingConversion: $showingConversion,
42
d25b02d439d4 Minor updates subscription and legal requirements
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 35
diff changeset
46 amountIsEditing: $amountIsEditing
19
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
47 )
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
48 }
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
49 .padding()
68
aa451ca55e48 Fixes minor bugs
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 53
diff changeset
50 .sheet(isPresented: $showingCurrencySelector, onDismiss: request) {
21
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 19
diff changeset
51 CurrencySelector(currencyPair: $currencyPair, showingCurrencySelector: $showingCurrencySelector)
19
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
52 }
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
53 }
42
d25b02d439d4 Minor updates subscription and legal requirements
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 35
diff changeset
54 .onAppear(perform: request)
53
b0bce2c8e4a9 Refactor UK spelling to US
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 50
diff changeset
55 .navigationTitle("Convert")
22
3596690dda73 Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 21
diff changeset
56 .toolbar {
43
2eb05f396fcd Fixes NavigationView bugs
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 42
diff changeset
57 ToolbarItem(placement: .navigationBarTrailing) {
42
d25b02d439d4 Minor updates subscription and legal requirements
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 35
diff changeset
58 if amountIsEditing {
29
c52966834f83 Add localised strings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 28
diff changeset
59 Button(action: {
22
3596690dda73 Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 21
diff changeset
60 UIApplication.shared.dismissKeyboard()
42
d25b02d439d4 Minor updates subscription and legal requirements
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 35
diff changeset
61 amountIsEditing = false
29
c52966834f83 Add localised strings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 28
diff changeset
62 }) {
118
1b5f38ecb870 Change Cancel to Done
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 75
diff changeset
63 Text("Done")
29
c52966834f83 Add localised strings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 28
diff changeset
64 }
22
3596690dda73 Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 21
diff changeset
65 }
3596690dda73 Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 21
diff changeset
66 }
3596690dda73 Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 21
diff changeset
67 }
43
2eb05f396fcd Fixes NavigationView bugs
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 42
diff changeset
68 .if(UIDevice.current.userInterfaceIdiom == .phone && showNavigationView ?? true) { content in
22
3596690dda73 Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 21
diff changeset
69 NavigationView { content }
21
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 19
diff changeset
70 }
19
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
71 }
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
72
42
d25b02d439d4 Minor updates subscription and legal requirements
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 35
diff changeset
73 private func request() {
68
aa451ca55e48 Fixes minor bugs
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 53
diff changeset
74 showingConversion = false
22
3596690dda73 Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 21
diff changeset
75 let url = "\(readConfig("API_URL")!)quotes?pairs=\(currencyPair)&api_key=\(readConfig("API_KEY")!)"
68
aa451ca55e48 Fixes minor bugs
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 53
diff changeset
76 networkRequest(url: url, model: [CurrencyQuoteModel].self) { response in
22
3596690dda73 Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 21
diff changeset
77 if let price = response.first?.price {
3596690dda73 Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 21
diff changeset
78 self.price = price
47
75c1a05176f6 Refactor code
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 43
diff changeset
79 showingConversion = true
19
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
80 } else {
22
3596690dda73 Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 21
diff changeset
81 // Handle error
19
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
82 }
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
83 }
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
84 }
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
85 }
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
86
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
87
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
88 struct Conversion_Previews: PreviewProvider {
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
89 static var previews: some View {
42
d25b02d439d4 Minor updates subscription and legal requirements
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 35
diff changeset
90 Conversion(currencyPair: "USD/GBP")
19
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
91 }
94fd7ac93060 Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
92 }