import { useMemo } from "react"; import { dedupeRemoteBranchesWithLocalMatches } from "@t3tools/shared/git"; import { useVcsActionState } from "./use-vcs-action-state"; import { useVcsRefs } from "./use-vcs-refs"; import { useSourceControlDiscovery } from "./use-source-control-discovery"; import { useThreadSelection } from "./use-thread-selection"; import { useSelectedThreadWorktree } from "./use-selected-thread-worktree"; export function useSelectedThreadGitState() { const { selectedThread, selectedThreadProject } = useThreadSelection(); const { selectedThreadCwd } = useSelectedThreadWorktree(); const selectedThreadGitTarget = useMemo( () => ({ environmentId: selectedThread?.environmentId ?? null, cwd: selectedThreadCwd, }), [selectedThread?.environmentId, selectedThreadCwd], ); const gitActionState = useVcsActionState(selectedThreadGitTarget); const sourceControlDiscovery = useSourceControlDiscovery(selectedThread?.environmentId ?? null); const selectedThreadBranchTarget = useMemo( () => ({ environmentId: selectedThread?.environmentId ?? null, cwd: selectedThreadProject?.workspaceRoot ?? null, query: null, }), [selectedThread?.environmentId, selectedThreadProject?.workspaceRoot], ); const selectedThreadBranchState = useVcsRefs(selectedThreadBranchTarget); const selectedThreadBranches = useMemo( () => dedupeRemoteBranchesWithLocalMatches(selectedThreadBranchState.data?.refs ?? []).filter( (branch) => !branch.isRemote, ), [selectedThreadBranchState.data?.refs], ); return { gitOperationLabel: gitActionState.currentLabel, sourceControlDiscovery, selectedThreadBranches, selectedThreadBranchesLoading: selectedThreadBranchState.isPending, }; }