annotate LazyBear/Views/Company/Helpers/InsiderList.swift @ 412:a7c9dd0c5822

Main insider view implemented
author Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
date Tue, 08 Jun 2021 11:46:58 +0200
parents 681fb377235e
children 2984d8946342
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
411
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
1 //
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
2 // InsiderList.swift
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
3 // LazyBear
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
4 //
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
5 // Created by Dennis Concepción Martín on 7/6/21.
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
6 //
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
7
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
8 import SwiftUI
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
9
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
10 struct InsiderList: View {
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
11 var insiderSummary: [InsiderRosterModel]
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
12 @State private var showFullList = false
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
13
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
14 var body: some View {
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
15 VStack(alignment: .leading) {
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
16 HStack {
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
17 Text("Top 10 insiders")
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
18 .font(.title3)
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
19 .fontWeight(.semibold)
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
20
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
21 Spacer()
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
22 Button("See all", action: { showFullList = true })
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
23 }
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
24
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
25 // Get total shares owned by the top 10 insiders
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
26 let totalPositions = insiderSummary.map { $0.position }.reduce(0, +)
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
27 VStack(alignment: .leading, spacing: 20) {
412
a7c9dd0c5822 Main insider view implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 411
diff changeset
28 ForEach(insiderSummary.prefix(3), id: \.self) { insider in
411
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
29
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
30 // Compute percentage of ownership for each insider
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
31 let percentage = Double(insider.position) / Double(totalPositions)
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
32
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
33 InsiderRow(percentageOfWidth: CGFloat(percentage), insiderRoster: insider)
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
34 }
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
35 }
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
36 }
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
37 .sheet(isPresented: $showFullList) {
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
38 InsiderFullList(insiderSummary: insiderSummary)
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
39 }
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
40 }
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
41 }
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
42
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
43 struct InsiderList_Previews: PreviewProvider {
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
44 static var previews: some View {
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
45 InsiderList(insiderSummary:
412
a7c9dd0c5822 Main insider view implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 411
diff changeset
46 [InsiderRosterModel(entityName: "Dennis Concepcion", position: 1234, reportDate: 1234567)]
a7c9dd0c5822 Main insider view implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 411
diff changeset
47 )
411
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
48 }
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
49 }
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
50
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
51 struct InsiderFullList: View {
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
52 var insiderSummary: [InsiderRosterModel]
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
53 @Environment(\.presentationMode) private var presentationInsiderFullList
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
54
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
55 var body: some View {
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
56 NavigationView {
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
57 ScrollView {
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
58 // Get total shares owned by the top 10 insiders
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
59 let totalPositions = insiderSummary.map { $0.position }.reduce(0, +)
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
60 VStack(alignment: .leading, spacing: 20) {
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
61 ForEach(insiderSummary, id: \.self) { insider in
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
62
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
63 // Compute percentage of ownership for each insider
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
64 let percentage = Double(insider.position) / Double(totalPositions)
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
65
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
66 InsiderRow(percentageOfWidth: CGFloat(percentage), insiderRoster: insider)
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
67 }
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
68 }
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
69 .padding()
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
70 }
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
71 .navigationTitle("Top 10 insiders")
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
72 .navigationBarTitleDisplayMode(.inline)
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
73 .toolbar {
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
74 ToolbarItem(placement: .navigationBarLeading) {
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
75 Button(action: { presentationInsiderFullList.wrappedValue.dismiss() }) {
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
76 Image(systemName: "multiply")
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
77 .imageScale(.large)
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
78 }
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
79 }
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
80 }
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
81 }
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
82 }
681fb377235e Implementing insider transactions
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
83 }