Live run updates

This commit is contained in:
2026-02-07 21:50:27 +01:00
parent e24a6b8c0b
commit 06aabf7f8c
3 changed files with 29 additions and 3 deletions
+2 -2
View File
@@ -6,13 +6,13 @@ import RunChat, { ChatMessage } from "./components/RunChat";
import { FileTree } from "./components/FileTree";
import { File } from "lucide-react";
import Editor from "./components/Editor";
import useAction from "@/hook/use-action";
import useAction, { useActionInterval } from "@/hook/use-action";
import { getLiveRun } from "@/modules/live-run/actions";
import ProblemCard from "../problems/components/ProblemCard";
import ProfileCard from "./components/ProfileCard";
export default function Run() {
const [runInfo] = useAction(getLiveRun);
const [runInfo] = useActionInterval(getLiveRun, 1000);
const chatMessages: ChatMessage[] = [
{ user: "Alice", message: "Nice split!", time: "1:53" },
+26
View File
@@ -17,3 +17,29 @@ export default function useAction<T>(
return [value, loaded, error];
}
export function useActionInterval<T>(
action: () => Promise<T>,
interval: number,
dependencies = [],
): [T | null, boolean, Error | null] {
const [value, setValue] = useState<T | null>(null);
const [loaded, setLoaded] = useState(false);
const [error, setError] = useState(null);
useEffect(() => {
const f = () =>
action()
.then(setValue)
.catch(setError)
.finally(() => setLoaded(true));
f();
const inv = setInterval(f, interval);
return () => clearInterval(inv);
}, dependencies);
return [value, loaded, error];
}
+1 -1
View File
@@ -54,7 +54,7 @@ export async function getLiveRun(): Promise<LiveRun> {
return {
id: "0",
username: "selimaj",
start: new Date().getTime(),
start: 1770497350654,
views: 230,
problem: "solve",
category: "any%",