mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-03-27 12:54:42 -05:00
* 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>
29 lines
852 B
TypeScript
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]);
|
|
}
|