Download src/hooks/use-conversation-overview-git-diff-stats.ts from SaylorTwift/openhands: direct link, hf CLI and curl.
- Browser
- Download file 2.56 kB
-
https://huggingface.co/SaylorTwift/openhands/resolve/main/src/hooks/use-conversation-overview-git-diff-stats.ts
- Command line
-
hf download hf://SaylorTwift/openhands/src/hooks/use-conversation-overview-git-diff-stats.ts
-
curl -L -o use-conversation-overview-git-diff-stats.ts https://huggingface.co/SaylorTwift/openhands/resolve/main/src/hooks/use-conversation-overview-git-diff-stats.ts
2.56 kB
| import { useMemo } from "react"; | |
| import { useQueries } from "@tanstack/react-query"; | |
| import AgentServerGitService from "#/api/git-service/agent-server-git-service.api"; | |
| import { useActiveConversation } from "#/hooks/query/use-active-conversation"; | |
| import { useUnifiedGetGitChanges } from "#/hooks/query/use-unified-get-git-changes"; | |
| import { useConversationId } from "#/hooks/use-conversation-id"; | |
| import { useRuntimeIsReady } from "#/hooks/use-runtime-is-ready"; | |
| import { getGitPath } from "#/utils/get-git-path"; | |
| import { | |
| countGitChangeDiffStats, | |
| sumGitDiffLineStats, | |
| } from "#/utils/git-diff-stats"; | |
| export function useConversationOverviewGitDiffStats() { | |
| const { conversationId } = useConversationId(); | |
| const { data: conversation } = useActiveConversation(); | |
| const runtimeIsReady = useRuntimeIsReady(); | |
| const { | |
| data: gitChanges, | |
| isLoading: isLoadingChanges, | |
| isSuccess: isChangesSuccess, | |
| isError: isChangesError, | |
| } = useUnifiedGetGitChanges(); | |
| const conversationUrl = conversation?.conversation_url; | |
| const sessionApiKey = conversation?.session_api_key; | |
| const gitPath = useMemo( | |
| () => | |
| getGitPath( | |
| conversation?.selected_repository, | |
| conversation?.workspace?.working_dir?.trim(), | |
| ), | |
| [conversation?.selected_repository, conversation?.workspace?.working_dir], | |
| ); | |
| const diffCandidates = useMemo( | |
| () => (gitChanges ?? []).filter((change) => change.status !== "D"), | |
| [gitChanges], | |
| ); | |
| const diffQueries = useQueries({ | |
| queries: diffCandidates.map((change) => ({ | |
| queryKey: [ | |
| "conversation_overview_file_diff", | |
| conversationId, | |
| conversationUrl, | |
| sessionApiKey, | |
| gitPath, | |
| change.path, | |
| ], | |
| queryFn: async () => | |
| AgentServerGitService.getGitChangeDiff( | |
| conversationId!, | |
| conversationUrl, | |
| sessionApiKey, | |
| `${gitPath}/${change.path}`, | |
| ), | |
| enabled: | |
| runtimeIsReady && !!conversationId && isChangesSuccess && !!change.path, | |
| staleTime: 1000 * 60 * 5, | |
| meta: { | |
| disableToast: true, | |
| }, | |
| })), | |
| }); | |
| const isLoadingDiffs = diffQueries.some((query) => query.isLoading); | |
| const totals = sumGitDiffLineStats( | |
| diffQueries.flatMap((query) => | |
| query.data ? [countGitChangeDiffStats(query.data)] : [], | |
| ), | |
| ); | |
| return { | |
| additions: totals.additions, | |
| deletions: totals.deletions, | |
| changeCount: gitChanges?.length ?? 0, | |
| isLoading: isLoadingChanges || isLoadingDiffs, | |
| isError: isChangesError, | |
| }; | |
| } | |