TelegramPWA/src/hooks/window/useBackgroundMode.ts
2025-07-29 14:33:43 +02:00

50 lines
1.1 KiB
TypeScript

import { useEffect } from '@teact';
import { createSignal } from '../../util/signals';
import useLastCallback from '../useLastCallback';
const [getIsInBackgroundLocal, setIsInBackground] = createSignal(!document.hasFocus());
export const getIsInBackground = getIsInBackgroundLocal;
function handleBlur() {
setIsInBackground(true);
}
function handleFocus() {
setIsInBackground(false);
}
window.addEventListener('blur', handleBlur);
window.addEventListener('focus', handleFocus);
export default function useBackgroundMode(
onBlur?: AnyToVoidFunction,
onFocus?: AnyToVoidFunction,
isDisabled = false,
) {
const lastOnBlur = useLastCallback(onBlur);
const lastOnFocus = useLastCallback(onFocus);
useEffect(() => {
if (isDisabled) {
return undefined;
}
if (getIsInBackground()) {
lastOnBlur();
}
return getIsInBackground.subscribe(() => {
if (getIsInBackground()) {
lastOnBlur();
} else {
lastOnFocus();
}
});
}, [isDisabled, lastOnBlur, lastOnFocus]);
}
export function isBackgroundModeActive() {
return getIsInBackground();
}