Mercurial > public > lazybear
diff LazyBear/Views/Profile/Helpers/WatchlistSheet.swift @ 427:e707dbfc3115
Fixing weird animation .onDelete
author | Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com> |
---|---|
date | Wed, 16 Jun 2021 13:46:40 +0200 |
parents | |
children | 8c58ce834d95 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LazyBear/Views/Profile/Helpers/WatchlistSheet.swift Wed Jun 16 13:46:40 2021 +0200 @@ -0,0 +1,70 @@ +// +// WatchlistSheet.swift +// LazyBear +// +// Created by Dennis Concepción Martín on 16/6/21. +// + +import SwiftUI + +struct WatchlistSheet: View { + var listName: String + var companies: [CompanyModel] + + @Environment(\.presentationMode) private var watchlistSheetPresentation + @Environment(\.managedObjectContext) private var moc + @FetchRequest(entity: WatchlistCompany.entity(), sortDescriptors: [NSSortDescriptor(key:"symbol", ascending:true)]) + var watchlistCompanies: FetchedResults<WatchlistCompany> + + /* + NSSortDescriptor and .sorted(by: {} in ForEach must coincide. If not .onDelete is not working well. + */ + var body: some View { + NavigationView { + VStack { + List { + ForEach(companies.sorted(by: { $0.companyName < $1.companyName }), id: \.self) { company in + StockSheetRow(company: company) + } + .onDelete(perform: deleteCompany) + } + } + .navigationTitle(listName) + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .navigationBarLeading) { + Button(action: {watchlistSheetPresentation.wrappedValue.dismiss()}) { + Image(systemName: "multiply") + } + } + } + } + } + + /* + Delete company from watchlist + */ + private func deleteCompany(at offsets: IndexSet) { + print(watchlistCompanies) + for index in offsets { + print(index) + let company = watchlistCompanies[index] + moc.delete(company) + } + do { + try moc.save() + print("Company deleted") + } catch { + print(error.localizedDescription) + } + } +} + +struct WatchlistSheet_Previews: PreviewProvider { + static var previews: some View { + WatchlistSheet( + listName: "Most active", + companies: [CompanyModel(symbol: "aapl", companyName: "Apple Inc", latestPrice: 120.3, changePercent: 0.03, intradayPrices: [120.3])] + ) + } +}