Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 69e01fb

Browse files
chore(cms): fix categories/tags pagination
1 parent e298a38 commit 69e01fb

File tree

8 files changed

+82
-5
lines changed

8 files changed

+82
-5
lines changed

packages/plugin-cms-api/src/graphql/resolvers/queries/category.ts

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@ const queries = {
5858
const categoriesWithTranslations = categories.map((category) => {
5959
const translation = translationsMap[category._id.toString()];
6060
category.name = translation?.title || category.name;
61-
category.description = translation?.excerpt || translation?.content || category.description;
61+
category.description =
62+
translation?.excerpt || translation?.content || category.description;
6263
return category;
6364
});
6465

@@ -92,10 +93,35 @@ const queries = {
9293
}).lean();
9394

9495
category.name = translation?.title || category.name;
95-
category.description = translation?.excerpt || translation?.content || category.description;
96+
category.description =
97+
translation?.excerpt || translation?.content || category.description;
9698

9799
return category;
98100
},
101+
102+
async cmsCategoriesCount(
103+
_parent: any,
104+
args: any,
105+
context: IContext
106+
): Promise<number> {
107+
const { models } = context;
108+
const { searchValue, status } = args;
109+
const clientPortalId = args.clientPortalId || context.clientPortalId;
110+
111+
const query: any = { clientPortalId };
112+
if (status) query.status = status;
113+
114+
if (searchValue) {
115+
query.$or = [
116+
{ name: { $regex: searchValue, $options: 'i' } },
117+
{ slug: { $regex: searchValue, $options: 'i' } },
118+
];
119+
}
120+
121+
// ✅ Await the query result before returning
122+
const count = await models.Categories.countDocuments(query);
123+
return count;
124+
},
99125
};
100126

101127
export default queries;

packages/plugin-cms-api/src/graphql/resolvers/queries/tag.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,26 @@ const queries = {
102102

103103
return tag;
104104
},
105+
106+
cmsTagsCount(_parent: any, args: any, context: IContext): Promise<number> {
107+
const { models } = context;
108+
const { searchValue, status } = args;
109+
const clientPortalId = args.clientPortalId || context.clientPortalId;
110+
111+
const query: any = { clientPortalId };
112+
if (status) query.status = status;
113+
114+
if (searchValue) {
115+
query.$or = [
116+
{ name: { $regex: searchValue, $options: 'i' } },
117+
{ slug: { $regex: searchValue, $options: 'i' } },
118+
];
119+
}
120+
121+
// ✅ Await the query result before returning
122+
const count = models.PostTags.countDocuments(query);
123+
return count;
124+
},
105125
};
106126

107127
export default queries;

packages/plugin-cms-api/src/graphql/schemas/category.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export const inputs = `
3838

3939
export const queries = `
4040
cmsCategories(clientPortalId: String, searchValue: String, status: CategoryStatus, page: Int, perPage: Int, sortField: String, sortDirection: String, language: String): [PostCategory]
41+
cmsCategoriesCount(clientPortalId: String, searchValue: String, status: CategoryStatus): Int
4142
cmsCategory(_id: String, slug: String, language: String): PostCategory
4243
`;
4344

packages/plugin-cms-api/src/graphql/schemas/tag.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ export const types = `
1111
`;
1212

1313
export const inputs = `
14-
1514
input PostTagInput {
1615
name: String
1716
slug: String
@@ -23,6 +22,7 @@ export const inputs = `
2322

2423
export const queries = `
2524
cmsTags(clientPortalId: String, searchValue: String, page: Int, perPage: Int, sortField: String, sortDirection: String, language: String): [PostTag]
25+
cmsTagsCount(clientPortalId: String, searchValue: String): Int
2626
cmsTag(_id: String, slug: String, language: String): PostTag
2727
`;
2828

packages/plugin-cms-ui/src/modules/categories/containers/List.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,14 @@ export default function ListContainer(props: Props) {
5656
fetchPolicy: 'network-only',
5757
});
5858

59+
const { data: countData, loading: countLoading } = useQuery(queries.GET_CATEGORIES_COUNT, {
60+
variables: {
61+
clientPortalId: cpId,
62+
...router.generatePaginationParams(props.queryParams || {}),
63+
},
64+
fetchPolicy: 'network-only',
65+
});
66+
5967
const [removeMutation] = useMutation(mutations.CATEGORY_REMOVE);
6068

6169
if (loading) {
@@ -87,7 +95,7 @@ export default function ListContainer(props: Props) {
8795
clientPortalId: cpId,
8896
loading,
8997
categoryTree,
90-
totalCount: data?.cmsCategories?.length || 0,
98+
totalCount: countData?.cmsCategoriesCount || 0,
9199
refetch,
92100
remove,
93101
};

packages/plugin-cms-ui/src/modules/categories/graphql/queries.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,13 @@ const GET_CATEGORIES = gql`
3939
}
4040
`;
4141

42+
const GET_CATEGORIES_COUNT = gql`
43+
query cmsCategoriesCount($clientPortalId: String, $searchValue: String, $status: CategoryStatus) {
44+
cmsCategoriesCount(clientPortalId: $clientPortalId, searchValue: $searchValue, status: $status)
45+
}
46+
`;
47+
4248
export default {
4349
GET_CATEGORIES,
50+
GET_CATEGORIES_COUNT,
4451
};

packages/plugin-cms-ui/src/modules/tags/containers/List.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,14 @@ export default function ListContainer(props: Props) {
3030
fetchPolicy: 'network-only',
3131
});
3232

33+
const { data: countData, loading: countLoading } = useQuery(queries.GET_TAGS_COUNT, {
34+
variables: {
35+
clientPortalId: cpId,
36+
searchValue: props.queryParams?.searchValue,
37+
},
38+
fetchPolicy: 'network-only',
39+
});
40+
3341
const [removeMutation] = useMutation(mutations.TAG_REMOVE);
3442

3543
if (loading) {
@@ -60,7 +68,7 @@ export default function ListContainer(props: Props) {
6068
clientPortalId: cpId,
6169
loading,
6270
tags: data?.cmsTags || [],
63-
totalCount: data?.cmsTags?.length || 0,
71+
totalCount: countData?.cmsTagsCount || 0,
6472
refetch,
6573
remove,
6674
};

packages/plugin-cms-ui/src/modules/tags/graphql/queries.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,13 @@ const GET_TAGS = gql`
2828
}
2929
`;
3030

31+
const GET_TAGS_COUNT = gql`
32+
query cmsTagsCount($clientPortalId: String, $searchValue: String) {
33+
cmsTagsCount(clientPortalId: $clientPortalId, searchValue: $searchValue)
34+
}
35+
`;
36+
3137
export default {
3238
GET_TAGS,
39+
GET_TAGS_COUNT,
3340
};

0 commit comments

Comments
 (0)