Files
kandev/apps/web/hooks/domains/github/use-github-status.ts
T
2026-03-02 09:37:55 +00:00

42 lines
1.4 KiB
TypeScript

"use client";
import { useEffect, useCallback } from "react";
import { fetchGitHubStatus } from "@/lib/api/domains/github-api";
import { useAppStore } from "@/components/state-provider";
export function useGitHubStatus() {
const status = useAppStore((state) => state.githubStatus.status);
const loaded = useAppStore((state) => state.githubStatus.loaded);
const loading = useAppStore((state) => state.githubStatus.loading);
const setGitHubStatus = useAppStore((state) => state.setGitHubStatus);
const setGitHubStatusLoading = useAppStore((state) => state.setGitHubStatusLoading);
const invalidateSystemHealth = useAppStore((state) => state.invalidateSystemHealth);
const doFetch = useCallback(() => {
setGitHubStatusLoading(true);
fetchGitHubStatus({ cache: "no-store" })
.then((response) => {
setGitHubStatus(response ?? null);
})
.catch(() => {
setGitHubStatus(null);
})
.finally(() => {
setGitHubStatusLoading(false);
});
}, [setGitHubStatus, setGitHubStatusLoading]);
useEffect(() => {
if (loaded || loading) return;
doFetch();
}, [loaded, loading, doFetch]);
const refresh = useCallback(() => {
// Also invalidate system health so the header indicator refetches
invalidateSystemHealth();
doFetch();
}, [doFetch, invalidateSystemHealth]);
return { status, loaded, loading, refresh };
}