Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: new apis for updating chart #881

Merged
merged 1 commit into from
May 13, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 1 addition & 5 deletions Demos/Blazorise.Demo/Pages/Tests/ChartsPage.razor
Original file line number Diff line number Diff line change
Expand Up @@ -120,11 +120,7 @@
{
await chart.Clear();

await chart.AddLabel( Labels );

await chart.AddDataSet( getDataSet() );

await chart.Update();
await chart.AddLabelsDatasetsAndUpdate( Labels, getDataSet() );
}

ChartDataset<double> GetChartDataset()
Expand Down
26 changes: 6 additions & 20 deletions Demos/Blazorise.Demo/Pages/Tests/LiveChartsPage.razor.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Blazorise.Charts;
Expand Down Expand Up @@ -172,21 +173,14 @@ async Task HandleRedraw<TDataSet, TItem, TOptions, TModel>( BaseChart<TDataSet,
{
await chart.Clear();

await chart.AddLabel( Labels );

foreach ( var getDataSet in getDataSets )
{
await chart.AddDataSet( getDataSet() );
}

await chart.Update();
await chart.AddLabelsDatasetsAndUpdate( Labels, getDataSets.Select( x => x.Invoke() ).ToArray() );
}

async Task AddNewHorizontalLineDataSet()
{
var colorIndex = horizontalLineChart.Data.Datasets.Count % backgroundColors.Count;

await horizontalLineChart.AddDataSet( new LineChartDataset<LiveDataPoint>
await horizontalLineChart.AddDatasetsAndUpdate( new LineChartDataset<LiveDataPoint>
{
Data = new List<LiveDataPoint>(),
Label = $"Dataset {horizontalLineChart.Data.Datasets.Count + 1}",
Expand All @@ -195,8 +189,6 @@ async Task AddNewHorizontalLineDataSet()
Fill = false,
LineTension = 0,
} );

await horizontalLineChart.Update();
}

async Task AddNewHorizontalLineData()
Expand All @@ -217,7 +209,7 @@ async Task AddNewVerticalLineDataSet()
{
var colorIndex = verticalLineChart.Data.Datasets.Count % backgroundColors.Count;

await verticalLineChart.AddDataSet( new LineChartDataset<LiveDataPoint>
await verticalLineChart.AddDatasetsAndUpdate( new LineChartDataset<LiveDataPoint>
{
Data = new List<LiveDataPoint>(),
Label = $"Dataset {verticalLineChart.Data.Datasets.Count + 1}",
Expand All @@ -226,8 +218,6 @@ async Task AddNewVerticalLineDataSet()
Fill = false,
LineTension = 0,
} );

await verticalLineChart.Update();
}

async Task AddNewVerticalLineData()
Expand All @@ -248,15 +238,13 @@ async Task AddNewHorizontalBarDataSet()
{
var colorIndex = horizontalBarChart.Data.Datasets.Count % backgroundColors.Count;

await horizontalBarChart.AddDataSet( new BarChartDataset<LiveDataPoint>
await horizontalBarChart.AddDatasetsAndUpdate( new BarChartDataset<LiveDataPoint>
{
Data = new List<LiveDataPoint>(),
Label = $"Dataset {horizontalBarChart.Data.Datasets.Count + 1}",
BackgroundColor = backgroundColors[colorIndex],
BorderColor = borderColors[colorIndex],
} );

await horizontalBarChart.Update();
}

async Task AddNewHorizontalBarData()
Expand All @@ -277,15 +265,13 @@ async Task AddNewVerticalBarDataSet()
{
var colorIndex = verticalBarChart.Data.Datasets.Count % backgroundColors.Count;

await verticalBarChart.AddDataSet( new BarChartDataset<LiveDataPoint>
await verticalBarChart.AddDatasetsAndUpdate( new BarChartDataset<LiveDataPoint>
{
Data = new List<LiveDataPoint>(),
Label = $"Dataset {verticalBarChart.Data.Datasets.Count + 1}",
BackgroundColor = backgroundColors[colorIndex],
BorderColor = borderColors[colorIndex],
} );

await verticalBarChart.Update();
}

async Task AddNewVerticalBarData()
Expand Down
99 changes: 69 additions & 30 deletions Source/Extensions/Blazorise.Charts/BaseChart.cs
Original file line number Diff line number Diff line change
Expand Up @@ -101,8 +101,8 @@ public async Task Clear()
{
dirty = true;

Data?.Labels?.Clear();
Data?.Datasets?.Clear();
Labels.Clear();
Datasets.Clear();

if ( initialized )
await JS.Clear( JSRuntime, ElementId );
Expand All @@ -111,41 +111,29 @@ public async Task Clear()
/// <summary>
/// Adds a new label to the chart.
/// </summary>
/// <param name="label">Label name(s).</param>
public async Task AddLabel( params string[] label )
/// <param name="labels">Label name(s).</param>
public async Task AddLabel( params string[] labels )
{
dirty = true;

if ( Data == null )
Data = new ChartData<TItem>();

if ( Data.Labels == null )
Data.Labels = new List<string>();

Data.Labels.AddRange( label );
Labels.AddRange( labels );

if ( initialized )
await JS.AddLabel( JSRuntime, ElementId, label );
await JS.AddLabel( JSRuntime, ElementId, labels );
}

/// <summary>
/// Adds a new dataset to the chart.
/// </summary>
/// <param name="dataSet">Data set(s).</param>
public async Task AddDataSet( params TDataSet[] dataSet )
/// <param name="datasets">Data set(s).</param>
public async Task AddDataSet( params TDataSet[] datasets )
{
dirty = true;

if ( Data == null )
Data = new ChartData<TItem>();

if ( Data.Datasets == null )
Data.Datasets = new List<ChartDataset<TItem>>();

Data.Datasets.AddRange( dataSet );
Datasets.AddRange( datasets );

if ( initialized )
await JS.AddDataSet( JSRuntime, ElementId, dataSet );
await JS.AddDataSet( JSRuntime, ElementId, datasets );
}

/// <summary>
Expand All @@ -158,19 +146,42 @@ public async Task AddData( int dataSetIndex, params TItem[] data )
{
dirty = true;

if ( Data == null )
Data = new ChartData<TItem>();
Datasets[dataSetIndex].Data.AddRange( data );

if ( Data.Datasets == null )
Data.Datasets = new List<ChartDataset<TItem>>();
if ( initialized )
await JS.AddData( JSRuntime, ElementId, dataSetIndex, data );
}

if ( Data.Datasets[dataSetIndex].Data == null )
Data.Datasets[dataSetIndex].Data = new List<TItem>();
/// <summary>
/// Adds new datasets and then update the chart.
/// </summary>
/// <param name="datasets">List of datasets.</param>
/// <returns></returns>
public async Task AddDatasetsAndUpdate( params TDataSet[] datasets )
{
dirty = true;

Data.Datasets[dataSetIndex].Data.AddRange( data );
Datasets.AddRange( datasets );

if ( initialized )
await JS.AddData( JSRuntime, ElementId, dataSetIndex, data );
await JS.AddDatasetsAndUpdate( JSRuntime, ElementId, datasets );
}

/// <summary>
/// Adds new set of labels and datasets and then update the chart.
/// </summary>
/// <param name="labels">List of labels.</param>
/// <param name="datasets">List of datasets.</param>
/// <returns></returns>
public async Task AddLabelsDatasetsAndUpdate( IReadOnlyCollection<string> labels, params TDataSet[] datasets )
{
dirty = true;

Labels.AddRange( labels );
Datasets.AddRange( datasets );

if ( initialized )
await JS.AddLabelsDatasetsAndUpdate( JSRuntime, ElementId, labels, datasets );
}

/// <summary>
Expand Down Expand Up @@ -255,6 +266,34 @@ private object Serialize( string data )

#region Properties

protected List<string> Labels
{
get
{
if ( Data == null )
Data = new ChartData<TItem>();

if ( Data.Labels == null )
Data.Labels = new List<string>();

return Data.Labels;
}
}

protected List<ChartDataset<TItem>> Datasets
{
get
{
if ( Data == null )
Data = new ChartData<TItem>();

if ( Data.Datasets == null )
Data.Datasets = new List<ChartDataset<TItem>>();

return Data.Datasets;
}
}

/// <summary>
/// Defines the chart type.
/// </summary>
Expand Down
43 changes: 27 additions & 16 deletions Source/Extensions/Blazorise.Charts/JS.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#region Using directives
using Microsoft.JSInterop;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
#endregion
Expand Down Expand Up @@ -29,9 +30,9 @@ public static void DisposeDotNetObjectRef( DotNetObjectReference<ChartAdapter> d
}
}

public static ValueTask<bool> Initialize<TItem, TOptions>( IJSRuntime runtime, DotNetObjectReference<ChartAdapter> dotNetObjectReference, bool hasClickEvent, bool hasHoverEvent, string canvasId, ChartType type, ChartData<TItem> data, TOptions options, string dataJsonString, string optionsJsonString, object optionsObject )
public static ValueTask Initialize<TItem, TOptions>( IJSRuntime runtime, DotNetObjectReference<ChartAdapter> dotNetObjectReference, bool hasClickEvent, bool hasHoverEvent, string canvasId, ChartType type, ChartData<TItem> data, TOptions options, string dataJsonString, string optionsJsonString, object optionsObject )
{
return runtime.InvokeAsync<bool>( "blazoriseCharts.initialize",
return runtime.InvokeVoidAsync( "blazoriseCharts.initialize",
dotNetObjectReference,
hasClickEvent,
hasHoverEvent,
Expand All @@ -44,39 +45,49 @@ public static ValueTask<bool> Initialize<TItem, TOptions>( IJSRuntime runtime, D
optionsObject );
}

public static ValueTask<bool> Destroy( IJSRuntime runtime, string canvasId )
public static ValueTask Destroy( IJSRuntime runtime, string canvasId )
{
return runtime.InvokeAsync<bool>( "blazoriseCharts.destroy", canvasId );
return runtime.InvokeVoidAsync( "blazoriseCharts.destroy", canvasId );
}

public static ValueTask<bool> SetOptions<TOptions>( IJSRuntime runtime, string canvasId, TOptions options, string optionsJsonString, object optionsObject )
public static ValueTask SetOptions<TOptions>( IJSRuntime runtime, string canvasId, TOptions options, string optionsJsonString, object optionsObject )
{
return runtime.InvokeAsync<bool>( "blazoriseCharts.setOptions", canvasId, options, optionsJsonString, optionsObject );
return runtime.InvokeVoidAsync( "blazoriseCharts.setOptions", canvasId, options, optionsJsonString, optionsObject );
}

public static ValueTask<bool> Update( IJSRuntime runtime, string canvasId )
public static ValueTask Update( IJSRuntime runtime, string canvasId )
{
return runtime.InvokeAsync<bool>( "blazoriseCharts.update", canvasId );
return runtime.InvokeVoidAsync( "blazoriseCharts.update", canvasId );
}

public static ValueTask<bool> Clear( IJSRuntime runtime, string canvasId )
public static ValueTask Clear( IJSRuntime runtime, string canvasId )
{
return runtime.InvokeAsync<bool>( "blazoriseCharts.clear", canvasId );
return runtime.InvokeVoidAsync( "blazoriseCharts.clear", canvasId );
}

public static ValueTask<bool> AddLabel( IJSRuntime runtime, string canvasId, params string[] labels )
public static ValueTask AddLabel( IJSRuntime runtime, string canvasId, IReadOnlyCollection<string> newLabels )
{
return runtime.InvokeAsync<bool>( "blazoriseCharts.addLabel", canvasId, labels );
return runtime.InvokeVoidAsync( "blazoriseCharts.addLabel", canvasId, newLabels );
}

public static ValueTask<bool> AddDataSet( IJSRuntime runtime, string canvasId, params object[] newDataSet )
public static ValueTask AddDataSet( IJSRuntime runtime, string canvasId, IReadOnlyCollection<object> newDataSet )
{
return runtime.InvokeAsync<bool>( "blazoriseCharts.addDataset", canvasId, newDataSet );
return runtime.InvokeVoidAsync( "blazoriseCharts.addDataset", canvasId, newDataSet );
}

public static ValueTask<bool> AddData<TItem>( IJSRuntime runtime, string canvasId, int dataSetIndex, params TItem[] newData )
public static ValueTask AddDatasetsAndUpdate( IJSRuntime runtime, string canvasId, IReadOnlyCollection<object> newDataSet )
{
return runtime.InvokeAsync<bool>( "blazoriseCharts.addData", canvasId, dataSetIndex, newData );
return runtime.InvokeVoidAsync( "blazoriseCharts.addDatasetsAndUpdate", canvasId, newDataSet );
}

public static ValueTask AddLabelsDatasetsAndUpdate( IJSRuntime runtime, string canvasId, IReadOnlyCollection<string> newLabels, IReadOnlyCollection<object> newDataSet )
{
return runtime.InvokeVoidAsync( "blazoriseCharts.addLabelsDatasetsAndUpdate", canvasId, newLabels, newDataSet );
}

public static ValueTask AddData<TItem>( IJSRuntime runtime, string canvasId, int dataSetIndex, IReadOnlyCollection<TItem> newData )
{
return runtime.InvokeVoidAsync( "blazoriseCharts.addData", canvasId, dataSetIndex, newData );
}

public static string ToChartTypeString( ChartType type )
Expand Down
Loading