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