You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tailchat/web/src/components/ChatBox/ChatMessageList/Item.tsx

49 lines
1.5 KiB
TypeScript

import React from 'react';
import {
ChatMessage,
formatShortTime,
useCachedUserInfo,
} from 'tailchat-shared';
import { Avatar } from '@/components/Avatar';
import clsx from 'clsx';
interface ChatMessageItemProps {
showAvatar: boolean;
payload: ChatMessage;
}
export const ChatMessageItem: React.FC<ChatMessageItemProps> = React.memo(
(props) => {
const { showAvatar, payload } = props;
const userInfo = useCachedUserInfo(payload.author ?? '');
return (
<div
className={clsx('flex px-2 group hover:bg-black hover:bg-opacity-10')}
>
<div className="w-18 flex items-start justify-center pt-0.5">
{showAvatar ? (
<Avatar size={40} src={userInfo.avatar} name={userInfo.nickname} />
) : (
<div className="hidden group-hover:block opacity-40">
{formatShortTime(payload.createdAt)}
</div>
)}
</div>
<div className="flex flex-col flex-1 overflow-auto">
{showAvatar && (
<div className="flex items-center">
<div className="font-bold">{userInfo.nickname}</div>
<div className="hidden group-hover:block opacity-40 ml-1 text-sm">
{formatShortTime(payload.createdAt)}
</div>
</div>
)}
<div className="leading-6 break-words">{payload.content}</div>
</div>
</div>
);
}
);
ChatMessageItem.displayName = 'ChatMessageItem';