From ff47c558e1dd89b26b87372cd7a13a64e0899c13 Mon Sep 17 00:00:00 2001 From: Jacco van den Berg Date: Wed, 1 Dec 2021 18:34:39 +0100 Subject: [PATCH] add documentation of destroy lifecylce, add afterDestroy hook and deprecate destroy --- docs/developers/destroy_flowchart.png | Bin 0 -> 18626 bytes docs/developers/plugins.md | 8 ++++++++ src/core/core.controller.js | 1 + src/core/core.plugins.js | 2 +- types/index.esm.d.ts | 8 ++++++++ 5 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 docs/developers/destroy_flowchart.png diff --git a/docs/developers/destroy_flowchart.png b/docs/developers/destroy_flowchart.png new file mode 100644 index 0000000000000000000000000000000000000000..c8d5cbab51e88aa1259dc0564fe7c3415087c84e GIT binary patch literal 18626 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%0D#B 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 literal 0 HcmV?d00001 diff --git a/docs/developers/plugins.md b/docs/developers/plugins.md index 64efe2096ba..4ee9e5ba517 100644 --- a/docs/developers/plugins.md +++ b/docs/developers/plugins.md @@ -147,3 +147,11 @@ Plugins can interact with the chart throughout the render process. The rendering Plugins can interact with the chart during the event handling process. The event handling flow is documented in the flowchart below. Each of the green processes is a plugin notification. If a plugin makes changes that require a re-render, the plugin can set `args.changed` to `true` to indicate that a render is needed. The built-in tooltip plugin uses this method to indicate when the tooltip has changed. ![Chart.js event handling flowchart](./event_flowchart.png) + + +### Chart destroy + +Plugins are notified during the destroy process. These hooks can be used to destroy things that the plugin made and used during its life. +The `destroy` hook has been deprecated since Chart.js version 3.7.0, use the `afterDestroy` hook instead. + +![Chart.js destroy flowchart](./destroy_flowchart.png) diff --git a/src/core/core.controller.js b/src/core/core.controller.js index 72b88482d15..932e5c00135 100644 --- a/src/core/core.controller.js +++ b/src/core/core.controller.js @@ -906,6 +906,7 @@ class Chart { } this.notifyPlugins('destroy'); + this.notifyPlugins('afterDestroy'); delete instances[this.id]; } diff --git a/src/core/core.plugins.js b/src/core/core.plugins.js index 480f4239133..27a07bb0c91 100644 --- a/src/core/core.plugins.js +++ b/src/core/core.plugins.js @@ -41,7 +41,7 @@ export default class PluginService { const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart); const result = this._notify(descriptors, chart, hook, args); - if (hook === 'destroy') { + if (hook === 'afterDestroy') { this._notify(descriptors, chart, 'stop'); this._notify(this._init, chart, 'uninstall'); } diff --git a/types/index.esm.d.ts b/types/index.esm.d.ts index f50821f1f92..4cb27f3aab1 100644 --- a/types/index.esm.d.ts +++ b/types/index.esm.d.ts @@ -1065,8 +1065,16 @@ export interface Plugin exte * @param {Chart} chart - The chart instance. * @param {object} args - The call arguments. * @param {object} options - The plugin options. + * @deprecated since version 3.7.0 in favour of afterDestroy */ destroy?(chart: Chart, args: EmptyObject, options: O): void; + /** + * Called after the chart has been destroyed. + * @param {Chart} chart - The chart instance. + * @param {object} args - The call arguments. + * @param {object} options - The plugin options. + */ + afterDestroy?(chart: Chart, args: EmptyObject, options: O): void; /** * Called after chart is destroyed on all plugins that were installed for that chart. This hook is also invoked for disabled plugins (options === false). * @param {Chart} chart - The chart instance.