Skip to content

Commit c40135f

Browse files
committed
replace useRef with useId
1 parent af5ae56 commit c40135f

File tree

6 files changed

+26
-61
lines changed

6 files changed

+26
-61
lines changed

src/components/ControlPlanes/ControlPlaneCard/ControlPlaneCardMenu.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Button, Menu, MenuItem } from '@ui5/webcomponents-react';
22

3-
import { Dispatch, FC, SetStateAction, useRef, useState } from 'react';
3+
import { Dispatch, FC, SetStateAction, useId, useState } from 'react';
44
import '@ui5/webcomponents-icons/dist/copy';
55
import '@ui5/webcomponents-icons/dist/accept';
66

@@ -17,7 +17,7 @@ export const ControlPlaneCardMenu: FC<ControlPlanesListMenuProps> = ({
1717
isDeleteMcpButtonDisabled,
1818
setIsEditManagedControlPlaneWizardOpen,
1919
}) => {
20-
const buttonRef = useRef(null);
20+
const openerId = useId();
2121
const [menuIsOpen, setMenuIsOpen] = useState(false);
2222
const { t } = useTranslation();
2323

@@ -28,15 +28,15 @@ export const ControlPlaneCardMenu: FC<ControlPlanesListMenuProps> = ({
2828
return (
2929
<>
3030
<Button
31-
ref={buttonRef}
31+
id={openerId}
3232
icon="overflow"
3333
icon-end
3434
data-testid="ControlPlaneCardMenu-opener"
3535
onClick={handleOpenerClick}
3636
/>
3737
<Menu
3838
open={menuIsOpen}
39-
opener={buttonRef.current}
39+
opener={openerId}
4040
onItemClick={(event) => {
4141
const action = (event.detail.item as HTMLElement).dataset.action;
4242
if (action === 'editMcp') {

src/components/ControlPlanes/ControlPlanePageMenu.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Dispatch, FC, SetStateAction, useRef, useState } from 'react';
1+
import { Dispatch, FC, SetStateAction, useId, useState } from 'react';
22
import { useTranslation } from 'react-i18next';
33
import { Button, Menu, MenuItem } from '@ui5/webcomponents-react';
44

@@ -7,7 +7,7 @@ type ControlPlanesListMenuProps = {
77
};
88

99
export const ControlPlanePageMenu: FC<ControlPlanesListMenuProps> = ({ setIsEditManagedControlPlaneWizardOpen }) => {
10-
const buttonRef = useRef(null);
10+
const openerId = useId();
1111
const [menuIsOpen, setMenuIsOpen] = useState(false);
1212
const { t } = useTranslation();
1313

@@ -17,10 +17,10 @@ export const ControlPlanePageMenu: FC<ControlPlanesListMenuProps> = ({ setIsEdit
1717

1818
return (
1919
<>
20-
<Button ref={buttonRef} icon="overflow" icon-end onClick={handleOpenerClick} />
20+
<Button id={openerId} icon="overflow" icon-end onClick={handleOpenerClick} />
2121
<Menu
2222
open={menuIsOpen}
23-
opener={buttonRef.current}
23+
opener={openerId}
2424
onItemClick={(event) => {
2525
const action = (event.detail.item as HTMLElement).dataset.action;
2626
if (action === 'editMcp') {

src/components/ControlPlanes/List/MembersAvatarView.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Avatar, AvatarGroup, Popover } from '@ui5/webcomponents-react';
22
import AvatarGroupType from '@ui5/webcomponents/dist/types/AvatarGroupType.js';
33
import PopoverPlacement from '@ui5/webcomponents/dist/types/PopoverPlacement.js';
4-
import { useRef, useState } from 'react';
4+
import { useId, useState } from 'react';
55
import { MemberTable } from '../../Members/MemberTable.tsx';
66
import { Member } from '../../../lib/api/types/shared/members';
77
import { generateInitialsForEmail } from '../../Helper/generateInitialsForEmail.ts';
@@ -13,7 +13,7 @@ interface Props {
1313
}
1414

1515
export function MembersAvatarView({ members, project, workspace }: Props) {
16-
const openerRef = useRef(null);
16+
const openerId = useId();
1717
const [popoverIsOpen, setPopoverIsOpen] = useState(false);
1818
const avatars = [];
1919

@@ -33,11 +33,11 @@ export function MembersAvatarView({ members, project, workspace }: Props) {
3333

3434
return (
3535
<div style={{ display: 'flex', justifyContent: 'flex-end' }}>
36-
<AvatarGroup ref={openerRef} style={{ maxWidth: '200px' }} type={AvatarGroupType.Group} onClick={handleOnClick}>
36+
<AvatarGroup id={openerId} style={{ maxWidth: '200px' }} type={AvatarGroupType.Group} onClick={handleOnClick}>
3737
{avatars}
3838
</AvatarGroup>
3939
<Popover
40-
opener={openerRef.current!}
40+
opener={openerId}
4141
placement={PopoverPlacement.Bottom}
4242
open={popoverIsOpen}
4343
onClose={() => {

src/components/Helper/AnimatedHoverTextButton.tsx

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,25 @@
11
import { Button, ButtonDomRef, FlexBox, FlexBoxAlignItems, Text } from '@ui5/webcomponents-react';
22
import '@ui5/webcomponents-icons/dist/copy';
3-
import { JSX, RefObject, useState } from 'react';
3+
import { JSX, useId, useState } from 'react';
44
import ButtonDesign from '@ui5/webcomponents/dist/types/ButtonDesign.js';
55
import type { Ui5CustomEvent } from '@ui5/webcomponents-react-base';
66
import type { ButtonClickEventDetail } from '@ui5/webcomponents/dist/Button.js';
77

88
type HoverTextButtonProps = {
9+
id?: string;
910
text: string;
1011
icon: JSX.Element;
11-
ref?: RefObject<ButtonDomRef | null>;
1212
onClick: (event: Ui5CustomEvent<ButtonDomRef, ButtonClickEventDetail>) => void;
1313
};
14-
export const AnimatedHoverTextButton = ({ text, icon, onClick, ref }: HoverTextButtonProps) => {
14+
export const AnimatedHoverTextButton = ({ id, text, icon, onClick }: HoverTextButtonProps) => {
1515
const [hover, setHover] = useState(false);
16+
17+
const generatedId = useId();
18+
id ??= generatedId;
19+
1620
return (
1721
<Button
18-
ref={ref}
22+
id={id}
1923
design={ButtonDesign.Transparent}
2024
onClick={onClick}
2125
onMouseOver={() => setHover(true)}

src/components/Helper/Tooltip.tsx

Lines changed: 0 additions & 39 deletions
This file was deleted.

src/components/Shared/ResourceStatusCell.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { Button, ButtonDomRef, FlexBox, Icon, ResponsivePopover, Text } from '@ui5/webcomponents-react';
1+
import { Button, FlexBox, Icon, ResponsivePopover, Text } from '@ui5/webcomponents-react';
22
import { formatDateAsTimeAgo } from '../../utils/i18n/timeAgo';
3-
import { useRef, useState } from 'react';
3+
import { useId, useState } from 'react';
44
import { AnimatedHoverTextButton } from '../Helper/AnimatedHoverTextButton.tsx';
55
import PopoverPlacement from '@ui5/webcomponents/dist/types/PopoverPlacement.js';
66
import styles from './ResourceStatusCell.module.css';
@@ -20,7 +20,7 @@ export const ResourceStatusCell = ({
2020
negativeText,
2121
hideOnHoverEffect,
2222
}: ResourceStatusCellProps) => {
23-
const btnRef = useRef<ButtonDomRef>(null);
23+
const openerId = useId();
2424
const [popoverIsOpen, setPopoverIsOpen] = useState(false);
2525
const timeAgo = transitionTime ? formatDateAsTimeAgo(transitionTime) : '-';
2626

@@ -33,7 +33,7 @@ export const ResourceStatusCell = ({
3333
return (
3434
<span>
3535
{hideOnHoverEffect ? (
36-
<Button ref={btnRef} design="Transparent" title={timeAgo} aria-label={timeAgo} onClick={handleOpen}>
36+
<Button id={openerId} design="Transparent" title={timeAgo} aria-label={timeAgo} onClick={handleOpen}>
3737
<Icon
3838
design={isOk ? 'Positive' : 'Negative'}
3939
name={isOk ? 'sys-enter-2' : 'sys-cancel-2'}
@@ -43,7 +43,7 @@ export const ResourceStatusCell = ({
4343
</Button>
4444
) : (
4545
<AnimatedHoverTextButton
46-
ref={btnRef}
46+
id={openerId}
4747
icon={
4848
<Icon
4949
design={isOk ? 'Positive' : 'Negative'}
@@ -58,7 +58,7 @@ export const ResourceStatusCell = ({
5858
)}
5959

6060
<ResponsivePopover
61-
opener={btnRef.current ?? undefined}
61+
opener={openerId}
6262
open={popoverIsOpen}
6363
placement={PopoverPlacement.Bottom}
6464
onClose={handleClose}

0 commit comments

Comments
 (0)