The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rocket.Chat/apps/meteor/client/views/room/Header/RoomTopic.tsx

42 lines
1.4 KiB

import type { IRoom } from '@rocket.chat/core-typings';
import { isDirectMessageRoom, isPrivateRoom, isPublicRoom, isTeamRoom } from '@rocket.chat/core-typings';
import { Box } from '@rocket.chat/fuselage';
import { useUserId, useTranslation, useRouter, useUserPresence } from '@rocket.chat/ui-contexts';
import MarkdownText from '../../../components/MarkdownText';
import { useCanEditRoom } from '../contextualBar/Info/hooks/useCanEditRoom';
type RoomTopicProps = {
room: IRoom;
};
const RoomTopic = ({ room }: RoomTopicProps) => {
const t = useTranslation();
const canEdit = useCanEditRoom(room);
const userId = useUserId();
const directUserId = room.uids?.filter((uid) => uid !== userId).shift();
const directUserData = useUserPresence(directUserId);
const router = useRouter();
const currentRoute = router.getLocationPathname();
const href = isTeamRoom(room) ? `${currentRoute}/team-info` : `${currentRoute}/channel-settings`;
const topic = isDirectMessageRoom(room) && (room.uids?.length ?? 0) < 3 ? directUserData?.statusText : room.topic;
const canEditTopic = canEdit && (isPublicRoom(room) || isPrivateRoom(room));
if (!topic && !canEditTopic) {
return null;
}
if (!topic && canEditTopic) {
return (
<Box is='a' href={href}>
{t('Add_topic')}
</Box>
);
}
return <MarkdownText color='default' parseEmoji={true} variant='inlineWithoutBreaks' withTruncatedText content={topic} />;
};
export default RoomTopic;