import { useQuery } from "@tanstack/react-query"; import { useCallback, useState } from "react"; import { recentBranchPushes } from "~/fns/branch-pushes"; import { useViewer } from "./use-viewer"; import type { RecentBranchPush } from "~/server/branch-pushes"; /** Dismissals live for the browser session only, keyed by repo + branch so they survive route changes. */ const dismissed = new Set(); const NO_PUSHES: RecentBranchPush[] = []; export const branchPushesQueryKey = (owner: string, repo: string) => ["branch-pushes", owner, repo] as const; export function useBranchPushSuggestions(owner: string, repo: string) { const viewer = useViewer(); const [hidden, setHidden] = useState(() => [...dismissed]); const query = useQuery({ queryKey: branchPushesQueryKey(owner, repo), queryFn: () => recentBranchPushes({ data: { owner, repo } }), enabled: viewer !== null, }); const dismiss = useCallback( (branch: string) => { dismissed.add(`${owner}/${repo}#${branch}`); setHidden([...dismissed]); }, [owner, repo], ); const pushes = (query.data ?? NO_PUSHES).filter((push) => !hidden.includes(`${owner}/${repo}#${push.branch}`)); return { pushes, dismiss }; }