Skip to content

Commit d3c8fe2

Browse files
joshblackCopilotCopilot
authored
Replace deprecated ref helper usage (#7834)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
1 parent 36a4922 commit d3c8fe2

13 files changed

Lines changed: 42 additions & 42 deletions

File tree

packages/react/src/ActionBar/ActionBar.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {ActionMenu} from '../ActionMenu'
99
import {useFocusZone, FocusKeys} from '../hooks/useFocusZone'
1010
import styles from './ActionBar.module.css'
1111
import {clsx} from 'clsx'
12-
import {useRefObjectAsForwardedRef} from '../hooks'
12+
import {useMergedRefs} from '../hooks'
1313
import {createDescendantRegistry} from '../utils/descendant-registry'
1414

1515
type ChildProps =
@@ -348,7 +348,7 @@ function useActionBarItem(ref: React.RefObject<HTMLElement | null>, registryProp
348348
export const ActionBarIconButton = forwardRef(
349349
({disabled, onClick, ...props}: ActionBarIconButtonProps, forwardedRef) => {
350350
const ref = useRef<HTMLButtonElement>(null)
351-
useRefObjectAsForwardedRef(forwardedRef, ref)
351+
const mergedRef = useMergedRefs(forwardedRef, ref)
352352

353353
const {size} = React.useContext(ActionBarContext)
354354

@@ -379,7 +379,7 @@ export const ActionBarIconButton = forwardRef(
379379
return (
380380
<IconButton
381381
aria-disabled={disabled}
382-
ref={ref}
382+
ref={mergedRef}
383383
size={size}
384384
onClick={clickHandler}
385385
{...props}

packages/react/src/ActionList/Heading.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React, {forwardRef} from 'react'
2-
import {useRefObjectAsForwardedRef} from '../hooks'
2+
import {useMergedRefs} from '../hooks'
33
import type {ForwardRefComponent as PolymorphicForwardRefComponent} from '../utils/polymorphic'
44
import {default as HeadingComponent} from '../Heading'
55
import {ListContext} from './shared'
@@ -21,7 +21,7 @@ export type ActionListHeadingProps = {
2121

2222
export const Heading = forwardRef(({as, size, children, visuallyHidden = false, className, ...props}, forwardedRef) => {
2323
const innerRef = React.useRef<HTMLHeadingElement>(null)
24-
useRefObjectAsForwardedRef(forwardedRef, innerRef)
24+
const mergedRef = useMergedRefs(forwardedRef, innerRef)
2525

2626
const {headingId: headingId, variant: listVariant} = React.useContext(ListContext)
2727
const {container} = React.useContext(ActionListContainerContext)
@@ -37,7 +37,7 @@ export const Heading = forwardRef(({as, size, children, visuallyHidden = false,
3737
<HeadingComponent
3838
as={as}
3939
variant={size}
40-
ref={innerRef}
40+
ref={mergedRef}
4141
// use custom id if it is provided. Otherwise, use the id from the context
4242
id={props.id ?? headingId}
4343
className={clsx(className, classes.ActionListHeader)}

packages/react/src/Autocomplete/Autocomplete.test.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,9 +155,11 @@ describe('Autocomplete', () => {
155155

156156
expect(inputNode.getAttribute('aria-expanded')).toBe('true')
157157

158-
await userEvent.tab()
158+
// `userEvent.tab()` is unreliable in browser-mode Vitest for this case; blur is deterministic.
159+
// eslint-disable-next-line github/no-blur
160+
fireEvent.blur(inputNode)
159161

160-
expect(inputNode.getAttribute('aria-expanded')).not.toBe('true')
162+
await waitFor(() => expect(inputNode.getAttribute('aria-expanded')).not.toBe('true'))
161163
})
162164

163165
it('sets the input value to the suggested item text and highlights the untyped part of the word', async () => {

packages/react/src/Autocomplete/AutocompleteInput.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import React, {useCallback, useContext, useEffect, useState} from 'react'
33
import type {ForwardRefComponent as PolymorphicForwardRefComponent} from '../utils/polymorphic'
44
import {AutocompleteContext, AutocompleteInputContext} from './AutocompleteContext'
55
import TextInput from '../TextInput'
6-
import {useRefObjectAsForwardedRef} from '../hooks/useRefObjectAsForwardedRef'
6+
import {useMergedRefs} from '../hooks/useMergedRefs'
77
import type {ComponentProps} from '../utils/types'
88
import useSafeTimeout from '../hooks/useSafeTimeout'
99

@@ -43,7 +43,7 @@ const AutocompleteInput = React.forwardRef(
4343
}
4444
const {activeDescendantRef, id, inputRef, setInputValue, setShowMenu, showMenu} = autocompleteContext
4545
const {autocompleteSuggestion = '', inputValue = '', isMenuDirectlyActivated} = inputContext
46-
useRefObjectAsForwardedRef(forwardedRef, inputRef)
46+
const mergedRef = useMergedRefs(forwardedRef, inputRef)
4747
const [highlightRemainingText, setHighlightRemainingText] = useState<boolean>(true)
4848
const {safeSetTimeout} = useSafeTimeout()
4949

@@ -160,7 +160,7 @@ const AutocompleteInput = React.forwardRef(
160160
onKeyDown={handleInputKeyDown}
161161
onKeyPress={onInputKeyPress}
162162
onKeyUp={handleInputKeyUp}
163-
ref={inputRef}
163+
ref={mergedRef}
164164
aria-controls={`${id}-listbox`}
165165
aria-autocomplete="both"
166166
role="combobox"

packages/react/src/Autocomplete/AutocompleteOverlay.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import type {OverlayProps} from '../Overlay'
55
import Overlay from '../Overlay'
66
import type {ComponentProps} from '../utils/types'
77
import {AutocompleteContext} from './AutocompleteContext'
8-
import {useRefObjectAsForwardedRef} from '../hooks/useRefObjectAsForwardedRef'
8+
import {useMergedRefs} from '../hooks/useMergedRefs'
99
import VisuallyHidden from '../_VisuallyHidden'
1010

1111
import classes from './AutocompleteOverlay.module.css'
@@ -57,7 +57,7 @@ function AutocompleteOverlay({
5757
[showMenu, selectedItemLength],
5858
)
5959

60-
useRefObjectAsForwardedRef(scrollContainerRef, floatingElementRef)
60+
const mergedScrollContainerRef = useMergedRefs(scrollContainerRef, floatingElementRef)
6161

6262
const closeOptionList = useCallback(() => {
6363
setShowMenu(false)
@@ -73,7 +73,7 @@ function AutocompleteOverlay({
7373
preventFocusOnOpen={true}
7474
onClickOutside={closeOptionList}
7575
onEscape={closeOptionList}
76-
ref={floatingElementRef as React.RefObject<HTMLDivElement>}
76+
ref={mergedScrollContainerRef}
7777
top={position?.top}
7878
left={position?.left}
7979
className={clsx(classes.Overlay, className)}

packages/react/src/Button/ButtonBase.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React, {forwardRef, type JSX} from 'react'
22
import type {ForwardRefComponent as PolymorphicForwardRefComponent} from '../utils/polymorphic'
33
import type {ButtonProps} from './types'
4-
import {useRefObjectAsForwardedRef} from '../hooks/useRefObjectAsForwardedRef'
4+
import {useMergedRefs} from '../hooks/useMergedRefs'
55
import {VisuallyHidden} from '../VisuallyHidden'
66
import Spinner from '../Spinner'
77
import CounterLabel from '../CounterLabel'
@@ -51,7 +51,7 @@ const ButtonBase = forwardRef(({children, as: Component = 'button', ...props}, f
5151
} = props
5252

5353
const innerRef = React.useRef<HTMLButtonElement>(null)
54-
useRefObjectAsForwardedRef(forwardedRef, innerRef)
54+
const mergedRef = useMergedRefs(forwardedRef, innerRef)
5555

5656
const uuid = useId(id)
5757
const loadingAnnouncementID = `${uuid}-loading-announcement`
@@ -89,7 +89,7 @@ const ButtonBase = forwardRef(({children, as: Component = 'button', ...props}, f
8989
data-component="Button"
9090
{...rest}
9191
// @ts-ignore temporary disable as we migrate to css modules, until we remove PolymorphicForwardRefComponent
92-
ref={innerRef}
92+
ref={mergedRef}
9393
className={clsx(classes.ButtonBase, className)}
9494
data-block={block ? 'block' : null}
9595
data-inactive={inactive ? true : undefined}

packages/react/src/Dialog/Dialog.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
import React, {useCallback, useEffect, useRef, useState, type SyntheticEvent} from 'react'
22
import type {ButtonProps} from '../Button'
33
import {Button, IconButton} from '../Button'
4-
import {useOnEscapePress, useProvidedRefOrCreate} from '../hooks'
4+
import {useMergedRefs, useOnEscapePress, useProvidedRefOrCreate} from '../hooks'
55
import {useFocusTrap} from '../hooks/useFocusTrap'
66
import {XIcon} from '@primer/octicons-react'
77
import {useFocusZone} from '../hooks/useFocusZone'
88
import {FocusKeys} from '@primer/behaviors'
99
import Portal from '../Portal'
10-
import {useRefObjectAsForwardedRef} from '../hooks/useRefObjectAsForwardedRef'
1110
import {useId} from '../hooks/useId'
1211
import {ScrollableRegion} from '../ScrollableRegion'
1312
import type {ResponsiveValue} from '../hooks/useResponsiveValue'
@@ -302,7 +301,7 @@ const _Dialog = React.forwardRef<HTMLDivElement, React.PropsWithChildren<DialogP
302301
})
303302

304303
const dialogRef = useRef<HTMLDivElement>(null)
305-
useRefObjectAsForwardedRef(forwardedRef, dialogRef)
304+
const mergedDialogRef = useMergedRefs(forwardedRef, dialogRef)
306305
const backdropRef = useRef<HTMLDivElement>(null)
307306

308307
useFocusTrap({
@@ -393,7 +392,7 @@ const _Dialog = React.forwardRef<HTMLDivElement, React.PropsWithChildren<DialogP
393392
}}
394393
>
395394
<div
396-
ref={dialogRef}
395+
ref={mergedDialogRef}
397396
role={role}
398397
aria-labelledby={dialogLabelId}
399398
aria-describedby={dialogDescriptionId}

packages/react/src/Heading/Heading.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import {clsx} from 'clsx'
22
import React, {forwardRef, useEffect} from 'react'
3-
import {useRefObjectAsForwardedRef} from '../hooks'
3+
import {useMergedRefs} from '../hooks'
44
import type {ComponentProps} from '../utils/types'
55
import type {ForwardRefComponent as PolymorphicForwardRefComponent} from '../utils/polymorphic'
66
import classes from './Heading.module.css'
@@ -14,7 +14,7 @@ type StyledHeadingProps = {
1414

1515
const Heading = forwardRef(({as: Component = 'h2', className, variant, ...props}, forwardedRef) => {
1616
const innerRef = React.useRef<HTMLHeadingElement>(null)
17-
useRefObjectAsForwardedRef(forwardedRef, innerRef)
17+
const mergedRef = useMergedRefs(forwardedRef, innerRef)
1818

1919
if (__DEV__) {
2020
/**
@@ -38,7 +38,7 @@ const Heading = forwardRef(({as: Component = 'h2', className, variant, ...props}
3838
data-variant={variant}
3939
data-component="Heading"
4040
{...props}
41-
ref={innerRef}
41+
ref={mergedRef}
4242
/>
4343
)
4444
}) as PolymorphicForwardRefComponent<HeadingLevels, StyledHeadingProps>

packages/react/src/Link/Link.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import {clsx} from 'clsx'
22
import React, {useEffect, type ForwardedRef, type ElementRef} from 'react'
3-
import {useRefObjectAsForwardedRef} from '../hooks'
3+
import {useMergedRefs} from '../hooks'
44
import classes from './Link.module.css'
55
import type {ComponentProps} from '../utils/types'
66
import {type PolymorphicProps, fixedForwardRef} from '../utils/modern-polymorphic'
@@ -20,7 +20,7 @@ export const UnwrappedLink = <As extends React.ElementType = 'a'>(
2020
) => {
2121
const {as: Component = 'a', className, inline, muted, hoverColor, ...restProps} = props
2222
const innerRef = React.useRef<ElementRef<As>>(null)
23-
useRefObjectAsForwardedRef(ref, innerRef)
23+
const mergedRef = useMergedRefs(ref, innerRef)
2424

2525
if (__DEV__) {
2626
/**
@@ -55,7 +55,7 @@ export const UnwrappedLink = <As extends React.ElementType = 'a'>(
5555
data-hover-color={hoverColor}
5656
{...restProps}
5757
// eslint-disable-next-line @typescript-eslint/no-explicit-any
58-
ref={innerRef as any}
58+
ref={mergedRef as any}
5959
/>
6060
)
6161
}

packages/react/src/Overlay/Overlay.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@ import React, {useEffect, useRef} from 'react'
33
import useLayoutEffect from '../utils/useIsomorphicLayoutEffect'
44
import type {AriaRole, Merge} from '../utils/types'
55
import type {TouchOrMouseEvent} from '../hooks'
6-
import {useOverlay} from '../hooks'
6+
import {useMergedRefs, useOverlay} from '../hooks'
77
import Portal from '../Portal'
8-
import {useRefObjectAsForwardedRef} from '../hooks/useRefObjectAsForwardedRef'
98
import type {AnchorSide} from '@primer/behaviors'
109
import type {ForwardRefComponent as PolymorphicForwardRefComponent} from '../utils/polymorphic'
1110
import classes from './Overlay.module.css'
@@ -192,7 +191,7 @@ const Overlay = React.forwardRef<HTMLDivElement, internalOverlayProps>(
192191
// eslint-disable-next-line @typescript-eslint/no-explicit-any
193192
): ReactElement<any> => {
194193
const overlayRef = useRef<HTMLDivElement>(null)
195-
useRefObjectAsForwardedRef(forwardedRef, overlayRef)
194+
const mergedOverlayRef = useMergedRefs(forwardedRef, overlayRef)
196195
const slideAnimationDistance = 8 // var(--base-size-8), hardcoded to do some math
197196
const slideAnimationEasing = 'cubic-bezier(0.33, 1, 0.68, 1)'
198197
const cssAnchorPositioning = useFeatureFlag('primer_react_css_anchor_positioning')
@@ -237,7 +236,7 @@ const Overlay = React.forwardRef<HTMLDivElement, internalOverlayProps>(
237236
role={role}
238237
width={width}
239238
data-reflow-container={!preventOverflow ? true : undefined}
240-
ref={overlayRef}
239+
ref={mergedOverlayRef}
241240
left={leftPosition}
242241
right={right}
243242
height={height}

0 commit comments

Comments
 (0)