Skip to content

Commit 7d49d5a

Browse files
committed
Added Legend Click Event
1 parent a230e63 commit 7d49d5a

File tree

11 files changed

+145
-14
lines changed

11 files changed

+145
-14
lines changed

docs/BlazorApexCharts.Docs/Components/ChartEvents/ChartEvents.razor renamed to docs/BlazorApexCharts.Docs/Components/Events/DataPointSelection/DataPointSelection.razor

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
@page "/chart-events"
1+
@page "/events/data-point-selection"
22

3-
<DocExamples Title="Chart Events">
3+
<DocExamples Title="Data Point Selection">
44

55
<Description>
66
Click on a datapoint to trigger the event
77
</Description>
88

99
<ChildContent>
10-
<CodeSnippet Title="Data point select" ClassName=@typeof(DataPointSelection).ToString()>
10+
<CodeSnippet Title="Basic" ClassName=@typeof(Basic).ToString()>
1111
<Snippet>
12-
<DataPointSelection />
12+
<Basic />
1313
</Snippet>
1414
</CodeSnippet>
1515
</ChildContent>
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<DemoContainer>
2+
<ApexChart TItem="Order"
3+
Title="Order Net Value"
4+
OnLegendClicked=LegendClicked
5+
@ref=chart>
6+
7+
<ApexPointSeries TItem="Order"
8+
Items="Orders"
9+
Name="Gross Value"
10+
SeriesType="SeriesType.Line"
11+
XValue="@(e => e.Country)"
12+
YAggregate="@(e => e.Sum(e => e.GrossValue))"
13+
OrderByDescending="e=>e.X" />
14+
15+
<ApexPointSeries TItem="Order"
16+
Items="Orders"
17+
Name="Net Value"
18+
SeriesType="SeriesType.Line"
19+
XValue="@(e => e.Country)"
20+
YAggregate="@(e => e.Sum(e => e.NetValue))"
21+
OrderByDescending="e=>e.X" />
22+
</ApexChart>
23+
</DemoContainer>
24+
25+
@if (legendClicked != null)
26+
{
27+
<Alert BackgroundColor="TablerColor.Primary">
28+
<h3>You clicked series @legendClicked.Series.Name</h3>
29+
<span>Collapsed: @legendClicked.Collapsed</span>
30+
</Alert>
31+
32+
33+
34+
}
35+
36+
@code {
37+
private List<Order> Orders { get; set; } = SampleData.GetOrders();
38+
private LegendClicked<Order> legendClicked;
39+
private ApexChart<Order> chart;
40+
41+
private void LegendClicked(LegendClicked<Order> legend)
42+
{
43+
legendClicked = legend;
44+
}
45+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
@page "/events/legend-click"
2+
3+
<DocExamples Title="Legend Clicked">
4+
5+
<Description>
6+
Click on Legend to trigger a event
7+
</Description>
8+
9+
<ChildContent>
10+
<CodeSnippet Title="Basic" ClassName=@typeof(Basic).ToString()>
11+
<Snippet>
12+
<Basic />
13+
</Snippet>
14+
</CodeSnippet>
15+
</ChildContent>
16+
17+
18+
</DocExamples>

docs/BlazorApexCharts.Docs/Shared/MainNavigation.razor

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,16 @@
9494
</SubMenu>
9595
</NavbarMenuItem>
9696

97-
<NavbarMenuItem Href="chart-events" Text="Events">
97+
<NavbarMenuItem Text="Events">
9898
<MenuItemIcon>
9999
<Icon class="icon" Elements="@Icons.Bolt" />
100100
</MenuItemIcon>
101+
<SubMenu>
102+
<NavbarMenuItem Text="Data Point Selection" Href="events/data-point-selection" />
103+
<NavbarMenuItem Text="Legend Click" Href="events/legend-click" />
104+
105+
106+
</SubMenu>
101107
</NavbarMenuItem>
102108

103109
<NavbarMenuItem Text="Features">

src/Blazor-ApexCharts/ApexChart.razor.cs

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using BlazorApexCharts;
1+
using ApexCharts.Series;
2+
using BlazorApexCharts;
23
using Microsoft.AspNetCore.Components;
34
using Microsoft.JSInterop;
45
using System;
@@ -20,6 +21,8 @@ public partial class ApexChart<TItem> : IDisposable where TItem : class
2021
[Parameter] public object Width { get; set; }
2122
[Parameter] public object Height { get; set; }
2223
[Parameter] public EventCallback<SelectedData<TItem>> OnDataPointSelection { get; set; }
24+
[Parameter] public EventCallback<LegendClicked<TItem>> OnLegendClicked { get; set; }
25+
2326
[Parameter] public EventCallback OnRendered { get; set; }
2427
[Parameter] public Func<decimal, string> FormatYAxisLabel { get; set; }
2528

@@ -379,6 +382,14 @@ private void PrepareChart()
379382
FixLineDataSelection();
380383
UpdateDataForNoAxisCharts();
381384
SetDotNetFormatters();
385+
SetEvents();
386+
}
387+
388+
private void SetEvents()
389+
{
390+
Options.HasDataPointSelection = OnDataPointSelection.HasDelegate;
391+
Options.HasLegendClick = OnLegendClicked.HasDelegate;
392+
382393
}
383394

