1import type { EnvironmentId, PullRequestRef } from "@t3tools/contracts";
2import { useMemo } from "react";
3import {
4 savedPullRequestStack,
5 pullRequestStackView,
6} from "../components/pullRequest/pullRequestStackSnapshot";
7import { useThreadShells } from "./entities";
8import { pullRequestStackAtom } from "./pullRequests";
9import { useEnvironmentQuery } from "./query";
10
11/** Detail headers and list popovers keep saved navigation during an unavailable refresh. */
12export function usePullRequestStack(
13 environmentId: EnvironmentId,
14 reference: PullRequestRef | null,
15) {
16 const threads = useThreadShells();
17 const saved = useMemo(
18 () =>
19 reference === null
20 ? null
21 : savedPullRequestStack(
22 threads
23 .filter((thread) => thread.environmentId === environmentId)
24 .flatMap((thread) => thread.pullRequests ?? []),
25 reference,
26 ),
27 [environmentId, reference, threads],
28 );
29 const query = useEnvironmentQuery(
30 reference === null ? null : pullRequestStackAtom({ environmentId, input: reference }),
31 );
32 return { ...query, ...pullRequestStackView(query, saved) };
33}