33@inherits ResponsiveComponent
44
55@inject InvestmentService InvestmentService
6+ @inject StockPointService StockPointService
67
78<PageTitle >Investments</PageTitle >
89
4849</UICard >
4950
5051<UICard Title =" Stock Chart" >
52+ <TelerikTabStrip @bind-ActiveTabIndex =" @TabStripActiveTabIndex" Class =" no-content-padding" >
5153
52- @* Navigator basic setup *@
53-
54- <TelerikStockChart @ref =" @StockChartRef"
55- DateField =" @nameof(StockDataPoint.Date)"
56- Height =" 480px" >
57-
58- <StockChartNavigator >
59-
60- <StockChartNavigatorSeriesItems >
61- <StockChartNavigatorSeries Type =" StockChartSeriesType.Line"
62- Name =" Product 1"
63- Data =" @StockChartProduct1Data"
64- Field =" @nameof(StockDataPoint.High)"
65- CategoryField =" @nameof(StockDataPoint.Date)" >
66- </StockChartNavigatorSeries >
67-
68- <StockChartNavigatorSeries Type =" StockChartSeriesType.Line"
69- Name =" Product 2"
70- Data =" @StockChartProduct2Data"
71- Field =" @nameof(StockDataPoint.High)"
72- CategoryField =" @nameof(StockDataPoint.Date)" >
73- </StockChartNavigatorSeries >
74- </StockChartNavigatorSeriesItems >
75-
76- </StockChartNavigator >
77-
78- <StockChartCategoryAxes >
79- <StockChartCategoryAxis BaseUnit =" @ChartCategoryAxisBaseUnit.Months" ></StockChartCategoryAxis >
80- </StockChartCategoryAxes >
81-
82- <StockChartSeriesItems >
83- <StockChartSeries Type =" StockChartSeriesType.Candlestick"
84- Name =" Product 1"
85- Data =" @StockChartProduct1Data"
86- OpenField =" @nameof(StockDataPoint.Open)"
87- CloseField =" @nameof(StockDataPoint.Close)"
88- HighField =" @nameof(StockDataPoint.High)"
89- LowField =" @nameof(StockDataPoint.Low)" >
90- <StockChartSeriesTooltip Visible =" false" ></StockChartSeriesTooltip >
91- </StockChartSeries >
92-
93- <StockChartSeries Type =" StockChartSeriesType.Candlestick"
94- Name =" Product 2"
95- Data =" @StockChartProduct2Data"
96- OpenField =" @nameof(StockDataPoint.Open)"
97- CloseField =" @nameof(StockDataPoint.Close)"
98- HighField =" @nameof(StockDataPoint.High)"
99- LowField =" @nameof(StockDataPoint.Low)" >
100- <StockChartSeriesTooltip Visible =" false" ></StockChartSeriesTooltip >
101- </StockChartSeries >
102- </StockChartSeriesItems >
103-
104- </TelerikStockChart >
105-
106- @code {
107- public List <StockDataPoint > StockChartProduct1Data { get ; set ; }
108- public List <StockDataPoint > StockChartProduct2Data { get ; set ; }
109-
110- public async Task GenerateChartData ()
111- {
112- StockChartProduct1Data = new List <StockDataPoint >()
113- {
114- new StockDataPoint (new DateTime (2019 , 1 , 1 ), 41 . 62 m , 40 . 12 m , 41 . 69 m , 39 . 81 m , 2632000 ),
115- new StockDataPoint (new DateTime (2019 , 2 , 1 ), 39 . 88 m , 40 . 12 m , 41 . 12 m , 39 . 75 m , 3584700 ),
116- new StockDataPoint (new DateTime (2019 , 3 , 1 ), 42 m , 42 . 62 m , 43 . 31 m , 41 . 38 m , 7631700 ),
117- new StockDataPoint (new DateTime (2019 , 4 , 1 ), 42 . 25 m , 43 . 06 m , 43 . 31 m , 41 . 12 m , 4922200 )
118- };
119-
120- StockChartProduct2Data = new List <StockDataPoint >()
121- {
122- new StockDataPoint (new DateTime (2019 , 1 , 1 ), 39 m , 38 m , 44 m , 37 m , 26320 ),
123- new StockDataPoint (new DateTime (2019 , 2 , 1 ), 37 m , 38 m , 41 m , 40 m , 35847 ),
124- new StockDataPoint (new DateTime (2019 , 3 , 1 ), 42 m , 43 m , 45 m , 41 m , 76317 ),
125- new StockDataPoint (new DateTime (2019 , 4 , 1 ), 40 m , 42 m , 43 m , 42 m , 49222 )
126- };
127-
128- await Task .FromResult (StockChartProduct1Data );
129- await Task .FromResult (StockChartProduct2Data );
130- }
131-
132- public class StockDataPoint
54+ @foreach ( var stockChartItem in StockChartData )
13355 {
134- public StockDataPoint () { }
135-
136- public StockDataPoint (DateTime date , decimal open , decimal close , decimal high , decimal low , int volume )
137- {
138- Date = date ;
139- Open = open ;
140- Close = close ;
141- High = high ;
142- Low = low ;
143- Volume = volume ;
144- }
145- public DateTime Date { get ; set ; }
146-
147- public decimal Open { get ; set ; }
148-
149- public decimal Close { get ; set ; }
150-
151- public decimal High { get ; set ; }
152-
153- public decimal Low { get ; set ; }
154-
155- public int Volume { get ; set ; }
56+ <TabStripTab Title =" @stockChartItem.Value.Name" @key =" @stockChartItem" >
57+ <TelerikStockChart @ref =" stockChartItem.Value.StockChartRef"
58+ DateField =" @nameof(StockPoint.Date)"
59+ Width =" 96%"
60+ Height =" 480px" >
61+
62+ <StockChartNavigator >
63+ <StockChartNavigatorSeriesItems >
64+ <StockChartNavigatorSeries Type =" StockChartSeriesType.Line"
65+ Name =" @stockChartItem.Value.Name"
66+ Data =" @stockChartItem.Value.StockChartData"
67+ Field =" @nameof(StockPoint.High)"
68+ CategoryField =" @nameof(StockPoint.Date)"
69+ Color =" var(--kendo-color-series-c)" >
70+ </StockChartNavigatorSeries >
71+ </StockChartNavigatorSeriesItems >
72+ </StockChartNavigator >
73+
74+ <StockChartCategoryAxes >
75+ <StockChartCategoryAxis BaseUnit =" @ChartCategoryAxisBaseUnit.Fit"
76+ AxisCrossingValue =" @(new object[] { 0, int.MaxValue })" />
77+ </StockChartCategoryAxes >
78+
79+ <StockChartValueAxes >
80+ <StockChartValueAxis Name =" candle-axis" Min =" 0" Max =" 60" />
81+ <StockChartValueAxis Name =" volumne-axis" Min =" 0" Max =" 400_000" />
82+ </StockChartValueAxes >
83+
84+ <StockChartSeriesItems >
85+ <StockChartSeries Type =" StockChartSeriesType.Candlestick"
86+ Name =" @stockChartItem.Value.Name"
87+ Data =" @stockChartItem.Value.StockChartData"
88+ OpenField =" @nameof(StockPoint.Open)"
89+ CloseField =" @nameof(StockPoint.Close)"
90+ HighField =" @nameof(StockPoint.High)"
91+ LowField =" @nameof(StockPoint.Low)"
92+ Aggregate =" @ChartSeriesAggregate.Avg"
93+ Color =" var(--kendo-color-series-c)"
94+ Axis =" candle-axis" >
95+ </StockChartSeries >
96+ <StockChartSeries Type =" StockChartSeriesType.Column"
97+ Name =" @stockChartItem.Value.Name"
98+ Data =" @stockChartItem.Value.StockChartData"
99+ Field =" @nameof(StockPoint.Volume)"
100+ Aggregate =" @ChartSeriesAggregate.Sum"
101+ Color =" var(--kendo-color-series-c)"
102+ Axis =" volumne-axis" >
103+ <StockChartSeriesTooltip >
104+ <Template >
105+ @{ var dataItem = (StockPoint )context .DataItem ; }
106+ @dataItem.Volume.ToString( " C2" )
107+ </Template >
108+ </StockChartSeriesTooltip >
109+ </StockChartSeries >
110+ </StockChartSeriesItems >
111+
112+ </TelerikStockChart >
113+ </TabStripTab >
156114 }
157- }
115+ </ TelerikTabStrip >
158116
159117</UICard >
160118
163121 private List <AssetInfo > ListViewData { get ; set ; } = new ();
164122
165123 private TelerikChart ? PieChartRef { get ; set ; }
166- private TelerikStockChart ? StockChartRef { get ; set ; }
124+
125+ private int TabStripActiveTabIndex { get ; set ; }
126+
127+ private Dictionary <int , InvestmentStockChart > StockChartData { get ; set ; } = new ()
128+ {
129+ { 0 , new InvestmentStockChart () { Name = " Solar Flux" } },
130+ { 1 , new InvestmentStockChart () { Name = " Quantum" } },
131+ { 2 , new InvestmentStockChart () { Name = " Neopharm" } },
132+ { 3 , new InvestmentStockChart () { Name = " Solaris" } },
133+ { 4 , new InvestmentStockChart () { Name = " Globefin Bank" } }
134+ };
167135
168136 private string GetChangeColor (double amount )
169137 {
179147 public override Task OnViewPortResize ()
180148 {
181149 PieChartRef ? .Refresh ();
182- StockChartRef ? .Refresh ();
150+ StockChartData [ TabStripActiveTabIndex ]. StockChartRef ? .Refresh ();
183151
184152 return base .OnViewPortResize ();
185153 }
189157 PieChartData = await InvestmentService .ReadTotalInvestments ();
190158 ListViewData = await InvestmentService .ReadTopMovers ();
191159
192- await GenerateChartData ();
160+ foreach (var item in StockChartData )
161+ {
162+ item .Value .StockChartData = await StockPointService .Read ();
163+ }
193164
194165 await base .OnInitializedAsync ();
195166 }
196- }
167+ }
0 commit comments