384395
private async Task RenderChartAsync()
@@ -492,7 +503,27 @@ public string GetFormattedYAxisValue(object value)
492503
}
493504

494505
[JSInvokable]
495-
public void DataPointSelected(DataPointSelection<TItem> selectedDataPoints)
506+
public void LegendClicked(JSLegendClicked jsLegendClicked)
507+
{
508+
509+
var series = Options.Series.ElementAt(jsLegendClicked.SeriesIndex);
510+
var legendClicked = new LegendClicked<TItem>
511+
{
512+
Series = series,
513+
Collapsed = jsLegendClicked.Collapsed
514+
};
515+
//Invert if Toggle series is set to flase (default == true)
516+
var toggleSeries = Options?.Legend?.OnItemClick?.ToggleDataSeries;
517+
if (toggleSeries != false)
518+
{
519+
legendClicked.Collapsed = !legendClicked.Collapsed;
520+
}
521+
522+
OnLegendClicked.InvokeAsync(legendClicked);
523+
}
524+
525+
[JSInvokable]
526+
public void DataPointSelected(JSDataPointSelection selectedDataPoints)
496527
{
497528
if (OnDataPointSelection.HasDelegate)
498529
{
@@ -501,9 +532,9 @@ public void DataPointSelected(DataPointSelection<TItem> selectedDataPoints)
501532

502533
var selection = new SelectedData<TItem>
503534
{
504-
Series = series,
535+
Series = series,
505536
DataPoint = dataPoint,
506-
IsSelected = selectedDataPoints.SelectedDataPoints.Any(e=> e!= null && e.Any(e=> e != null && e.HasValue)),
537+
IsSelected = selectedDataPoints.SelectedDataPoints.Any(e => e != null && e.Any(e => e != null && e.HasValue)),
507538
};
508539

509540
OnDataPointSelection.InvokeAsync(selection);

src/Blazor-ApexCharts/Models/ApexChartOptions.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ namespace ApexCharts
77
public class ApexChartOptions<TItem> where TItem : class
88
{
99
public bool Debug { get; set; }
10+
public bool HasDataPointSelection { get; internal set; }
11+
public bool HasLegendClick { get; internal set; }
1012

1113
/// <summary>
1214
/// Annotations options

src/Blazor-ApexCharts/Models/DataPoints/DataPointSelection.cs renamed to src/Blazor-ApexCharts/Models/DataPoints/JSDataPointSelection.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,12 @@
22

33
namespace ApexCharts
44
{
5-
public class DataPointSelection<TItem> where TItem : class
5+
public class JSDataPointSelection
66
{
77
public List<List<int?>> SelectedDataPoints { get; set; }
88
public int DataPointIndex { get; set; }
99
public int SeriesIndex { get; set; }
1010

11-
public IDataPoint<TItem> DataPoint { get; set; }
12-
public object Label { get; set; }
1311
}
1412

1513

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
namespace ApexCharts.Series
2+
{
3+
public class JSLegendClicked
4+
{
5+
public int SeriesIndex { get; set; }
6+
public bool Collapsed { get; set; }
7+
}
8+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
namespace ApexCharts
2+
{
3+
public class LegendClicked<TItem> where TItem : class
4+
{
5+
public Series<TItem> Series { get; set; }
6+
public bool Collapsed { get; set; }
7+
}
8+
}

0 commit comments

Comments
 (0)