view LazyBear/UI/Watchlist.swift @ 262:cd902f3f7f33

Implement PriceView in CompanyRow
author Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
date Sat, 13 Mar 2021 15:32:24 +0100
parents 6977df9241a6
children 1836c369cbc4
line wrap: on
line source

//
//  Watchlist.swift
//  LazyBear
//
//  Created by Dennis Concepción Martín on 19/2/21.
//

import SwiftUI
import CoreData

struct Watchlist: View {
    @EnvironmentObject var hudManager: HudManager
    @Environment(\.managedObjectContext) private var moc
    @FetchRequest(entity: Company.entity(), sortDescriptors: []) var companies: FetchedResults<Company>
    
    var body: some View {
        NavigationView {
            List {
                ForEach(companies, id: \.symbol) { company in
                    let index = companies.firstIndex(of: company)
                    let name = company.name
                    let symbol = company.symbol
                    NavigationLink(destination: CompanyView(name: name, symbol: symbol)
                                    .navigationTitle(symbol)
                    ) {
                        CompanyRow(symbol: symbol, name: name, rowNumber: index! % 5, showPrice: true)
                    }
                }
                .onDelete(perform: removeCompany)
            }
            .navigationTitle("Watchlist 👀")
            .toolbar {
                ToolbarItem(placement: .navigationBarTrailing) {
                    EditButton()
                }
            }
        }
        .navigationViewStyle(StackNavigationViewStyle())
    }
    
    private func removeCompany(at offsets: IndexSet) {
        for index in offsets {
            let company = companies[index]
            moc.delete(company)
        }
        do {
            try moc.save()
        } catch {
            // Error
        }
    }
}

struct Watchlist_Previews: PreviewProvider {
    static var previews: some View {
        Watchlist()
    }
}