MCPcopy
hub / github.com/adobe/react-spectrum / openSubmenu

Method openSubmenu

packages/@react-aria/test-utils/src/menu.ts:311–373  ·  view source on GitHub ↗

* Opens the submenu. Defaults to using the interaction type set on the menu tester. The submenu * trigger can be targeted via the trigger's node or the trigger's text.

(opts: MenuOpenSubmenuOpts)

Source from the content-addressed store, hash-verified

309 * trigger can be targeted via the trigger's node or the trigger's text.
310 */
311 async openSubmenu(opts: MenuOpenSubmenuOpts): Promise<MenuTester> {
312 let {submenuTrigger, needsLongPress, interactionType = this._interactionType} = opts;
313
314 let trigger = this.getTrigger();
315 let isDisabled = trigger.hasAttribute('disabled');
316 if (isDisabled) {
317 throw new Error(
318 `Cannot open submenu because its parent menu's trigger "${formatTargetNode(trigger)}" is disabled.`
319 );
320 }
321 if (!trigger.getAttribute('aria-controls')) {
322 await this.open({needsLongPress});
323 }
324 let menu = this.getMenu();
325 if (!menu) {
326 throw new Error(
327 `Cannot open submenu, parent menu didn't open on trigger "${formatTargetNode(trigger)}" press.`
328 );
329 }
330 if (typeof submenuTrigger === 'string') {
331 submenuTrigger = within(menu!)
332 .getByText(submenuTrigger)
333 .closest('[role=menuitem]')! as HTMLElement;
334 }
335
336 if (
337 submenuTrigger.getAttribute('aria-disabled') === 'true' ||
338 submenuTrigger.hasAttribute('disabled')
339 ) {
340 throw new Error(
341 `Cannot open submenu because its trigger "${formatTargetNode(submenuTrigger)}" is disabled.`
342 );
343 }
344
345 let submenuTriggerTester = new MenuTester({
346 user: this.user,
347 interactionType: this._interactionType,
348 root: submenuTrigger,
349 isSubmenu: true,
350 advanceTimer: this._advanceTimer,
351 rootMenu: (this._isSubmenu ? this._rootMenu : this.getMenu()) || undefined
352 });
353 if (interactionType === 'mouse') {
354 await this.user.pointer({target: submenuTrigger});
355 } else if (interactionType === 'keyboard') {
356 await this.keyboardNavigateToOption({option: submenuTrigger});
357 await this.user.keyboard('[ArrowRight]');
358 } else {
359 await submenuTriggerTester.open();
360 }
361
362 await waitFor(() => {
363 if (submenuTriggerTester._trigger?.getAttribute('aria-expanded') !== 'true') {
364 throw new Error(
365 'aria-expanded for the submenu trigger wasn\'t changed to "true", unable to confirm the existance of the submenu'
366 );
367 } else {
368 return true;

Callers 2

Menu.test.tsxFile · 0.80
AriaMenuTestsFunction · 0.80

Calls 6

getTriggerMethod · 0.95
openMethod · 0.95
getMenuMethod · 0.95
formatTargetNodeFunction · 0.90
hasAttributeMethod · 0.80

Tested by

no test coverage detected