From 8186401be46b114a4e91de1b7fd68e1ceaf941f6 Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Mon, 10 Oct 2022 14:37:48 +0200 Subject: [PATCH] Message / Forward: Faster forwarding to "Saved Messages" (#2058) --- .../main/ForwardRecipientPicker.tsx | 33 ++++++++++++++++--- src/global/actions/api/messages.ts | 13 ++++++++ src/global/types.ts | 1 + 3 files changed, 42 insertions(+), 5 deletions(-) diff --git a/src/components/main/ForwardRecipientPicker.tsx b/src/components/main/ForwardRecipientPicker.tsx index 28aacb8b1..4fee6d4f8 100644 --- a/src/components/main/ForwardRecipientPicker.tsx +++ b/src/components/main/ForwardRecipientPicker.tsx @@ -2,7 +2,7 @@ import type { FC } from '../../lib/teact/teact'; import React, { memo, useCallback, useEffect, } from '../../lib/teact/teact'; -import { getActions } from '../../global'; +import { getActions, withGlobal } from '../../global'; import useLang from '../../hooks/useLang'; import useFlag from '../../hooks/useFlag'; @@ -13,12 +13,21 @@ export type OwnProps = { isOpen: boolean; }; -const ForwardRecipientPicker: FC = ({ +interface StateProps { + currentUserId?: string; + isManyMessages?: boolean; +} + +const ForwardRecipientPicker: FC = ({ isOpen, + currentUserId, + isManyMessages, }) => { const { setForwardChatId, exitForwardMode, + forwardToSavedMessages, + showNotification, } = getActions(); const lang = useLang(); @@ -31,8 +40,17 @@ const ForwardRecipientPicker: FC = ({ }, [isOpen, markIsShown]); const handleSelectRecipient = useCallback((recipientId: string) => { - setForwardChatId({ id: recipientId }); - }, [setForwardChatId]); + if (recipientId === currentUserId) { + forwardToSavedMessages(); + showNotification({ + message: lang(isManyMessages + ? 'Conversation.ForwardTooltip.SavedMessages.Many' + : 'Conversation.ForwardTooltip.SavedMessages.One'), + }); + } else { + setForwardChatId({ id: recipientId }); + } + }, [currentUserId, forwardToSavedMessages, isManyMessages, lang, setForwardChatId, showNotification]); const handleClose = useCallback(() => { exitForwardMode(); @@ -53,4 +71,9 @@ const ForwardRecipientPicker: FC = ({ ); }; -export default memo(ForwardRecipientPicker); +export default memo(withGlobal((global): StateProps => { + return { + currentUserId: global.currentUserId, + isManyMessages: (global.forwardMessages.messageIds?.length || 0) > 1, + }; +})(ForwardRecipientPicker)); diff --git a/src/global/actions/api/messages.ts b/src/global/actions/api/messages.ts index efaa50745..a1ce1b9ac 100644 --- a/src/global/actions/api/messages.ts +++ b/src/global/actions/api/messages.ts @@ -1310,6 +1310,19 @@ addActionHandler('setForwardChatId', async (global, actions, payload) => { actions.exitMessageSelectMode(); }); +addActionHandler('forwardToSavedMessages', (global, actions) => { + setGlobal({ + ...global, + forwardMessages: { + ...global.forwardMessages, + toChatId: global.currentUserId, + }, + }); + + actions.exitMessageSelectMode(); + actions.forwardMessages({ isSilent: true }); +}); + function countSortedIds(ids: number[], from: number, to: number) { let count = 0; diff --git a/src/global/types.ts b/src/global/types.ts index e19896b63..c30485883 100644 --- a/src/global/types.ts +++ b/src/global/types.ts @@ -877,6 +877,7 @@ export interface ActionPayloads { setForwardNoCaptions: boolean; exitForwardMode: never; changeForwardRecipient: never; + forwardToSavedMessages: never; // GIFs loadSavedGifs: never;