import { useMemo } from "react"; import { dedupeRemoteBranchesWithLocalMatches } from "@t3tools/shared/git"; import { useBranches } from "./queries"; import { useEnvironmentQuery } from "./query"; import { sourceControlEnvironment } from "./sourceControl"; import { useVcsActionState } from "./use-vcs-action-state"; 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 = useEnvironmentQuery( selectedThread === null ? null : sourceControlEnvironment.discovery({ environmentId: selectedThread.environmentId, input: {}, }), ); const selectedThreadBranchTarget = useMemo( () => ({ environmentId: selectedThread?.environmentId ?? null, cwd: selectedThreadProject?.workspaceRoot ?? null, query: null, }), [selectedThread?.environmentId, selectedThreadProject?.workspaceRoot], ); const selectedThreadBranchState = useBranches(selectedThreadBranchTarget); const selectedThreadBranches = useMemo( () => dedupeRemoteBranchesWithLocalMatches(selectedThreadBranchState.data?.refs ?? []).filter( (branch) => !branch.isRemote, ), [selectedThreadBranchState.data?.refs], ); return { gitOperationLabel: gitActionState.currentLabel, sourceControlDiscovery, selectedThreadBranches, selectedThreadBranchesLoading: selectedThreadBranchState.isPending, }; }