From f93e5273beaad49a0807b31848376b1c29e19c32 Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Fri, 3 Mar 2023 14:30:49 +0100 Subject: [PATCH] Multitabs: Fix draft sync issue (#2731) --- src/hooks/useBackgroundMode.ts | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/hooks/useBackgroundMode.ts b/src/hooks/useBackgroundMode.ts index 6a1bc3be7..c544280d2 100644 --- a/src/hooks/useBackgroundMode.ts +++ b/src/hooks/useBackgroundMode.ts @@ -1,30 +1,44 @@ -import { useEffect } from '../lib/teact/teact'; +import { useCallback, useEffect, useRef } from '../lib/teact/teact'; export default function useBackgroundMode( onBlur?: AnyToVoidFunction, onFocus?: AnyToVoidFunction, ) { + const wasBlurred = useRef(false); + const handleBlur = useCallback(() => { + if (wasBlurred.current) { + return; + } + + onBlur?.(); + wasBlurred.current = true; + }, [onBlur]); + const handleFocus = useCallback(() => { + onFocus?.(); + wasBlurred.current = false; + }, [onFocus]); + useEffect(() => { if (onBlur && !document.hasFocus()) { - onBlur(); + handleBlur(); } if (onBlur) { - window.addEventListener('blur', onBlur); + window.addEventListener('blur', handleBlur); } if (onFocus) { - window.addEventListener('focus', onFocus); + window.addEventListener('focus', handleFocus); } return () => { if (onFocus) { - window.removeEventListener('focus', onFocus); + window.removeEventListener('focus', handleFocus); } if (onBlur) { - window.removeEventListener('blur', onBlur); + window.removeEventListener('blur', handleBlur); } }; - }, [onBlur, onFocus]); + }, [handleBlur, handleFocus, onBlur, onFocus]); }