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<string>();
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 };
}