From e2c15f40d1a6e47e522076863d6bb743fc874fab Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Wed, 28 Jul 2021 17:09:56 +0300 Subject: [PATCH] Fix Message Context Menu: Deleting message breaks history navigation (#1338) --- .../middle/DeleteSelectedMessageModal.tsx | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/components/middle/DeleteSelectedMessageModal.tsx b/src/components/middle/DeleteSelectedMessageModal.tsx index 94e099b09..faaf4750c 100644 --- a/src/components/middle/DeleteSelectedMessageModal.tsx +++ b/src/components/middle/DeleteSelectedMessageModal.tsx @@ -1,4 +1,6 @@ -import React, { FC, useCallback, memo } from '../../lib/teact/teact'; +import React, { + FC, useCallback, memo, useEffect, +} from '../../lib/teact/teact'; import { withGlobal } from '../../lib/teact/teactn'; import { GlobalActions } from '../../global/types'; @@ -14,6 +16,7 @@ import { import renderText from '../common/helpers/renderText'; import { pick } from '../../util/iteratees'; import useLang from '../../hooks/useLang'; +import usePrevious from '../../hooks/usePrevious'; import Modal from '../ui/Modal'; import Button from '../ui/Button'; @@ -47,11 +50,12 @@ const DeleteSelectedMessageModal: FC = ({ deleteScheduledMessages, exitMessageSelectMode, }) => { + const prevIsOpen = usePrevious(isOpen); + const handleDeleteMessageForAll = useCallback(() => { - deleteMessages({ messageIds: selectedMessageIds, shouldDeleteForAll: true }); - exitMessageSelectMode(); onClose(); - }, [deleteMessages, exitMessageSelectMode, selectedMessageIds, onClose]); + deleteMessages({ messageIds: selectedMessageIds, shouldDeleteForAll: true }); + }, [deleteMessages, selectedMessageIds, onClose]); const handleDeleteMessageForSelf = useCallback(() => { if (isSchedule) { @@ -60,14 +64,18 @@ const DeleteSelectedMessageModal: FC = ({ deleteMessages({ messageIds: selectedMessageIds, shouldDeleteForAll: false }); } - exitMessageSelectMode(); onClose(); - }, [ - isSchedule, exitMessageSelectMode, onClose, deleteScheduledMessages, selectedMessageIds, deleteMessages, - ]); + }, [isSchedule, onClose, deleteScheduledMessages, selectedMessageIds, deleteMessages]); const lang = useLang(); + // Returning `undefined` from FC instead of `` doesn't trigger useHistoryBack + useEffect(() => { + if (!isOpen && prevIsOpen) { + exitMessageSelectMode(); + } + }, [exitMessageSelectMode, isOpen, prevIsOpen]); + if (!selectedMessageIds) { return undefined; }