diff --git a/src/components/left/main/ChatFolders.tsx b/src/components/left/main/ChatFolders.tsx index 5aaa6fe58..f2788bf91 100644 --- a/src/components/left/main/ChatFolders.tsx +++ b/src/components/left/main/ChatFolders.tsx @@ -20,11 +20,12 @@ import { captureEvents, SwipeDirection } from '../../../util/captureEvents'; import { MEMO_EMPTY_ARRAY } from '../../../util/memo'; import { IS_TOUCH_ENV } from '../../../util/windowEnvironment'; +import useDerivedState from '../../../hooks/useDerivedState'; import { useFolderManagerForUnreadCounters } from '../../../hooks/useFolderManager'; import useHistoryBack from '../../../hooks/useHistoryBack'; import useLastCallback from '../../../hooks/useLastCallback'; import useOldLang from '../../../hooks/useOldLang'; -import useShowTransitionDeprecated from '../../../hooks/useShowTransitionDeprecated'; +import useShowTransition from '../../../hooks/useShowTransition'; import StoryRibbon from '../../story/StoryRibbon'; import TabList from '../../ui/TabList'; @@ -100,10 +101,15 @@ const ChatFolders: FC = ({ }, []); const { + ref, shouldRender: shouldRenderStoryRibbon, - transitionClassNames: storyRibbonClassNames, - isClosing: isStoryRibbonClosing, - } = useShowTransitionDeprecated(isStoryRibbonShown, undefined, undefined, ''); + getIsClosing: getIsStoryRibbonClosing, + } = useShowTransition({ + isOpen: isStoryRibbonShown, + className: false, + withShouldRender: true, + }); + const isStoryRibbonClosing = useDerivedState(getIsStoryRibbonClosing); const allChatsFolder: ApiChatFolder = useMemo(() => { return { @@ -282,8 +288,13 @@ const ChatFolders: FC = ({ }, [currentUserId, folderTabs, openChat, setActiveChatFolder]); const { - shouldRender: shouldRenderPlaceholder, transitionClassNames, - } = useShowTransitionDeprecated(!orderedFolderIds, undefined, true); + ref: placeholderRef, + shouldRender: shouldRenderPlaceholder, + } = useShowTransition({ + isOpen: !orderedFolderIds, + noMountTransition: true, + withShouldRender: true, + }); function renderCurrentTab(isActive: boolean) { const activeFolder = Object.values(chatFoldersById) @@ -310,11 +321,11 @@ const ChatFolders: FC = ({ return (
{shouldRenderStoryRibbon && } @@ -327,7 +338,7 @@ const ChatFolders: FC = ({ areFolders /> ) : shouldRenderPlaceholder ? ( -
+
) : undefined} = ({ } = getActions(); const lang = useOldLang(); - const { transitionClassNames } = useShowTransitionDeprecated(isOpen, onCloseAnimationEnd, undefined, false); + const { ref: containerRef } = useShowTransition({ + isOpen, + onCloseAnimationEnd, + className: false, + }); const [isMenuOpen, setIsMenuOpen] = useState(true); const [isReportModalOpen, setIsReportModalOpen] = useState(false); const [isPinModalOpen, setIsPinModalOpen] = useState(false); @@ -565,7 +570,7 @@ const ContextMenuContainer: FC = ({ scheduledMaxDate.setFullYear(scheduledMaxDate.getFullYear() + 1); return ( -
+
= ({ setTimeout(markShown, appearanceOrder * APPEARANCE_DELAY); }, [appearanceOrder, markShown, noAppearanceAnimation]); - const { transitionClassNames } = useShowTransitionDeprecated( - isShown || isJustAdded, - undefined, - noAppearanceAnimation && !isJustAdded, - false, - ); + useShowTransition({ + ref, + isOpen: isShown || isJustAdded, + noMountTransition: noAppearanceAnimation && !isJustAdded, + className: false, + }); const { id: messageId, chatId, forwardInfo, viaBotId, isTranscriptionError, factCheck, @@ -688,7 +688,6 @@ const Message: FC = ({ isThreadTop && !withAvatar && 'is-thread-top', Boolean(message.inlineButtons) && 'has-inline-buttons', isSwiped && 'is-swiped', - transitionClassNames, isJustAdded && 'is-just-added', (hasActiveReactions || shouldPlayEffect) && 'has-active-effect', isStoryMention && 'is-story-mention', diff --git a/src/components/middle/message/RoundVideo.tsx b/src/components/middle/message/RoundVideo.tsx index bfc43552e..4385637b7 100644 --- a/src/components/middle/message/RoundVideo.tsx +++ b/src/components/middle/message/RoundVideo.tsx @@ -1,10 +1,6 @@ import type { FC } from '../../../lib/teact/teact'; import React, { - useEffect, - useLayoutEffect, - useRef, - useSignal, - useState, + useEffect, useLayoutEffect, useRef, useSignal, useState, } from '../../../lib/teact/teact'; import { getActions } from '../../../global'; @@ -13,7 +9,10 @@ import type { ObserveFn } from '../../../hooks/useIntersectionObserver'; import { ApiMediaFormat } from '../../../api/types'; import { - getMediaFormat, getMessageMediaThumbDataUri, getVideoMediaHash, hasMessageTtl, + getMediaFormat, + getMessageMediaThumbDataUri, + getVideoMediaHash, + hasMessageTtl, } from '../../../global/helpers'; import { stopCurrentAudio } from '../../../util/audioPlayer'; import buildClassName from '../../../util/buildClassName'; @@ -25,10 +24,10 @@ import { useThrottledSignal } from '../../../hooks/useAsyncResolvers'; import useFlag from '../../../hooks/useFlag'; import { useIsIntersecting } from '../../../hooks/useIntersectionObserver'; import useLastCallback from '../../../hooks/useLastCallback'; -import useMediaTransitionDeprecated from '../../../hooks/useMediaTransitionDeprecated'; +import useMediaTransition from '../../../hooks/useMediaTransition'; import useMediaWithLoadProgress from '../../../hooks/useMediaWithLoadProgress'; import usePreviousDeprecated from '../../../hooks/usePreviousDeprecated'; -import useShowTransitionDeprecated from '../../../hooks/useShowTransitionDeprecated'; +import useShowTransition from '../../../hooks/useShowTransition'; import useBlurredMediaThumbRef from './hooks/useBlurredMediaThumbRef'; import Icon from '../../common/icons/Icon'; @@ -101,15 +100,19 @@ const RoundVideo: FC = ({ const hasThumb = Boolean(getMessageMediaThumbDataUri(message)); const noThumb = !hasThumb || isPlayerReady || shouldRenderSpoiler; const thumbRef = useBlurredMediaThumbRef(video, noThumb); - const thumbClassNames = useMediaTransitionDeprecated(!noThumb); + useMediaTransition(!noThumb, { ref: thumbRef }); const thumbDataUri = getMessageMediaThumbDataUri(message); const isTransferring = (isLoadAllowed && !isPlayerReady) || isDownloading; const wasLoadDisabled = usePreviousDeprecated(isLoadAllowed) === false; const { - shouldRender: shouldSpinnerRender, - transitionClassNames: spinnerClassNames, - } = useShowTransitionDeprecated(isTransferring, undefined, wasLoadDisabled); + ref: spinnerRef, + shouldRender: shouldRenderSpinner, + } = useShowTransition({ + isOpen: isTransferring, + noMountTransition: wasLoadDisabled, + withShouldRender: true, + }); const [isActivated, setIsActivated] = useState(false); @@ -260,7 +263,7 @@ const RoundVideo: FC = ({ {!shouldRenderSpoiler && ( )} @@ -280,12 +283,12 @@ const RoundVideo: FC = ({ )}
- {shouldSpinnerRender && ( -
+ {shouldRenderSpinner && ( +
)} - {shouldRenderSpoiler && !shouldSpinnerRender && renderPlayWrapper()} + {shouldRenderSpoiler && !shouldRenderSpinner && renderPlayWrapper()} {!mediaData && !isLoadAllowed && ( )} diff --git a/src/components/story/StoryToggler.tsx b/src/components/story/StoryToggler.tsx index 25693b835..294478a02 100644 --- a/src/components/story/StoryToggler.tsx +++ b/src/components/story/StoryToggler.tsx @@ -5,12 +5,11 @@ import type { GlobalState } from '../../global/types'; import { ANIMATION_END_DELAY, PREVIEW_AVATAR_COUNT } from '../../config'; import { selectIsForumPanelOpen, selectPerformanceSettingsValue, selectTabState } from '../../global/selectors'; -import buildClassName from '../../util/buildClassName'; import { animateClosing, animateOpening, ANIMATION_DURATION } from './helpers/ribbonAnimation'; import { dispatchHeavyAnimationEvent } from '../../hooks/useHeavyAnimationCheck'; import useOldLang from '../../hooks/useOldLang'; -import useShowTransitionDeprecated from '../../hooks/useShowTransitionDeprecated'; +import useShowTransition from '../../hooks/useShowTransition'; import useStoryPreloader from './hooks/useStoryPreloader'; import Avatar from '../common/Avatar'; @@ -89,7 +88,11 @@ function StoryToggler({ const isVisible = canShow && isShown; // For some reason, setting 'slow' here also fixes scroll freezes on iOS when collapsing Story Ribbon - const { shouldRender, transitionClassNames } = useShowTransitionDeprecated(isVisible, undefined, undefined, 'slow'); + const { ref, shouldRender } = useShowTransition({ + isOpen: isVisible, + className: 'slow', + withShouldRender: true, + }); useEffect(() => { if (!withAnimation || isForumPanelOpen) return; @@ -108,9 +111,10 @@ function StoryToggler({ return (