view LazyBear/Helpers/WatchlistRow.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 source

//
//  WatchlistRow.swift
//  lazybear
//
//  Created by Dennis Concepción Martín on 17/07/2021.
//

import SwiftUI
import Alamofire

struct WatchlistRow: View {
    var symbol: String
    @State private var companyQuote = CompanyQuoteModel()
    @State private var showingRow  = false
    
    var body: some View {
        HStack {
            if showingRow {
                VStack(alignment: .leading) {
                    Text("\(symbol)")
                        .font(.headline)
                    
                    Text("\(companyQuote.companyName!)")
                        .font(.subheadline)
                        .foregroundColor(.secondary)
                }
                
                Spacer()
                VStack(alignment: .trailing) {
                    Text("\(companyQuote.latestPrice!, specifier: "%.2f")")
                        .font(.headline)
                    
                    Text("\(companyQuote.change!, specifier: "%.2f") \(companyQuote.changePercent!*100, specifier: "%.2f")%")
                        .font(.subheadline)
                        .foregroundColor(generateColour())
                }
            } else {
                ProgressView()
            }
        }
        .onAppear(perform: requestApi)
    }
    
    private func generateColour() -> Color {
        if companyQuote.change! >= 0 {
            return Color(.systemGreen)
        } else {
            return Color(.systemRed)
        }
    }
    
    private func requestApi() {
        let url = "https://cloud.iexapis.com/stable/stock/\(symbol)/quote?token=pk_58fd944e924e4a70acf8635bc335cec4"
        AF.request(url).responseDecodable(of: CompanyQuoteModel.self) { response in
            if let value = response.value {
                self.companyQuote = value
                self.showingRow = true
            }
            else {
                // Handle error
            }
        }
    }
}

struct WatchlistRow_Previews: PreviewProvider {
    static var previews: some View {
        WatchlistRow(symbol: "AAPL")
    }
}