diff --git a/src/api/gramjs/apiBuilders/messages.ts b/src/api/gramjs/apiBuilders/messages.ts index 9fce7a92a..0fecbef87 100644 --- a/src/api/gramjs/apiBuilders/messages.ts +++ b/src/api/gramjs/apiBuilders/messages.ts @@ -392,6 +392,7 @@ function buildApiMessageForwardInfo(fwdFrom: GramJs.MessageFwdHeader, isChatWith return { date: fwdFrom.date, + isImported: fwdFrom.imported, isChannelPost: Boolean(fwdFrom.channelPost), channelPostId: fwdFrom.channelPost, isLinkedChannelPost: Boolean(fwdFrom.channelPost && savedFromPeerId && !isChatWithSelf), diff --git a/src/api/types/messages.ts b/src/api/types/messages.ts index 6f72da25e..6e59436f1 100644 --- a/src/api/types/messages.ts +++ b/src/api/types/messages.ts @@ -286,6 +286,7 @@ export interface ApiWebPage { export interface ApiMessageForwardInfo { date: number; + isImported?: boolean; isChannelPost: boolean; channelPostId?: number; isLinkedChannelPost?: boolean; diff --git a/src/components/middle/message/MessageMeta.scss b/src/components/middle/message/MessageMeta.scss index 6d500e1b4..34722884c 100644 --- a/src/components/middle/message/MessageMeta.scss +++ b/src/components/middle/message/MessageMeta.scss @@ -20,6 +20,7 @@ } .message-time, + .message-imported, .message-signature, .message-views { font-size: 0.75rem; @@ -40,6 +41,7 @@ margin-inline-start: 0.1875rem; } + .message-imported, .message-signature { overflow: hidden; text-overflow: ellipsis; diff --git a/src/components/middle/message/MessageMeta.tsx b/src/components/middle/message/MessageMeta.tsx index 5bbf1e27a..0084636db 100644 --- a/src/components/middle/message/MessageMeta.tsx +++ b/src/components/middle/message/MessageMeta.tsx @@ -1,5 +1,6 @@ import type { FC } from '../../../lib/teact/teact'; import React, { memo, useMemo } from '../../../lib/teact/teact'; +import { getActions } from '../../../global'; import type { ApiAvailableReaction, ApiMessage, ApiMessageOutgoingStatus } from '../../../api/types'; import type { ActiveReaction } from '../../../global/types'; @@ -34,10 +35,18 @@ const MessageMeta: FC = ({ activeReaction, withReactionOffset, availableReactions, reactionMessage, }) => { + const { showNotification } = getActions(); const lang = useLang(); const [isActivated, markActivated] = useFlag(); const reactions = withReactions && reactionMessage?.reactions?.results.filter((l) => l.count > 0); + const handleClick = (e: React.MouseEvent) => { + e.stopPropagation(); + + showNotification({ + message: lang('ImportedInfo'), + }); + }; const title = useMemo(() => { if (!isActivated) return undefined; @@ -58,9 +67,15 @@ const MessageMeta: FC = ({ return text; }, [isActivated, lang, message]); + const fullClassName = buildClassName( + 'MessageMeta', + withReactionOffset && 'reactions-offset', + message.forwardInfo?.isImported && 'is-imported', + ); + return ( = ({ {renderText(signature)} )} + {message.forwardInfo?.isImported && ( + <> + + {formatDateTimeToString(message.forwardInfo.date * 1000, lang.code, true)} + + {lang('ImportedMessage')} + + )} {message.isEdited && `${lang('EditedMessage')} `} {formatTime(lang, message.date * 1000)} diff --git a/src/components/middle/message/_message-content.scss b/src/components/middle/message/_message-content.scss index b2285c3c4..efbc58d75 100644 --- a/src/components/middle/message/_message-content.scss +++ b/src/components/middle/message/_message-content.scss @@ -171,7 +171,7 @@ bottom: -0.5rem !important; margin-top: -0.25rem; - &:not([dir="rtl"]) { + &:not([dir="rtl"]):not(.is-imported) { margin-top: -1.25rem; } } diff --git a/src/util/dateFormat.ts b/src/util/dateFormat.ts index 3a30c7cc4..16b255e2e 100644 --- a/src/util/dateFormat.ts +++ b/src/util/dateFormat.ts @@ -290,7 +290,7 @@ export function formatDateToString( return formatDayToStringWithCache(dayStartAt, locale, noYear, monthFormat, noDay); } -export function formatDateTimeToString(datetime: Date | number, locale = 'en-US') { +export function formatDateTimeToString(datetime: Date | number, locale = 'en-US', noSeconds?: boolean) { const date = typeof datetime === 'number' ? new Date(datetime) : datetime; return date.toLocaleString( locale, @@ -300,7 +300,7 @@ export function formatDateTimeToString(datetime: Date | number, locale = 'en-US' day: 'numeric', hour: 'numeric', minute: 'numeric', - second: 'numeric', + second: noSeconds ? undefined : 'numeric', }, ); }