Skip to content

Commit a8d8e43

Browse files
committed
fix(react-aria-components): pass overlay id to PopoverContext in DialogTrigger (#9800)
1 parent b5cbf5b commit a8d8e43

4 files changed

Lines changed: 10 additions & 2 deletions

File tree

packages/@react-aria/test-utils/src/dialog.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,9 @@ export class DialogTester {
8282
if (!dialogId || document.getElementById(dialogId) == null) {
8383
throw new Error(`Dialog with id of ${dialogId} not found in document.`);
8484
} else {
85-
this._dialog = document.getElementById(dialogId)!;
85+
let el = document.getElementById(dialogId)!;
86+
let nestedDialog = el.querySelector('[role=dialog], [role=alertdialog]');
87+
this._dialog = nestedDialog as HTMLElement || el;
8688
return true;
8789
}
8890
});

packages/react-aria-components/src/Dialog.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,11 @@ export function DialogTrigger(props: DialogTriggerProps): JSX.Element {
7878
values={[
7979
[OverlayTriggerStateContext, state],
8080
[RootMenuTriggerStateContext, state],
81-
[DialogContext, overlayProps],
81+
[DialogContext, {...overlayProps, id: undefined}],
8282
[PopoverContext, {
8383
trigger: 'DialogTrigger',
8484
triggerRef: buttonRef,
85+
id: overlayProps.id,
8586
'aria-labelledby': overlayProps['aria-labelledby'],
8687
style: {'--trigger-width': buttonWidth} as React.CSSProperties
8788
}]

packages/react-aria-components/src/Popover.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ export interface PopoverRenderProps {
9494
}
9595

9696
interface PopoverContextValue extends PopoverProps {
97+
id?: string,
9798
/** Contexts to clear. */
9899
clearContexts?: Context<any>[]
99100
}

packages/react-aria-components/test/Popover.test.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ describe('Popover', () => {
5252
expect(dialog).toBeInTheDocument();
5353
expect(dialog.closest('.react-aria-Popover')).toHaveAttribute('data-trigger', 'DialogTrigger');
5454

55+
let popover = dialog.closest('.react-aria-Popover');
56+
expect(button).toHaveAttribute('aria-controls');
57+
expect(popover).toHaveAttribute('id', button.getAttribute('aria-controls'));
58+
5559
await user.click(document.body);
5660

5761
expect(dialog).not.toBeInTheDocument();

0 commit comments

Comments
 (0)