Skip to content

Commit 8799f81

Browse files
committed
Fix event listener cleanup
1 parent d4e0cbb commit 8799f81

File tree

2 files changed

+19
-14
lines changed

2 files changed

+19
-14
lines changed

Tevling/Pages/Statistics.razor.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ public string IncreaseVsDecrease(string increase, string decrease)
5555
private Athlete _athlete = null!;
5656
private Activity[] _activities = [];
5757
private IJSObjectReference? _module;
58+
private IJSObjectReference? _resizeHandler;
5859

5960
private TimePeriod TimePeriod { get; set; } = TimePeriod.Months;
6061
private int NumberOfPeriodsToReview { get; set; } = 3;
@@ -263,16 +264,22 @@ await _module.InvokeVoidAsync(
263264
throw new Exception("Unknown challenge measurement");
264265
}
265266

266-
await _module.InvokeVoidAsync("enableCanvasResize", "TheChart");
267+
_resizeHandler ??= await _module.InvokeAsync<IJSObjectReference>("enableCanvasResize", "TheChart");
267268
}
268269

269270
public async ValueTask DisposeAsync()
270271
{
271272
try
272273
{
274+
if (_resizeHandler != null)
275+
{
276+
await _resizeHandler.InvokeVoidAsync("dispose");
277+
await _resizeHandler.DisposeAsync();
278+
_resizeHandler = null;
279+
}
280+
273281
if (_module != null)
274282
{
275-
await _module.InvokeVoidAsync("disposeCanvasResize", "TheChart");
276283
await _module.DisposeAsync();
277284
_module = null;
278285
}

Tevling/Pages/Statistics.razor.js

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -73,20 +73,18 @@ export function isMobile() {
7373
return window.matchMedia('(max-width: 576px)').matches;
7474
}
7575

76-
77-
function handleCanvasResize(chartName) {
78-
const canvas = document.getElementById(chartName);
79-
if (canvas && window[chartName] instanceof Chart) {
80-
window[chartName].resize(); // Resize Chart.js instance on canvas resize
81-
}
82-
}
83-
8476
export function enableCanvasResize(chartName) {
8577
// Add event listener for window resize
86-
window.addEventListener('resize', () => handleCanvasResize(chartName));
87-
}
78+
const handleCanvasResize = () => {
79+
const canvas = document.getElementById(chartName);
80+
if (canvas && window[chartName] instanceof Chart) {
81+
window[chartName].resize(); // Resize Chart.js instance on canvas resize
82+
}
83+
}
84+
window.addEventListener('resize', handleCanvasResize);
8885

89-
export function disposeCanvasResize(chartName) {
90-
window.removeEventListener('resize', () => handleCanvasResize(chartName));
86+
return {
87+
dispose: () => window.removeEventListener('resize', handleCanvasResize)
88+
};
9189
}
9290

0 commit comments

Comments
 (0)