Mercurial > public > simoleon
annotate Simoleon/Conversion.swift @ 140:fd19def1ce3f
Fix alignment problem in Russian
author | Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com> |
---|---|
date | Mon, 16 Aug 2021 21:19:56 +0100 |
parents | 1fd9e27df5be |
children | 6eac99e99b96 |
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 } |