import { Badge, Sidebar } from '@rocket.chat/fuselage'; import React, { memo } from 'react'; import { RoomIcon } from '../../components/RoomIcon'; import { useLayout } from '../../contexts/LayoutContext'; import { roomCoordinator } from '../../lib/rooms/roomCoordinator'; import RoomMenu from '../RoomMenu'; import { normalizeSidebarMessage } from './normalizeSidebarMessage'; const getMessage = (room, lastMessage, t) => { if (!lastMessage) { return t('No_messages_yet'); } if (!lastMessage.u) { return normalizeSidebarMessage(lastMessage, t); } if (lastMessage.u?.username === room.u?.username) { return `${t('You')}: ${normalizeSidebarMessage(lastMessage, t)}`; } if (room.t === 'd' && room.uids && room.uids.length <= 2) { return normalizeSidebarMessage(lastMessage, t); } return `${lastMessage.u.name || lastMessage.u.username}: ${normalizeSidebarMessage(lastMessage, t)}`; }; function SideBarItemTemplateWithData({ room, id, extended, selected, SideBarItemTemplate, AvatarTemplate, t, style, // sidebarViewMode, isAnonymous, }) { const { sidebar } = useLayout(); const href = roomCoordinator.getRouteLink(room.t, room); const title = roomCoordinator.getRoomName(room.t, room); const { lastMessage, hideUnreadStatus, unread = 0, alert, userMentions, groupMentions, tunread = [], tunreadUser = [], rid, t: type, cl, } = room; const highlighted = !hideUnreadStatus && (alert || unread); const icon = ( ); const isQueued = room.status === 'queued'; const threadUnread = tunread.length > 0; const message = extended && getMessage(room, lastMessage, t); const subtitle = message ? : null; const variant = ((userMentions || tunreadUser.length) && 'danger') || (threadUnread && 'primary') || (groupMentions && 'warning') || 'ghost'; const isUnread = unread > 0 || threadUnread; const badges = !hideUnreadStatus && isUnread ? ( {unread + tunread?.length} ) : null; return ( !selected && sidebar.toggle()} aria-label={title} title={title} time={lastMessage?.ts} subtitle={subtitle} icon={icon} style={style} badges={badges} avatar={AvatarTemplate && } menu={ !isAnonymous && !isQueued && (() => ( )) } /> ); } const propsAreEqual = (prevProps, nextProps) => { if ( ['id', 'style', 'extended', 'selected', 'SideBarItemTemplate', 'AvatarTemplate', 't', 'sidebarViewMode'].some( (key) => prevProps[key] !== nextProps[key], ) ) { return false; } if (prevProps.room === nextProps.room) { return true; } if (prevProps.room._id !== nextProps.room._id) { return false; } if (prevProps.room._updatedAt?.toISOString() !== nextProps.room._updatedAt?.toISOString()) { return false; } if (prevProps.room.lastMessage?._updatedAt?.toISOString() !== nextProps.room.lastMessage?._updatedAt?.toISOString()) { return false; } if (prevProps.room.alert !== nextProps.room.alert) { return false; } if (prevProps.room.v?.status !== nextProps.room.v?.status) { return false; } if (prevProps.room.teamMain !== nextProps.room.teamMain) { return false; } return true; }; export default memo(SideBarItemTemplateWithData, propsAreEqual);