48 lines · 1.8 KB · TypeScript
RawDownload
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,  };}