import { isOmnichannelRoom, isRoomFederated, isRoomNativeFederated } from '@rocket.chat/core-typings'; import { usePermission } from '@rocket.chat/ui-contexts'; import { memo } from 'react'; import ComposerAirGappedRestricted from './ComposerAirGappedRestricted'; import ComposerAnonymous from './ComposerAnonymous'; import ComposerArchived from './ComposerArchived'; import ComposerBlocked from './ComposerBlocked'; import ComposerFederation from './ComposerFederation'; import ComposerJoinWithPassword from './ComposerJoinWithPassword'; import type { ComposerMessageProps } from './ComposerMessage'; import ComposerMessage from './ComposerMessage'; import ComposerOmnichannel from './ComposerOmnichannel'; import ComposerReadOnly from './ComposerReadOnly'; import ComposerSelectMessages from './ComposerSelectMessages'; import { useRoom } from '../contexts/RoomContext'; import { useMessageComposerIsAnonymous } from './hooks/useMessageComposerIsAnonymous'; import { useMessageComposerIsArchived } from './hooks/useMessageComposerIsArchived'; import { useMessageComposerIsBlocked } from './hooks/useMessageComposerIsBlocked'; import { useMessageComposerIsReadOnly } from './hooks/useMessageComposerIsReadOnly'; import { useAirGappedRestriction } from '../../../hooks/useAirGappedRestriction'; import { useIsSelecting } from '../MessageList/contexts/SelectedMessagesContext'; const ComposerContainer = ({ children, ...props }: ComposerMessageProps) => { const room = useRoom(); const canJoinWithoutCode = usePermission('join-without-join-code'); const mustJoinWithCode = !props.subscription && room.joinCodeRequired && !canJoinWithoutCode; const isAnonymous = useMessageComposerIsAnonymous(); const isSelectingMessages = useIsSelecting(); const isBlockedOrBlocker = useMessageComposerIsBlocked({ subscription: props.subscription }); const isArchived = useMessageComposerIsArchived(room, props.subscription); const isReadOnly = useMessageComposerIsReadOnly(room); const isOmnichannel = isOmnichannelRoom(room); const isFederation = isRoomFederated(room); const isFederationBlocked = !isRoomNativeFederated(room); const [isAirGappedRestricted] = useAirGappedRestriction(); if (isAirGappedRestricted) { return ; } if (isOmnichannel) { return ; } if (isFederation) { return ; } if (isAnonymous) { return ; } if (isReadOnly) { return ; } if (isArchived) { return ; } if (mustJoinWithCode) { return ; } if (isBlockedOrBlocker) { return ; } if (isSelectingMessages) { return ; } return ( <> {children} ); }; export default memo(ComposerContainer);