Skip to content

Commit 4b3a2e2

Browse files
committed
[core] Review code of event registration
- using sets instead of arrays - using typescript TS Record to be sure to not forgot some events
1 parent 4d02aa0 commit 4b3a2e2

File tree

1 file changed

+62
-44
lines changed

1 file changed

+62
-44
lines changed

packages/core/src/hooks/useRegisterEvents.ts

Lines changed: 62 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -8,42 +8,60 @@ import { Attributes } from "graphology-types";
88

99
type EventType = keyof EventHandlers;
1010

11-
const sigmaEvents: Array<keyof SigmaEvents> = [
12-
"clickNode",
13-
"rightClickNode",
14-
"downNode",
15-
"enterNode",
16-
"leaveNode",
17-
"doubleClickNode",
18-
"wheelNode",
19-
"clickEdge",
20-
"rightClickEdge",
21-
"downEdge",
22-
"enterEdge",
23-
"leaveEdge",
24-
"doubleClickEdge",
25-
"wheelEdge",
26-
"clickStage",
27-
"rightClickStage",
28-
"downStage",
29-
"doubleClickStage",
30-
"wheelStage",
31-
"beforeRender",
32-
"afterRender",
33-
"kill",
34-
];
35-
const mouseEvents: Array<keyof MouseCaptorEvents> = [
36-
"click",
37-
"rightClick",
38-
"mouseup",
39-
"mousedown",
40-
"mousemove",
41-
"mousemovebody",
42-
"doubleClick",
43-
"wheel",
44-
];
45-
const touchEvents: Array<keyof TouchCaptorEvents> = ["touchup", "touchdown", "touchmove"];
46-
const cameraEvents: Array<keyof CameraEvents> = ["updated"];
11+
function keySet<T>(record: Record<keyof T, unknown>): Set<string> {
12+
return new Set<string>(Object.keys(record));
13+
}
14+
15+
const sigmaEvents = keySet<SigmaEvents>({
16+
clickNode: true,
17+
rightClickNode: true,
18+
downNode: true,
19+
enterNode: true,
20+
leaveNode: true,
21+
doubleClickNode: true,
22+
wheelNode: true,
23+
clickEdge: true,
24+
rightClickEdge: true,
25+
downEdge: true,
26+
enterEdge: true,
27+
leaveEdge: true,
28+
doubleClickEdge: true,
29+
wheelEdge: true,
30+
clickStage: true,
31+
rightClickStage: true,
32+
downStage: true,
33+
doubleClickStage: true,
34+
wheelStage: true,
35+
beforeRender: true,
36+
afterRender: true,
37+
kill: true,
38+
upStage: true,
39+
upEdge: true,
40+
upNode: true,
41+
enterStage: true,
42+
leaveStage: true,
43+
resize: true,
44+
});
45+
46+
const mouseEvents = keySet<MouseCaptorEvents>({
47+
click: true,
48+
rightClick: true,
49+
doubleClick: true,
50+
mouseup: true,
51+
mousedown: true,
52+
mousemove: true,
53+
mousemovebody: true,
54+
mouseleave: true,
55+
mouseenter: true,
56+
wheel: true,
57+
});
58+
59+
const touchEvents = keySet<TouchCaptorEvents>({
60+
touchup: true,
61+
touchdown: true,
62+
touchmove: true,
63+
});
64+
const cameraEvents = keySet<CameraEvents>({ updated: true });
4765

4866
/**
4967
* React hook that helps you to listen Sigma’s events.
@@ -84,16 +102,16 @@ export function useRegisterEvents<
84102
// register events
85103
eventTypes.forEach((event: EventType) => {
86104
const eventHandler = userEvents[event] as (...args: unknown[]) => void;
87-
if (sigmaEvents.find((e) => e === event)) {
105+
if (sigmaEvents.has(event)) {
88106
sigma.on(event as keyof SigmaEvents, eventHandler);
89107
}
90-
if (mouseEvents.find((e) => e === event)) {
108+
if (mouseEvents.has(event)) {
91109
sigma.getMouseCaptor().on(event as keyof MouseCaptorEvents, eventHandler);
92110
}
93-
if (touchEvents.find((e) => e === event)) {
111+
if (touchEvents.has(event)) {
94112
sigma.getTouchCaptor().on(event as keyof TouchCaptorEvents, eventHandler);
95113
}
96-
if (cameraEvents.find((e) => e === event)) {
114+
if (cameraEvents.has(event)) {
97115
sigma.getCamera().on(event as keyof CameraEvents, eventHandler);
98116
}
99117
});
@@ -104,16 +122,16 @@ export function useRegisterEvents<
104122
if (sigma) {
105123
eventTypes.forEach((event: EventType) => {
106124
const eventHandler = userEvents[event] as (...args: unknown[]) => void;
107-
if (sigmaEvents.find((e) => e === event)) {
125+
if (sigmaEvents.has(event)) {
108126
sigma.off(event as keyof SigmaEvents, eventHandler);
109127
}
110-
if (mouseEvents.find((e) => e === event)) {
128+
if (mouseEvents.has(event)) {
111129
sigma.getMouseCaptor().off(event as keyof MouseCaptorEvents, eventHandler);
112130
}
113-
if (touchEvents.find((e) => e === event)) {
131+
if (touchEvents.has(event)) {
114132
sigma.getTouchCaptor().off(event as keyof TouchCaptorEvents, eventHandler);
115133
}
116-
if (cameraEvents.find((e) => e === event)) {
134+
if (cameraEvents.has(event)) {
117135
sigma.getCamera().off(event as keyof CameraEvents, eventHandler);
118136
}
119137
});

0 commit comments

Comments
 (0)