| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.Event = exports.dataOf = void 0;
- const event_1 = require("../utils/event");
- function dataOf(element, view) {
- const { __data__: datum } = element;
- const { markKey, index, seriesIndex } = datum;
- const { markState } = view;
- const selectedMark = Array.from(markState.keys()).find((mark) => mark.key === markKey);
- if (!selectedMark)
- return;
- if (seriesIndex) {
- return seriesIndex.map((i) => selectedMark.data[i]);
- }
- return selectedMark.data[index];
- }
- exports.dataOf = dataOf;
- function bubblesEvent(eventType, view, emitter, predicate = (event) => true) {
- return (e) => {
- if (!predicate(e))
- return;
- // Emit plot events.
- emitter.emit(`plot:${eventType}`, e);
- const { target } = e;
- // There is no target for pointerupoutside event if out of canvas.
- if (!target)
- return;
- const { className: elementType, markType } = target;
- // If target area is plot area, do not emit extra events.
- if (elementType === 'plot')
- return;
- // Emit wrapped events.
- if (elementType === 'element') {
- const e1 = Object.assign(Object.assign({}, e), { nativeEvent: true, data: { data: dataOf(target, view) } });
- emitter.emit(`element:${eventType}`, e1);
- emitter.emit(`${markType}:${eventType}`, e1);
- }
- else {
- // @todo Handle click axis and legend.
- emitter.emit(`${elementType}:${eventType}`, e);
- }
- };
- }
- // @todo Provide more info for event.dataset.
- function Event() {
- return (context, _, emitter) => {
- const { container, view } = context;
- // Click events.
- const click = bubblesEvent(event_1.ChartEvent.CLICK, view, emitter, (e) => e.detail === 1);
- const dblclick = bubblesEvent(event_1.ChartEvent.DBLCLICK, view, emitter, (e) => e.detail === 2);
- // Pointer events.
- const pointertap = bubblesEvent(event_1.ChartEvent.POINTER_TAP, view, emitter);
- const pointerdown = bubblesEvent(event_1.ChartEvent.POINTER_DOWN, view, emitter);
- const pointerup = bubblesEvent(event_1.ChartEvent.POINTER_UP, view, emitter);
- const pointerover = bubblesEvent(event_1.ChartEvent.POINTER_OVER, view, emitter);
- const pointerout = bubblesEvent(event_1.ChartEvent.POINTER_OUT, view, emitter);
- const pointermove = bubblesEvent(event_1.ChartEvent.POINTER_MOVE, view, emitter);
- const pointerenter = bubblesEvent(event_1.ChartEvent.POINTER_ENTER, view, emitter);
- const pointerleave = bubblesEvent(event_1.ChartEvent.POINTER_LEAVE, view, emitter);
- const pointerupoutside = bubblesEvent(event_1.ChartEvent.POINTER_UPOUTSIDE, view, emitter);
- // Drag and drop events.
- const dragstart = bubblesEvent(event_1.ChartEvent.DRAG_START, view, emitter);
- const drag = bubblesEvent(event_1.ChartEvent.DRAG, view, emitter);
- const dragend = bubblesEvent(event_1.ChartEvent.DRAG_END, view, emitter);
- const dragenter = bubblesEvent(event_1.ChartEvent.DRAG_ENTER, view, emitter);
- const dragleave = bubblesEvent(event_1.ChartEvent.DRAG_LEAVE, view, emitter);
- const dragover = bubblesEvent(event_1.ChartEvent.DRAG_OVER, view, emitter);
- const drop = bubblesEvent(event_1.ChartEvent.DROP, view, emitter);
- // For legacy usage.
- container.addEventListener('click', click);
- container.addEventListener('click', dblclick);
- // Recommend events.
- container.addEventListener('pointertap', pointertap);
- container.addEventListener('pointerdown', pointerdown);
- container.addEventListener('pointerup', pointerup);
- container.addEventListener('pointerover', pointerover);
- container.addEventListener('pointerout', pointerout);
- container.addEventListener('pointermove', pointermove);
- container.addEventListener('pointerenter', pointerenter);
- container.addEventListener('pointerleave', pointerleave);
- container.addEventListener('pointerupoutside', pointerupoutside);
- // Plugin events.
- container.addEventListener('dragstart', dragstart);
- container.addEventListener('drag', drag);
- container.addEventListener('dragend', dragend);
- container.addEventListener('dragenter', dragenter);
- container.addEventListener('dragleave', dragleave);
- container.addEventListener('dragover', dragover);
- container.addEventListener('drop', drop);
- return () => {
- container.removeEventListener('click', click);
- container.removeEventListener('click', dblclick);
- container.removeEventListener('pointertap', pointertap);
- container.removeEventListener('pointerdown', pointerdown);
- container.removeEventListener('pointerup', pointerup);
- container.removeEventListener('pointerover', pointerover);
- container.removeEventListener('pointerout', pointerout);
- container.removeEventListener('pointermove', pointermove);
- container.removeEventListener('pointerenter', pointerenter);
- container.removeEventListener('pointerleave', pointerleave);
- container.removeEventListener('pointerupoutside', pointerupoutside);
- container.removeEventListener('dragstart', dragstart);
- container.removeEventListener('drag', drag);
- container.removeEventListener('dragend', dragend);
- container.removeEventListener('dragenter', dragenter);
- container.removeEventListener('dragleave', dragleave);
- container.removeEventListener('dragover', dragover);
- container.removeEventListener('drop', drop);
- };
- };
- }
- exports.Event = Event;
- //# sourceMappingURL=event.js.map
|