import { useCallback, useEffect, 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>();
export function useBranchPushSuggestions(owner: string, repo: string) {
const viewer = useViewer();
const [pushes, setPushes] = useState<RecentBranchPush[]>([]);
const [hidden, setHidden] = useState(() => [...dismissed]);
useEffect(() => {
if (!viewer) return;
let cancelled = false;
recentBranchPushes({ data: { owner, repo } })
.then((result) => {
if (!cancelled) setPushes(result);
})
.catch(() => {
if (!cancelled) setPushes([]);
});
return () => {
cancelled = true;
};
}, [owner, repo, viewer]);
const dismiss = useCallback(
(branch: string) => {
dismissed.add(`${owner}/${repo}#${branch}`);
setHidden([...dismissed]);
},
[owner, repo],
);
return { pushes: pushes.filter((push) => !hidden.includes(`${owner}/${repo}#${push.branch}`)), dismiss };
}