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, };}
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,
};
}