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