import { isDiscussion } from '@rocket.chat/core-typings'; import type { IRoom, RoomAdminFieldsType, Serialized } from '@rocket.chat/core-typings'; import { Box, Icon } from '@rocket.chat/fuselage'; import { useMediaQuery } from '@rocket.chat/fuselage-hooks'; import { RoomAvatar } from '@rocket.chat/ui-avatar'; import { GenericTableCell, GenericTableRow } from '@rocket.chat/ui-client'; import { useRouter } from '@rocket.chat/ui-contexts'; import { useCallback } from 'react'; import { useTranslation } from 'react-i18next'; import { useFormatDate } from '../../../hooks/useFormatDate'; import { roomCoordinator } from '../../../lib/rooms/roomCoordinator'; const roomTypeI18nMap = { l: 'Omnichannel', c: 'Channel', d: 'Direct_Message', p: 'Private_Channel', } as const; const getRoomDisplayName = (room: Pick, RoomAdminFieldsType>): string | undefined => room.t === 'd' ? room.usernames?.join(' x ') : roomCoordinator.getRoomName(room.t, room as IRoom); export type RoomRowProps = { room: Pick, RoomAdminFieldsType> }; const RoomRow = ({ room }: RoomRowProps) => { const { t } = useTranslation(); const mediaQuery = useMediaQuery('(min-width: 1024px)'); const router = useRouter(); const formatDate = useFormatDate(); const { _id, t: type, usersCount, msgs, default: isDefault, featured, ts, ...args } = room; const icon = roomCoordinator.getRoomDirectives(room.t).getIcon?.(room as IRoom); const roomName = getRoomDisplayName(room); const getRoomType = ( room: Pick, RoomAdminFieldsType>, ): (typeof roomTypeI18nMap)[keyof typeof roomTypeI18nMap] | 'Teams_Public_Team' | 'Teams_Private_Team' | 'Discussion' => { if (room.teamMain) { return room.t === 'c' ? 'Teams_Public_Team' : 'Teams_Private_Team'; } if (isDiscussion(room as IRoom)) { return 'Discussion'; } return roomTypeI18nMap[(room as IRoom).t as keyof typeof roomTypeI18nMap]; }; const onClick = useCallback( (rid: string) => (): void => router.navigate({ name: 'admin-rooms', params: { context: 'edit', id: rid, }, }), [router], ); return ( {icon && } {roomName} {t(getRoomType(room))} {usersCount} {mediaQuery && {msgs}} {mediaQuery && {isDefault ? t('True') : t('False')}} {mediaQuery && {featured ? t('True') : t('False')}} {mediaQuery && {ts ? formatDate(ts) : ''}} ); }; export default RoomRow;