Mercurial > public > lazybear
view LazyBear/UI/InsiderSummary.swift @ 288:53b1c504428a
Implement horizontal bar chart
author | Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com> |
---|---|
date | Sat, 20 Mar 2021 16:10:41 +0100 |
parents | 083ca8dc3499 |
children | 8fc9405b6894 |
line wrap: on
line source
// // InsiderSummary.swift // LazyBear // // Created by Dennis Concepción Martín on 5/3/21. // import SwiftUI struct InsiderSummary: View { var symbol: String @State private var insiderSummary = [InsiderSummaryModel]() {didSet { print(insiderSummary) }} var body: some View { let maxPosition = insiderSummary.map { ($0.position ?? 0) }.max() VStack(alignment: .leading) { HStack { Text("Top insiders") .font(.title) .fontWeight(.semibold) Spacer() } .padding(.bottom) ForEach(insiderSummary.indices, id: \.self) { index in if index < 3 { // Number of rows that I want to show let name = insiderSummary[index].entityName let position = insiderSummary[index].position ?? 1 let pct = getPercentage(maxPosition ?? 1, position) HorizontalBar(text: name, data: position, capsulePctWidth: pct) } } } .padding() .onAppear { let url = getUrl(endpoint: .insiderSummary, symbol: symbol) request(url: url, model: [InsiderSummaryModel].self) { self.insiderSummary = $0 } } } private func getPercentage(_ maxValue: Int, _ value: Int) -> CGFloat { let pct = Double(value) / Double(maxValue) return CGFloat(pct) } } struct InsiderSummary_Previews: PreviewProvider { static var previews: some View { InsiderSummary(symbol: "aapl") } }