Mercurial > public > lazybear
diff LazyBear/Watchlist.swift @ 465:6953d83060a4
New design
author | Dennis Concepción Martín <dennisconcepcionmartin@gmail.com> |
---|---|
date | Sat, 17 Jul 2021 17:58:57 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LazyBear/Watchlist.swift Sat Jul 17 17:58:57 2021 +0100 @@ -0,0 +1,57 @@ +// +// Watchlist.swift +// lazybear +// +// Created by Dennis Concepción Martín on 17/07/2021. +// + +import SwiftUI +import CoreData + +struct Watchlist: View { + @Environment(\.managedObjectContext) private var viewContext + @FetchRequest( + sortDescriptors: [NSSortDescriptor(keyPath: \Company.symbol, ascending: true)], + animation: .default) + private var companies: FetchedResults<Company> + + var body: some View { + List { + ForEach(companies) { company in + NavigationLink(destination: CompanyView(symbol: company.symbol)) { + WatchlistRow(symbol: company.symbol) + } + } + .onDelete(perform: deleteCompanyFromWatchlist) + } + .navigationTitle("Companies") + .toolbar { + #if os(iOS) + EditButton() + #endif + } + .if(UIDevice.current.userInterfaceIdiom == .phone) { content in + NavigationView { content } + } + } + + private func deleteCompanyFromWatchlist(offsets: IndexSet) { + withAnimation { + offsets.map { companies[$0] }.forEach(viewContext.delete) + + do { + try viewContext.save() + } catch { + let nsError = error as NSError + fatalError("Unresolved error \(nsError), \(nsError.userInfo)") + } + } + } +} + +struct Watchlist_Previews: PreviewProvider { + static var previews: some View { + Watchlist() + .environment(\.managedObjectContext, PersistenceController.preview.container.viewContext) + } +}