UNPKG

@devexperts/dxcharts-lite

Version:
67 lines (66 loc) 3.21 kB
/* * 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(); } }