mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-03-22 02:14:41 -05:00
29 lines
848 B
TypeScript
29 lines
848 B
TypeScript
import * as React from "react";
|
|
import { useRevalidator } from "react-router";
|
|
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]);
|
|
}
|