From b8fda6bade397f5e3404f083011ef7c070f9dbb3 Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Fri, 15 May 2026 18:38:04 +0200 Subject: [PATCH] Global Search / Media: Add Focus Message context action Co-Authored-By: Claude Opus 4.7 (1M context) --- src/components/left/search/MediaResults.tsx | 25 +++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/components/left/search/MediaResults.tsx b/src/components/left/search/MediaResults.tsx index b58db26f4..8f1ce3d71 100644 --- a/src/components/left/search/MediaResults.tsx +++ b/src/components/left/search/MediaResults.tsx @@ -4,6 +4,8 @@ import { } from '../../../lib/teact/teact'; import { getActions, withGlobal } from '../../../global'; +import type { ApiMessage } from '../../../api/types'; +import type { MenuItemContextAction } from '../../ui/ListItem'; import type { StateProps } from './helpers/createMapStateToProps'; import { LoadMoreDirection, MediaViewerOrigin } from '../../../types'; @@ -15,6 +17,8 @@ import { throttle } from '../../../util/schedulers'; import { createMapStateToProps } from './helpers/createMapStateToProps'; import { useIntersectionObserver } from '../../../hooks/useIntersectionObserver'; +import useLang from '../../../hooks/useLang'; +import useLastCallback from '../../../hooks/useLastCallback'; import useOldLang from '../../../hooks/useOldLang'; import useAsyncRendering from '../../right/hooks/useAsyncRendering'; @@ -44,11 +48,13 @@ const MediaResults: FC = ({ const { searchMessagesGlobal, openMediaViewer, + focusMessage, } = getActions(); const containerRef = useRef(); - const lang = useOldLang(); + const oldLang = useOldLang(); + const lang = useLang(); const { observe: observeIntersectionForMedia } = useIntersectionObserver({ rootRef: containerRef, @@ -86,9 +92,19 @@ const MediaResults: FC = ({ }); }, [openMediaViewer]); + const getMessageContextActions = useLastCallback((message: ApiMessage): MenuItemContextAction[] => { + return [{ + title: lang('FocusMessage'), + icon: 'show-message', + handler: () => { + focusMessage({ chatId: message.chatId, messageId: message.id }); + }, + }]; + }); + function renderGallery() { return ( -
+
{foundMessages.map((message) => ( = ({ isProtected={isChatProtected || message.isProtected} observeIntersection={observeIntersectionForMedia} onClick={handleSelectMedia} + contextActions={getMessageContextActions(message)} /> ))}
@@ -141,8 +158,8 @@ const MediaResults: FC = ({ {canRenderContents && (!foundIds || foundIds.length === 0) && ( )} {isMediaGrid && renderGallery()}