Skip to content

Commit

Permalink
Make Chart static properties and methods read only (#8431)
Browse files Browse the repository at this point in the history
  • Loading branch information
kurkle authored Feb 15, 2021
1 parent c4bc737 commit 5baafac
Showing 1 changed file with 48 additions and 22 deletions.
70 changes: 48 additions & 22 deletions src/core/core.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,12 @@ function getCanvas(item) {
return item;
}

const instances = {};
const getChart = (key) => {
const canvas = getCanvas(key);
return Object.values(instances).filter((c) => c.canvas === canvas).pop();
};

class Chart {

// eslint-disable-next-line max-statements
Expand All @@ -74,7 +80,7 @@ class Chart {

this.config = config = new Config(config);
const initialCanvas = getCanvas(item);
const existingChart = Chart.getChart(initialCanvas);
const existingChart = getChart(initialCanvas);
if (existingChart) {
throw new Error(
'Canvas is already in use. Chart with ID \'' + existingChart.id + '\'' +
Expand Down Expand Up @@ -118,7 +124,7 @@ class Chart {
this.$context = undefined;

// Add the chart instance to the global namespace
Chart.instances[me.id] = me;
instances[me.id] = me;

if (!context || !canvas) {
// The given item is not a compatible context2d element, let's return before finalizing
Expand Down Expand Up @@ -840,7 +846,7 @@ class Chart {

me.notifyPlugins('destroy');

delete Chart.instances[me.id];
delete instances[me.id];
}

toBase64Image(...args) {
Expand Down Expand Up @@ -1090,27 +1096,47 @@ class Chart {
}
}

// These are available to both, UMD and ESM packages
Chart.defaults = defaults;
Chart.instances = {};
Chart.registry = registry;
Chart.version = version;

Chart.getChart = (key) => {
const canvas = getCanvas(key);
return Object.values(Chart.instances).filter((c) => c.canvas === canvas).pop();
};

// @ts-ignore
const invalidatePlugins = () => each(Chart.instances, (chart) => chart._plugins.invalidate());

Chart.register = (...items) => {
registry.add(...items);
invalidatePlugins();
};
Chart.unregister = (...items) => {
registry.remove(...items);
invalidatePlugins();
};
const enumerable = true;

// These are available to both, UMD and ESM packages. Read Only!
Object.defineProperties(Chart, {
defaults: {
enumerable,
value: defaults
},
instances: {
enumerable,
value: instances
},
registry: {
enumerable,
value: registry
},
version: {
enumerable,
value: version
},
getChart: {
enumerable,
value: getChart
},
register: {
enumerable,
value: (...items) => {
registry.add(...items);
invalidatePlugins();
}
},
unregister: {
enumerable,
value: (...items) => {
registry.remove(...items);
invalidatePlugins();
}
}
});

export default Chart;

0 comments on commit 5baafac

Please sign in to comment.