import type { TeactNode } from '../../../lib/teact/teact'; import React, { memo } from '../../../lib/teact/teact'; import { withGlobal } from '../../../global'; import type { ApiPeer } from '../../../api/types'; import type { CustomPeer } from '../../../types'; import type { IconName } from '../../../types/icons'; import { isApiPeerChat } from '../../../global/helpers/peers'; import { selectPeer, selectUser } from '../../../global/selectors'; import buildClassName from '../../../util/buildClassName'; import { getPeerColorClass } from '../helpers/peerColor'; import useOldLang from '../../../hooks/useOldLang'; import Avatar from '../Avatar'; import FullNameTitle from '../FullNameTitle'; import Icon from '../icons/Icon'; import './PickerSelectedItem.scss'; type OwnProps = { // eslint-disable-next-line react/no-unused-prop-types peerId?: string; // eslint-disable-next-line react/no-unused-prop-types forceShowSelf?: boolean; customPeer?: CustomPeer; mockPeer?: ApiPeer; icon?: IconName; title?: string; isMinimized?: boolean; canClose?: boolean; className?: string; fluid?: boolean; withPeerColors?: boolean; clickArg?: T; onClick?: (arg: T) => void; }; type StateProps = { peer?: ApiPeer; isSavedMessages?: boolean; }; // eslint-disable-next-line @typescript-eslint/comma-dangle const PickerSelectedItem = ({ icon, title, isMinimized, canClose, clickArg, peer, mockPeer, customPeer, className, fluid, isSavedMessages, withPeerColors, onClick, }: OwnProps & StateProps) => { const lang = useOldLang(); const apiPeer = mockPeer || peer; const anyPeer = customPeer || apiPeer; const chat = apiPeer && isApiPeerChat(apiPeer) ? apiPeer : undefined; let iconElement: TeactNode | undefined; let titleText: any; if (icon && title) { iconElement = (
); titleText = title; } else if (anyPeer) { iconElement = ( ); titleText = title || ; } const fullClassName = buildClassName( 'PickerSelectedItem', className, (chat?.isForum || customPeer?.isAvatarSquare) && 'square-avatar', isMinimized && 'minimized', canClose && 'closeable', fluid && 'fluid', withPeerColors && getPeerColorClass(customPeer || peer), ); 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 peer = selectPeer(global, peerId); const user = selectUser(global, peerId); const isSavedMessages = !forceShowSelf && user && user.isSelf; return { peer, isSavedMessages, }; }, )(PickerSelectedItem)) as typeof PickerSelectedItem;