import type { FC } from '../../lib/teact/teact'; import React, { memo, useCallback } from '../../lib/teact/teact'; import { getActions } from '../../global'; import type { ApiMessage } from '../../api/types'; import { getPictogramDimensions } from '../common/helpers/mediaDimensions'; import { getMessageMediaHash, getMessageSingleInlineButton } from '../../global/helpers'; import { renderMessageSummary } from '../common/helpers/renderMessageText'; import buildClassName from '../../util/buildClassName'; import { IS_TOUCH_ENV } from '../../util/environment'; import useMedia from '../../hooks/useMedia'; import useThumbnail from '../../hooks/useThumbnail'; import useFlag from '../../hooks/useFlag'; import useLang from '../../hooks/useLang'; import RippleEffect from '../ui/RippleEffect'; import ConfirmDialog from '../ui/ConfirmDialog'; import Button from '../ui/Button'; import PinnedMessageNavigation from './PinnedMessageNavigation'; type OwnProps = { message: ApiMessage; index: number; count: number; customTitle?: string; className?: string; onUnpinMessage?: (id: number) => void; onClick?: () => void; onAllPinnedClick?: () => void; }; const HeaderPinnedMessage: FC = ({ message, count, index, customTitle, className, onUnpinMessage, onClick, onAllPinnedClick, }) => { const { clickBotInlineButton } = getActions(); const lang = useLang(); const mediaThumbnail = useThumbnail(message); const mediaBlobUrl = useMedia(getMessageMediaHash(message, 'pictogram')); const text = renderMessageSummary(lang, message, Boolean(mediaThumbnail)); const [isUnpinDialogOpen, openUnpinDialog, closeUnpinDialog] = useFlag(); const handleUnpinMessage = useCallback(() => { closeUnpinDialog(); if (onUnpinMessage) { onUnpinMessage(message.id); } }, [closeUnpinDialog, onUnpinMessage, message.id]); const inlineButton = getMessageSingleInlineButton(message); const handleInlineButtonClick = useCallback(() => { if (inlineButton) { clickBotInlineButton({ messageId: message.id, button: inlineButton }); } }, [clickBotInlineButton, inlineButton, message.id]); const [noHoverColor, markNoHoverColor, unmarkNoHoverColor] = useFlag(); return (
{count > 1 && ( )} {onUnpinMessage && ( )}
{mediaThumbnail && renderPictogram(mediaThumbnail, mediaBlobUrl)}
{customTitle || `${lang('PinnedMessage')} ${index > 0 ? `#${count - index}` : ''}`}

{text}

{inlineButton && ( )}
); }; function renderPictogram(thumbDataUri: string, blobUrl?: string) { const { width, height } = getPictogramDimensions(); return ( ); } export default memo(HeaderPinnedMessage);