Files
outline/app/hooks/useAutoRefresh.ts
2023-03-29 22:01:45 -04:00

34 lines
942 B
TypeScript

import * as React from "react";
import { Minute } from "@shared/utils/time";
import Logger from "~/utils/Logger";
import useIdle from "./useIdle";
import useInterval from "./useInterval";
import usePageVisibility from "./usePageVisibility";
/**
* Hook to reload the app around once a day to stop old code from running.
*/
export default function useAutoRefresh() {
const [minutes, setMinutes] = React.useState(0);
const isVisible = usePageVisibility();
const isIdle = useIdle(15 * Minute);
useInterval(() => {
setMinutes((prev) => prev + 1);
if (minutes >= 60 * 24) {
if (isVisible) {
Logger.debug("lifecycle", "Skipping reload due to app visible");
return;
}
if (!isIdle) {
Logger.debug("lifecycle", "Skipping reload due to user activity");
return;
}
Logger.debug("lifecycle", "Auto-reloading app…");
window.location.reload();
}
}, Minute);
}