Skip to content

Commit b3838ab

Browse files
committed
feat(poc): differentiate between click and drag depending on mouse behavior
if mousing up before threshold: click if mouse is still down after threshold: drag if mouse down + move before threshold: drag
1 parent d9073f7 commit b3838ab

File tree

1 file changed

+38
-20
lines changed

1 file changed

+38
-20
lines changed

packages/web/src/views/Calendar/hooks/grid/useGridEventMouseHold.ts

Lines changed: 38 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ const GRID_EVENT_MOUSE_HOLD_DELAY = 750; // ms
1111
const GRID_EVENT_MOUSE_HOLD_MOVE_THRESHOLD = 25; // pixels
1212

1313
export const useGridEventMouseHold = (
14-
cb: (event: Schema_GridEvent) => void,
14+
cb: (event: Schema_GridEvent, nextAction: "click" | "drag") => void,
1515
eventType: Categories_Event.TIMED | Categories_Event.ALLDAY,
1616
delay: number = GRID_EVENT_MOUSE_HOLD_DELAY,
1717
) => {
@@ -25,8 +25,11 @@ export const useGridEventMouseHold = (
2525
const timeoutId = useRef<NodeJS.Timeout | null>(null);
2626
const mouseMoved = useRef<boolean>(false);
2727

28-
const handleCallback = (event: Schema_GridEvent) => {
29-
cb(event);
28+
const handleCallback = (
29+
event: Schema_GridEvent,
30+
nextAction: "click" | "drag",
31+
) => {
32+
cb(event, nextAction);
3033
};
3134

3235
const onMouseDown = (e: ReactMouseEvent, event: Schema_GridEvent) => {
@@ -38,7 +41,8 @@ export const useGridEventMouseHold = (
3841

3942
timeoutId.current = setTimeout(() => {
4043
if (!mouseMoved.current) {
41-
handleCallback(event);
44+
console.log("dragging cuz timeout elapsed");
45+
handleCallback(event, "drag");
4246
}
4347
}, delay);
4448

@@ -55,36 +59,50 @@ export const useGridEventMouseHold = (
5559
if (timeoutId.current) {
5660
clearTimeout(timeoutId.current);
5761
}
58-
handleCallback(event);
62+
console.log("dragging cuz mouse moved");
63+
handleCallback(event, "drag");
5964
cleanup();
6065
}
6166
};
6267

6368
const onMouseUp = () => {
69+
if (!mouseMoved.current && timeoutId.current) {
70+
clearTimeout(timeoutId.current);
71+
console.log("clicking cuz mouse up");
72+
handleCallback(event, "click");
73+
}
6474
cleanup();
65-
66-
// Manually dispatch a new 'mouseup' event to ensure other listeners execute
67-
const _event = new MouseEvent("mouseup", {
68-
bubbles: true,
69-
cancelable: true,
70-
button: 0,
71-
clientX: e.clientX,
72-
clientY: e.clientY,
73-
});
74-
75-
// Delay dispatching the new event to let React flush updates
76-
setTimeout(() => {
77-
getElemById(elementId).dispatchEvent(_event);
78-
}, 1);
7975
};
76+
// const onMouseUp = () => {
77+
// console.log("onMouseUp...");
78+
// cleanup();
79+
80+
// // Manually dispatch a new 'mouseup' event to ensure other listeners execute
81+
// const _event = new MouseEvent("mouseup", {
82+
// bubbles: true,
83+
// cancelable: true,
84+
// button: 0,
85+
// clientX: e.clientX,
86+
// clientY: e.clientY,
87+
// });
88+
89+
// // Delay dispatching the new event to let React flush updates
90+
// setTimeout(() => {
91+
// console.log("dispatching mouseup event...");
92+
// getElemById(elementId).dispatchEvent(_event);
93+
// }, 1);
94+
// };
8095

8196
const cleanup = () => {
82-
handleCallback(event);
97+
console.log("cleaning up...");
98+
handleCallback(event, "drag");
8399

84100
if (timeoutId.current) {
101+
console.log("clearing timeout...");
85102
clearTimeout(timeoutId.current);
86103
}
87104

105+
console.log("removing event listeners...");
88106
getElemById(elementId).removeEventListener("mousemove", onMouseMove);
89107
getElemById(elementId).removeEventListener("mouseup", onMouseUp);
90108
};

0 commit comments

Comments
 (0)