Skip to content

Commit aa1ad12

Browse files
committed
fix: do not zoom in on toolbar buttons double-click
1 parent fc05eac commit aa1ad12

File tree

2 files changed

+33
-15
lines changed

2 files changed

+33
-15
lines changed

src/components/useSensors.ts

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -84,22 +84,21 @@ export default function useSensors() {
8484
activePointers.current.push(event);
8585
};
8686

87+
const shouldIgnoreEvent = (event: MouseEvent | PointerEvent) =>
88+
// ignore right button clicks (e.g., context menu)
89+
("pointerType" in event && event.pointerType === "mouse" && event.buttons > 1) ||
90+
// ignore clicks on navigation buttons, toolbar, user-selectable elements, etc.
91+
(event.target instanceof Element &&
92+
(event.target.classList.contains(cssClass("button")) ||
93+
event.target.classList.contains(cssClass("icon")) ||
94+
Array.from(
95+
carouselRef.current?.parentElement?.querySelectorAll(
96+
`.${cssClass("toolbar")}, .${cssClass("selectable")}`,
97+
) /* c8 ignore start */ || [] /* c8 ignore stop */,
98+
).find((element) => element.contains(event.target as Element)) !== undefined));
99+
87100
const onPointerDown = (event: PointerEvent) => {
88-
if (
89-
// ignore right button clicks (e.g., context menu)
90-
(event.pointerType === "mouse" && event.buttons > 1) ||
91-
// ignore clicks on navigation buttons, toolbar, user-selectable elements, etc.
92-
(event.target instanceof Element &&
93-
(event.target.classList.contains(cssClass("button")) ||
94-
event.target.classList.contains(cssClass("icon")) ||
95-
Array.from(
96-
carouselRef.current?.parentElement?.querySelectorAll(
97-
`.${cssClass("toolbar")}, .${cssClass("selectable")}`,
98-
) /* c8 ignore start */ || [] /* c8 ignore stop */,
99-
).find((element) => element.contains(event.target as Element))))
100-
) {
101-
return;
102-
}
101+
if (shouldIgnoreEvent(event)) return;
103102

104103
addPointer(event);
105104

@@ -228,6 +227,8 @@ export default function useSensors() {
228227
};
229228

230229
const onDoubleClick = (event: MouseEvent) => {
230+
if (shouldIgnoreEvent(event)) return;
231+
231232
changeZoom(zoom < maxZoom ? scaleZoom(zoom, 2, 1) : 1, event);
232233
};
233234

test/Lightbox.spec.tsx

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,23 @@ describe("Lightbox", () => {
413413
expectToBeZoomedOut();
414414
});
415415

416+
it("does not zoom in on toolbar buttons double-click", async () => {
417+
const user = userEvent.setup();
418+
419+
renderLightbox({
420+
toolbar: {
421+
buttons: [
422+
<button key="test" type="button" className="yarll__button">
423+
Test
424+
</button>,
425+
],
426+
},
427+
});
428+
429+
await user.dblClick(screen.getByRole("button", { name: "Test" }));
430+
expectToBeZoomedOut();
431+
});
432+
416433
it("supports zoom on custom slides", () => {
417434
let maxZoom: number | undefined;
418435

0 commit comments

Comments
 (0)