Chat, Embedded Message: Fix round video preview in dark theme (#1136)
This commit is contained in:
parent
23529106b3
commit
32c7b083c8
@ -97,6 +97,10 @@
|
|||||||
border-radius: .25rem;
|
border-radius: .25rem;
|
||||||
margin-left: .25rem;
|
margin-left: .25rem;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
|
|
||||||
|
&.round {
|
||||||
|
border-radius: 1rem;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.inside-input {
|
&.inside-input {
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import {
|
|||||||
isActionMessage,
|
isActionMessage,
|
||||||
getMessageSummaryText,
|
getMessageSummaryText,
|
||||||
getSenderTitle,
|
getSenderTitle,
|
||||||
|
getMessageRoundVideo,
|
||||||
} from '../../modules/helpers';
|
} from '../../modules/helpers';
|
||||||
import renderText from './helpers/renderText';
|
import renderText from './helpers/renderText';
|
||||||
import { getPictogramDimensions } from './helpers/mediaDimensions';
|
import { getPictogramDimensions } from './helpers/mediaDimensions';
|
||||||
@ -48,6 +49,7 @@ const EmbeddedMessage: FC<OwnProps> = ({
|
|||||||
const mediaBlobUrl = useMedia(message && getMessageMediaHash(message, 'pictogram'), !isIntersecting);
|
const mediaBlobUrl = useMedia(message && getMessageMediaHash(message, 'pictogram'), !isIntersecting);
|
||||||
const pictogramId = message && `sticker-reply-thumb${message.id}`;
|
const pictogramId = message && `sticker-reply-thumb${message.id}`;
|
||||||
const mediaThumbnail = useWebpThumbnail(message);
|
const mediaThumbnail = useWebpThumbnail(message);
|
||||||
|
const isRoundVideo = Boolean(message && getMessageRoundVideo(message));
|
||||||
|
|
||||||
const lang = useLang();
|
const lang = useLang();
|
||||||
|
|
||||||
@ -59,7 +61,7 @@ const EmbeddedMessage: FC<OwnProps> = ({
|
|||||||
className={buildClassName('EmbeddedMessage', className)}
|
className={buildClassName('EmbeddedMessage', className)}
|
||||||
onClick={message ? onClick : undefined}
|
onClick={message ? onClick : undefined}
|
||||||
>
|
>
|
||||||
{mediaThumbnail && renderPictogram(pictogramId, mediaThumbnail, mediaBlobUrl)}
|
{mediaThumbnail && renderPictogram(pictogramId, mediaThumbnail, mediaBlobUrl, isRoundVideo)}
|
||||||
<div className="message-text">
|
<div className="message-text">
|
||||||
<div className="message-title">{renderText(senderTitle || title || NBSP)}</div>
|
<div className="message-title">{renderText(senderTitle || title || NBSP)}</div>
|
||||||
<p>
|
<p>
|
||||||
@ -80,11 +82,19 @@ function renderPictogram(
|
|||||||
id: string | undefined,
|
id: string | undefined,
|
||||||
thumbDataUri: string,
|
thumbDataUri: string,
|
||||||
blobUrl?: string,
|
blobUrl?: string,
|
||||||
|
isRoundVideo?: boolean,
|
||||||
) {
|
) {
|
||||||
const { width, height } = getPictogramDimensions();
|
const { width, height } = getPictogramDimensions();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<img id={id} src={blobUrl || thumbDataUri} width={width} height={height} alt="" />
|
<img
|
||||||
|
id={id}
|
||||||
|
src={blobUrl || thumbDataUri}
|
||||||
|
width={width}
|
||||||
|
height={height}
|
||||||
|
alt=""
|
||||||
|
className={isRoundVideo ? 'round' : ''}
|
||||||
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -110,6 +110,10 @@
|
|||||||
border-radius: .125rem;
|
border-radius: .125rem;
|
||||||
vertical-align: -.25rem;
|
vertical-align: -.25rem;
|
||||||
margin-right: .25rem;
|
margin-right: .25rem;
|
||||||
|
|
||||||
|
&.round {
|
||||||
|
border-radius: .625rem;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.emoji-small {
|
.emoji-small {
|
||||||
|
|||||||
@ -26,6 +26,7 @@ import {
|
|||||||
getMessageVideo,
|
getMessageVideo,
|
||||||
getMessageSticker,
|
getMessageSticker,
|
||||||
selectIsChatMuted,
|
selectIsChatMuted,
|
||||||
|
getMessageRoundVideo,
|
||||||
} from '../../../modules/helpers';
|
} from '../../../modules/helpers';
|
||||||
import {
|
import {
|
||||||
selectChat, selectUser, selectChatMessage, selectOutgoingStatus, selectDraft, selectCurrentMessageList,
|
selectChat, selectUser, selectChatMessage, selectOutgoingStatus, selectDraft, selectCurrentMessageList,
|
||||||
@ -119,6 +120,7 @@ const Chat: FC<OwnProps & StateProps & DispatchProps> = ({
|
|||||||
? getMessageMediaThumbDataUri(lastMessage)
|
? getMessageMediaThumbDataUri(lastMessage)
|
||||||
: undefined;
|
: undefined;
|
||||||
const mediaBlobUrl = useMedia(lastMessage ? getMessageMediaHash(lastMessage, 'micro') : undefined);
|
const mediaBlobUrl = useMedia(lastMessage ? getMessageMediaHash(lastMessage, 'micro') : undefined);
|
||||||
|
const isRoundVideo = Boolean(lastMessage && getMessageRoundVideo(lastMessage));
|
||||||
|
|
||||||
// Sets animation excess values when `orderDiff` changes and then resets excess values to animate.
|
// Sets animation excess values when `orderDiff` changes and then resets excess values to animate.
|
||||||
useLayoutEffect(() => {
|
useLayoutEffect(() => {
|
||||||
@ -229,7 +231,7 @@ const Chat: FC<OwnProps & StateProps & DispatchProps> = ({
|
|||||||
{senderName && (
|
{senderName && (
|
||||||
<span className="sender-name">{renderText(senderName)}</span>
|
<span className="sender-name">{renderText(senderName)}</span>
|
||||||
)}
|
)}
|
||||||
{renderMessageSummary(lang, lastMessage!, mediaBlobUrl || mediaThumbnail)}
|
{renderMessageSummary(lang, lastMessage!, mediaBlobUrl || mediaThumbnail, isRoundVideo)}
|
||||||
</p>
|
</p>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -284,14 +286,14 @@ const Chat: FC<OwnProps & StateProps & DispatchProps> = ({
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
function renderMessageSummary(lang: LangFn, message: ApiMessage, blobUrl?: string) {
|
function renderMessageSummary(lang: LangFn, message: ApiMessage, blobUrl?: string, isRoundVideo?: boolean) {
|
||||||
if (!blobUrl) {
|
if (!blobUrl) {
|
||||||
return renderText(getMessageSummaryText(lang, message));
|
return renderText(getMessageSummaryText(lang, message));
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<span className="media-preview">
|
<span className="media-preview">
|
||||||
<img src={blobUrl} alt="" />
|
<img src={blobUrl} alt="" className={isRoundVideo ? 'round' : undefined} />
|
||||||
{getMessageVideo(message) && <i className="icon-play" />}
|
{getMessageVideo(message) && <i className="icon-play" />}
|
||||||
{renderText(getMessageSummaryText(lang, message, true))}
|
{renderText(getMessageSummaryText(lang, message, true))}
|
||||||
</span>
|
</span>
|
||||||
|
|||||||
@ -16,6 +16,7 @@ import {
|
|||||||
getMessageSummaryText,
|
getMessageSummaryText,
|
||||||
getMessageMediaThumbDataUri,
|
getMessageMediaThumbDataUri,
|
||||||
getMessageVideo,
|
getMessageVideo,
|
||||||
|
getMessageRoundVideo,
|
||||||
} from '../../../modules/helpers';
|
} from '../../../modules/helpers';
|
||||||
import { selectChat, selectUser } from '../../../modules/selectors';
|
import { selectChat, selectUser } from '../../../modules/selectors';
|
||||||
import renderText from '../../common/helpers/renderText';
|
import renderText from '../../common/helpers/renderText';
|
||||||
@ -57,6 +58,7 @@ const ChatMessage: FC<OwnProps & StateProps & DispatchProps> = ({
|
|||||||
}) => {
|
}) => {
|
||||||
const mediaThumbnail = getMessageMediaThumbDataUri(message);
|
const mediaThumbnail = getMessageMediaThumbDataUri(message);
|
||||||
const mediaBlobUrl = useMedia(getMessageMediaHash(message, 'micro'));
|
const mediaBlobUrl = useMedia(getMessageMediaHash(message, 'micro'));
|
||||||
|
const isRoundVideo = Boolean(getMessageRoundVideo(message));
|
||||||
|
|
||||||
const handleClick = useCallback(() => {
|
const handleClick = useCallback(() => {
|
||||||
focusMessage({ chatId, messageId: message.id });
|
focusMessage({ chatId, messageId: message.id });
|
||||||
@ -96,7 +98,7 @@ const ChatMessage: FC<OwnProps & StateProps & DispatchProps> = ({
|
|||||||
</div>
|
</div>
|
||||||
<div className="subtitle">
|
<div className="subtitle">
|
||||||
<div className="message">
|
<div className="message">
|
||||||
{renderMessageSummary(lang, message, mediaBlobUrl || mediaThumbnail, searchQuery)}
|
{renderMessageSummary(lang, message, mediaBlobUrl || mediaThumbnail, searchQuery, isRoundVideo)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -104,14 +106,16 @@ const ChatMessage: FC<OwnProps & StateProps & DispatchProps> = ({
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
function renderMessageSummary(lang: LangFn, message: ApiMessage, blobUrl?: string, searchQuery?: string) {
|
function renderMessageSummary(
|
||||||
|
lang: LangFn, message: ApiMessage, blobUrl?: string, searchQuery?: string, isRoundVideo?: boolean,
|
||||||
|
) {
|
||||||
if (!blobUrl) {
|
if (!blobUrl) {
|
||||||
return renderText(getMessageSummaryText(lang, message));
|
return renderText(getMessageSummaryText(lang, message));
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<span className="media-preview">
|
<span className="media-preview">
|
||||||
<img src={blobUrl} alt="" />
|
<img src={blobUrl} alt="" className={isRoundVideo ? 'round' : undefined} />
|
||||||
{getMessageVideo(message) && <i className="icon-play" />}
|
{getMessageVideo(message) && <i className="icon-play" />}
|
||||||
{renderText(getMessageSummaryText(lang, message, true), ['emoji', 'highlight'], { highlight: searchQuery })}
|
{renderText(getMessageSummaryText(lang, message, true), ['emoji', 'highlight'], { highlight: searchQuery })}
|
||||||
</span>
|
</span>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user