Skip to content

Commit fc5c10a

Browse files
committed
fix: unbind array trigger events on release
1 parent 0750d74 commit fc5c10a

2 files changed

Lines changed: 35 additions & 1 deletion

File tree

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { BaseTrigger } from '../../../src/interaction/triggers/base';
2+
import type { IBaseTriggerOptions, ITriggerEventHandler } from '../../../src/interaction/interface/trigger';
3+
4+
class TestTrigger extends BaseTrigger<IBaseTriggerOptions> {
5+
type = 'test';
6+
readonly handler = jest.fn();
7+
8+
protected getEvents(): Array<{ type: string | string[]; handler: ITriggerEventHandler }> {
9+
return [{ type: ['pointerdown', 'none', 'pointermove'], handler: this.handler }];
10+
}
11+
}
12+
13+
describe('BaseTrigger', () => {
14+
it('unbinds every event in an array-valued trigger when released', () => {
15+
const event = {
16+
on: jest.fn(),
17+
off: jest.fn(),
18+
emit: jest.fn()
19+
};
20+
const trigger = new TestTrigger({ event, interaction: {} as IBaseTriggerOptions['interaction'] });
21+
22+
trigger.init();
23+
trigger.release();
24+
25+
expect(event.on.mock.calls).toEqual([
26+
['pointerdown', trigger.handler],
27+
['pointermove', trigger.handler]
28+
]);
29+
expect(event.off.mock.calls).toEqual([
30+
['pointerdown', trigger.handler],
31+
['pointermove', trigger.handler]
32+
]);
33+
});
34+
});

packages/vchart/src/interaction/triggers/base.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ export abstract class BaseTrigger<T extends IBaseTriggerOptions> implements ITri
102102
if (evt.type && evt.handler) {
103103
if (isArray(evt.type)) {
104104
evt.type.forEach(evtType => {
105-
evtType && evtType !== 'none' && this.options.event.on(evtType, evt.handler);
105+
evtType && evtType !== 'none' && this.options.event.off(evtType, evt.handler);
106106
});
107107
} else {
108108
evt.type !== 'none' && this.options.event.off(evt.type, evt.handler);

0 commit comments

Comments
 (0)