view LazyBear/Watchlist.swift @ 471:f6bb6fde1ff7 default tip

Move to mercurial
author Dennis C. M. <dennis@denniscm.com>
date Tue, 03 Jun 2025 15:05:50 +0100
parents 6953d83060a4
children
line wrap: on
line source

//
//  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)
    }
}