diff --git a/src/components/common/Audio.tsx b/src/components/common/Audio.tsx index 667c7c029..039930ef4 100644 --- a/src/components/common/Audio.tsx +++ b/src/components/common/Audio.tsx @@ -1,7 +1,6 @@ import React, { FC, memo, useCallback, useEffect, useMemo, useRef, useState, } from '../../lib/teact/teact'; -import { withGlobal } from '../../lib/teact/teactn'; import { ApiAudio, ApiMessage, ApiVoice, @@ -24,7 +23,6 @@ import { renderWaveformToDataUri } from './helpers/waveform'; import buildClassName from '../../util/buildClassName'; import renderText from './helpers/renderText'; import { decodeWaveform, interpolateArray } from '../../util/waveform'; -import { selectTheme } from '../../modules/selectors'; import useMediaWithDownloadProgress from '../../hooks/useMediaWithDownloadProgress'; import useShowTransition from '../../hooks/useShowTransition'; import useBuffering from '../../hooks/useBuffering'; @@ -39,10 +37,11 @@ import Link from '../ui/Link'; import './Audio.scss'; type OwnProps = { + theme: ISettings['theme']; message: ApiMessage; senderTitle?: string; uploadProgress?: number; - renderingFor?: 'searchResult' | 'sharedMedia'; + target?: 'searchResult' | 'sharedMedia'; date?: number; lastSyncTime?: number; className?: string; @@ -54,10 +53,6 @@ type OwnProps = { onDateClick?: (messageId: number, chatId: number) => void; }; -type StateProps = { - theme: ISettings['theme']; -}; - interface ISeekMethods { handleStartSeek: (e: React.MouseEvent) => void; handleSeek: (e: React.MouseEvent) => void; @@ -70,12 +65,12 @@ const MAX_SPIKES = IS_SINGLE_COLUMN_LAYOUT ? 50 : 75; // This is needed for browsers requiring user interaction before playing. const PRELOAD = true; -const Audio: FC = ({ +const Audio: FC = ({ theme, message, senderTitle, uploadProgress, - renderingFor, + target, date, lastSyncTime, className, @@ -229,8 +224,8 @@ const Audio: FC = ({ const fullClassName = buildClassName( 'Audio media-inner', className, - isOwn && !renderingFor && 'own', - renderingFor && 'bigger', + isOwn && !target && 'own', + target && 'bigger', isSelected && 'audio-is-selected', ); @@ -287,7 +282,7 @@ const Audio: FC = ({ )} - {renderingFor === 'searchResult' && renderSearchResult()} - {renderingFor !== 'searchResult' && audio && renderAudio( + {target === 'searchResult' && renderSearchResult()} + {target !== 'searchResult' && audio && renderAudio( lang, audio, isPlaying, playProgress, bufferedProgress, seekHandlers, date, onDateClick ? handleDateClick : undefined, )} - {renderingFor !== 'searchResult' && voice && renderVoice(voice, renderedWaveform, isMediaUnread)} + {target !== 'searchResult' && voice && renderVoice(voice, renderedWaveform, isMediaUnread)} ); }; @@ -457,6 +452,4 @@ function renderSeekline( ); } -export default memo(withGlobal((global) => ({ - theme: selectTheme(global), -}))(Audio)); +export default memo(Audio); diff --git a/src/components/common/DeleteChatModal.tsx b/src/components/common/DeleteChatModal.tsx index 53b652db4..c9fc169f6 100644 --- a/src/components/common/DeleteChatModal.tsx +++ b/src/components/common/DeleteChatModal.tsx @@ -28,6 +28,7 @@ export type OwnProps = { isOpen: boolean; chat: ApiChat; onClose: () => void; + onCloseAnimationEnd?: () => void; }; type StateProps = { @@ -53,6 +54,7 @@ const DeleteChatModal: FC = ({ canDeleteForAll, contactName, onClose, + onCloseAnimationEnd, leaveChannel, deleteHistory, deleteChannel, @@ -147,9 +149,10 @@ const DeleteChatModal: FC = ({ return ( {renderMessage()} {canDeleteForAll && ( diff --git a/src/components/common/SafeLink.tsx b/src/components/common/SafeLink.tsx index bbc7ca7e2..e52a6d554 100644 --- a/src/components/common/SafeLink.tsx +++ b/src/components/common/SafeLink.tsx @@ -1,10 +1,8 @@ import React, { FC, memo, useCallback } from '../../lib/teact/teact'; -import { withGlobal } from '../../lib/teact/teactn'; +import { getDispatch } from '../../lib/teact/teactn'; import convertPunycode from '../../lib/punycode'; -import { GlobalActions } from '../../global/types'; import { DEBUG, RE_TME_INVITE_LINK, RE_TME_LINK } from '../../config'; -import { pick } from '../../util/iteratees'; import buildClassName from '../../util/buildClassName'; type OwnProps = { @@ -15,17 +13,15 @@ type OwnProps = { isRtl?: boolean; }; -type DispatchProps = Pick; - -const SafeLink: FC = ({ +const SafeLink: FC = ({ url, text, className, children, isRtl, - toggleSafeLinkModal, - openTelegramLink, }) => { + const { toggleSafeLinkModal, openTelegramLink } = getDispatch(); + const content = children || text; const isNotSafe = url !== content; @@ -113,9 +109,4 @@ function getDomain(url?: string) { return undefined; } -export default memo(withGlobal( - undefined, - (setGlobal, actions): DispatchProps => pick(actions, [ - 'toggleSafeLinkModal', 'openTelegramLink', - ]), -)(SafeLink)); +export default memo(SafeLink); diff --git a/src/components/left/main/Chat.tsx b/src/components/left/main/Chat.tsx index 767126b65..5c09b5cc7 100644 --- a/src/components/left/main/Chat.tsx +++ b/src/components/left/main/Chat.tsx @@ -109,6 +109,7 @@ const Chat: FC = ({ const ref = useRef(null); const [isDeleteModalOpen, openDeleteModal, closeDeleteModal] = useFlag(); + const [shouldRenderDeleteModal, markRenderDeleteModal, unmarkRenderDeleteModal] = useFlag(); const { lastMessage, typingStatus } = chat || {}; const isAction = lastMessage && isActionMessage(lastMessage); @@ -171,10 +172,15 @@ const Chat: FC = ({ focusLastMessage, ]); + function handleDelete() { + markRenderDeleteModal(); + openDeleteModal(); + } + const contextActions = useChatContextActions({ chat, privateChatUser, - handleDelete: openDeleteModal, + handleDelete, folderId, isPinned, isMuted, @@ -277,11 +283,14 @@ const Chat: FC = ({ - + {shouldRenderDeleteModal && ( + + )} ); }; diff --git a/src/components/left/search/AudioResults.tsx b/src/components/left/search/AudioResults.tsx index c4e64875f..cd9d7010f 100644 --- a/src/components/left/search/AudioResults.tsx +++ b/src/components/left/search/AudioResults.tsx @@ -31,6 +31,7 @@ type DispatchProps = Pick cb(), 500, true); const AudioResults: FC = ({ + theme, isVoice, searchQuery, searchChatId, @@ -94,8 +95,9 @@ const AudioResults: FC = ({ )}