feat: clone options before building
This commit is contained in:
parent
d034192373
commit
d357370b6a
@ -6,9 +6,12 @@ import { BASE_MEASURES, getExtraHeight, getExtraWidth, getTopOffset, getLeftOffs
|
|||||||
import { getColor, isValidColor } from '../utils/colors';
|
import { getColor, isValidColor } from '../utils/colors';
|
||||||
import { runSMILAnimation } from '../utils/animation';
|
import { runSMILAnimation } from '../utils/animation';
|
||||||
import { downloadFile, prepareForExport } from '../utils/export';
|
import { downloadFile, prepareForExport } from '../utils/export';
|
||||||
|
import { deepClone } from '../utils/helpers'
|
||||||
|
|
||||||
export default class BaseChart {
|
export default class BaseChart {
|
||||||
constructor(parent, options) {
|
constructor(parent, options) {
|
||||||
|
// deepclone options to avoid making changes to orignal object
|
||||||
|
options = deepClone(options)
|
||||||
|
|
||||||
this.parent = typeof parent === 'string'
|
this.parent = typeof parent === 'string'
|
||||||
? document.querySelector(parent)
|
? document.querySelector(parent)
|
||||||
|
|||||||
@ -115,3 +115,29 @@ export function round(d) {
|
|||||||
// https://www.jacklmoore.com/notes/rounding-in-javascript/
|
// https://www.jacklmoore.com/notes/rounding-in-javascript/
|
||||||
return Number(Math.round(d + 'e4') + 'e-4');
|
return Number(Math.round(d + 'e4') + 'e-4');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a deep clone of an object
|
||||||
|
* @param {Object} candidate Any Object
|
||||||
|
*/
|
||||||
|
export function deepClone(candidate) {
|
||||||
|
let cloned, value, key;
|
||||||
|
|
||||||
|
if (candidate instanceof Date) {
|
||||||
|
return new Date(candidate.getTime());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof candidate !== "object" || candidate === null) {
|
||||||
|
return candidate;
|
||||||
|
}
|
||||||
|
|
||||||
|
cloned = Array.isArray(candidate) ? [] : {};
|
||||||
|
|
||||||
|
for (key in candidate) {
|
||||||
|
value = candidate[key];
|
||||||
|
|
||||||
|
cloned[key] = deepClone(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return cloned;
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user