sendou.ink/app/hooks/useAutoRefresh.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

29 lines
852 B
TypeScript

import { useRevalidator } from "@remix-run/react";
import * as React from "react";
import { useVisibilityChange } from "./useVisibilityChange";
const UPDATE_EVERY_N_SECONDS = 30;
const wasUpdatedRecently = (lastUpdated: number) =>
Date.now() - lastUpdated < UPDATE_EVERY_N_SECONDS * 1000;
export function useAutoRefresh(lastUpdated: number) {
const { revalidate } = useRevalidator();
const visibility = useVisibilityChange();
React.useEffect(() => {
// when user comes back to this tab
if (visibility === "visible" && !wasUpdatedRecently(lastUpdated)) {
revalidate();
}
const interval = setInterval(() => {
if (visibility === "hidden" || wasUpdatedRecently(lastUpdated)) return;
revalidate();
}, UPDATE_EVERY_N_SECONDS * 1000);
return () => {
clearInterval(interval);
};
}, [visibility, revalidate, lastUpdated]);
}