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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }