diff --git a/src/components/views/avatars/BaseAvatar.tsx b/src/components/views/avatars/BaseAvatar.tsx index 88cf24616c..d956c26da2 100644 --- a/src/components/views/avatars/BaseAvatar.tsx +++ b/src/components/views/avatars/BaseAvatar.tsx @@ -17,7 +17,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import React, { useCallback, useContext, useEffect, useState } from "react"; +import React, { forwardRef, useCallback, useContext, useEffect, useState } from "react"; import classNames from "classnames"; import { ClientEvent } from "matrix-js-sdk/src/matrix"; import { Avatar } from "@vector-im/compound-web"; @@ -38,7 +38,6 @@ interface IProps { type?: React.ComponentProps["type"]; size: string; onClick?: (ev: ButtonEvent) => void; - inputRef?: React.RefObject; className?: string; tabIndex?: number; altText?: string; @@ -95,7 +94,7 @@ const useImageUrl = ({ url, urls }: { url?: string | null; urls?: string[] }): [ return [imageUrl, onError]; }; -const BaseAvatar: React.FC = (props) => { +const BaseAvatar = forwardRef((props, ref) => { const { name, idName, @@ -104,7 +103,6 @@ const BaseAvatar: React.FC = (props) => { urls, size = "40px", onClick, - inputRef, className, type = "round", altText = _t("common|avatar"), @@ -127,7 +125,7 @@ const BaseAvatar: React.FC = (props) => { return ( = (props) => { data-testid="avatar-img" /> ); -}; +}); export default BaseAvatar; export type BaseAvatarType = React.FC; diff --git a/src/components/views/avatars/MemberAvatar.tsx b/src/components/views/avatars/MemberAvatar.tsx index 678ca89ec3..15ff2f015c 100644 --- a/src/components/views/avatars/MemberAvatar.tsx +++ b/src/components/views/avatars/MemberAvatar.tsx @@ -15,7 +15,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import React, { ReactNode, useContext } from "react"; +import React, { forwardRef, ReactNode, Ref, useContext } from "react"; import { RoomMember, ResizeMethod } from "matrix-js-sdk/src/matrix"; import dis from "../../../dispatcher/dispatcher"; @@ -42,16 +42,19 @@ interface IProps extends Omit, "name" | children?: ReactNode; } -export default function MemberAvatar({ - size, - resizeMethod = "crop", - viewUserOnClick, - forceHistorical, - fallbackUserId, - hideTitle, - member: propsMember, - ...props -}: IProps): JSX.Element { +function MemberAvatar( + { + size, + resizeMethod = "crop", + viewUserOnClick, + forceHistorical, + fallbackUserId, + hideTitle, + member: propsMember, + ...props + }: IProps, + ref: Ref, +): JSX.Element { const card = useContext(CardContext); const member = useRoomMemberProfile({ @@ -100,12 +103,9 @@ export default function MemberAvatar({ : props.onClick } altText={_t("common|user_avatar")} + ref={ref} /> ); } -export class LegacyMemberAvatar extends React.Component { - public render(): React.ReactNode { - return {this.props.children}; - } -} +export default forwardRef(MemberAvatar); diff --git a/src/components/views/rooms/ReadReceiptMarker.tsx b/src/components/views/rooms/ReadReceiptMarker.tsx index d174df0156..5c7f920c35 100644 --- a/src/components/views/rooms/ReadReceiptMarker.tsx +++ b/src/components/views/rooms/ReadReceiptMarker.tsx @@ -21,7 +21,7 @@ import { logger } from "matrix-js-sdk/src/logger"; import NodeAnimator from "../../../NodeAnimator"; import { toPx } from "../../../utils/units"; -import { LegacyMemberAvatar as MemberAvatar } from "../avatars/MemberAvatar"; +import MemberAvatar from "../avatars/MemberAvatar"; import { READ_AVATAR_SIZE } from "./ReadReceiptGroup"; export interface IReadReceiptInfo { @@ -216,7 +216,7 @@ export default class ReadReceiptMarker extends React.PureComponent} + ref={this.avatar} hideTitle tabIndex={-1} />