Skip to content

Commit 0db407a

Browse files
committed
get DiffTreeSummary using tanstack query
1 parent c3cb7ac commit 0db407a

File tree

4 files changed

+90
-39
lines changed

4 files changed

+90
-39
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { gql } from "@apollo/client";
2+
3+
import type {
4+
Get_Diff_Tree_SummaryQuery,
5+
Get_Diff_Tree_SummaryQueryVariables,
6+
} from "@/shared/api/graphql/generated/graphql";
7+
import graphqlClient from "@/shared/api/graphql/graphqlClientApollo";
8+
9+
export const GET_PROPOSED_CHANGES_DIFF_SUMMARY = gql`
10+
query GET_DIFF_TREE_SUMMARY($branch: String, $filters: DiffTreeQueryFilters) {
11+
DiffTreeSummary(branch: $branch, filters: $filters) {
12+
num_added
13+
num_updated
14+
num_removed
15+
num_conflicts
16+
}
17+
}
18+
`;
19+
20+
export interface GetDiffTreeSummaryFromApiParams extends Get_Diff_Tree_SummaryQueryVariables {}
21+
22+
export function getDiffTreeSummaryFromApi(variables: Get_Diff_Tree_SummaryQueryVariables) {
23+
return graphqlClient.query<Get_Diff_Tree_SummaryQuery, Get_Diff_Tree_SummaryQueryVariables>({
24+
query: GET_PROPOSED_CHANGES_DIFF_SUMMARY,
25+
variables,
26+
context: {
27+
processErrorMessage: () => {},
28+
},
29+
});
30+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { queryOptions, useQuery } from "@tanstack/react-query";
2+
3+
import type { QueryConfig } from "@/shared/api/types";
4+
5+
import { type GetDiffSummaryParams, getDiffSummary } from "@/entities/diff/domain/get-diff-summary";
6+
7+
export function getDiffSummaryQueryOptions({ branchName }: GetDiffSummaryParams) {
8+
return queryOptions({
9+
queryKey: ["diff-summary", branchName],
10+
queryFn: () => getDiffSummary({ branchName }),
11+
});
12+
}
13+
14+
export type useGetDiffSummaryConfig = QueryConfig<typeof getDiffSummaryQueryOptions>;
15+
16+
export function useGetDiffSummary(params: GetDiffSummaryParams, config?: useGetDiffSummaryConfig) {
17+
return useQuery({ ...getDiffSummaryQueryOptions(params), ...config });
18+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { getDiffTreeSummaryFromApi } from "@/entities/diff/api/get-diff-tree-summary-from-api";
2+
3+
export type GetDiffSummaryParams = { branchName: string };
4+
5+
export type GetDiffSummaryResponse = {
6+
num_added: number;
7+
num_updated: number;
8+
num_removed: number;
9+
num_conflicts: number;
10+
};
11+
12+
export type GetDiffSummary = (
13+
params: GetDiffSummaryParams
14+
) => Promise<GetDiffSummaryResponse | null>;
15+
16+
export const getDiffSummary: GetDiffSummary = async ({ branchName }) => {
17+
const { data, errors } = await getDiffTreeSummaryFromApi({
18+
branch: branchName,
19+
});
20+
21+
if (errors) {
22+
throw new Error(errors.map((e) => e.message).join("; "));
23+
}
24+
25+
return (data.DiffTreeSummary as GetDiffSummaryResponse) ?? null;
26+
};
Lines changed: 16 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,15 @@
1-
import { useQuery } from "@apollo/client";
21
import type React from "react";
32
import { Link } from "react-router";
4-
import { toast } from "react-toastify";
53

64
import { QSP } from "@/config/qsp";
75

86
import { constructPath } from "@/shared/api/rest/fetch";
7+
import { Row } from "@/shared/components/container";
98
import ErrorScreen from "@/shared/components/errors/error-screen";
10-
import { ALERT_TYPES, Alert } from "@/shared/components/ui/alert";
119

10+
import { useGetDiffSummary } from "@/entities/diff/domain/get-diff-summary.query";
11+
import { DIFF_STATUS, type DiffStatus } from "@/entities/diff/node-diff/types";
1212
import { DiffBadge } from "@/entities/diff/node-diff/utils";
13-
import { getProposedChangesDiffSummary } from "@/entities/proposed-changes/api/getProposedChangesDiffSummary";
14-
15-
import { DIFF_STATUS, type DiffStatus } from "../../diff/node-diff/types";
16-
17-
interface DiffTreeSummary {
18-
num_added: number;
19-
num_removed: number;
20-
num_updated: number;
21-
num_conflicts: number;
22-
}
2313

2414
interface ProposedChangeDiffSummaryProps {
2515
branchName: string;
@@ -50,24 +40,9 @@ export const ProposedChangeDiffSummary: React.FC<ProposedChangeDiffSummaryProps>
5040
proposedChangeId,
5141
branchName,
5242
}) => {
53-
const { error, data, loading } = useQuery<{ DiffTreeSummary: DiffTreeSummary }>(
54-
getProposedChangesDiffSummary,
55-
{
56-
skip: !branchName,
57-
variables: { branch: branchName },
58-
context: {
59-
processErrorMessage: (message: string) => {
60-
if (!message.includes("not found")) {
61-
toast(<Alert type={ALERT_TYPES.ERROR} message={message} />, {
62-
toastId: "alert-error",
63-
});
64-
}
65-
},
66-
},
67-
}
68-
);
43+
const { error, data, isPending } = useGetDiffSummary({ branchName });
6944

70-
if (loading) {
45+
if (isPending) {
7146
return <DiffSummarySkeleton />;
7247
}
7348

@@ -81,40 +56,42 @@ export const ProposedChangeDiffSummary: React.FC<ProposedChangeDiffSummaryProps>
8156
);
8257
}
8358

84-
const { DiffTreeSummary } = data || {};
59+
if (!data) {
60+
return null;
61+
}
8562

8663
return (
87-
<div className="inline-flex gap-2">
64+
<Row>
8865
<BadgeLink
8966
status={DIFF_STATUS.ADDED}
90-
count={DiffTreeSummary?.num_added}
67+
count={data.num_added}
9168
proposedChangeId={proposedChangeId}
9269
/>
9370
<BadgeLink
9471
status={DIFF_STATUS.REMOVED}
95-
count={DiffTreeSummary?.num_removed}
72+
count={data.num_removed}
9673
proposedChangeId={proposedChangeId}
9774
/>
9875
<BadgeLink
9976
status={DIFF_STATUS.UPDATED}
100-
count={DiffTreeSummary?.num_updated}
77+
count={data.num_updated}
10178
proposedChangeId={proposedChangeId}
10279
/>
10380
<BadgeLink
10481
status={DIFF_STATUS.CONFLICT}
105-
count={DiffTreeSummary?.num_conflicts}
82+
count={data.num_conflicts}
10683
proposedChangeId={proposedChangeId}
10784
/>
108-
</div>
85+
</Row>
10986
);
11087
};
11188

11289
const DiffSummarySkeleton: React.FC = () => {
11390
return (
114-
<div className="flex gap-2">
91+
<Row>
11592
{[...Array(4)].map((_, index) => (
11693
<div key={index} className="h-6 w-9 animate-pulse rounded-full bg-gray-200" />
11794
))}
118-
</div>
95+
</Row>
11996
);
12097
};

0 commit comments

Comments
 (0)