From ec1871c4585bba4a5ddf282e84d8fb6523498c9d Mon Sep 17 00:00:00 2001 From: Ricardo Garim Date: Mon, 8 Jun 2026 20:32:40 -0300 Subject: [PATCH 1/6] chore: add PresenceStatusCode type for presence wire format (#40846) --- apps/meteor/server/modules/listeners/listeners.module.ts | 4 ++-- .../server/modules/notifications/notifications.module.ts | 4 ++-- packages/core-typings/src/PresenceStatusCode.ts | 1 + packages/core-typings/src/index.ts | 1 + packages/ddp-client/src/types/streams.ts | 5 +++-- 5 files changed, 9 insertions(+), 6 deletions(-) create mode 100644 packages/core-typings/src/PresenceStatusCode.ts diff --git a/apps/meteor/server/modules/listeners/listeners.module.ts b/apps/meteor/server/modules/listeners/listeners.module.ts index db9683cadafd9..af62fa8d7ba13 100644 --- a/apps/meteor/server/modules/listeners/listeners.module.ts +++ b/apps/meteor/server/modules/listeners/listeners.module.ts @@ -3,7 +3,7 @@ import type { ISetting as AppsSetting } from '@rocket.chat/apps-engine/definitio import type { IServiceClass } from '@rocket.chat/core-services'; import { EnterpriseSettings } from '@rocket.chat/core-services'; import { isSettingColor, isSettingEnterprise, UserStatus } from '@rocket.chat/core-typings'; -import type { IUser, IRoom, IRole, VideoConference, ISetting, IOmnichannelRoom } from '@rocket.chat/core-typings'; +import type { IUser, IRoom, IRole, VideoConference, ISetting, IOmnichannelRoom, PresenceStatusCode } from '@rocket.chat/core-typings'; import { Logger } from '@rocket.chat/logger'; import type { ServerMediaSignal } from '@rocket.chat/media-signaling'; import { parse } from '@rocket.chat/message-parser'; @@ -13,7 +13,7 @@ import type { NotificationsModule } from '../notifications/notifications.module' const isMessageParserDisabled = process.env.DISABLE_MESSAGE_PARSER === 'true'; -const STATUS_MAP: Record = { +const STATUS_MAP: Record = { [UserStatus.OFFLINE]: 0, [UserStatus.ONLINE]: 1, [UserStatus.AWAY]: 2, diff --git a/apps/meteor/server/modules/notifications/notifications.module.ts b/apps/meteor/server/modules/notifications/notifications.module.ts index cabcfb8a0d0c2..44c7e7196dac2 100644 --- a/apps/meteor/server/modules/notifications/notifications.module.ts +++ b/apps/meteor/server/modules/notifications/notifications.module.ts @@ -1,5 +1,5 @@ import { Authorization, MediaCall, VideoConf, Settings } from '@rocket.chat/core-services'; -import type { ISubscription, IOmnichannelRoom, IUser, IUserDataEvent } from '@rocket.chat/core-typings'; +import type { ISubscription, IOmnichannelRoom, IUser, IUserDataEvent, PresenceStatusCode } from '@rocket.chat/core-typings'; import type { StreamerCallbackArgs, StreamKeys, StreamNames } from '@rocket.chat/ddp-client'; import { Rooms, Subscriptions, Users } from '@rocket.chat/models'; @@ -512,7 +512,7 @@ export class NotificationsModule { return this.streamUser.emitWithoutBroadcast(`${userId}/${eventName}`, ...args); } - sendPresence(uid: string, ...args: [username: string, status?: 0 | 1 | 2 | 3, statusText?: string]): void { + sendPresence(uid: string, ...args: [username: string, status?: PresenceStatusCode, statusText?: string]): void { emit(uid, [args]); return this.streamPresence.emitWithoutBroadcast(uid, args); } diff --git a/packages/core-typings/src/PresenceStatusCode.ts b/packages/core-typings/src/PresenceStatusCode.ts new file mode 100644 index 0000000000000..95004c320ffe6 --- /dev/null +++ b/packages/core-typings/src/PresenceStatusCode.ts @@ -0,0 +1 @@ +export type PresenceStatusCode = 0 | 1 | 2 | 3; diff --git a/packages/core-typings/src/index.ts b/packages/core-typings/src/index.ts index 90dd9c4e638a8..56ba73c7d77f9 100644 --- a/packages/core-typings/src/index.ts +++ b/packages/core-typings/src/index.ts @@ -11,6 +11,7 @@ export type * from './RoomType'; export type * from './IInvite'; export type * from './IRocketChatRecord'; export * from './UserStatus'; +export type * from './PresenceStatusCode'; export type * from './userAction'; export * from './IBanner'; export type * from './IStats'; diff --git a/packages/ddp-client/src/types/streams.ts b/packages/ddp-client/src/types/streams.ts index 11098a865c9e9..2c89e027c776f 100644 --- a/packages/ddp-client/src/types/streams.ts +++ b/packages/ddp-client/src/types/streams.ts @@ -25,6 +25,7 @@ import type { IWebdavAccount, MessageAttachment, ISession, + PresenceStatusCode, } from '@rocket.chat/core-typings'; import type { ServerMediaSignal } from '@rocket.chat/media-signaling'; import type * as UiKit from '@rocket.chat/ui-kit'; @@ -229,7 +230,7 @@ export interface StreamerEvents { [ uid: IUser['_id'], username: IUser['username'], - status: 0 | 1 | 2 | 3, + status: PresenceStatusCode, statusText: IUser['statusText'], name: IUser['name'], roles: IUser['roles'], @@ -297,7 +298,7 @@ export interface StreamerEvents { }, ]; - 'user-presence': [{ key: string; args: [[username: string, statusChanged?: 0 | 1 | 2 | 3, statusText?: string]] }]; + 'user-presence': [{ key: string; args: [[username: string, statusChanged?: PresenceStatusCode, statusText?: string]] }]; // TODO: rename to 'integration-history' 'integrationHistory': [ From 7cca5d9e036bfb30c7f2b3dd789cd3fb82265bfa Mon Sep 17 00:00:00 2001 From: Tasso Evangelista Date: Mon, 8 Jun 2026 22:03:10 -0300 Subject: [PATCH 2/6] refactor(pdf-worker): remove unnecessary ReactElement type annotations from components (#40812) --- .../src/templates/ChatTranscript/components/Quotes.tsx | 2 +- .../templates/ChatTranscript/markup/blocks/BigEmojiBlock.tsx | 3 +-- .../src/templates/ChatTranscript/markup/blocks/CodeBlock.tsx | 3 +-- .../src/templates/ChatTranscript/markup/elements/LinkSpan.tsx | 3 +-- 4 files changed, 4 insertions(+), 7 deletions(-) diff --git a/ee/packages/pdf-worker/src/templates/ChatTranscript/components/Quotes.tsx b/ee/packages/pdf-worker/src/templates/ChatTranscript/components/Quotes.tsx index 36cc4314f1335..065d5f0438c50 100644 --- a/ee/packages/pdf-worker/src/templates/ChatTranscript/components/Quotes.tsx +++ b/ee/packages/pdf-worker/src/templates/ChatTranscript/components/Quotes.tsx @@ -51,7 +51,7 @@ type QuotesProps = { }; export const Quotes = ({ quotes }: QuotesProps) => - quotes.reduceRight( + quotes.reduceRight( (lastQuote, quote, index) => ( {lastQuote} diff --git a/ee/packages/pdf-worker/src/templates/ChatTranscript/markup/blocks/BigEmojiBlock.tsx b/ee/packages/pdf-worker/src/templates/ChatTranscript/markup/blocks/BigEmojiBlock.tsx index 83e8a52cbf8e3..80a23eae6fe30 100644 --- a/ee/packages/pdf-worker/src/templates/ChatTranscript/markup/blocks/BigEmojiBlock.tsx +++ b/ee/packages/pdf-worker/src/templates/ChatTranscript/markup/blocks/BigEmojiBlock.tsx @@ -1,13 +1,12 @@ import { Text } from '@react-pdf/renderer'; import type * as MessageParser from '@rocket.chat/message-parser'; import emojione from 'emoji-toolkit'; -import type { ReactElement } from 'react'; type BigEmojiBlockProps = { emoji: MessageParser.Emoji[]; }; -const BigEmojiBlock = ({ emoji }: BigEmojiBlockProps): ReactElement => ( +const BigEmojiBlock = ({ emoji }: BigEmojiBlockProps) => ( {emoji.map((emoji, index) => ( {emoji.value ? `:${emoji.value?.value}:` : emojione.toShort(emoji.unicode)} diff --git a/ee/packages/pdf-worker/src/templates/ChatTranscript/markup/blocks/CodeBlock.tsx b/ee/packages/pdf-worker/src/templates/ChatTranscript/markup/blocks/CodeBlock.tsx index 6174dbf5aecae..2c7b8f0a490ab 100644 --- a/ee/packages/pdf-worker/src/templates/ChatTranscript/markup/blocks/CodeBlock.tsx +++ b/ee/packages/pdf-worker/src/templates/ChatTranscript/markup/blocks/CodeBlock.tsx @@ -1,6 +1,5 @@ import { Text, View } from '@react-pdf/renderer'; import type * as MessageParser from '@rocket.chat/message-parser'; -import type { ReactElement } from 'react'; import { codeStyles } from '../elements/CodeSpan'; @@ -8,7 +7,7 @@ type CodeBlockProps = { lines: MessageParser.CodeLine[]; }; -const CodeBlock = ({ lines }: CodeBlockProps): ReactElement => ( +const CodeBlock = ({ lines }: CodeBlockProps) => ( {lines.map((line, index) => ( diff --git a/ee/packages/pdf-worker/src/templates/ChatTranscript/markup/elements/LinkSpan.tsx b/ee/packages/pdf-worker/src/templates/ChatTranscript/markup/elements/LinkSpan.tsx index e0a274b49e7e1..64d675becaa8d 100644 --- a/ee/packages/pdf-worker/src/templates/ChatTranscript/markup/elements/LinkSpan.tsx +++ b/ee/packages/pdf-worker/src/templates/ChatTranscript/markup/elements/LinkSpan.tsx @@ -1,6 +1,5 @@ import { View, Text } from '@react-pdf/renderer'; import type * as MessageParser from '@rocket.chat/message-parser'; -import type { ReactElement } from 'react'; import { useMemo } from 'react'; import BoldSpan from './BoldSpan'; @@ -11,7 +10,7 @@ type LinkSpanProps = { label: MessageParser.Markup | MessageParser.Markup[]; }; -const LinkSpan = ({ label }: LinkSpanProps): ReactElement => { +const LinkSpan = ({ label }: LinkSpanProps) => { const children = useMemo(() => { const labelArray = Array.isArray(label) ? label : [label]; From 918abe1d79fbca812fc1c5c31dc16d2bb4bc7c26 Mon Sep 17 00:00:00 2001 From: Tasso Evangelista Date: Mon, 8 Jun 2026 23:27:41 -0300 Subject: [PATCH 3/6] refactor(uikit-playground): remove unnecessary ReactElement type annotations from components (#40813) --- .../src/Components/NavBar/BurgerIcon/BurgerIcon.tsx | 4 ++-- .../src/Components/NavBar/BurgerIcon/Line.tsx | 3 +-- .../src/Components/NavBar/BurgerIcon/Wrapper.tsx | 4 ++-- .../Display/UiKitElementWrapper/UiKitElementWrapper.tsx | 4 ++-- apps/uikit-playground/src/Components/navMenu/Menu/Wrapper.tsx | 4 ++-- apps/uikit-playground/src/Context/createCtx.tsx | 4 ++-- 6 files changed, 11 insertions(+), 12 deletions(-) diff --git a/apps/uikit-playground/src/Components/NavBar/BurgerIcon/BurgerIcon.tsx b/apps/uikit-playground/src/Components/NavBar/BurgerIcon/BurgerIcon.tsx index 03d895f216d71..1611e75d1d8f2 100644 --- a/apps/uikit-playground/src/Components/NavBar/BurgerIcon/BurgerIcon.tsx +++ b/apps/uikit-playground/src/Components/NavBar/BurgerIcon/BurgerIcon.tsx @@ -1,12 +1,12 @@ import { usePrefersReducedMotion } from '@rocket.chat/fuselage-hooks'; -import type { ReactElement, ReactNode } from 'react'; +import type { ReactNode } from 'react'; import { useContext } from 'react'; import Line from './Line'; import Wrapper from './Wrapper'; import { context } from '../../../Context'; -const BurgerIcon = ({ children }: { children?: ReactNode }): ReactElement => { +const BurgerIcon = ({ children }: { children?: ReactNode }) => { const isReducedMotionPreferred = usePrefersReducedMotion(); const { state: { navMenuToggle }, diff --git a/apps/uikit-playground/src/Components/NavBar/BurgerIcon/Line.tsx b/apps/uikit-playground/src/Components/NavBar/BurgerIcon/Line.tsx index 5e188bba2cbc4..d81a6bd67ef46 100644 --- a/apps/uikit-playground/src/Components/NavBar/BurgerIcon/Line.tsx +++ b/apps/uikit-playground/src/Components/NavBar/BurgerIcon/Line.tsx @@ -1,8 +1,7 @@ import { css } from '@rocket.chat/css-in-js'; import { Box } from '@rocket.chat/fuselage'; -import type { ReactElement } from 'react'; -const Line = ({ animated, moved }: { animated: boolean; moved?: boolean }): ReactElement => { +const Line = ({ animated, moved }: { animated: boolean; moved?: boolean }) => { const animatedStyle = animated ? css` will-change: transform; diff --git a/apps/uikit-playground/src/Components/NavBar/BurgerIcon/Wrapper.tsx b/apps/uikit-playground/src/Components/NavBar/BurgerIcon/Wrapper.tsx index d6c8ae7800460..73a2801a9da10 100644 --- a/apps/uikit-playground/src/Components/NavBar/BurgerIcon/Wrapper.tsx +++ b/apps/uikit-playground/src/Components/NavBar/BurgerIcon/Wrapper.tsx @@ -1,8 +1,8 @@ import { css } from '@rocket.chat/css-in-js'; import { Box } from '@rocket.chat/fuselage'; -import type { ReactElement, ReactNode } from 'react'; +import type { ReactNode } from 'react'; -const Wrapper = ({ children }: { children: ReactNode }): ReactElement => ( +const Wrapper = ({ children }: { children: ReactNode }) => ( ): ReactElement => ; +const ElementWrapper = (props: ComponentProps) => ; export default ElementWrapper; diff --git a/apps/uikit-playground/src/Components/navMenu/Menu/Wrapper.tsx b/apps/uikit-playground/src/Components/navMenu/Menu/Wrapper.tsx index d45c80c8c7ca5..d9fe8fa35dfa0 100644 --- a/apps/uikit-playground/src/Components/navMenu/Menu/Wrapper.tsx +++ b/apps/uikit-playground/src/Components/navMenu/Menu/Wrapper.tsx @@ -1,7 +1,7 @@ import { Box } from '@rocket.chat/fuselage'; -import type { ReactElement, ReactNode } from 'react'; +import type { ReactNode } from 'react'; -const Wrapper = ({ children }: { children: ReactNode }): ReactElement => ( +const Wrapper = ({ children }: { children: ReactNode }) => ( (reducer: Reducer { + const Provider = (props: { children: ReactNode }) => { const [state, dispatch] = useReducer(reducer, initialState); return ; }; From d03acfc960a47713d5b27f2c8bcae69766106a27 Mon Sep 17 00:00:00 2001 From: Tasso Evangelista Date: Tue, 9 Jun 2026 01:30:15 -0300 Subject: [PATCH 4/6] refactor: remove unnecessary ReactElement type annotations from components (#40814) --- .../ui-message/client/messageBox/createComposerAPI.ts | 2 +- apps/meteor/client/lib/chats/ChatAPI.ts | 2 +- apps/meteor/tests/mocks/client/FakeChatProvider.tsx | 4 ++-- apps/meteor/tests/mocks/client/FakeRoomProvider.tsx | 4 ++-- apps/meteor/tests/mocks/client/ModalContextMock.tsx | 4 ++-- apps/meteor/tests/mocks/client/RouterContextMock.tsx | 10 ++-------- 6 files changed, 10 insertions(+), 16 deletions(-) diff --git a/apps/meteor/app/ui-message/client/messageBox/createComposerAPI.ts b/apps/meteor/app/ui-message/client/messageBox/createComposerAPI.ts index 04447635ad45e..2018abfa5fa91 100644 --- a/apps/meteor/app/ui-message/client/messageBox/createComposerAPI.ts +++ b/apps/meteor/app/ui-message/client/messageBox/createComposerAPI.ts @@ -15,7 +15,7 @@ export const createComposerAPI = ( persistDraft: (value: string) => void, initialDraft: string, quoteChainLimit: number, - composerRef: RefObject, + composerRef: RefObject, { rid, tmid }: { rid: string; tmid?: string }, ): ComposerAPI => { const triggerEvent = (input: HTMLTextAreaElement, evt: string): void => { diff --git a/apps/meteor/client/lib/chats/ChatAPI.ts b/apps/meteor/client/lib/chats/ChatAPI.ts index db2e61ad640af..2826f3f56de58 100644 --- a/apps/meteor/client/lib/chats/ChatAPI.ts +++ b/apps/meteor/client/lib/chats/ChatAPI.ts @@ -68,7 +68,7 @@ export type ComposerAPI = { readonly formatters: Subscribable; - readonly composerRef: RefObject; + readonly composerRef: RefObject; readonly uploads: UploadsAPI; }; diff --git a/apps/meteor/tests/mocks/client/FakeChatProvider.tsx b/apps/meteor/tests/mocks/client/FakeChatProvider.tsx index a71e49df666e8..1243f38b1ce36 100644 --- a/apps/meteor/tests/mocks/client/FakeChatProvider.tsx +++ b/apps/meteor/tests/mocks/client/FakeChatProvider.tsx @@ -1,4 +1,4 @@ -import type { ReactElement, ReactNode } from 'react'; +import type { ReactNode } from 'react'; import { ChatContext } from '../../../client/views/room/contexts/ChatContext'; import { createFakeSubscription } from '../data'; @@ -7,7 +7,7 @@ type FakeChatProviderProps = { children?: ReactNode; }; -const FakeChatProvider = ({ children }: FakeChatProviderProps): ReactElement => { +const FakeChatProvider = ({ children }: FakeChatProviderProps) => { return ( ; }; -const FakeRoomProvider = ({ children, roomOverrides, subscriptionOverrides }: FakeRoomProviderProps): ReactElement => { +const FakeRoomProvider = ({ children, roomOverrides, subscriptionOverrides }: FakeRoomProviderProps) => { return ( { diff --git a/apps/meteor/tests/mocks/client/ModalContextMock.tsx b/apps/meteor/tests/mocks/client/ModalContextMock.tsx index 07d97156b1ac5..7f3636c89aff5 100644 --- a/apps/meteor/tests/mocks/client/ModalContextMock.tsx +++ b/apps/meteor/tests/mocks/client/ModalContextMock.tsx @@ -1,12 +1,12 @@ import { ModalContext } from '@rocket.chat/ui-contexts'; -import type { ReactElement, ContextType, ReactNode } from 'react'; +import type { ContextType, ReactNode } from 'react'; import { useMemo } from 'react'; type ModalContextMockProps = { children: ReactNode; }; -const ModalContextMock = ({ children }: ModalContextMockProps): ReactElement => { +const ModalContextMock = ({ children }: ModalContextMockProps) => { const value = useMemo( () => ({ modal: { diff --git a/apps/meteor/tests/mocks/client/RouterContextMock.tsx b/apps/meteor/tests/mocks/client/RouterContextMock.tsx index 7a511289f7d02..53eb6c84b1283 100644 --- a/apps/meteor/tests/mocks/client/RouterContextMock.tsx +++ b/apps/meteor/tests/mocks/client/RouterContextMock.tsx @@ -2,7 +2,7 @@ import type { To, SearchParameters, LocationPathname, LocationSearch } from '@ro import { RouterContext } from '@rocket.chat/ui-contexts'; import { compile } from 'path-to-regexp'; import { useRef, useMemo } from 'react'; -import type { MutableRefObject, ReactElement, ReactNode } from 'react'; +import type { MutableRefObject, ReactNode } from 'react'; const encodeSearchParameters = (searchParameters: SearchParameters) => { const search = new URLSearchParams(); @@ -63,13 +63,7 @@ type RouterContextMockProps = { routeParameters?: Record; }; -const RouterContextMock = ({ - children, - navigate, - currentPath, - searchParameters = {}, - routeParameters = {}, -}: RouterContextMockProps): ReactElement => { +const RouterContextMock = ({ children, navigate, currentPath, searchParameters = {}, routeParameters = {} }: RouterContextMockProps) => { const history = useRef<{ stack: To[]; index: number }>({ stack: ['/'], index: 0 }); if (currentPath) { From 694118470b4ac663ab004701c87d8c753793da73 Mon Sep 17 00:00:00 2001 From: Tasso Evangelista Date: Tue, 9 Jun 2026 02:24:42 -0300 Subject: [PATCH 5/6] refactor: remove unnecessary ReactElement type annotations from components (#40815) --- apps/meteor/client/apps/gameCenter/GameCenter.tsx | 4 ++-- .../client/apps/gameCenter/GameCenterContainer.tsx | 3 +-- .../apps/gameCenter/GameCenterInvitePlayersModal.tsx | 3 +-- apps/meteor/client/apps/gameCenter/GameCenterList.tsx | 3 +-- apps/meteor/client/providers/ActionManagerProvider.tsx | 4 ++-- .../AuthenticationProvider/AuthenticationProvider.tsx | 4 ++-- .../client/providers/DeviceProvider/DeviceProvider.tsx | 4 ++-- .../EmojiPickerProvider/EmojiPickerProvider.tsx | 6 +++--- apps/meteor/client/providers/TranslationProvider.tsx | 6 +++--- .../client/providers/UserProvider/UserProvider.tsx | 4 ++-- .../UserProvider/hooks/useReloadAfterLogin.ts | 2 +- apps/meteor/client/providers/VideoConfProvider.tsx | 4 ++-- .../client/stories/contexts/ModalContextMock.tsx | 4 ++-- .../client/stories/contexts/RouterContextMock.tsx | 4 ++-- .../client/stories/contexts/ServerContextMock.tsx | 10 ++-------- .../client/stories/contexts/TranslationContextMock.tsx | 4 ++-- 16 files changed, 30 insertions(+), 39 deletions(-) diff --git a/apps/meteor/client/apps/gameCenter/GameCenter.tsx b/apps/meteor/client/apps/gameCenter/GameCenter.tsx index 058cc7dfdcd49..0955710c0a936 100644 --- a/apps/meteor/client/apps/gameCenter/GameCenter.tsx +++ b/apps/meteor/client/apps/gameCenter/GameCenter.tsx @@ -2,7 +2,7 @@ import type { IExternalComponent } from '@rocket.chat/apps-engine/definition/ext import { useEffectEvent } from '@rocket.chat/fuselage-hooks'; import { useRoomToolbox } from '@rocket.chat/ui-contexts'; import { useState } from 'react'; -import type { MouseEvent, ReactElement } from 'react'; +import type { MouseEvent } from 'react'; import GameCenterContainer from './GameCenterContainer'; import GameCenterList from './GameCenterList'; @@ -11,7 +11,7 @@ import { preventSyntheticEvent } from '../../lib/utils/preventSyntheticEvent'; export type IGame = IExternalComponent; -const GameCenter = (): ReactElement => { +const GameCenter = () => { const [openedGame, setOpenedGame] = useState(); const { closeTab } = useRoomToolbox(); diff --git a/apps/meteor/client/apps/gameCenter/GameCenterContainer.tsx b/apps/meteor/client/apps/gameCenter/GameCenterContainer.tsx index a275e98107a92..c6b9b95ffe120 100644 --- a/apps/meteor/client/apps/gameCenter/GameCenterContainer.tsx +++ b/apps/meteor/client/apps/gameCenter/GameCenterContainer.tsx @@ -7,7 +7,6 @@ import { ContextualbarClose, ContextualbarDialog, } from '@rocket.chat/ui-client'; -import type { ReactElement } from 'react'; import { useTranslation } from 'react-i18next'; import type { IGame } from './GameCenter'; @@ -18,7 +17,7 @@ interface IGameCenterContainerProps { game: IGame; } -const GameCenterContainer = ({ handleClose, handleBack, game }: IGameCenterContainerProps): ReactElement => { +const GameCenterContainer = ({ handleClose, handleBack, game }: IGameCenterContainerProps) => { const { t } = useTranslation(); return ( diff --git a/apps/meteor/client/apps/gameCenter/GameCenterInvitePlayersModal.tsx b/apps/meteor/client/apps/gameCenter/GameCenterInvitePlayersModal.tsx index e447038f70ae7..bad66d4d3f2df 100644 --- a/apps/meteor/client/apps/gameCenter/GameCenterInvitePlayersModal.tsx +++ b/apps/meteor/client/apps/gameCenter/GameCenterInvitePlayersModal.tsx @@ -2,7 +2,6 @@ import type { IUser } from '@rocket.chat/core-typings'; import { Box } from '@rocket.chat/fuselage'; import { Random } from '@rocket.chat/random'; import { GenericModal } from '@rocket.chat/ui-client'; -import type { ReactElement } from 'react'; import { useState } from 'react'; import { useTranslation } from 'react-i18next'; @@ -20,7 +19,7 @@ interface IGameCenterInvitePlayersModalProps { onClose: () => void; } -const GameCenterInvitePlayersModal = ({ game, onClose }: IGameCenterInvitePlayersModalProps): ReactElement => { +const GameCenterInvitePlayersModal = ({ game, onClose }: IGameCenterInvitePlayersModalProps) => { const { t } = useTranslation(); const [users, setUsers] = useState>([]); const { name } = game; diff --git a/apps/meteor/client/apps/gameCenter/GameCenterList.tsx b/apps/meteor/client/apps/gameCenter/GameCenterList.tsx index 539a4f20b4a92..4a9f179a317b8 100644 --- a/apps/meteor/client/apps/gameCenter/GameCenterList.tsx +++ b/apps/meteor/client/apps/gameCenter/GameCenterList.tsx @@ -8,7 +8,6 @@ import { ContextualbarSkeleton, } from '@rocket.chat/ui-client'; import { useSetModal } from '@rocket.chat/ui-contexts'; -import type { ReactElement } from 'react'; import { memo, useCallback } from 'react'; import { useTranslation } from 'react-i18next'; @@ -22,7 +21,7 @@ interface IGameCenterListProps { isLoading: boolean; } -const GameCenterList = ({ handleClose, handleOpenGame, games, isLoading }: IGameCenterListProps): ReactElement => { +const GameCenterList = ({ handleClose, handleOpenGame, games, isLoading }: IGameCenterListProps) => { const { t } = useTranslation(); const setModal = useSetModal(); diff --git a/apps/meteor/client/providers/ActionManagerProvider.tsx b/apps/meteor/client/providers/ActionManagerProvider.tsx index 6698b5cfef651..088ee92aee91a 100644 --- a/apps/meteor/client/providers/ActionManagerProvider.tsx +++ b/apps/meteor/client/providers/ActionManagerProvider.tsx @@ -1,5 +1,5 @@ import { ActionManagerContext, useRouter } from '@rocket.chat/ui-contexts'; -import type { ReactNode, ReactElement } from 'react'; +import type { ReactNode } from 'react'; import { ActionManager } from '../../app/ui-message/client/ActionManager'; import { useAppActionButtons } from '../hooks/useAppActionButtons'; @@ -12,7 +12,7 @@ type ActionManagerProviderProps = { children?: ReactNode; }; -const ActionManagerProvider = ({ children }: ActionManagerProviderProps): ReactElement => { +const ActionManagerProvider = ({ children }: ActionManagerProviderProps) => { const router = useRouter(); const actionManager = useInstance(() => [new ActionManager(router)], [router]); useTranslationsForApps(); diff --git a/apps/meteor/client/providers/AuthenticationProvider/AuthenticationProvider.tsx b/apps/meteor/client/providers/AuthenticationProvider/AuthenticationProvider.tsx index 3e3f4e9eed532..fb1356450ab80 100644 --- a/apps/meteor/client/providers/AuthenticationProvider/AuthenticationProvider.tsx +++ b/apps/meteor/client/providers/AuthenticationProvider/AuthenticationProvider.tsx @@ -3,7 +3,7 @@ import { capitalize } from '@rocket.chat/string-helpers'; import { AuthenticationContext, useSetting } from '@rocket.chat/ui-contexts'; import { Accounts } from 'meteor/accounts-base'; import { Meteor } from 'meteor/meteor'; -import type { ContextType, ReactElement, ReactNode } from 'react'; +import type { ContextType, ReactNode } from 'react'; import { useMemo, useSyncExternalStore } from 'react'; import { useLDAPAndCrowdCollisionWarning } from './hooks/useLDAPAndCrowdCollisionWarning'; @@ -57,7 +57,7 @@ const subscribeLoggingIn = (cb: () => void): (() => void) => { const getLoggingInSnapshot = (): boolean => Accounts.loggingIn(); -const AuthenticationProvider = ({ children }: AuthenticationProviderProps): ReactElement => { +const AuthenticationProvider = ({ children }: AuthenticationProviderProps) => { const isLdapEnabled = useSetting('LDAP_Enable', false); const isCrowdEnabled = useSetting('CROWD_Enable', false); diff --git a/apps/meteor/client/providers/DeviceProvider/DeviceProvider.tsx b/apps/meteor/client/providers/DeviceProvider/DeviceProvider.tsx index dc264c12a365d..686931813ce61 100644 --- a/apps/meteor/client/providers/DeviceProvider/DeviceProvider.tsx +++ b/apps/meteor/client/providers/DeviceProvider/DeviceProvider.tsx @@ -2,7 +2,7 @@ import { useEffectEvent } from '@rocket.chat/fuselage-hooks'; import type { Device, DeviceContextValue } from '@rocket.chat/ui-contexts'; import { DeviceContext } from '@rocket.chat/ui-contexts'; import { useQuery, useQueryClient, keepPreviousData } from '@tanstack/react-query'; -import type { ReactElement, ReactNode } from 'react'; +import type { ReactNode } from 'react'; import { useEffect, useState, useMemo } from 'react'; import { isSetSinkIdAvailable } from './lib/isSetSinkIdAvailable'; @@ -28,7 +28,7 @@ const defaultDevices = { const devicesQueryKey = ['media-devices-list']; -export const DeviceProvider = ({ children }: DeviceProviderProps): ReactElement => { +export const DeviceProvider = ({ children }: DeviceProviderProps) => { const [enabled] = useState(typeof isSecureContext && isSecureContext); const [selectedAudioOutputDevice, setSelectedAudioOutputDevice] = useState(undefined); const [selectedAudioInputDevice, setSelectedAudioInputDevice] = useState(undefined); diff --git a/apps/meteor/client/providers/EmojiPickerProvider/EmojiPickerProvider.tsx b/apps/meteor/client/providers/EmojiPickerProvider/EmojiPickerProvider.tsx index 0fcb5ae6e1a4e..1de2c278d65b0 100644 --- a/apps/meteor/client/providers/EmojiPickerProvider/EmojiPickerProvider.tsx +++ b/apps/meteor/client/providers/EmojiPickerProvider/EmojiPickerProvider.tsx @@ -1,5 +1,5 @@ import { useDebouncedState, useEffectEvent, useLocalStorage } from '@rocket.chat/fuselage-hooks'; -import type { ReactNode, ReactElement, ContextType } from 'react'; +import type { ReactNode, ContextType } from 'react'; import { useState, useCallback, useMemo, useSyncExternalStore } from 'react'; import { useUpdateCustomEmoji } from './useUpdateCustomEmoji'; @@ -12,8 +12,8 @@ const DEFAULT_ITEMS_LIMIT = 90; // limit recent emojis to 27 (3 rows of 9) const RECENT_EMOJIS_LIMIT = 27; -const EmojiPickerProvider = ({ children }: { children: ReactNode }): ReactElement => { - const [emojiPicker, setEmojiPicker] = useState(null); +const EmojiPickerProvider = ({ children }: { children: ReactNode }) => { + const [emojiPicker, setEmojiPicker] = useState(null); const [emojiToPreview, setEmojiToPreview] = useDebouncedState<{ emoji: string; name: string } | null>(null, 100); const [recentEmojis, setRecentEmojis] = useLocalStorage('emoji.recent', []); const [frequentEmojis, setFrequentEmojis] = useLocalStorage<[string, number][]>('emoji.frequent', []); diff --git a/apps/meteor/client/providers/TranslationProvider.tsx b/apps/meteor/client/providers/TranslationProvider.tsx index d9373c79630f0..86c82fb956dbd 100644 --- a/apps/meteor/client/providers/TranslationProvider.tsx +++ b/apps/meteor/client/providers/TranslationProvider.tsx @@ -15,7 +15,7 @@ import type { TranslationContextValue } from '@rocket.chat/ui-contexts'; import { useSetting, TranslationContext } from '@rocket.chat/ui-contexts'; import type i18next from 'i18next'; import I18NextHttpBackend from 'i18next-http-backend'; -import type { ReactElement, ReactNode } from 'react'; +import type { ReactNode } from 'react'; import { useEffect, useMemo } from 'react'; import { I18nextProvider, initReactI18next, useTranslation } from 'react-i18next'; @@ -188,7 +188,7 @@ type TranslationProviderProps = { children: ReactNode; }; -const TranslationProvider = ({ children }: TranslationProviderProps): ReactElement => { +const TranslationProvider = ({ children }: TranslationProviderProps) => { const language = useAutoLanguage(); const i18nextInstance = useI18next(language); useCustomTranslations(i18nextInstance); @@ -252,7 +252,7 @@ const TranslationProviderInner = ({ ogName: string; key: string; }[]; -}): ReactElement => { +}) => { const { t, i18n } = useTranslation(); const value: TranslationContextValue = useMemo( diff --git a/apps/meteor/client/providers/UserProvider/UserProvider.tsx b/apps/meteor/client/providers/UserProvider/UserProvider.tsx index c1e8b84aff014..5ef3566201b02 100644 --- a/apps/meteor/client/providers/UserProvider/UserProvider.tsx +++ b/apps/meteor/client/providers/UserProvider/UserProvider.tsx @@ -7,7 +7,7 @@ import { UserContext, useRouteParameter, useSearchParameter } from '@rocket.chat import { useQueryClient } from '@tanstack/react-query'; import { Meteor } from 'meteor/meteor'; import type { Filter, ObjectId } from 'mongodb'; -import type { ContextType, ReactElement, ReactNode } from 'react'; +import type { ContextType, ReactNode } from 'react'; import { useEffect, useMemo, useRef } from 'react'; import type { StoreApi, UseBoundStore } from 'zustand'; @@ -61,7 +61,7 @@ const queryRoom = ( return [subscribe, getSnapshot]; }; -const UserProvider = ({ children }: UserProviderProps): ReactElement => { +const UserProvider = ({ children }: UserProviderProps) => { const userId = userIdStore(); const user = Users.use((state) => { diff --git a/apps/meteor/client/providers/UserProvider/hooks/useReloadAfterLogin.ts b/apps/meteor/client/providers/UserProvider/hooks/useReloadAfterLogin.ts index eaf357577bdb4..8008fccc065f3 100644 --- a/apps/meteor/client/providers/UserProvider/hooks/useReloadAfterLogin.ts +++ b/apps/meteor/client/providers/UserProvider/hooks/useReloadAfterLogin.ts @@ -6,7 +6,7 @@ import { LegacyRoomManager } from '../../../../app/ui-utils/client'; import { roomCoordinator } from '../../../lib/rooms/roomCoordinator'; export const useReloadAfterLogin = (user: IUser | null) => { - const usernameRef = useRef(); + const usernameRef = useRef(undefined); const router = useRouter(); useEffect(() => { diff --git a/apps/meteor/client/providers/VideoConfProvider.tsx b/apps/meteor/client/providers/VideoConfProvider.tsx index 407a48cac2134..2bd2bcdb15f7a 100644 --- a/apps/meteor/client/providers/VideoConfProvider.tsx +++ b/apps/meteor/client/providers/VideoConfProvider.tsx @@ -1,7 +1,7 @@ import { useToastMessageDispatch, useSetting } from '@rocket.chat/ui-contexts'; import type { VideoConfPopupPayload, VideoConfContextValue } from '@rocket.chat/ui-video-conf'; import { VideoConfContext } from '@rocket.chat/ui-video-conf'; -import type { ReactElement, ReactNode } from 'react'; +import type { ReactNode } from 'react'; import { useState, useMemo, useEffect } from 'react'; import { useTranslation } from 'react-i18next'; @@ -9,7 +9,7 @@ import { VideoConfManager } from '../lib/VideoConfManager'; import VideoConfPopups from '../views/room/contextualBar/VideoConference/VideoConfPopups'; import { useVideoConfOpenCall } from '../views/room/contextualBar/VideoConference/hooks/useVideoConfOpenCall'; -const VideoConfContextProvider = ({ children }: { children: ReactNode }): ReactElement => { +const VideoConfContextProvider = ({ children }: { children: ReactNode }) => { const [outgoing, setOutgoing] = useState(); const handleOpenCall = useVideoConfOpenCall(); const dispatchToastMessage = useToastMessageDispatch(); diff --git a/apps/meteor/client/stories/contexts/ModalContextMock.tsx b/apps/meteor/client/stories/contexts/ModalContextMock.tsx index ee8074ddd64c5..af58a5c5738b6 100644 --- a/apps/meteor/client/stories/contexts/ModalContextMock.tsx +++ b/apps/meteor/client/stories/contexts/ModalContextMock.tsx @@ -1,6 +1,6 @@ import { ModalContext } from '@rocket.chat/ui-contexts'; import { action } from '@storybook/addon-actions'; -import type { ContextType, ReactElement, ReactNode } from 'react'; +import type { ContextType, ReactNode } from 'react'; import { useContext, useMemo } from 'react'; const logAction = action('ModalContext'); @@ -9,7 +9,7 @@ type ModalContextMockProps = { children: ReactNode; }; -const ModalContextMock = ({ children }: ModalContextMockProps): ReactElement => { +const ModalContextMock = ({ children }: ModalContextMockProps) => { const context = useContext(ModalContext); const value = useMemo( diff --git a/apps/meteor/client/stories/contexts/RouterContextMock.tsx b/apps/meteor/client/stories/contexts/RouterContextMock.tsx index 793baab27641b..fd986b392e51e 100644 --- a/apps/meteor/client/stories/contexts/RouterContextMock.tsx +++ b/apps/meteor/client/stories/contexts/RouterContextMock.tsx @@ -1,6 +1,6 @@ import { RouterContext } from '@rocket.chat/ui-contexts'; import { action } from '@storybook/addon-actions'; -import type { ContextType, ReactElement, ReactNode } from 'react'; +import type { ContextType, ReactNode } from 'react'; import { useContext, useMemo } from 'react'; const logAction = action('RouterContext'); @@ -15,7 +15,7 @@ window.__meteor_runtime_config__ = { ROOT_URL_PATH_PREFIX: '', }; -const RouterContextMock = ({ children }: RouterContextMockProps): ReactElement => { +const RouterContextMock = ({ children }: RouterContextMockProps) => { const parent = useContext(RouterContext); const value = useMemo( diff --git a/apps/meteor/client/stories/contexts/ServerContextMock.tsx b/apps/meteor/client/stories/contexts/ServerContextMock.tsx index d48bc3e0130ad..9602a21abe9d5 100644 --- a/apps/meteor/client/stories/contexts/ServerContextMock.tsx +++ b/apps/meteor/client/stories/contexts/ServerContextMock.tsx @@ -4,7 +4,7 @@ import type { Method, OperationParams, OperationResult, PathFor, PathPattern } f import type { UploadResult } from '@rocket.chat/ui-contexts'; import { ServerContext } from '@rocket.chat/ui-contexts'; import { action } from '@storybook/addon-actions'; -import type { ContextType, ReactElement, ReactNode } from 'react'; +import type { ContextType, ReactNode } from 'react'; import { useContext, useMemo } from 'react'; const logAction = action('ServerContext'); @@ -66,13 +66,7 @@ type ServerContextMockProps = Omit>, ' }; }; -const ServerContextMock = ({ - children, - baseURL, - callEndpoint = {}, - callMethod = {}, - ...overrides -}: ServerContextMockProps): ReactElement => { +const ServerContextMock = ({ children, baseURL, callEndpoint = {}, callMethod = {}, ...overrides }: ServerContextMockProps) => { const parent = useContext(ServerContext); const value = useMemo((): ContextType => { diff --git a/apps/meteor/client/stories/contexts/TranslationContextMock.tsx b/apps/meteor/client/stories/contexts/TranslationContextMock.tsx index 20d0128316f9e..4f16b255a4ef5 100644 --- a/apps/meteor/client/stories/contexts/TranslationContextMock.tsx +++ b/apps/meteor/client/stories/contexts/TranslationContextMock.tsx @@ -1,14 +1,14 @@ import type { TranslationKey } from '@rocket.chat/ui-contexts'; import { TranslationContext } from '@rocket.chat/ui-contexts'; import i18next from 'i18next'; -import type { ContextType, ReactElement, ReactNode } from 'react'; +import type { ContextType, ReactNode } from 'react'; import { useContext, useMemo } from 'react'; type TranslationContextMockProps = { children: ReactNode; }; -const TranslationContextMock = ({ children }: TranslationContextMockProps): ReactElement => { +const TranslationContextMock = ({ children }: TranslationContextMockProps) => { const parent = useContext(TranslationContext); const value = useMemo>(() => { From 4588c285771f0d91c7ca1aad2c1159d1c71ae583 Mon Sep 17 00:00:00 2001 From: Tasso Evangelista Date: Tue, 9 Jun 2026 02:53:24 -0300 Subject: [PATCH 6/6] refactor: replace ReactElement type annotations with ReactNode in components (#40816) --- .../client/navbar/NavBarSearch/NavBarSearchItem.tsx | 8 ++++---- .../navbar/NavBarSearch/NavBarSearchItemWithData.tsx | 4 ++-- .../meteor/client/navbar/NavBarSearch/NavBarSearchRow.tsx | 3 +-- .../client/navbar/NavBarSearch/NavBarSearchUserRow.tsx | 4 ++-- .../NavBarSettingsToolbar/UserMenu/EditStatusModal.tsx | 4 ++-- .../UserMenu/KeyboardShortcutsModal.tsx | 3 +-- apps/meteor/client/portals/VideoConfPopupPortal.tsx | 4 ++-- .../sidebar/RoomList/SidebarItemTemplateWithData.tsx | 7 +++---- apps/meteor/client/sidebar/footer/SidebarFooter.tsx | 4 +--- .../meteor/client/sidebar/footer/SidebarFooterDefault.tsx | 3 +-- .../client/sidebar/footer/SidebarFooterWatermark.tsx | 3 +-- apps/meteor/client/sidebar/hooks/usePreventDefault.ts | 2 +- apps/meteor/client/sidebar/hooks/useShortcutOpenMenu.ts | 2 +- 13 files changed, 22 insertions(+), 29 deletions(-) diff --git a/apps/meteor/client/navbar/NavBarSearch/NavBarSearchItem.tsx b/apps/meteor/client/navbar/NavBarSearch/NavBarSearchItem.tsx index 7c26ad4febcee..aebff1416e0e9 100644 --- a/apps/meteor/client/navbar/NavBarSearch/NavBarSearchItem.tsx +++ b/apps/meteor/client/navbar/NavBarSearch/NavBarSearchItem.tsx @@ -1,15 +1,15 @@ import { SidebarV2Item, SidebarV2ItemAvatarWrapper, SidebarV2ItemTitle } from '@rocket.chat/fuselage'; -import type { HTMLAttributes, ReactElement, ReactNode } from 'react'; +import type { HTMLAttributes, ReactNode } from 'react'; type NavBarSearchItemProps = { title: string; - avatar: ReactElement; + avatar: ReactNode; icon: ReactNode; - actions?: ReactElement; + actions?: ReactNode; href?: string; unread?: boolean; selected?: boolean; - badges?: ReactElement; + badges?: ReactNode; clickable?: boolean; } & Omit, 'is'>; diff --git a/apps/meteor/client/navbar/NavBarSearch/NavBarSearchItemWithData.tsx b/apps/meteor/client/navbar/NavBarSearch/NavBarSearchItemWithData.tsx index af0d0e43c3b35..ccfac12183308 100644 --- a/apps/meteor/client/navbar/NavBarSearch/NavBarSearchItemWithData.tsx +++ b/apps/meteor/client/navbar/NavBarSearch/NavBarSearchItemWithData.tsx @@ -1,6 +1,6 @@ import { SidebarV2ItemIcon } from '@rocket.chat/fuselage'; import type { SubscriptionWithRoom } from '@rocket.chat/ui-contexts'; -import type { ComponentProps, ReactElement } from 'react'; +import type { ComponentProps, ReactNode } from 'react'; import { useTranslation } from 'react-i18next'; import NavBarSearchItem from './NavBarSearchItem'; @@ -12,7 +12,7 @@ import { useUnreadDisplay } from '../../sidebar/hooks/useUnreadDisplay'; type NavBarSearchItemWithDataProps = { room: SubscriptionWithRoom; id: string; - AvatarTemplate: ReactElement; + AvatarTemplate: ReactNode; } & Partial>; const NavBarSearchItemWithData = ({ room, AvatarTemplate, ...props }: NavBarSearchItemWithDataProps) => { diff --git a/apps/meteor/client/navbar/NavBarSearch/NavBarSearchRow.tsx b/apps/meteor/client/navbar/NavBarSearch/NavBarSearchRow.tsx index e60d9c6ae5c77..5f635162f194b 100644 --- a/apps/meteor/client/navbar/NavBarSearch/NavBarSearchRow.tsx +++ b/apps/meteor/client/navbar/NavBarSearch/NavBarSearchRow.tsx @@ -1,6 +1,5 @@ import { RoomAvatar } from '@rocket.chat/ui-avatar'; import type { SubscriptionWithRoom } from '@rocket.chat/ui-contexts'; -import type { ReactElement } from 'react'; import { memo } from 'react'; import NavBarSearchItemWithData from './NavBarSearchItemWithData'; @@ -11,7 +10,7 @@ type NavBarSearchRowProps = { onClick: () => void; }; -const NavBarSearchRow = ({ room, onClick }: NavBarSearchRowProps): ReactElement => { +const NavBarSearchRow = ({ room, onClick }: NavBarSearchRowProps) => { const Avatar = ; if (room.t === 'd' && !room.u) { diff --git a/apps/meteor/client/navbar/NavBarSearch/NavBarSearchUserRow.tsx b/apps/meteor/client/navbar/NavBarSearch/NavBarSearchUserRow.tsx index 4dab2f976d936..a78a822578777 100644 --- a/apps/meteor/client/navbar/NavBarSearch/NavBarSearchUserRow.tsx +++ b/apps/meteor/client/navbar/NavBarSearch/NavBarSearchUserRow.tsx @@ -1,7 +1,7 @@ import { SidebarV2ItemIcon } from '@rocket.chat/fuselage'; import type { SubscriptionWithRoom } from '@rocket.chat/ui-contexts'; import { useSetting } from '@rocket.chat/ui-contexts'; -import type { ComponentProps, ReactElement } from 'react'; +import type { ComponentProps, ReactNode } from 'react'; import { memo } from 'react'; import NavBarSearchItem from './NavBarSearchItem'; @@ -11,7 +11,7 @@ import { roomCoordinator } from '../../lib/rooms/roomCoordinator'; type NavBarSearchUserRowProps = { room: SubscriptionWithRoom; id: string; - AvatarTemplate: ReactElement; + AvatarTemplate: ReactNode; } & Partial>; const NavBarSearchUserRow = ({ room, id, AvatarTemplate, ...props }: NavBarSearchUserRowProps) => { diff --git a/apps/meteor/client/navbar/NavBarSettingsToolbar/UserMenu/EditStatusModal.tsx b/apps/meteor/client/navbar/NavBarSettingsToolbar/UserMenu/EditStatusModal.tsx index 7e017b88750b9..e5cc289312bda 100644 --- a/apps/meteor/client/navbar/NavBarSettingsToolbar/UserMenu/EditStatusModal.tsx +++ b/apps/meteor/client/navbar/NavBarSettingsToolbar/UserMenu/EditStatusModal.tsx @@ -20,7 +20,7 @@ import { } from '@rocket.chat/fuselage'; import { useEffectEvent, useLocalStorage } from '@rocket.chat/fuselage-hooks'; import { useToastMessageDispatch, useSetting, useTranslation, useEndpoint } from '@rocket.chat/ui-contexts'; -import type { ReactElement, ChangeEvent, ComponentProps, FormEvent } from 'react'; +import type { ChangeEvent, ComponentProps, FormEvent } from 'react'; import { useState, useCallback, useId } from 'react'; import UserStatusMenu from '../../../components/UserStatusMenu'; @@ -32,7 +32,7 @@ type EditStatusModalProps = { userStatusText: IUser['statusText']; }; -const EditStatusModal = ({ onClose, userStatus, userStatusText }: EditStatusModalProps): ReactElement => { +const EditStatusModal = ({ onClose, userStatus, userStatusText }: EditStatusModalProps) => { const allowUserStatusMessageChange = useSetting('Accounts_AllowUserStatusMessageChange'); const dispatchToastMessage = useToastMessageDispatch(); const [customStatus, setCustomStatus] = useLocalStorage('Local_Custom_Status', ''); diff --git a/apps/meteor/client/navbar/NavBarSettingsToolbar/UserMenu/KeyboardShortcutsModal.tsx b/apps/meteor/client/navbar/NavBarSettingsToolbar/UserMenu/KeyboardShortcutsModal.tsx index 07ac5caac8e37..c959f762f08b3 100644 --- a/apps/meteor/client/navbar/NavBarSettingsToolbar/UserMenu/KeyboardShortcutsModal.tsx +++ b/apps/meteor/client/navbar/NavBarSettingsToolbar/UserMenu/KeyboardShortcutsModal.tsx @@ -1,6 +1,5 @@ import { Box, Divider } from '@rocket.chat/fuselage'; import { GenericModal } from '@rocket.chat/ui-client'; -import type { ReactElement } from 'react'; import { Fragment, memo } from 'react'; import { useTranslation } from 'react-i18next'; @@ -87,7 +86,7 @@ type KeyboardShortcutsModalProps = { onClose: () => void; }; -const KeyboardShortcutsModal = ({ onClose }: KeyboardShortcutsModalProps): ReactElement => { +const KeyboardShortcutsModal = ({ onClose }: KeyboardShortcutsModalProps) => { const { t } = useTranslation(); const isMac = isMacPlatform(); diff --git a/apps/meteor/client/portals/VideoConfPopupPortal.tsx b/apps/meteor/client/portals/VideoConfPopupPortal.tsx index 67902312ea631..766fa2a6fc4e7 100644 --- a/apps/meteor/client/portals/VideoConfPopupPortal.tsx +++ b/apps/meteor/client/portals/VideoConfPopupPortal.tsx @@ -1,5 +1,5 @@ import { AnchorPortal } from '@rocket.chat/ui-client'; -import type { ReactElement, ReactNode } from 'react'; +import type { ReactNode } from 'react'; import { memo } from 'react'; const videoConfAnchorId = 'video-conf-root'; @@ -8,7 +8,7 @@ type VideoConfPortalProps = { children?: ReactNode; }; -const VideoConfPortal = ({ children }: VideoConfPortalProps): ReactElement => { +const VideoConfPortal = ({ children }: VideoConfPortalProps) => { return {children}; }; diff --git a/apps/meteor/client/sidebar/RoomList/SidebarItemTemplateWithData.tsx b/apps/meteor/client/sidebar/RoomList/SidebarItemTemplateWithData.tsx index d297e8c6a9416..e86949055b943 100644 --- a/apps/meteor/client/sidebar/RoomList/SidebarItemTemplateWithData.tsx +++ b/apps/meteor/client/sidebar/RoomList/SidebarItemTemplateWithData.tsx @@ -3,7 +3,7 @@ import { SidebarV2Action, SidebarV2Actions, SidebarV2ItemIcon } from '@rocket.ch import type { SubscriptionWithRoom } from '@rocket.chat/ui-contexts'; import { useLayout } from '@rocket.chat/ui-contexts'; import type { TFunction } from 'i18next'; -import type { AllHTMLAttributes, ComponentType, ReactElement, ReactNode } from 'react'; +import type { AllHTMLAttributes, ComponentType, ReactNode } from 'react'; import { memo, useMemo } from 'react'; import { RoomIcon } from '../../components/RoomIcon'; @@ -111,7 +111,7 @@ const SidebarItemTemplateWithData = ({ aria-current={selected ? 'page' : undefined} href={href} onClick={(): void => { - !selected && sidebar.toggle(); + if (!selected) sidebar.toggle(); }} aria-label={showUnread ? t('__unreadTitle__from__roomTitle__', { unreadTitle, roomTitle: title }) : title} title={title} @@ -124,7 +124,7 @@ const SidebarItemTemplateWithData = ({ actions={actions} menu={ !isIOsDevice && !isAnonymous && (!isQueued || (isQueued && isPriorityEnabled)) - ? (): ReactElement => ( + ? () => ( 0} @@ -162,7 +162,6 @@ const keys: (keyof RoomListRowProps)[] = [ 'videoConfActions', ]; -// eslint-disable-next-line react/no-multi-comp export default memo(SidebarItemTemplateWithData, (prevProps, nextProps) => { if (keys.some((key) => prevProps[key] !== nextProps[key])) { return false; diff --git a/apps/meteor/client/sidebar/footer/SidebarFooter.tsx b/apps/meteor/client/sidebar/footer/SidebarFooter.tsx index f0dc22a107dd6..e2203cee9fbc7 100644 --- a/apps/meteor/client/sidebar/footer/SidebarFooter.tsx +++ b/apps/meteor/client/sidebar/footer/SidebarFooter.tsx @@ -1,8 +1,6 @@ -import type { ReactElement } from 'react'; - import SidebarFooterDefault from './SidebarFooterDefault'; -const SidebarFooter = (): ReactElement => { +const SidebarFooter = () => { return ; }; diff --git a/apps/meteor/client/sidebar/footer/SidebarFooterDefault.tsx b/apps/meteor/client/sidebar/footer/SidebarFooterDefault.tsx index 3950f5ca09e7f..f3758ea3a7a5f 100644 --- a/apps/meteor/client/sidebar/footer/SidebarFooterDefault.tsx +++ b/apps/meteor/client/sidebar/footer/SidebarFooterDefault.tsx @@ -3,11 +3,10 @@ import { Box, SidebarDivider, Palette, SidebarFooter as Footer } from '@rocket.c import { useThemeMode } from '@rocket.chat/ui-client'; import { useSetting } from '@rocket.chat/ui-contexts'; import DOMPurify from 'dompurify'; -import type { ReactElement } from 'react'; import { SidebarFooterWatermark } from './SidebarFooterWatermark'; -const SidebarFooterDefault = (): ReactElement => { +const SidebarFooterDefault = () => { const [, , theme] = useThemeMode(); const logo = useSetting(theme === 'dark' ? 'Layout_Sidenav_Footer_Dark' : 'Layout_Sidenav_Footer', '').trim(); diff --git a/apps/meteor/client/sidebar/footer/SidebarFooterWatermark.tsx b/apps/meteor/client/sidebar/footer/SidebarFooterWatermark.tsx index 00ea56a1bb5ca..3dcff6236ac1d 100644 --- a/apps/meteor/client/sidebar/footer/SidebarFooterWatermark.tsx +++ b/apps/meteor/client/sidebar/footer/SidebarFooterWatermark.tsx @@ -1,11 +1,10 @@ import { Box } from '@rocket.chat/fuselage'; import { useLicense, useLicenseName } from '@rocket.chat/ui-client'; -import type { ReactElement } from 'react'; import { useTranslation } from 'react-i18next'; import { links } from '../../lib/links'; -export const SidebarFooterWatermark = (): ReactElement | null => { +export const SidebarFooterWatermark = () => { const { t } = useTranslation(); const response = useLicense(); diff --git a/apps/meteor/client/sidebar/hooks/usePreventDefault.ts b/apps/meteor/client/sidebar/hooks/usePreventDefault.ts index 398c6d4afd03c..be327b0b06086 100644 --- a/apps/meteor/client/sidebar/hooks/usePreventDefault.ts +++ b/apps/meteor/client/sidebar/hooks/usePreventDefault.ts @@ -1,7 +1,7 @@ import type { RefObject } from 'react'; import { useEffect } from 'react'; -export const usePreventDefault = (ref: RefObject): { ref: RefObject } => { +export const usePreventDefault = (ref: RefObject): { ref: RefObject } => { // Flowrouter uses an addEventListener on the document to capture any clink link, since the react synthetic event use an addEventListener on the document too, // it is impossible/hard to determine which one will happen before and prevent/stop propagation, so feel free to remove this effect after remove flow router :) diff --git a/apps/meteor/client/sidebar/hooks/useShortcutOpenMenu.ts b/apps/meteor/client/sidebar/hooks/useShortcutOpenMenu.ts index 9898e67040e13..27bd8b15b0697 100644 --- a/apps/meteor/client/sidebar/hooks/useShortcutOpenMenu.ts +++ b/apps/meteor/client/sidebar/hooks/useShortcutOpenMenu.ts @@ -3,7 +3,7 @@ import { useEffect } from 'react'; import tinykeys from 'tinykeys'; // used to open the menu option by keyboard -export const useShortcutOpenMenu = (ref: RefObject): void => { +export const useShortcutOpenMenu = (ref: RefObject): void => { useEffect(() => { const unsubscribe = tinykeys(ref.current as HTMLElement, { Alt: (event) => {