Mercurial > public > lazybear
annotate LazyBear/Views/Profile/Helpers/WatchlistSheet.swift @ 453:37c13ebda381
Improve hierarchy and minor bugs fixed
author | Dennis Concepción Martín <dennisconcepcionmartin@gmail.com> |
---|---|
date | Sun, 27 Jun 2021 14:18:29 +0200 |
parents | ffbb1dbab531 |
children |
rev | line source |
---|---|
427
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
1 // |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
2 // WatchlistSheet.swift |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
3 // LazyBear |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
4 // |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
5 // Created by Dennis Concepción Martín on 16/6/21. |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
6 // |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
7 |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
8 import SwiftUI |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
9 |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
10 struct WatchlistSheet: View { |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
11 var listName: String |
428
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
12 var apiCompanies: [CompanyModel] |
453
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
13 |
427
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
14 @Environment(\.managedObjectContext) private var moc |
428
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
15 @FetchRequest(entity: WatchlistCompany.entity(), sortDescriptors: []) |
427
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
16 var watchlistCompanies: FetchedResults<WatchlistCompany> |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
17 |
428
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
18 @State private var showDeleteListAlert = false |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
19 |
427
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
20 var body: some View { |
453
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
21 VStack { |
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
22 List { |
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
23 ForEach(watchlistCompanies.filter { $0.watchlistName == listName }, id: \.self) { watchlistCompany in |
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
24 let apiCompany = apiCompanies.first(where: { $0.symbol == watchlistCompany.symbol }) |
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
25 WatchlistSheetRow(apiCompany: apiCompany!, watchlistCompany: watchlistCompany) |
427
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
26 } |
453
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
27 .onDelete(perform: deleteCompany) |
427
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
28 } |
453
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
29 } |
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
30 .navigationTitle(listName) |
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
31 .toolbar { |
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
32 ToolbarItem(placement: .navigationBarLeading) { |
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
33 // Button(action: { willRenameWatchlist = false; watchlistSheetPresentation.wrappedValue.dismiss()} ) { |
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
34 // Image(systemName: "multiply") |
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
35 // } |
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
36 } |
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
37 |
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
38 ToolbarItem(placement: .navigationBarTrailing) { |
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
39 Menu { |
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
40 Section { |
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
41 // Button(action: { willRenameWatchlist = true; watchlistSheetPresentation.wrappedValue.dismiss() }) { |
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
42 // Label("Rename list", systemImage: "square.and.pencil") |
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
43 // } |
427
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
44 } |
453
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
45 |
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
46 if Set(watchlistCompanies.map { $0.watchlistName }).count > 1 { /// If there are only 1 watchlist (default) -> It cannot be deleted |
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
47 Section(header: Text("Secondary actions")) { |
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
48 Button(action: { showDeleteListAlert = true }) { |
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
49 Label("Delete list", systemImage: "trash") |
432
3ca32ff79630
Fixes RenameSheetList bug
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
430
diff
changeset
|
50 } |
3ca32ff79630
Fixes RenameSheetList bug
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
430
diff
changeset
|
51 } |
3ca32ff79630
Fixes RenameSheetList bug
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
430
diff
changeset
|
52 } |
453
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
53 } |
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
54 label: { |
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
55 Label("Options", systemImage: "ellipsis.circle") |
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
56 .imageScale(.large) |
428
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
57 } |
427
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
58 } |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
59 } |
428
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
60 .alert(isPresented: $showDeleteListAlert) { /// Show delete list alert |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
61 Alert( |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
62 title: Text("Are you sure you want to delete this list?"), |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
63 message: Text("This action can't be undo"), |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
64 primaryButton: .destructive(Text("Delete")) { deleteList() }, |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
65 secondaryButton: .cancel() |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
66 ) |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
67 } |
427
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
68 } |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
69 |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
70 /* |
428
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
71 Delete company from watchlist. |
427
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
72 */ |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
73 private func deleteCompany(at offsets: IndexSet) { |
428
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
74 let watchlistCompaniesFiltered = watchlistCompanies.filter { $0.watchlistName == listName } |
427
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
75 for index in offsets { |
428
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
76 let company = watchlistCompaniesFiltered[index] |
427
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
77 moc.delete(company) |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
78 } |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
79 do { |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
80 try moc.save() |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
81 print("Company deleted") |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
82 } catch { |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
83 print(error.localizedDescription) |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
84 } |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
85 } |
428
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
86 |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
87 /* |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
88 Remove entire list if it's not the last one. |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
89 */ |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
90 private func deleteList() { |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
91 let watchlistCompaniesFiltered = watchlistCompanies.filter { $0.watchlistName == listName } |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
92 for company in watchlistCompaniesFiltered { |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
93 moc.delete(company) |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
94 } |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
95 do { |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
96 try moc.save() |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
97 print("List deleted") |
453
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
98 // watchlistSheetPresentation.wrappedValue.dismiss() /// Dismiss view |
428
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
99 } catch { |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
100 print(error.localizedDescription) |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
101 } |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
102 } |
427
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
103 } |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
104 |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
105 struct WatchlistSheet_Previews: PreviewProvider { |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
106 static var previews: some View { |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
107 WatchlistSheet( |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
108 listName: "Most active", |
453
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
443
diff
changeset
|
109 apiCompanies: [CompanyModel(symbol: "aapl", companyName: "Apple Inc", latestPrice: 120.3, changePercent: 0.03, intradayPrices: [120.3])] |
427
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
110 ) |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
111 } |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
112 } |