web/app/components/canopy-live-refresh.tsxblame
View source
5bcd5db1"use client";
5bcd5db2
5bcd5db3import { useCallback, useRef } from "react";
5bcd5db4import { useRouter } from "next/navigation";
5bcd5db5import { useCanopyEvents } from "@/lib/use-canopy-events";
5bcd5db6
5bcd5db7interface Props {
5bcd5db8 scope: "global" | "repo";
5bcd5db9 owner?: string;
5bcd5db10 repo?: string;
5bcd5db11}
5bcd5db12
5bcd5db13export function CanopyLiveRefresh({ scope, owner, repo }: Props) {
5bcd5db14 const router = useRouter();
5bcd5db15 const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
5bcd5db16
5bcd5db17 useCanopyEvents({
5bcd5db18 scope,
5bcd5db19 owner,
5bcd5db20 repo,
5bcd5db21 onEvent: useCallback(() => {
5bcd5db22 if (timerRef.current) clearTimeout(timerRef.current);
5bcd5db23 timerRef.current = setTimeout(() => router.refresh(), 500);
5bcd5db24 }, [router]),
5bcd5db25 });
5bcd5db26
5bcd5db27 return null;
5bcd5db28}