Skip to content

Commit 7fe93fa

Browse files
committed
Added chart render logic
1 parent e20a87f commit 7fe93fa

File tree

8 files changed

+126
-37
lines changed

8 files changed

+126
-37
lines changed

samples/ChartSamples/Data/SampleData.cs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,21 @@ namespace ChartSamples
88
{
99
public static class SampleData
1010
{
11+
12+
13+
public static List<Order> GetRandomOrders()
14+
{
15+
var rnd = new Random();
16+
var orders = new List<Order>();
17+
18+
for (int i = 0; i < rnd.Next(5,20); i++)
19+
{
20+
orders.Add(new Order { CustomerName = "Odio Corporation", Country = "Sweden", OrderDate = DateTimeOffset.Now.AddDays(-12), GrossValue = rnd.Next(2000,50000), DiscountPrecentage = rnd.Next(10, 50), OrderType = (OrderType)rnd.Next(0,4) });
21+
}
22+
23+
return orders;
24+
}
25+
1126
public static List<Order> GetOrders()
1227
{
1328
var orders = new List<Order>();
@@ -34,7 +49,7 @@ public static List<Order> GetOrders()
3449
orders.Add(new Order { CustomerName = "Ani Vent", Country = "France", OrderDate = DateTimeOffset.Now.AddDays(-17), GrossValue = 2134, DiscountPrecentage = 10, OrderType = OrderType.Phone });
3550
orders.Add(new Order { CustomerName = "Ani Vent", Country = "France", OrderDate = DateTimeOffset.Now.AddDays(-27), GrossValue = 11345, DiscountPrecentage = 12, OrderType = OrderType.Phone });
3651
orders.Add(new Order { CustomerName = "Ani Vent", Country = "France", OrderDate = DateTimeOffset.Now.AddDays(-124), GrossValue = 17002, DiscountPrecentage = 32, OrderType = OrderType.Mail });
37-
52+
3853
orders.Add(new Order { CustomerName = "Cali Inc", Country = "France", OrderDate = DateTimeOffset.Now.AddDays(-10), GrossValue = 77000, DiscountPrecentage = 17, OrderType = OrderType.Web });
3954
orders.Add(new Order { CustomerName = "Cali Inc", Country = "France", OrderDate = DateTimeOffset.Now.AddDays(-110), GrossValue = 120000, DiscountPrecentage = 23, OrderType = OrderType.Web });
4055
orders.Add(new Order { CustomerName = "Cali Inc", Country = "France", OrderDate = DateTimeOffset.Now.AddDays(-243), GrossValue = 44000, DiscountPrecentage = 8, OrderType = OrderType.Web });
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
@page "/render-chart"
2+
3+
<h3>Render Chart</h3>
4+
5+
<div class="row">
6+
7+
<div class="col-sm-12 col-md-8 col-lg-4">
8+
<button class="btn btn-primary" @onclick="GenerateData">Automatic Render</button>
9+
<ApexChart TItem="Order" Title="Automatic Render"
10+
ChartType="@ChartType.Pie">
11+
12+
<ApexSeries TItem="Order"
13+
Items="orders"
14+
Name="Order Value"
15+
XValue="@(e => e.OrderType)"
16+
YAggregate="@(e => e.Sum(e => e.NetValue))" />
17+
18+
</ApexChart>
19+
</div>
20+
21+
<div class="col-sm-12 col-md-8 col-lg-4">
22+
<button class="btn btn-primary" @onclick="RenderManually">Manual Render</button>
23+
<ApexChart @ref="chart" TItem="Order" Title="Manual Render"
24+
ChartType="@ChartType.Pie"
25+
ManualRender="true">
26+
27+
<ApexSeries TItem="Order"
28+
Items="SampleData.GetRandomOrders()"
29+
Name="Order Value"
30+
XValue="@(e => e.OrderType)"
31+
YAggregate="@(e => e.Sum(e => e.NetValue))" />
32+
33+
</ApexChart>
34+
</div>
35+
36+
</div>
37+
38+
39+
40+
41+
@code {
42+
private List<Order> orders = new List<Order>();
43+
private ApexChart<Order> chart;
44+
private void GenerateData()
45+
{
46+
orders = SampleData.GetRandomOrders();
47+
}
48+
49+
private async Task RenderManually()
50+
{
51+
await chart.Render();
52+
}
53+
54+
}

samples/ChartSamples/Pages/Sparklines.razor

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
<h3>Sparklines</h3>
44

5-
<button @onclick="TestMethod">Test</button>
65

76
<div class="row">
87
<div class="col-md-12 col-lg-6">
@@ -68,11 +67,7 @@
6867
orders = SampleData.GetOrders();
6968
}
7069

71-
private void TestMethod()
72-
{
73-
74-
}
75-
70+
7671
private ApexChartOptions<Order> GetPieOptions()
7772
{
7873
var options = new ApexCharts.ApexChartOptions<Order>();

samples/ChartSamples/Shared/NavMenu.razor

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,14 @@
3333
</NavLink>
3434
</li>
3535

36+
<li class="nav-item px-3">
37+
<NavLink class="nav-link" href="render-chart">
38+
<span class="oi oi-reload" aria-hidden="true"></span>Render Chart
39+
</NavLink>
40+
</li>
41+
42+
43+
3644
</ul>
3745
</div>
3846

src/Blazor-ApexCharts/ApexChart.razor.cs

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,23 @@ public partial class ApexChart<TItem> : IDisposable where TItem : class
1616
[Parameter] public RenderFragment ChildContent { get; set; }
1717
[Parameter] public ApexChartOptions<TItem> Options { get; set; } = new ApexChartOptions<TItem>();
1818
[Parameter] public string Title { get; set; }
19-
[Parameter] public ChartType ChartType { get; set; } = ChartType.Bar;
19+
20+
[Parameter]
21+
public ChartType ChartType
22+
{
23+
get => chartType;
24+
set
25+
{
26+
if (chartType != value)
27+
{
28+
ForceRender = true;
29+
}
30+
chartType = value;
31+
}
32+
}
2033
[Parameter] public XaxisType? XAxisType { get; set; }
2134
[Parameter] public bool Debug { get; set; }
35+
[Parameter] public bool ManualRender { get; set; }
2236
[Parameter] public object Width { get; set; }
2337
[Parameter] public object Height { get; set; }
2438
[Parameter] public EventCallback<SelectedData<TItem>> OnDataPointSelection { get; set; }
@@ -27,7 +41,8 @@ public partial class ApexChart<TItem> : IDisposable where TItem : class
2741
private ElementReference ChartContainer { get; set; }
2842

2943
private bool isReady;
30-
private bool forceRender = true;
44+
internal bool ForceRender = true;
45+
private ChartType chartType = ChartType.Bar;
3146

3247
protected override async Task OnAfterRenderAsync(bool firstRender)
3348
{
@@ -37,25 +52,16 @@ protected override async Task OnAfterRenderAsync(bool firstRender)
3752
ObjectReference = DotNetObjectReference.Create(this);
3853
}
3954

40-
if (isReady && Options.ForceRender)
55+
if (isReady && ForceRender && !ManualRender)
4156
{
42-
await UpdateChart();
57+
await Render();
4358
}
4459
}
4560

4661
protected override void OnParametersSet()
4762
{
4863
if (Options.Chart == null) { Options.Chart = new Chart(); }
4964

50-
if (Options.Chart.Type != ChartType ||
51-
Options.Chart.Width?.ToString() != Width?.ToString() ||
52-
Options.Chart.Height?.ToString() != Height?.ToString() ||
53-
Options.Xaxis?.Type != XAxisType ||
54-
Options.Title?.Text != Title)
55-
{
56-
Options.ForceRender = true;
57-
}
58-
5965
Options.Debug = Debug;
6066
Options.Chart.Type = ChartType;
6167
Options.Chart.Width = Width;
@@ -151,9 +157,9 @@ public void FixLineDataSelection()
151157
}
152158
}
153159

154-
public async Task UpdateChart()
160+
public async Task Render()
155161
{
156-
Options.ForceRender = false;
162+
ForceRender = false;
157163
SetDatalabels();
158164
FixLineDataSelection();
159165
UpdateDataForNoAxisCharts();

src/Blazor-ApexCharts/ApexSeries.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,9 @@ protected override async Task OnParametersSetAsync()
5454
datalist = datalist.ToList();
5555
series.Data = datalist;
5656

57-
//TODO Fix this, right now just a naive implementation to get samples going
58-
if (currentDatalist != null && currentDatalist.Sum(e => e.Y) != datalist.Sum(e => e.Y))
57+
if (!Chart.ManualRender && Chart.ForceRender == false && currentDatalist != null && !currentDatalist.SequenceEqual(datalist, new DataPointComparer<TItem>()))
5958
{
60-
await Chart.UpdateChart();
59+
Chart.ForceRender = true;
6160
}
6261

6362
currentDatalist = datalist;

src/Blazor-ApexCharts/Models/ApexChartOptions.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ namespace ApexCharts
66
public class ApexChartOptions<TItem>
77
{
88
public bool Debug { get; set; }
9-
public bool ForceRender { get; set; }
10-
9+
1110
/// <summary>
1211
/// Annotations options
1312
/// See https://apexcharts.com/docs/options/annotations/
@@ -1207,8 +1206,8 @@ public class XAxis
12071206
public XaxisCrosshairs Crosshairs { get; set; }
12081207
public bool? Floating { get; set; }
12091208
public XaxisLabels Labels { get; set; }
1210-
public double? Max { get; set; }
1211-
public double? Min { get; set; }
1209+
public object Max { get; set; }
1210+
public object Min { get; set; }
12121211
public double? OffsetX { get; set; }
12131212
public double? OffsetY { get; set; }
12141213
public string Position { get; set; }

src/Blazor-ApexCharts/Models/DataPoint.cs

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@
33

44
namespace ApexCharts
55
{
6-
public interface IDataPoint<TItem>: IEqualityComparer<IDataPoint<TItem>> {
6+
public interface IDataPoint<TItem>
7+
{
78
IList<TItem> Items { get; set; }
89
object X { get; set; }
910
}
1011

11-
public class DataPoint<TItem>: IDataPoint<TItem>
12+
public class DataPoint<TItem> : IDataPoint<TItem>
1213
{
1314
public DataPoint() { }
1415

@@ -24,20 +25,32 @@ public DataPoint(object x, decimal? y)
2425
}
2526

2627
public object X { get; set; }
27-
public decimal? Y{ get; set; }
28-
28+
public decimal? Y { get; set; }
29+
2930

3031
[JsonIgnore]
3132
public IList<TItem> Items { get; set; }
3233

33-
public bool Equals(IDataPoint<TItem> x, IDataPoint<TItem> y)
34+
}
35+
36+
public class DataPointComparer<TItem> : IEqualityComparer<DataPoint<TItem>>
37+
{
38+
public bool Equals(DataPoint<TItem> dataPoint1, DataPoint<TItem> dataPoint2)
3439
{
35-
throw new System.NotImplementedException();
40+
if (dataPoint1 == null && dataPoint2 == null) { return true; }
41+
if (dataPoint1 == null || dataPoint2 == null) { return false; }
42+
43+
DataPoint<TItem> point1 = dataPoint1;
44+
DataPoint<TItem> point2 = dataPoint2;
45+
46+
if (point1.X.ToString() != point2.X.ToString() || point1.Y != point2.Y) return false;
47+
48+
return true;
3649
}
3750

38-
public int GetHashCode(IDataPoint<TItem> obj)
51+
public int GetHashCode(DataPoint<TItem> obj)
3952
{
40-
throw new System.NotImplementedException();
53+
return obj.X.GetHashCode();
4154
}
4255
}
4356
}

0 commit comments

Comments
 (0)