import type { FC, TeactNode } from '../../lib/teact/teact'; import React, { memo } from '../../lib/teact/teact'; import { withGlobal } from '../../global'; import type { ApiChat, ApiUser } from '../../api/types'; import type { CustomPeer } from '../../types'; import type { IconName } from '../../types/icons'; import { getChatTitle, getUserFirstOrLastName } from '../../global/helpers'; import { selectChat, selectUser } from '../../global/selectors'; import buildClassName from '../../util/buildClassName'; import { getPeerColorClass } from './helpers/peerColor'; import renderText from './helpers/renderText'; import useOldLang from '../../hooks/useOldLang'; import Avatar from './Avatar'; import Icon from './icons/Icon'; import './PickerSelectedItem.scss'; type OwnProps = { peerId?: string; customPeer?: CustomPeer; icon?: IconName; title?: string; isMinimized?: boolean; canClose?: boolean; forceShowSelf?: boolean; clickArg?: any; className?: string; fluid?: boolean; withPeerColors?: boolean; onClick: (arg: any) => void; }; type StateProps = { chat?: ApiChat; user?: ApiUser; isSavedMessages?: boolean; }; const PickerSelectedItem: FC = ({ icon, title, isMinimized, canClose, clickArg, chat, user, customPeer, className, fluid, isSavedMessages, withPeerColors, onClick, }) => { const lang = useOldLang(); let iconElement: TeactNode | undefined; let titleText: any; if (icon && title) { iconElement = (
); titleText = title; } else if (customPeer || user || chat) { iconElement = ( ); const name = (customPeer && lang(customPeer.titleKey)) || (!chat || (user && !isSavedMessages) ? getUserFirstOrLastName(user) : getChatTitle(lang, chat, isSavedMessages)); titleText = name ? renderText(name) : undefined; } const fullClassName = buildClassName( 'PickerSelectedItem', className, (chat?.isForum || customPeer?.isAvatarSquare) && 'square-avatar', isMinimized && 'minimized', canClose && 'closeable', fluid && 'fluid', withPeerColors && getPeerColorClass(customPeer || chat || user), ); return (
onClick(clickArg)} title={isMinimized ? titleText : undefined} dir={lang.isRtl ? 'rtl' : undefined} > {iconElement} {!isMinimized && (
{titleText}
)} {canClose && (
)}
); }; export default memo(withGlobal( (global, { peerId, forceShowSelf }): StateProps => { if (!peerId) { return {}; } const chat = selectChat(global, peerId); const user = selectUser(global, peerId); const isSavedMessages = !forceShowSelf && user && user.isSelf; return { chat, user, isSavedMessages, }; }, )(PickerSelectedItem));