view LazyBear/UI/KeyStatsDetail.swift @ 284:9c4ec55708f7

Implement KeyStatsDetail
author Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
date Fri, 19 Mar 2021 23:03:43 +0100
parents
children
line wrap: on
line source

//
//  KeyStatsDetail.swift
//  LazyBear
//
//  Created by Dennis Concepción Martín on 19/3/21.
//

import SwiftUI

struct KeyStatsDetail: View {
    var keyStats: KeyStatsModel
    
    var body: some View {
        NavigationView {
            Form {
                FirstSection(keyStats: keyStats)
                SecondSection(keyStats: keyStats)
                ThirdSection(keyStats: keyStats)
            }
            .navigationTitle("Key statistics")
        }
    }
}

struct StatCell: View {
    var icon: String?
    var text: String
    var data: Any
    
    var body: some View {
        HStack {
            if let symbol = icon {
                Image(systemName: symbol)
            }
            Text(text)
                .font(.headline)
            if let numData = data as? Double {
                Text("\(numData, specifier: "%.2f")")
            } else if let stringData = data as? String {
                Text(stringData)
            }
        }
    }
}

struct FirstSection: View {
    var keyStats: KeyStatsModel
    
    var body: some View {
        Section(header: Text("About the company")) {
            if let employees = keyStats.Employees {
                StatCell(icon: nil, text: "Employees: ", data: employees)
            }
            if let marketCap = keyStats.Market_Cap {
                StatCell(icon: nil, text: "Market cap:", data: marketCap)
            }
            if let shares = keyStats.Shares {
                StatCell(icon: nil, text: "Shares outstanding: ", data: shares)
            }
        }
    }
}

struct SecondSection: View {
    var keyStats: KeyStatsModel
    
    var body: some View {
        Section(header: Text("About the stock")) {
            if let beta = keyStats.Beta {
                StatCell(icon: nil, text: "Beta: ", data: beta)
            }
            if let peRatio = keyStats.PE_Ratio {
                StatCell(icon: nil, text: "P/E Ratio: ", data: peRatio)
            }
            if let trailingEps = keyStats.Trailing_EPS {
                StatCell(icon: nil, text: "Trailing EPS: ", data: trailingEps)
            }
            if let dividendYield = keyStats.Dividend_Yield {
                StatCell(icon: nil, text: "Dividend yield in %: ", data: dividendYield*100)
            }
            if let nextDividendDate = keyStats.Next_Dividend_Date {
                StatCell(icon: nil, text: "Next dividend date: ", data: nextDividendDate)
            }
            if let trailingDividendRate = keyStats.Trailing_Dividend_Rate {
                StatCell(icon: nil, text: "Trailing dividend rate: ", data: trailingDividendRate)
            }
        }
    }
}

struct ThirdSection: View {
    var keyStats: KeyStatsModel
    
    var body: some View {
        Section(header: Text("Technical analysis")) {
            if let weeks52low = keyStats.Weeks52_Low {
                StatCell(icon: nil, text: "52 weeks low: ", data: weeks52low)
            }
            if let weeks52High = keyStats.Weeks52_High {
                StatCell(icon: nil, text: "52 weeks high: ", data: weeks52High)
            }
            if let days10AvgVolume = keyStats.Days10_Avg_Volume {
                StatCell(icon: nil, text: "10 days average volume: ", data: days10AvgVolume)
            }
            if let days30AvgVolume = keyStats.Days30_Avg_Volume {
                StatCell(icon: nil, text: "30 days average volume: ", data: days30AvgVolume)
            }
            if let days200MovingAvg = keyStats.Days200_Moving_Avg {
                StatCell(icon: nil, text: "200 days moving average: ", data: days200MovingAvg)
            }
            if let days50MovingAvg = keyStats.Days50_Moving_Avg {
                StatCell(icon: nil, text: "50 days moving average: ", data: days50MovingAvg)
            }
        }
    }
}

struct KeyStatsDetail_Previews: PreviewProvider {
    static var previews: some View {
        KeyStatsDetail(keyStats: KeyStatsModel(Market_Cap: 100000, Weeks52_High: 12, Weeks52_Low: 12, Shares: 13334434, Days10_Avg_Volume: 12, Days30_Avg_Volume: 12, Days200_Moving_Avg: 12, Days50_Moving_Avg: 12, Employees: 12345, Trailing_EPS: 12, Trailing_Dividend_Rate: 12, Dividend_Yield: 0.07, Next_Dividend_Date: "2020-02-02", PE_Ratio: 12, Beta: 12))
    }
}