diff --git a/apps/meteor/client/cachedStores/RoomsCachedStore.ts b/apps/meteor/client/cachedStores/RoomsCachedStore.ts index b965a56f0b1e5..1204525b6c850 100644 --- a/apps/meteor/client/cachedStores/RoomsCachedStore.ts +++ b/apps/meteor/client/cachedStores/RoomsCachedStore.ts @@ -1,5 +1,5 @@ import type { IOmnichannelRoom, IRoom, IRoomWithRetentionPolicy } from '@rocket.chat/core-typings'; -import { DEFAULT_SLA_CONFIG, LivechatPriorityWeight } from '@rocket.chat/core-typings'; +import { DEFAULT_SLA_CONFIG, isRoomNativeFederated, LivechatPriorityWeight } from '@rocket.chat/core-typings'; import type { SubscriptionWithRoom } from '@rocket.chat/ui-contexts'; import { PrivateCachedStore } from '../lib/cachedStores'; @@ -53,6 +53,10 @@ class RoomsCachedStore extends PrivateCachedStore { source: (room as IOmnichannelRoom | undefined)?.source, queuedAt: (room as IOmnichannelRoom | undefined)?.queuedAt, federated: room.federated, + + ...(isRoomNativeFederated(room) && { + federation: room.federation, + }), ...(() => { const name = room.name || sub.name; const fname = room.fname || sub.fname || name; diff --git a/apps/meteor/client/cachedStores/SubscriptionsCachedStore.ts b/apps/meteor/client/cachedStores/SubscriptionsCachedStore.ts index d3c2032201f7c..01f1865373415 100644 --- a/apps/meteor/client/cachedStores/SubscriptionsCachedStore.ts +++ b/apps/meteor/client/cachedStores/SubscriptionsCachedStore.ts @@ -1,5 +1,5 @@ import type { IOmnichannelRoom, IRoomWithRetentionPolicy, ISubscription } from '@rocket.chat/core-typings'; -import { DEFAULT_SLA_CONFIG, LivechatPriorityWeight } from '@rocket.chat/core-typings'; +import { DEFAULT_SLA_CONFIG, isRoomNativeFederated, LivechatPriorityWeight } from '@rocket.chat/core-typings'; import type { SubscriptionWithRoom } from '@rocket.chat/ui-contexts'; import { PrivateCachedStore } from '../lib/cachedStores'; @@ -65,6 +65,12 @@ class SubscriptionsCachedStore extends PrivateCachedStore { + if (isFederationBlocked) { + return false; + } + if (!chat || isOmnichannelRoom(room) || !subscription || message.private || !user) { return false; } @@ -36,7 +50,7 @@ const ReactionMessageAction = ({ message, room, subscription }: ReactionMessageA } return true; - }, [chat, room, subscription, message.private, user]), + }, [chat, room, subscription, message.private, user, isFederationBlocked]), ); if (!enabled) { diff --git a/apps/meteor/client/components/message/toolbar/items/actions/ReplyInThreadMessageAction.tsx b/apps/meteor/client/components/message/toolbar/items/actions/ReplyInThreadMessageAction.tsx index 100b333c1569a..d46f01935d582 100644 --- a/apps/meteor/client/components/message/toolbar/items/actions/ReplyInThreadMessageAction.tsx +++ b/apps/meteor/client/components/message/toolbar/items/actions/ReplyInThreadMessageAction.tsx @@ -1,4 +1,11 @@ -import { type IMessage, type ISubscription, type IRoom, isOmnichannelRoom } from '@rocket.chat/core-typings'; +import { + type IMessage, + type ISubscription, + type IRoom, + isOmnichannelRoom, + isRoomFederated, + isRoomNativeFederated, +} from '@rocket.chat/core-typings'; import { useRouter, useSetting } from '@rocket.chat/ui-contexts'; import { useTranslation } from 'react-i18next'; @@ -18,6 +25,12 @@ const ReplyInThreadMessageAction = ({ message, room, subscription }: ReplyInThre if (!threadsEnabled || isOmnichannelRoom(room) || !subscription) { return null; } + const isFederated = room && isRoomFederated(room); + const isFederationBlocked = isFederated && !isRoomNativeFederated(room); + + if (isFederationBlocked) { + return null; + } return ( { const team = !!room.teamMain; const permittedToViewBroadcastMemberList = usePermission('view-broadcast-member-list', room._id); + const isFederated = room && isRoomFederated(room); + const isFederationBlocked = isFederated && !isRoomNativeFederated(room); + return useMemo((): RoomToolboxActionConfig | undefined => { if (broadcast && !permittedToViewBroadcastMemberList) { return undefined; } + if (isFederationBlocked) { + return undefined; + } + return { id: 'members-list', groups: ['channel', 'group', 'team'], @@ -24,5 +32,5 @@ export const useMembersListRoomAction = () => { tabComponent: MemberListRouter, order: 7, }; - }, [broadcast, permittedToViewBroadcastMemberList, team]); + }, [broadcast, permittedToViewBroadcastMemberList, team, isFederationBlocked]); }; diff --git a/apps/meteor/client/views/room/composer/ComposerContainer.tsx b/apps/meteor/client/views/room/composer/ComposerContainer.tsx index e0a66f0352f31..9d2e3ebb840af 100644 --- a/apps/meteor/client/views/room/composer/ComposerContainer.tsx +++ b/apps/meteor/client/views/room/composer/ComposerContainer.tsx @@ -1,4 +1,4 @@ -import { isOmnichannelRoom, isRoomFederated, isVoipRoom } from '@rocket.chat/core-typings'; +import { isOmnichannelRoom, isRoomFederated, isRoomNativeFederated, isVoipRoom } from '@rocket.chat/core-typings'; import { usePermission } from '@rocket.chat/ui-contexts'; import type { ReactElement } from 'react'; import { memo } from 'react'; @@ -8,6 +8,7 @@ import ComposerAnonymous from './ComposerAnonymous'; import ComposerArchived from './ComposerArchived'; import ComposerBlocked from './ComposerBlocked'; import ComposerFederation from './ComposerFederation'; +import ComposerFederationInvalidVersion from './ComposerFederation/ComposerFederationInvalidVersion'; import ComposerJoinWithPassword from './ComposerJoinWithPassword'; import type { ComposerMessageProps } from './ComposerMessage'; import ComposerMessage from './ComposerMessage'; @@ -37,6 +38,8 @@ const ComposerContainer = ({ children, ...props }: ComposerMessageProps): ReactE const isOmnichannel = isOmnichannelRoom(room); const isFederation = isRoomFederated(room); + + const isFederationBlocked = !isRoomNativeFederated(room); const isVoip = isVoipRoom(room); const [isAirGappedRestricted] = useAirGappedRestriction(); @@ -54,6 +57,10 @@ const ComposerContainer = ({ children, ...props }: ComposerMessageProps): ReactE } if (isFederation) { + if (isFederationBlocked) { + return ; + } + return ; } diff --git a/apps/meteor/client/views/room/composer/ComposerFederation/ComposerFederationInvalidVersion.tsx b/apps/meteor/client/views/room/composer/ComposerFederation/ComposerFederationInvalidVersion.tsx new file mode 100644 index 0000000000000..7922d7d921277 --- /dev/null +++ b/apps/meteor/client/views/room/composer/ComposerFederation/ComposerFederationInvalidVersion.tsx @@ -0,0 +1,21 @@ +import { ExternalLink } from '@rocket.chat/ui-client'; +import { MessageFooterCallout, MessageFooterCalloutContent } from '@rocket.chat/ui-composer'; +import type { ReactElement } from 'react'; +import { Trans } from 'react-i18next'; + +const ComposerFederationInvalidVersion = (): ReactElement => { + return ( + + + , + }} + /> + + + ); +}; + +export default ComposerFederationInvalidVersion; diff --git a/apps/meteor/client/views/room/composer/messageBox/MessageBox.tsx b/apps/meteor/client/views/room/composer/messageBox/MessageBox.tsx index ceba7768f6869..8baf1cda2d8cf 100644 --- a/apps/meteor/client/views/room/composer/messageBox/MessageBox.tsx +++ b/apps/meteor/client/views/room/composer/messageBox/MessageBox.tsx @@ -1,5 +1,5 @@ /* eslint-disable complexity */ -import { isRoomFederated, type IMessage, type ISubscription } from '@rocket.chat/core-typings'; +import { isRoomFederated, isRoomNativeFederated, type IMessage, type ISubscription } from '@rocket.chat/core-typings'; import { useContentBoxSize, useEffectEvent } from '@rocket.chat/fuselage-hooks'; import { useSafeRefCallback } from '@rocket.chat/ui-client'; import { @@ -293,10 +293,15 @@ const MessageBox = ({ } if (isRoomFederated(room)) { + // we are dropping the non native federation for now + if (!isRoomNativeFederated(room)) { + return false; + } + return federationMatrixEnabled; } return true; - }, [federationMatrixEnabled, room]), + }, [room, federationMatrixEnabled]), ); const sizes = useContentBoxSize(textareaRef); diff --git a/apps/meteor/client/views/room/contextualBar/RoomMembers/AddUsers/AddUsers.tsx b/apps/meteor/client/views/room/contextualBar/RoomMembers/AddUsers/AddUsers.tsx index c483dfd5d2813..393d7eaf104fd 100644 --- a/apps/meteor/client/views/room/contextualBar/RoomMembers/AddUsers/AddUsers.tsx +++ b/apps/meteor/client/views/room/contextualBar/RoomMembers/AddUsers/AddUsers.tsx @@ -1,5 +1,5 @@ import type { IRoom } from '@rocket.chat/core-typings'; -import { isRoomFederated } from '@rocket.chat/core-typings'; +import { isRoomFederated, isRoomNativeFederated } from '@rocket.chat/core-typings'; import { Field, FieldLabel, Button, ButtonGroup, FieldGroup } from '@rocket.chat/fuselage'; import { useEffectEvent } from '@rocket.chat/fuselage-hooks'; import { useToastMessageDispatch, useMethod } from '@rocket.chat/ui-contexts'; @@ -56,6 +56,10 @@ const AddUsers = ({ rid, onClickBack, reload }: AddUsersProps): ReactElement => const addClickHandler = useAddMatrixUsers(); + const roomIsFederated = isRoomFederated(room); + // we are dropping the non native federation for now + const isFederationBlocked = room && !isRoomNativeFederated(room); + return ( @@ -67,12 +71,14 @@ const AddUsers = ({ rid, onClickBack, reload }: AddUsersProps): ReactElement => {t('Choose_users')} - {isRoomFederated(room) ? ( - } - /> + {roomIsFederated ? ( + !isFederationBlocked && ( + } + /> + ) ) : ( - {isRoomFederated(room) ? ( - + {roomIsFederated ? ( + !isFederationBlocked && ( + + ) ) : (