Mercurial > public > lazybear
annotate LazyBear/Views/Profile/Helpers/WatchlistCreator.swift @ 450:4b8031e696e8
Change Bazooka to Alamofire
Alamofire is compatible with WatchOS and MacOS
author | Dennis Concepción Martín <dennisconcepcionmartin@gmail.com> |
---|---|
date | Sat, 26 Jun 2021 16:36:53 +0200 |
parents | c78d5b5b3bda |
children |
rev | line source |
---|---|
393
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
1 // |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
2 // WatchlistCreator.swift |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
3 // LazyBear |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
4 // |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
5 // Created by Dennis Concepción Martín on 30/4/21. |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
6 // |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
7 |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
8 import SwiftUI |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
9 |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
10 struct WatchlistCreator: View { |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
11 @ObservedObject var watchlistCreatorClass = WatchlistCreatorClass() |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
12 @State private var showSearchView = false |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
13 @State private var showCancelAlert = false |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
14 @State private var watchlistNameIsEmpty = false |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
15 |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
16 @Environment(\.managedObjectContext) private var moc |
430
c78d5b5b3bda
Minor updates
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
425
diff
changeset
|
17 @Environment(\.presentationMode) private var watchlistCreatorPresentation |
393
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
18 |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
19 var body: some View { |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
20 NavigationView { |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
21 Form { |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
22 Section(header: Text("Watchlist name")) { |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
23 TextField("Technologies, banks", text: $watchlistCreatorClass.name) |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
24 } |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
25 |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
26 Section(header: Text("Companies")) { |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
27 Button("Add companies", action: { showSearchView = true }) |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
28 |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
29 ForEach(watchlistCreatorClass.companies, id: \.self) { company in |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
30 HStack { |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
31 VStack(alignment: .leading) { |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
32 Text(company.symbol!.uppercased()) |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
33 .fontWeight(.semibold) |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
34 |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
35 Text(company.securityName!.capitalized) |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
36 .lineLimit(1) |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
37 } |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
38 |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
39 Spacer() |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
40 Button(action: { remove(company) }, label: { |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
41 Image(systemName: "multiply.circle") |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
42 .imageScale(.large) |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
43 }) |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
44 } |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
45 } |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
46 } |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
47 } |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
48 .navigationTitle("New watchlist") |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
49 .navigationBarTitleDisplayMode(.inline) |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
50 .toolbar { |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
51 ToolbarItem(placement: .navigationBarTrailing) { |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
52 Button("Done", action: { save() }) |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
53 } |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
54 |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
55 ToolbarItem(placement: .navigationBarLeading) { |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
56 Button("Cancel", action: { self.showCancelAlert = true }) |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
57 } |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
58 } |
417
5f21f7c23c5e
Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
393
diff
changeset
|
59 .alert(isPresented: $showCancelAlert) { /// Show alert when the user tries to exit the view without saving the new watchlist |
393
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
60 Alert( |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
61 title: Text("Your watchlist won't be saved"), |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
62 message: Text("This action can't be undo"), |
430
c78d5b5b3bda
Minor updates
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
425
diff
changeset
|
63 primaryButton: .destructive(Text("Exit")) { watchlistCreatorPresentation.wrappedValue.dismiss() }, |
393
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
64 secondaryButton: .cancel() |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
65 ) |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
66 } |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
67 } |
417
5f21f7c23c5e
Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
393
diff
changeset
|
68 .alert(isPresented: $watchlistNameIsEmpty) { /// Show alert when the user tries to save the watchlist without a name |
393
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
69 Alert( |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
70 title: Text("Give a name to your new watchlist"), |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
71 message: Text("Try My portfolio, Favourites, ..."), |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
72 dismissButton: .default(Text("Got it!")) |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
73 ) |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
74 } |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
75 .sheet(isPresented: $showSearchView) { |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
76 WatchlistCreatorList(watchlistCreatorClass: watchlistCreatorClass) |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
77 .environment(\.managedObjectContext, self.moc) |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
78 } |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
79 } |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
80 |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
81 /* |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
82 Search company in array and get the index -> Delete company at |
417
5f21f7c23c5e
Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
393
diff
changeset
|
83 this index from the array (Core Data) |
393
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
84 */ |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
85 private func remove(_ company: SearchResponse) { |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
86 let index = watchlistCreatorClass.companies.firstIndex(of: company) |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
87 watchlistCreatorClass.companies.remove(at: index!) |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
88 } |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
89 |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
90 /* |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
91 Check if the watchlist name is empty when the user taps the Done button. |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
92 If it's not empty -> Save watchlist to Core Data |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
93 */ |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
94 private func save() { |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
95 if watchlistCreatorClass.name.isEmpty { |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
96 watchlistNameIsEmpty = true |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
97 } else { |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
98 for company in watchlistCreatorClass.companies { |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
99 let watchlistCompany = WatchlistCompany(context: moc) |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
100 watchlistCompany.name = company.securityName ?? "-" |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
101 watchlistCompany.symbol = company.symbol! |
425
4effac4733b0
Changing keys from API responses
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
417
diff
changeset
|
102 watchlistCompany.watchlistName = watchlistCreatorClass.name |
393
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
103 } |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
104 |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
105 do { |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
106 try moc.save() |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
107 print("Watchlist created") |
430
c78d5b5b3bda
Minor updates
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
425
diff
changeset
|
108 watchlistCreatorPresentation.wrappedValue.dismiss() // Dismiss view |
393
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
109 } catch { |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
110 print(error.localizedDescription) |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
111 } |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
112 } |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
113 } |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
114 } |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
115 |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
116 struct CreateNewWatchlist_Previews: PreviewProvider { |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
117 static var previews: some View { |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
118 WatchlistCreator() |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
119 } |
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
120 } |