import React, { FC, memo, useCallback } from '../../lib/teact/teact'; import { ApiMessage } from '../../api/types'; import { formatMediaDuration } from '../../util/dateFormat'; import { getMessageMediaHash, getMessageMediaThumbDataUri, getMessageVideo, } from '../../modules/helpers'; import useMedia from '../../hooks/useMedia'; import useTransitionForMedia from '../../hooks/useTransitionForMedia'; import './Media.scss'; type OwnProps = { message: ApiMessage; idPrefix?: string; onClick?: (messageId: number, chatId: number) => void; }; const Media: FC = ({ message, idPrefix = 'shared-media', onClick }) => { const handleClick = useCallback(() => { onClick!(message.id, message.chatId); }, [message.id, message.chatId, onClick]); const thumbDataUri = getMessageMediaThumbDataUri(message); const mediaBlobUrl = useMedia(getMessageMediaHash(message, 'pictogram')); const { shouldRenderThumb, shouldRenderFullMedia, transitionClassNames, } = useTransitionForMedia(mediaBlobUrl, 'slow'); const video = getMessageVideo(message); return (
{shouldRenderThumb && ( )} {shouldRenderFullMedia && ( )} {video && {video.isGif ? 'GIF' : formatMediaDuration(video.duration)}}
); }; export default memo(Media);