sendou.ink/app/hooks/useVisibilityChange.ts
Kalle fd48bced91
Migrate Prettier/Eslint/Stylelint setup to Biome (#1772)
* Initial

* CSS lint

* Test CI

* Add 1v1, 2v2, and 3v3 Tags (#1771)

* Initial

* CSS lint

* Test CI

* Rename step

---------

Co-authored-by: xi <104683822+ximk@users.noreply.github.com>
2024-06-24 13:07:17 +03:00

24 lines
716 B
TypeScript

import React from "react";
// "initial" = user has not tabbed out yet
type Visibility = "initial" | DocumentVisibilityState;
/** Track the `visibilitychange` event: The `visibilitychange` event is fired at the document when the contents of its tab have become visible or have been hidden. */
export function useVisibilityChange() {
const [visible, setVisible] = React.useState<Visibility>("initial");
React.useEffect(() => {
function handleVisibilityChange() {
setVisible(document.visibilityState);
}
document.addEventListener("visibilitychange", handleVisibilityChange);
return () => {
document.removeEventListener("visibilitychange", handleVisibilityChange);
};
}, []);
return visible;
}