RocketChat/Rocket.Chat

View on GitHub
apps/meteor/client/sidebarv2/search/UserItem.tsx

Summary

Maintainability
C
1 day
Test Coverage
import type { IUser } from '@rocket.chat/core-typings';
import { Sidebar } from '@rocket.chat/fuselage';
import React, { memo } from 'react';

import { ReactiveUserStatus } from '../../components/UserStatus';
import { roomCoordinator } from '../../lib/rooms/roomCoordinator';

type UserItemProps = {
    item: {
        name?: string;
        fname?: string;
        _id: IUser['_id'];
        t: string;
    };
    t: (value: string) => string;
    SideBarItemTemplate: any;
    AvatarTemplate: any;
    id: string;
    style?: CSSStyleRule;
    useRealName?: boolean;
};

const UserItem = ({ item, id, style, t, SideBarItemTemplate, AvatarTemplate, useRealName }: UserItemProps) => {
    const title = useRealName ? item.fname || item.name : item.name || item.fname;
    const icon = (
        <Sidebar.Item.Icon icon={'' as any}>
            <ReactiveUserStatus uid={item._id} />
        </Sidebar.Item.Icon>
    );
    const href = roomCoordinator.getRouteLink(item.t, { name: item.name });

    return (
        <SideBarItemTemplate
            is='a'
            style={{ height: '100%', ...style }}
            id={id}
            href={href}
            title={title}
            subtitle={t('No_messages_yet')}
            avatar={AvatarTemplate && <AvatarTemplate {...item} />}
            icon={icon}
        />
    );
};

export default memo(UserItem);