@devexperts/dxcharts-lite
Version:
67 lines (66 loc) • 3.21 kB
JavaScript
/*
* Copyright (C) 2019 - 2025 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 { CanvasElement } from '../../canvas/canvas-bounds-container';
import { ChartBaseElement } from '../../model/chart-base-element';
import { recalculateXFormatter } from '../../model/date-time.formatter';
import { merge } from '../../utils/merge.utils';
import { EventsHitTestDrawer } from './events-hit-test.drawer';
import { EventsDrawer } from './events.drawer';
import { EventsModel } from './events.model';
export class EventsComponent extends ChartBaseElement {
constructor(config, canvasModel, hitTestCanvasModel, chartModel, canvasBoundsContainer, drawingManager, formatterFactory, cursorHandler) {
super();
this.config = config;
this.canvasModel = canvasModel;
this.canvasBoundsContainer = canvasBoundsContainer;
this.drawingManager = drawingManager;
this.formatterFactory = formatterFactory;
this.eventsXAxisLabelFormatterProvider = () => recalculateXFormatter(this.config.components.events.xAxisLabelFormat, chartModel.getPeriod(), this.formatterFactory);
const eventsModel = new EventsModel(canvasModel);
this.eventsModel = eventsModel;
this.addChildEntity(eventsModel);
hitTestCanvasModel.addSubscriber(eventsModel);
const eventsDrawer = new EventsDrawer(canvasModel, chartModel, config, canvasBoundsContainer, eventsModel, this.eventsXAxisLabelFormatterProvider);
this.drawingManager.addDrawer(eventsDrawer, 'EVENTS');
const eventsHitTestDrawer = new EventsHitTestDrawer(hitTestCanvasModel, chartModel, config, canvasBoundsContainer, eventsModel, () => hitTestCanvasModel.hitTestDrawersPredicateSubject.getValue());
this.drawingManager.addDrawerBefore(eventsHitTestDrawer, 'HIT_TEST_EVENTS', 'HIT_TEST_DRAWINGS');
cursorHandler.setCursorForCanvasEl(CanvasElement.EVENTS, config.components.events.cursor);
}
/**
* Sets the new event list.
* @param events
*/
setEvents(events) {
this.eventsModel.setEvents(events);
this.canvasModel.fireDraw();
}
/**
* Changes the component visibility.
* @param visible
*/
setVisible(visible) {
this.config.components.events.visible = visible;
this.canvasBoundsContainer.recalculateBounds();
this.canvasModel.fireDraw();
}
/**
* Changes visibility for the specific event type.
* For example, to turn off dividends visibility you can call this method with { dividends: false } argument
*/
setEventTypeVisible(eventsVisibility) {
merge(this.config.components.events.eventsVisibility, eventsVisibility, {
overrideExisting: true,
addIfMissing: false,
});
this.canvasModel.fireDraw();
}
/**
* Observes hovered event when mouse moves in, and provides null when mouse moves out.
*/
observeEventHovered() {
return this.eventsModel.hoveredEvent.asObservable();
}
}