@devexperts/dxcharts-lite
Version:
73 lines (72 loc) • 2.32 kB
JavaScript
/*
* Copyright (C) 2019 - 2026 Devexperts Solutions IE Limited
* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
* If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
import { findKeyFromValue } from '../utils/object.utils';
import { flat } from '../utils/array.utils';
/**
* Container for grouping multiple drawers.
* Try to keep simple, not overkill with sorting.
*/
export class CompositeDrawer {
constructor(drawers) {
this.drawers = drawers !== null && drawers !== void 0 ? drawers : new Map();
}
draw() {
this.drawers.forEach(d => d.draw());
}
addDrawer(drawer, drawerName) {
const name = drawerName !== null && drawerName !== void 0 ? drawerName : 'drawer' + this.drawers.size;
this.drawers.set(name, drawer);
}
// TODO rework, move to specific candle composite drawer maybe
drawLastBar() {
this.drawers.forEach(d => d.drawLastBar && d.drawLastBar());
}
removeDrawer(drawer) {
const name = findKeyFromValue(this.drawers, drawer);
if (name) {
this.drawers.delete(name);
}
else {
console.warn(`Couldn't find drawer type`);
}
}
removeDrawerByName(drawerName) {
this.drawers.delete(drawerName);
}
getDrawer(drawerName) {
return this.drawers.get(drawerName);
}
moveTop(drawer) {
const name = findKeyFromValue(this.drawers, drawer);
if (name) {
this.moveTopByName(name);
}
else {
console.warn(`Couldn't find drawer type`);
}
}
moveTopByName(drawerName) {
if (this.drawers.size === 1) {
return;
}
const drawerInMap = this.drawers.get(drawerName);
this.drawers.delete(drawerName);
if (drawerInMap) {
this.drawers.set(drawerName, drawerInMap);
}
}
getSize() {
return this.drawers.size;
}
getAll() {
return this.drawers;
}
getCanvasIds() {
const canvasIds = flat(Array.from(this.drawers).map(([, d]) => d.getCanvasIds()));
const distinctedCanvasIds = new Set([...canvasIds]);
return Array.from(distinctedCanvasIds);
}
}