Skip to content

Commit 0c2cb80

Browse files
committed
fix(media): suppress message menu from viewer actions
1 parent aecb2a1 commit 0c2cb80

2 files changed

Lines changed: 35 additions & 0 deletions

File tree

src/app/components/image-viewer/ImageViewer.test.tsx

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,40 @@ describe('ImageViewer', () => {
158158
}
159159
});
160160

161+
it('keeps mobile overflow menu touches out of an enclosing message long-press handler', () => {
162+
screenMocks.isMobile = true;
163+
vi.useFakeTimers();
164+
const messageLongPress = vi.fn<() => void>();
165+
try {
166+
render(
167+
<div
168+
onTouchStart={(evt) => {
169+
const target = evt.target as Element;
170+
if (target.closest('[data-gestures="ignore"]')) return;
171+
setTimeout(messageLongPress, 500);
172+
}}
173+
>
174+
<ImageViewer
175+
alt="kitten.png"
176+
src="https://example.org/kitten.png"
177+
requestClose={() => {}}
178+
/>
179+
</div>
180+
);
181+
182+
fireEvent.click(screen.getByRole('button', { name: 'More options' }));
183+
fireEvent.touchStart(screen.getByText('Turn pixelation on'), {
184+
touches: [{ identifier: 1, clientX: 10, clientY: 10 }],
185+
});
186+
vi.advanceTimersByTime(600);
187+
188+
expect(messageLongPress).not.toHaveBeenCalled();
189+
} finally {
190+
vi.useRealTimers();
191+
screenMocks.isMobile = false;
192+
}
193+
});
194+
161195
it('hides the share control when the platform cannot share', () => {
162196
screenMocks.isMobile = true;
163197
try {

src/app/components/image-viewer/ImageViewer.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,7 @@ export const ImageViewer = as<'div', ImageViewerProps>(
265265
menu={
266266
<Menu
267267
variant="Surface"
268+
data-gestures="ignore"
268269
style={{
269270
maxWidth: toRem(160),
270271
width: isMobile ? 'auto' : '100vw',

0 commit comments

Comments
 (0)