From 22d1ceecba276f9e4e23148f7951e09fc81bb0f0 Mon Sep 17 00:00:00 2001 From: Felix Schnabel Date: Fri, 28 Jun 2024 14:27:01 +0200 Subject: [PATCH] [Chart.js] Listen to Stimulus `disconnect` event to destroy the chart --- src/Chartjs/CHANGELOG.md | 4 ++++ src/Chartjs/assets/dist/controller.d.ts | 1 + src/Chartjs/assets/dist/controller.js | 7 +++++++ src/Chartjs/assets/src/controller.ts | 9 +++++++++ 4 files changed, 21 insertions(+) diff --git a/src/Chartjs/CHANGELOG.md b/src/Chartjs/CHANGELOG.md index 0bbaa88d6d8..2e4ed856fc6 100644 --- a/src/Chartjs/CHANGELOG.md +++ b/src/Chartjs/CHANGELOG.md @@ -1,5 +1,9 @@ # CHANGELOG +## 2.23.0 + +- Listen to Stimulus `disconnect` event to destroy the chart #1944 + ## 2.18.0 - Replace `chartjs/auto` import with explicit `Chart.register()` call #1263 diff --git a/src/Chartjs/assets/dist/controller.d.ts b/src/Chartjs/assets/dist/controller.d.ts index 4f1287e9048..bc05560d88b 100644 --- a/src/Chartjs/assets/dist/controller.d.ts +++ b/src/Chartjs/assets/dist/controller.d.ts @@ -6,6 +6,7 @@ export default class extends Controller { }; private chart; connect(): void; + disconnect(): void; viewValueChanged(): void; private dispatchEvent; } diff --git a/src/Chartjs/assets/dist/controller.js b/src/Chartjs/assets/dist/controller.js index 9432a885382..7caa0cb1b8e 100644 --- a/src/Chartjs/assets/dist/controller.js +++ b/src/Chartjs/assets/dist/controller.js @@ -35,6 +35,13 @@ class default_1 extends Controller { this.chart = new Chart(canvasContext, payload); this.dispatchEvent('connect', { chart: this.chart }); } + disconnect() { + this.dispatchEvent('disconnect', { chart: this.chart }); + if (this.chart) { + this.chart.destroy(); + this.chart = null; + } + } viewValueChanged() { if (this.chart) { const viewValue = { data: this.viewValue.data, options: this.viewValue.options }; diff --git a/src/Chartjs/assets/src/controller.ts b/src/Chartjs/assets/src/controller.ts index 5888eb3cd63..78b7daaa7a3 100644 --- a/src/Chartjs/assets/src/controller.ts +++ b/src/Chartjs/assets/src/controller.ts @@ -57,6 +57,15 @@ export default class extends Controller { this.dispatchEvent('connect', { chart: this.chart }); } + disconnect() { + this.dispatchEvent('disconnect', { chart: this.chart }); + + if (this.chart) { + this.chart.destroy(); + this.chart = null; + } + } + /** * If the underlying data or options change, let's update the chart! */