From 8834fe9ee7a503102a5c03b3e1fa0d3a8a7a0c1e Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Sat, 25 Sep 2021 12:36:12 +0300 Subject: [PATCH] Message List: Fix marking messages read when in background (#1467) --- src/components/middle/hooks/useMessageObservers.ts | 1 + src/hooks/useIntersectionObserver.ts | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/components/middle/hooks/useMessageObservers.ts b/src/components/middle/hooks/useMessageObservers.ts index c20f1601f..06ca65d28 100644 --- a/src/components/middle/hooks/useMessageObservers.ts +++ b/src/components/middle/hooks/useMessageObservers.ts @@ -31,6 +31,7 @@ export default function useMessageObservers( } = useIntersectionObserver({ rootRef: containerRef, throttleMs: INTERSECTION_THROTTLE_FOR_READING, + isAutoUnfreezeDisabled: true, }, (entries) => { if (type !== 'thread') { return; diff --git a/src/hooks/useIntersectionObserver.ts b/src/hooks/useIntersectionObserver.ts index 71591dad8..9924ef96f 100644 --- a/src/hooks/useIntersectionObserver.ts +++ b/src/hooks/useIntersectionObserver.ts @@ -32,6 +32,7 @@ export function useIntersectionObserver({ margin, threshold, isDisabled, + isAutoUnfreezeDisabled = false, }: { rootRef: RefObject; throttleMs?: number; @@ -40,6 +41,7 @@ export function useIntersectionObserver({ margin?: number; threshold?: number | number[]; isDisabled?: boolean; + isAutoUnfreezeDisabled?: boolean; }, rootCallback?: RootCallback): Response { const controllerRef = useRef(); const rootCallbackRef = useRef(); @@ -65,6 +67,10 @@ export function useIntersectionObserver({ const freeze = useCallback(() => { freezeFlagsRef.current++; + if (isAutoUnfreezeDisabled) { + return; + } + if (autoUnfreezeTimeoutRef.current) { clearTimeout(autoUnfreezeTimeoutRef.current); autoUnfreezeTimeoutRef.current = undefined; @@ -81,7 +87,7 @@ export function useIntersectionObserver({ freezeFlagsRef.current = 1; unfreeze(); }, AUTO_UNFREEZE_TIMEOUT); - }, [unfreeze]); + }, [isAutoUnfreezeDisabled, unfreeze]); useHeavyAnimationCheck(freeze, unfreeze);