forked from bitfoundation/bitplatform
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBitChart.razor.cs
183 lines (146 loc) · 8.19 KB
/
BitChart.razor.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
// a fork from https://github.com/mariusmuntean/ChartJs.Blazor
using System.Diagnostics.CodeAnalysis;
namespace Bit.BlazorUI;
/// <summary>
/// Simple and flexible charting component for data visualization, which supports eight chart types: bar, line, area, pie, bubble, radar, polar, and scatter.
/// </summary>
public partial class BitChart : IAsyncDisposable
{
private bool _disposed;
[Inject] private IJSRuntime _js { get; set; } = default!;
/// <summary>
/// The configuration of the chart.
/// </summary>
[Parameter] public BitChartConfigBase? Config { get; set; }
/// <summary>
/// The height of the canvas HTML element.
/// Use <see langword="null"/> when using <see cref="BitChartBaseConfigOptions.AspectRatio"/>.
/// </summary>
[Parameter] public int? Height { get; set; }
/// <summary>
/// This event is fired when the chart has been setup through interop and
/// the JavaScript chart object is available. Use this callback if you need to setup
/// custom JavaScript options or register plugins.
/// </summary>
[Parameter] public EventCallback SetupCompletedCallback { get; set; }
/// <summary>
/// The width of the canvas HTML element.
/// </summary>
[Parameter] public int? Width { get; set; }
/// <summary>
/// Whether the date adapter is required for the current configuration.
/// By default BitChart uses the date-fns adapter. you can change the adapter using <see cref="BitChart.DateAdapterScripts"/>.
/// for more info check out https://www.chartjs.org/docs/2.9.4/axes/cartesian/time.html#date-adapters
/// </summary>
[Parameter] public bool IsDateAdapterRequired { get; set; }
/// <summary>
/// The list of scripts required for the customized chartjs date adapter.
/// see available adapters here: https://github.com/chartjs/awesome#adapters
/// </summary>
[Parameter] public IEnumerable<string>? DateAdapterScripts { get; set; }
/// <summary>
/// Updates the chart.
/// <para>
/// Call this method after you've updated the <see cref="Config"/>.
/// </para>
/// </summary>
public Task Update()
{
if (Config is null) return Task.CompletedTask;
return _js.BitChartJsUpdateChart(Config).AsTask();
}
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartBarConfig))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartBubbleConfig))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartLineConfig))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartPieConfig))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartPolarAreaConfig))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartRadarConfig))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartScatterConfig))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartConfigBase<,>))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartConfigBase<>))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(JsonStringEnumConverter))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(IndexableOptionConverter))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(FloatingBarPointConverter))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(ClippingJsonConverter))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(JsonWriteOnlyConverter<>))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(JsonObjectEnumConverter))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartBarOptions))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartBubbleOptions))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartBaseConfigOptions))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartLineOptions))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartPieOptions))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartPolarAreaOptions))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartRadarOptions))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartIndexableOption<>))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartBarDataset<>))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartBubbleDataset))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartDataset<>))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartLineDataset<>))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartPieDataset))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartPolarAreaDataset))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartRadarDataset))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartLegend))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartPosition))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartTooltips))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartAnimation))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartBarScales))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartScales))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartCartesianTicks))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartCategoryTicks))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartLinearCartesianTicks))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartLogarithmicTicks))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartTimeTicks))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartBarCategoryAxis))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartBarLinearCartesianAxis))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartBarLogarithmicAxis))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartBarTimeAxis))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartCartesianAxis))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartCartesianAxis<>))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartCategoryAxis))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartLinearCartesianAxis))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartLogarithmicAxis))]
[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(BitChartTimeAxis))]
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
await _js.BitExtrasInitScripts(["_content/Bit.BlazorUI.Extras/chart.js/chartjs-2.9.4.js"]);
if (IsDateAdapterRequired && DateAdapterScripts is null)
{
await _js.BitExtrasInitScripts(["_content/Bit.BlazorUI.Extras/chart.js/chartjs-2.9.4-adapter.js"]);
}
if (DateAdapterScripts is not null)
{
await _js.BitExtrasInitScripts(DateAdapterScripts);
}
if (Config is not null)
{
await _js.BitChartJsSetupChart(Config);
}
await SetupCompletedCallback.InvokeAsync(this);
return;
}
if (Config is not null)
{
await _js.BitChartJsSetupChart(Config);
}
}
public async ValueTask DisposeAsync()
{
await DisposeAsync(true);
GC.SuppressFinalize(this);
}
protected virtual async ValueTask DisposeAsync(bool disposing)
{
if (_disposed || disposing is false) return;
try
{
if (Config is not null)
{
await _js.BitChartJsRemoveChart(Config.CanvasId);
}
}
catch (JSDisconnectedException) { } // we can ignore this exception here
_disposed = true;
}
}