Skip to content

Commit 37aba30

Browse files
authored
fix(dropdownmenu): Make submenu dismissable (#94740)
1 parent 160871d commit 37aba30

File tree

2 files changed

+8
-2
lines changed

2 files changed

+8
-2
lines changed

static/app/components/dropdownMenu/index.spec.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ describe('DropdownMenu', function () {
132132

133133
it('renders submenus', async function () {
134134
const onAction = jest.fn();
135+
const onOpenChange = jest.fn();
135136

136137
render(
137138
<DropdownMenu
@@ -154,10 +155,12 @@ describe('DropdownMenu', function () {
154155
},
155156
]}
156157
triggerLabel="Menu"
158+
onOpenChange={onOpenChange}
157159
/>
158160
);
159161

160162
await userEvent.click(screen.getByRole('button', {name: 'Menu'}));
163+
expect(onOpenChange).toHaveBeenCalledTimes(1);
161164

162165
// Sub item won't be visible until we hover over its parent
163166
expect(
@@ -190,26 +193,31 @@ describe('DropdownMenu', function () {
190193
expect(onAction).toHaveBeenCalled();
191194

192195
// Entire menu system is closed
196+
expect(onOpenChange).toHaveBeenCalledTimes(2);
193197
expect(screen.getByRole('button', {name: 'Menu'})).toHaveAttribute(
194198
'aria-expanded',
195199
'false'
196200
);
197201

198202
// Pressing Esc closes the entire menu system
199203
await userEvent.click(screen.getByRole('button', {name: 'Menu'}));
204+
expect(onOpenChange).toHaveBeenCalledTimes(3);
200205
await userEvent.hover(screen.getByRole('menuitemradio', {name: 'Item'}));
201206
await userEvent.hover(screen.getByRole('menuitemradio', {name: 'Sub Item'}));
202207
await userEvent.keyboard('{Escape}');
208+
expect(onOpenChange).toHaveBeenCalledTimes(4);
203209
expect(screen.getByRole('button', {name: 'Menu'})).toHaveAttribute(
204210
'aria-expanded',
205211
'false'
206212
);
207213

208214
// Clicking outside closes the entire menu system
209215
await userEvent.click(screen.getByRole('button', {name: 'Menu'}));
216+
expect(onOpenChange).toHaveBeenCalledTimes(5);
210217
await userEvent.hover(screen.getByRole('menuitemradio', {name: 'Item'}));
211218
await userEvent.hover(screen.getByRole('menuitemradio', {name: 'Sub Item'}));
212219
await userEvent.click(document.body);
220+
expect(onOpenChange).toHaveBeenCalledTimes(6);
213221
expect(screen.getByRole('button', {name: 'Menu'})).toHaveAttribute(
214222
'aria-expanded',
215223
'false'

static/app/components/dropdownMenu/list.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,9 +184,7 @@ function DropdownMenuList({
184184
onClose={onClose}
185185
closeOnSelect={closeOnSelect}
186186
menuTitle={node.value.submenuTitle}
187-
isDismissable={false}
188187
shouldCloseOnBlur={false}
189-
shouldCloseOnInteractOutside={() => false}
190188
preventOverflowOptions={{boundary: document.body, altAxis: true}}
191189
renderWrapAs="li"
192190
position="right-start"

0 commit comments

Comments
 (0)