50 lines
1.1 KiB
TypeScript
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();
|
|
}
|