Skip to content

Commit 2fabd7c

Browse files
chore: Rename getEventTargets -> getPropagationTargets
1 parent eaa70f9 commit 2fabd7c

8 files changed

Lines changed: 45 additions & 13 deletions

File tree

packages/@adobe/react-spectrum/src/menu/useCloseOnScroll.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import {addEvent} from 'react-aria/private/utils/domHelpers';
1414
import {
1515
getEventTarget,
16-
getEventTargets,
16+
getPropagationTargets,
1717
nodeContains
1818
} from 'react-aria/private/utils/shadowdom/DOMFunctions';
1919
import {RefObject} from '@react-types/shared';
@@ -68,6 +68,6 @@ export function useCloseOnScroll(opts: CloseOnScrollOptions): void {
6868
}
6969
};
7070

71-
return addEvent(getEventTargets(window, triggerRef.current), 'scroll', onScroll, true);
71+
return addEvent(getPropagationTargets(window, triggerRef.current), 'scroll', onScroll, true);
7272
}, [isOpen, onClose, triggerRef]);
7373
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export {
2+
getOwnerDocument,
3+
getOwnerWindow,
4+
isShadowRoot,
5+
addEvent
6+
} from '../src/utils/domHelpers';

packages/react-aria/exports/index.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,12 @@ export {useTooltipTrigger} from '../src/tooltip/useTooltipTrigger';
157157
export {useTree} from '../src/tree/useTree';
158158
export {useTreeItem} from '../src/tree/useTreeItem';
159159
export {chain} from '../src/utils/chain';
160+
export {
161+
getOwnerDocument,
162+
getOwnerWindow,
163+
isShadowRoot,
164+
addEvent
165+
} from '../src/utils/domHelpers'
160166
export {mergeProps} from '../src/utils/mergeProps';
161167
export {mergeRefs} from '../src/utils/mergeRefs';
162168
export {useId} from '../src/utils/useId';

packages/react-aria/exports/private/utils/shadowdom/DOMFunctions.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
export {
22
getEventTarget,
3-
getEventTargets,
3+
getPropagationTargets,
44
nodeContains,
55
isFocusWithin,
66
getActiveElement

packages/react-aria/src/overlays/useCloseOnScroll.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
*/
1212

1313
import {addEvent} from '../utils/domHelpers';
14-
import {getEventTarget, getEventTargets, nodeContains} from '../utils/shadowdom/DOMFunctions';
14+
import {getEventTarget, getPropagationTargets, nodeContains} from '../utils/shadowdom/DOMFunctions';
1515
import {RefObject} from '@react-types/shared';
1616
import {useEffect} from 'react';
1717

@@ -61,6 +61,6 @@ export function useCloseOnScroll(opts: CloseOnScrollOptions): void {
6161
}
6262
};
6363

64-
return addEvent(getEventTargets(window, triggerRef.current), 'scroll', onScroll, true);
64+
return addEvent(getPropagationTargets(window, triggerRef.current), 'scroll', onScroll, true);
6565
}, [isOpen, onClose, triggerRef]);
6666
}

packages/react-aria/src/utils/domHelpers.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,21 @@ export function isShadowRoot(node: Node | null): node is ShadowRoot {
3939
* Attaches an event listener on target(s) and returns a cleanup function.
4040
*
4141
* Some events are `composed: false` and do not propagate out of shadow roots,
42-
* even in the capture phase — notably `scroll` and `scrollend`. For those, a
43-
* listener on `window`/`document` alone will miss scrolls that happen inside a
44-
* shadow root. Pass the array from `getEventTargets(global, refNode)`
42+
* even in the capture phase. For those, a listener on `window`/`document` alone
43+
* will miss events that fire inside a shadow root. Pass the array from
44+
* `getPropagationTargets(global, refNode)`
4545
* (react-aria/private/utils/shadowdom/DOMFunctions) as `target` so the listener
4646
* is attached to the global target *and* every enclosing shadow root.
47+
*
48+
* Known `composed: false` events (non-exhaustive):
49+
* - `scroll`
50+
* - `scrollend`
51+
* - `change`
52+
* - `submit`
53+
* - `reset`
54+
* - `select`
55+
* - `selectstart`
56+
* - `slotchange`
4757
*/
4858
export function addEvent<T extends EventTarget, K extends keyof EventMapType<Exclude<T, null>>>(
4959
target: T | EventTarget[] | null,

packages/react-aria/src/utils/shadowdom/DOMFunctions.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,20 @@ export function getEventTarget<T extends Event | SyntheticEvent>(event: T): Even
9090
*
9191
* Returns `[global, ...shadowRoots]`, where shadowRoots are the ShadowRoots
9292
* enclosing `refNode` that lie between it and `global`. Needed for events that
93-
* don't compose (e.g. scroll, scrollend), which do not propagate out of shadow
94-
* roots even in the capture phase. Pass the result straight to `addEvent`.
93+
* are `composed: false` and do not propagate out of shadow roots even in the
94+
* capture phase. Pass the result straight to `addEvent` (react-aria/domHelpers).
95+
*
96+
* Known `composed: false` events (non-exhaustive):
97+
* - `scroll`
98+
* - `scrollend`
99+
* - `change`
100+
* - `submit`
101+
* - `reset`
102+
* - `select`
103+
* - `selectstart`
104+
* - `slotchange`
95105
*/
96-
export function getEventTargets(
106+
export function getPropagationTargets(
97107
global: EventTarget,
98108
refNode: Node | null | undefined
99109
): EventTarget[] {

packages/react-aria/src/virtualizer/ScrollView.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
import {addEvent} from '../utils/domHelpers';
1414
import {flushSync} from 'react-dom';
15-
import {getEventTarget, getEventTargets, nodeContains} from '../utils/shadowdom/DOMFunctions';
15+
import {getEventTarget, getPropagationTargets, nodeContains} from '../utils/shadowdom/DOMFunctions';
1616
import {getScrollLeft} from './utils';
1717
import {Point, Rect, Size} from 'react-stately/useVirtualizerState';
1818
import React, {
@@ -221,7 +221,7 @@ export function useScrollView(
221221
// When inside a shadow DOM, also attach to each shadow root in the ancestor chain since scroll
222222
// events have composed: false and don't propagate out of shadow roots.
223223
useEffect(() => {
224-
return addEvent(getEventTargets(document, ref.current), 'scroll', onScroll, true);
224+
return addEvent(getPropagationTargets(document, ref.current), 'scroll', onScroll, true);
225225
}, [onScroll, ref]);
226226

227227
useEffect(() => {

0 commit comments

Comments
 (0)