import React, { FC, memo, useCallback } from '../../../lib/teact/teact'; import { withGlobal } from '../../../lib/teact/teactn'; import { ApiChat, ApiMessage, ApiThreadInfo, ApiUser, } from '../../../api/types'; import { GlobalActions } from '../../../global/types'; import { pick } from '../../../util/iteratees'; import { isChatPrivate } from '../../../modules/helpers'; import { formatIntegerCompact } from '../../../util/textFormat'; import buildClassName from '../../../util/buildClassName'; import { selectThreadInfo } from '../../../modules/selectors'; import useLang from '../../../hooks/useLang'; import Avatar from '../../common/Avatar'; import './CommentButton.scss'; type OwnProps = { message: ApiMessage; disabled?: boolean; }; type StateProps = { threadInfo: ApiThreadInfo; usersById?: Record; chatsById?: Record; }; type DispatchProps = Pick; const CommentButton: FC = ({ disabled, threadInfo, usersById, chatsById, openChat, }) => { const lang = useLang(); const { threadId, chatId, messagesCount, lastMessageId, lastReadInboxMessageId, recentReplierIds, } = threadInfo; const handleClick = useCallback(() => { openChat({ id: chatId, threadId }); }, [openChat, chatId, threadId]); if (messagesCount === undefined) { return undefined; } const recentRepliers = recentReplierIds && recentReplierIds.map((peerId) => { return isChatPrivate(peerId) ? usersById![peerId] : chatsById![peerId]; }).filter(Boolean); function renderRecentRepliers() { return ( recentRepliers && recentRepliers.length > 0 && (
{recentRepliers.map((user) => ( ))}
) ); } const hasUnread = Boolean(lastReadInboxMessageId && lastMessageId && lastReadInboxMessageId < lastMessageId); return (
{(!recentRepliers || recentRepliers.length === 0) && } {renderRecentRepliers()}
{messagesCount ? lang('Comments', messagesCount, 'i') : lang('LeaveAComment')}
); }; export default memo(withGlobal( (global, { message }) => { const { threadId, chatId } = message.threadInfo!; const threadInfo = selectThreadInfo(global, chatId, threadId) || message.threadInfo!; const { byId: usersById } = global.users; const { byId: chatsById } = global.chats; return { threadInfo, usersById, chatsById, }; }, (setGlobal, actions): DispatchProps => pick(actions, [ 'openChat', ]), )(CommentButton));