Mercurial > public > lazybear
annotate LazyBear/Views/Profile/Helpers/WatchlistSheet.swift @ 432:3ca32ff79630
Fixes RenameSheetList bug
author | Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com> |
---|---|
date | Sat, 19 Jun 2021 20:13:25 +0200 |
parents | c78d5b5b3bda |
children | ffbb1dbab531 |
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] |
432
3ca32ff79630
Fixes RenameSheetList bug
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
430
diff
changeset
|
13 @Binding var willRenameWatchlist: Bool |
427
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
14 |
430
c78d5b5b3bda
Minor updates
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
428
diff
changeset
|
15 @Environment(\.presentationMode) private var watchlistSheetPresentation |
427
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
16 @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
|
17 @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
|
18 var watchlistCompanies: FetchedResults<WatchlistCompany> |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
19 |
428
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
20 @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
|
21 |
427
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
22 var body: some View { |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
23 NavigationView { |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
24 VStack { |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
25 List { |
428
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
26 ForEach(watchlistCompanies.filter { $0.watchlistName == listName }, id: \.self) { watchlistCompany in |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
27 let apiCompany = apiCompanies.first(where: { $0.symbol == watchlistCompany.symbol }) |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
28 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
|
29 } |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
30 .onDelete(perform: deleteCompany) |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
31 } |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
32 } |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
33 .navigationTitle(listName) |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
34 .navigationBarTitleDisplayMode(.inline) |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
35 .toolbar { |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
36 ToolbarItem(placement: .navigationBarLeading) { |
432
3ca32ff79630
Fixes RenameSheetList bug
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
430
diff
changeset
|
37 Button(action: { willRenameWatchlist = false; watchlistSheetPresentation.wrappedValue.dismiss()} ) { |
427
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
38 Image(systemName: "multiply") |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
39 } |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
40 } |
428
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
41 |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
42 ToolbarItem(placement: .navigationBarTrailing) { |
432
3ca32ff79630
Fixes RenameSheetList bug
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
430
diff
changeset
|
43 Menu { |
3ca32ff79630
Fixes RenameSheetList bug
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
430
diff
changeset
|
44 Section { |
3ca32ff79630
Fixes RenameSheetList bug
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
430
diff
changeset
|
45 Button(action: { willRenameWatchlist = true; watchlistSheetPresentation.wrappedValue.dismiss() }) { |
3ca32ff79630
Fixes RenameSheetList bug
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
430
diff
changeset
|
46 Label("Rename list", systemImage: "square.and.pencil") |
3ca32ff79630
Fixes RenameSheetList bug
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
430
diff
changeset
|
47 } |
3ca32ff79630
Fixes RenameSheetList bug
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
430
diff
changeset
|
48 } |
3ca32ff79630
Fixes RenameSheetList bug
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
430
diff
changeset
|
49 |
3ca32ff79630
Fixes RenameSheetList bug
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
430
diff
changeset
|
50 if Set(watchlistCompanies.map { $0.watchlistName }).count > 1 { /// If there are only 1 watchlist (default) -> It cannot be deleted |
3ca32ff79630
Fixes RenameSheetList bug
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
430
diff
changeset
|
51 Section(header: Text("Secondary actions")) { |
3ca32ff79630
Fixes RenameSheetList bug
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
430
diff
changeset
|
52 Button(action: { showDeleteListAlert = true }) { |
3ca32ff79630
Fixes RenameSheetList bug
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
430
diff
changeset
|
53 Label("Delete list", systemImage: "trash") |
3ca32ff79630
Fixes RenameSheetList bug
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
430
diff
changeset
|
54 } |
3ca32ff79630
Fixes RenameSheetList bug
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
430
diff
changeset
|
55 } |
3ca32ff79630
Fixes RenameSheetList bug
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
430
diff
changeset
|
56 } |
3ca32ff79630
Fixes RenameSheetList bug
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
430
diff
changeset
|
57 } |
3ca32ff79630
Fixes RenameSheetList bug
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
430
diff
changeset
|
58 label: { |
3ca32ff79630
Fixes RenameSheetList bug
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
430
diff
changeset
|
59 Label("Options", systemImage: "ellipsis.circle") |
3ca32ff79630
Fixes RenameSheetList bug
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
430
diff
changeset
|
60 .imageScale(.large) |
3ca32ff79630
Fixes RenameSheetList bug
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
430
diff
changeset
|
61 } |
428
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
62 } |
427
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
63 } |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
64 } |
428
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
65 .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
|
66 Alert( |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
67 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
|
68 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
|
69 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
|
70 secondaryButton: .cancel() |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
71 ) |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
72 } |
427
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
73 } |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
74 |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
75 /* |
428
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
76 Delete company from watchlist. |
427
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
77 */ |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
78 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
|
79 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
|
80 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
|
81 let company = watchlistCompaniesFiltered[index] |
427
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
82 moc.delete(company) |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
83 } |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
84 do { |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
85 try moc.save() |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
86 print("Company deleted") |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
87 } catch { |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
88 print(error.localizedDescription) |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
89 } |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
90 } |
428
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
91 |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
92 /* |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
93 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
|
94 */ |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
95 private func deleteList() { |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
96 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
|
97 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
|
98 moc.delete(company) |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
99 } |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
100 do { |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
101 try moc.save() |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
102 print("List deleted") |
430
c78d5b5b3bda
Minor updates
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
428
diff
changeset
|
103 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
|
104 } catch { |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
105 print(error.localizedDescription) |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
106 } |
8c58ce834d95
Bug fixes and change assets
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
427
diff
changeset
|
107 } |
427
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
108 } |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
109 |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
110 struct WatchlistSheet_Previews: PreviewProvider { |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
111 static var previews: some View { |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
112 WatchlistSheet( |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
113 listName: "Most active", |
432
3ca32ff79630
Fixes RenameSheetList bug
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
430
diff
changeset
|
114 apiCompanies: [CompanyModel(symbol: "aapl", companyName: "Apple Inc", latestPrice: 120.3, changePercent: 0.03, intradayPrices: [120.3])], |
3ca32ff79630
Fixes RenameSheetList bug
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
430
diff
changeset
|
115 willRenameWatchlist: .constant(false) |
427
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
116 ) |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
117 } |
e707dbfc3115
Fixing weird animation .onDelete
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
118 } |