diff --git a/apps/meteor/client/hooks/roomActions/useTeamInfoRoomAction.ts b/apps/meteor/client/hooks/roomActions/useTeamInfoRoomAction.ts
index d4b8a1a73a900..7d43f2985d122 100644
--- a/apps/meteor/client/hooks/roomActions/useTeamInfoRoomAction.ts
+++ b/apps/meteor/client/hooks/roomActions/useTeamInfoRoomAction.ts
@@ -2,7 +2,7 @@ import { lazy, useMemo } from 'react';
import type { RoomToolboxActionConfig } from '../../views/room/contexts/RoomToolboxContext';
-const TeamsInfoWithRooms = lazy(() => import('../../views/teams/contextualBar/info/TeamsInfoWithRooms'));
+const TeamsInfoWithData = lazy(() => import('../../views/teams/contextualBar/info/TeamsInfoWithData'));
export const useTeamInfoRoomAction = () => {
return useMemo(
@@ -13,7 +13,7 @@ export const useTeamInfoRoomAction = () => {
full: true,
title: 'Teams_Info',
icon: 'info-circled',
- tabComponent: TeamsInfoWithRooms,
+ tabComponent: TeamsInfoWithData,
order: 1,
}),
[],
diff --git a/apps/meteor/client/views/teams/ConvertToChannelModal/BaseConvertToChannelModal.tsx b/apps/meteor/client/views/teams/contextualBar/info/ConvertToChannelModal/BaseConvertToChannelModal.tsx
similarity index 100%
rename from apps/meteor/client/views/teams/ConvertToChannelModal/BaseConvertToChannelModal.tsx
rename to apps/meteor/client/views/teams/contextualBar/info/ConvertToChannelModal/BaseConvertToChannelModal.tsx
diff --git a/apps/meteor/client/views/teams/ConvertToChannelModal/ConvertToChannelModal.tsx b/apps/meteor/client/views/teams/contextualBar/info/ConvertToChannelModal/ConvertToChannelModal.tsx
similarity index 79%
rename from apps/meteor/client/views/teams/ConvertToChannelModal/ConvertToChannelModal.tsx
rename to apps/meteor/client/views/teams/contextualBar/info/ConvertToChannelModal/ConvertToChannelModal.tsx
index f742102cd524c..4517b64471b26 100644
--- a/apps/meteor/client/views/teams/ConvertToChannelModal/ConvertToChannelModal.tsx
+++ b/apps/meteor/client/views/teams/contextualBar/info/ConvertToChannelModal/ConvertToChannelModal.tsx
@@ -2,9 +2,9 @@ import type { IRoom, Serialized } from '@rocket.chat/core-typings';
import React, { useMemo } from 'react';
import BaseConvertToChannelModal from './BaseConvertToChannelModal';
-import GenericModalSkeleton from '../../../components/GenericModal/GenericModalSkeleton';
-import { useEndpointData } from '../../../hooks/useEndpointData';
-import { AsyncStatePhase } from '../../../lib/asyncState';
+import GenericModalSkeleton from '../../../../../components/GenericModal/GenericModalSkeleton';
+import { useEndpointData } from '../../../../../hooks/useEndpointData';
+import { AsyncStatePhase } from '../../../../../lib/asyncState';
type ConvertToChannelModalProps = {
onClose: () => void;
diff --git a/apps/meteor/client/views/teams/ConvertToChannelModal/ModalSteps/FirstStep.tsx b/apps/meteor/client/views/teams/contextualBar/info/ConvertToChannelModal/ModalSteps/FirstStep.tsx
similarity index 91%
rename from apps/meteor/client/views/teams/ConvertToChannelModal/ModalSteps/FirstStep.tsx
rename to apps/meteor/client/views/teams/contextualBar/info/ConvertToChannelModal/ModalSteps/FirstStep.tsx
index a4aba906e7d92..bc2f3d44d3b7e 100644
--- a/apps/meteor/client/views/teams/ConvertToChannelModal/ModalSteps/FirstStep.tsx
+++ b/apps/meteor/client/views/teams/contextualBar/info/ConvertToChannelModal/ModalSteps/FirstStep.tsx
@@ -3,8 +3,8 @@ import { Box } from '@rocket.chat/fuselage';
import React from 'react';
import { useTranslation } from 'react-i18next';
-import GenericModal from '../../../../components/GenericModal';
-import ChannelDesertionTable from '../../ChannelDesertionTable';
+import GenericModal from '../../../../../../components/GenericModal';
+import ChannelDesertionTable from '../../../../ChannelDesertionTable';
type FirstStepProps = {
onClose: () => void;
diff --git a/apps/meteor/client/views/teams/ConvertToChannelModal/ModalSteps/SecondStep.tsx b/apps/meteor/client/views/teams/contextualBar/info/ConvertToChannelModal/ModalSteps/SecondStep.tsx
similarity index 93%
rename from apps/meteor/client/views/teams/ConvertToChannelModal/ModalSteps/SecondStep.tsx
rename to apps/meteor/client/views/teams/contextualBar/info/ConvertToChannelModal/ModalSteps/SecondStep.tsx
index 27b4a9c7d7723..898a49ca4f5ce 100644
--- a/apps/meteor/client/views/teams/ConvertToChannelModal/ModalSteps/SecondStep.tsx
+++ b/apps/meteor/client/views/teams/contextualBar/info/ConvertToChannelModal/ModalSteps/SecondStep.tsx
@@ -3,7 +3,7 @@ import { Icon } from '@rocket.chat/fuselage';
import React from 'react';
import { useTranslation } from 'react-i18next';
-import GenericModal from '../../../../components/GenericModal';
+import GenericModal from '../../../../../../components/GenericModal';
type SecondStepsProps = {
onClose: () => void;
diff --git a/apps/meteor/client/views/teams/ConvertToChannelModal/index.ts b/apps/meteor/client/views/teams/contextualBar/info/ConvertToChannelModal/index.ts
similarity index 100%
rename from apps/meteor/client/views/teams/ConvertToChannelModal/index.ts
rename to apps/meteor/client/views/teams/contextualBar/info/ConvertToChannelModal/index.ts
diff --git a/apps/meteor/client/views/teams/contextualBar/info/TeamsInfo.tsx b/apps/meteor/client/views/teams/contextualBar/info/TeamsInfo.tsx
index 40f7414d8f32e..ed53c286f631a 100644
--- a/apps/meteor/client/views/teams/contextualBar/info/TeamsInfo.tsx
+++ b/apps/meteor/client/views/teams/contextualBar/info/TeamsInfo.tsx
@@ -1,10 +1,12 @@
import type { IRoom } from '@rocket.chat/core-typings';
-import { Box, Button, Callout, Option, Menu } from '@rocket.chat/fuselage';
+import { Box, Button, Callout, IconButton } from '@rocket.chat/fuselage';
import { RoomAvatar } from '@rocket.chat/ui-avatar';
+import { GenericMenu } from '@rocket.chat/ui-client';
import type { ReactElement } from 'react';
-import React, { useMemo } from 'react';
+import React from 'react';
import { useTranslation } from 'react-i18next';
+import { useTeamActions } from './useTeamActions';
import {
ContextualbarHeader,
ContextualbarIcon,
@@ -25,105 +27,23 @@ import {
} from '../../../../components/InfoPanel';
import RetentionPolicyCallout from '../../../../components/InfoPanel/RetentionPolicyCallout';
import MarkdownText from '../../../../components/MarkdownText';
-import type { Action } from '../../../hooks/useActionSpread';
-import { useActionSpread } from '../../../hooks/useActionSpread';
+import { useSplitRoomActions } from '../../../room/contextualBar/Info/hooks/useSplitRoomActions';
import { useRetentionPolicy } from '../../../room/hooks/useRetentionPolicy';
type TeamsInfoProps = {
room: IRoom;
- onClickHide?: () => void;
- onClickClose?: () => void;
- onClickLeave?: () => void;
onClickEdit?: () => void;
- onClickDelete?: () => void;
+ onClickClose?: () => void;
onClickViewChannels: () => void;
- onClickConvertToChannel?: () => void;
};
-const TeamsInfo = ({
- room,
- onClickHide,
- onClickClose,
- onClickLeave,
- onClickEdit,
- onClickDelete,
- onClickViewChannels,
- onClickConvertToChannel,
-}: TeamsInfoProps): ReactElement => {
+const TeamsInfo = ({ room, onClickClose, onClickEdit, onClickViewChannels }: TeamsInfoProps): ReactElement => {
const { t } = useTranslation();
const retentionPolicy = useRetentionPolicy(room);
+ const memoizedActions = useTeamActions(room, { onClickEdit });
- const memoizedActions = useMemo(
- () => ({
- ...(onClickEdit && {
- edit: {
- label: t('Edit'),
- action: onClickEdit,
- icon: 'edit' as const,
- },
- }),
- ...(onClickDelete && {
- delete: {
- label: t('Delete'),
- action: onClickDelete,
- icon: 'trash' as const,
- },
- }),
- ...(onClickConvertToChannel && {
- convertToChannel: {
- label: t('Convert_to_channel'),
- action: onClickConvertToChannel,
- icon: 'hash' as const,
- },
- }),
- ...(onClickHide && {
- hide: {
- label: t('Hide'),
- action: onClickHide,
- icon: 'eye-off' as const,
- },
- }),
- ...(onClickLeave && {
- leave: {
- label: t('Leave'),
- action: onClickLeave,
- icon: 'sign-out' as const,
- },
- }),
- }),
- [t, onClickHide, onClickLeave, onClickEdit, onClickDelete, onClickConvertToChannel],
- );
-
- const { actions: actionsDefinition, menu: menuOptions } = useActionSpread(memoizedActions);
-
- const menu = useMemo(() => {
- if (!menuOptions) {
- return null;
- }
-
- return (
-