feat(web): auto fresh every 5 seconds for workflow display
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
"use client";
|
||||
|
||||
import { LoadingIcon } from "@/components/LoadingIcon";
|
||||
import { useRouter } from "next/navigation";
|
||||
import { useEffect, useTransition } from "react";
|
||||
|
||||
export function RouteRefresher(props: { interval: number }) {
|
||||
const [isPending, startTransition] = useTransition();
|
||||
const router = useRouter();
|
||||
|
||||
useEffect(() => {
|
||||
let timeout: NodeJS.Timeout;
|
||||
|
||||
const refresh = () => {
|
||||
console.log("refreshing");
|
||||
|
||||
startTransition(() => {
|
||||
router.refresh();
|
||||
});
|
||||
timeout = setTimeout(refresh, props.interval);
|
||||
};
|
||||
|
||||
const handleVisibilityChange = () => {
|
||||
if (document.hidden) {
|
||||
clearTimeout(timeout);
|
||||
} else {
|
||||
refresh();
|
||||
}
|
||||
};
|
||||
|
||||
window.addEventListener("visibilitychange", handleVisibilityChange);
|
||||
refresh();
|
||||
|
||||
return () => {
|
||||
clearTimeout(timeout);
|
||||
window.removeEventListener("visibilitychange", handleVisibilityChange);
|
||||
};
|
||||
}, [props.interval, router]);
|
||||
|
||||
return <div>{isPending && <LoadingIcon />}</div>;
|
||||
}
|
||||
Reference in New Issue
Block a user