From e21a9ffaf3bb56ddf2cf349b58ea741eeb70475b Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Sat, 15 Apr 2023 13:51:44 +0200 Subject: [PATCH] Header Pinned Message: Inverse navigation when holding --- src/components/middle/HeaderPinnedMessage.tsx | 2 +- src/components/middle/MiddleHeader.tsx | 15 +++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/components/middle/HeaderPinnedMessage.tsx b/src/components/middle/HeaderPinnedMessage.tsx index b24ebc1ce..32705b5dd 100644 --- a/src/components/middle/HeaderPinnedMessage.tsx +++ b/src/components/middle/HeaderPinnedMessage.tsx @@ -39,7 +39,7 @@ type OwnProps = { customTitle?: string; className?: string; onUnpinMessage?: (id: number) => void; - onClick?: () => void; + onClick?: (e: React.MouseEvent) => void; onAllPinnedClick?: () => void; isLoading?: boolean; isFullWidth?: boolean; diff --git a/src/components/middle/MiddleHeader.tsx b/src/components/middle/MiddleHeader.tsx index d28941307..a785e9007 100644 --- a/src/components/middle/MiddleHeader.tsx +++ b/src/components/middle/MiddleHeader.tsx @@ -42,6 +42,7 @@ import { selectThreadParam, selectThreadTopMessageId, } from '../../global/selectors'; +import cycleRestrict from '../../util/cycleRestrict'; import useEnsureMessage from '../../hooks/useEnsureMessage'; import useWindowSize from '../../hooks/useWindowSize'; import useShowTransition from '../../hooks/useShowTransition'; @@ -184,15 +185,17 @@ const MiddleHeader: FC = ({ pinMessage({ messageId, isUnpin: true }); }, [pinMessage]); - const handlePinnedMessageClick = useCallback((): void => { - if (!pinnedMessage) return; + const handlePinnedMessageClick = useCallback((e: React.MouseEvent): void => { + const messageId = e.shiftKey && Array.isArray(pinnedMessageIds) + ? pinnedMessageIds[cycleRestrict(pinnedMessageIds.length, pinnedMessageIds.indexOf(pinnedMessageId!) - 2)] + : pinnedMessageId!; - if (onFocusPinnedMessage(pinnedMessage.id)) { + if (onFocusPinnedMessage(messageId)) { focusMessage({ - chatId: pinnedMessage.chatId, threadId, messageId: pinnedMessage.id, noForumTopicPanel: true, + chatId, threadId, messageId, noForumTopicPanel: true, }); } - }, [pinnedMessage, threadId, onFocusPinnedMessage]); + }, [pinnedMessageIds, pinnedMessageId, onFocusPinnedMessage, chatId, threadId]); const handleAllPinnedClick = useCallback(() => { openChat({ id: chatId, threadId, type: 'pinned' }); @@ -415,7 +418,7 @@ const MiddleHeader: FC = ({