Skip to content

Commit 449eeb4

Browse files
authored
Pass event instance to listeners (#451)
* Passes event instance to listeners * removes state argument from dispatchEvent because not used * removes function dispatchMoveEvents and merged in handleMoveEvents * code-climate * passes event.native (Event) instead of ChartEvent as argument * fallback to ChartEvent instead of native Event
1 parent 0151838 commit 449eeb4

File tree

3 files changed

+20
-19
lines changed

3 files changed

+20
-19
lines changed

docs/guide/interaction.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ The following options are available for all annotation types. These options can
1515

1616
| Name | Type | [Scriptable](options#scriptable-options) | Notes
1717
| ---- | ---- | :----: | ----
18-
| `enter` | `(context) => void` | No | Called when the mouse enters the annotation.
19-
| `leave` | `(context) => void` | No | Called when the mouse leaves the annotation.
20-
| `click` | `(context) => void` | No | Called when a single click occurs on the annotation.
21-
| `dblClick` | `(context) => void` | No | Called when a double click occurs on the annotation.
18+
| `enter` | `(context, event) => void` | No | Called when the mouse enters the annotation.
19+
| `leave` | `(context, event) => void` | No | Called when the mouse leaves the annotation.
20+
| `click` | `(context, event) => void` | No | Called when a single click occurs on the annotation.
21+
| `dblClick` | `(context, event) => void` | No | Called when a double click occurs on the annotation.

src/events.js

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -71,15 +71,16 @@ function handleMoveEvents(chart, state, event) {
7171
const previous = state.hovered;
7272
state.hovered = element;
7373

74-
dispatchMoveEvents(chart, state, previous, element);
74+
dispatchMoveEvents(chart, state, {previous, element}, event);
7575
}
7676

77-
function dispatchMoveEvents(chart, state, previous, element) {
77+
function dispatchMoveEvents(chart, state, elements, event) {
78+
const {previous, element} = elements;
7879
if (previous && previous !== element) {
79-
dispatchEvent(chart, state, previous.options.leave || state.listeners.leave, previous);
80+
dispatchEvent(chart, previous.options.leave || state.listeners.leave, previous, event);
8081
}
8182
if (element && element !== previous) {
82-
dispatchEvent(chart, state, element.options.enter || state.listeners.enter, element);
83+
dispatchEvent(chart, element.options.enter || state.listeners.enter, element, event);
8384
}
8485
}
8586

@@ -94,22 +95,22 @@ function handleClickEvents(chart, state, event, options) {
9495
// 2nd click before timeout, so its a double click
9596
clearTimeout(element.clickTimeout);
9697
delete element.clickTimeout;
97-
dispatchEvent(chart, state, dblclick, element);
98+
dispatchEvent(chart, dblclick, element, event);
9899
} else if (dblclick) {
99100
// if there is a dblclick handler, wait for dblClickSpeed ms before deciding its a click
100101
element.clickTimeout = setTimeout(() => {
101102
delete element.clickTimeout;
102-
dispatchEvent(chart, state, click, element);
103+
dispatchEvent(chart, click, element, event);
103104
}, options.dblClickSpeed);
104105
} else {
105106
// no double click handler, just call the click handler directly
106-
dispatchEvent(chart, state, click, element);
107+
dispatchEvent(chart, click, element, event);
107108
}
108109
}
109110
}
110111

111-
function dispatchEvent(chart, _state, handler, element) {
112-
callHandler(handler, [{chart, element}]);
112+
function dispatchEvent(chart, handler, element, event) {
113+
callHandler(handler, [{chart, element}, event]);
113114
}
114115

115116
function getNearestItem(elements, position) {

types/events.d.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import { Chart } from 'chart.js';
1+
import { Chart, ChartEvent } from 'chart.js';
22
import { AnnotationElement } from './element';
33

44
export interface EventContext {
55
chart: Chart,
6-
element: AnnotationElement
6+
element: AnnotationElement,
77
}
88

99
/**
@@ -16,8 +16,8 @@ export interface PartialEventContext {
1616
}
1717

1818
export interface AnnotationEvents {
19-
enter?(context: EventContext): void,
20-
leave?(context: EventContext): void,
21-
click?(context: EventContext): void,
22-
dblclick?(context: EventContext): void,
19+
enter?(context: EventContext, event: ChartEvent): void,
20+
leave?(context: EventContext, event: ChartEvent): void,
21+
click?(context: EventContext, event: ChartEvent): void,
22+
dblclick?(context: EventContext, event: ChartEvent): void,
2323
}

0 commit comments

Comments
 (0)