callstack / callstack/react-native-paper

Menu automatically dismisses on web when outside the bounds of the window

Open
#3,854 15 comments 3 reactions 0 assignees View on GitHub
bug Menu
Dominant language
TypeScript
Stars
14.5k
Forks
2.2k
Avg merge
5d 23h
Merged PRs (30d)
12

Description

### Current behaviour
On web on desktop browsers (at least on macOS), when a Menu attempts to display and it partially falls outside the bounds of the browser window, it auto-dismisses.

### Expected behaviour
Ideally, the Menu would position itself so that it would not attempt to display outside the bounds of the browser window, so that no scrolling is needed. But if it does attempt to display outside the bounds of the browser window, it would not auto-dismiss, so that at least the user can access it by scrolling.

### How to reproduce?
https://github.com/CodingItWrong/paper-sandbox/tree/menu-auto-dismiss-web

- Open the app in any desktop web browser (tested in Chrome, Safari, and Firefox for Mac)
- Click each menu button
- Expected: the menu displays for all buttons
- Actual: on any web browser for Mac, the left and right menus display, but the right button flashes and is automatically dismissed

Note: the bug does not occur on iOS or Android native, on iOS Safari, or on Android Chrome.

### Preview

https://user-images.githubusercontent.com/15832198/235136708-714c7fe3-6733-4515-9ecf-f4fc341db690.mov

### What have you tried so far?
Tried adjusting `anchorPosition` so the Menu displays within the window. But since it is displaying off to the right, `anchorPosition`'s top and bottom don't help. It might be a workaround if we could anchor to left and right, similar to MUI: https://mui.com/material-ui/react-popover/#anchor-playground

Tried adding margin to the right of the button so that the menu fully fits within the browser window. This prevents triggering the issue, but will be challenging for my use case on small screens.

### Your Environment

| software | version
| --------------------- | -------
| ios | 16.2
| android | n/a
| react-native | 0.71.7
| react-native-paper | 5.7.0
| node | 18.15.0
| npm or yarn | yarn 1.22.19
| expo sdk | 48.0.15

Contributor guide

Open the contributing guide

Research direction

Start with the reproduction app on the menu-auto-dismiss-web branch and verify the behavior in a desktop browser. Trace the web Menu positioning and dismissal behavior, using the expected and actual behavior in this issue as the acceptance criteria; the fix should keep the Menu accessible when it extends beyond the browser window.

Written by the indexing model from the issue text.

Assessment

Tech stack
react-native, typescript
Domain
frontend, web-dev
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.