diff options
Diffstat (limited to 'src/services/graphql/fetchers/thematics/fetch-all-thematics-slugs.ts')
| -rw-r--r-- | src/services/graphql/fetchers/thematics/fetch-all-thematics-slugs.ts | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/services/graphql/fetchers/thematics/fetch-all-thematics-slugs.ts b/src/services/graphql/fetchers/thematics/fetch-all-thematics-slugs.ts new file mode 100644 index 0000000..739c009 --- /dev/null +++ b/src/services/graphql/fetchers/thematics/fetch-all-thematics-slugs.ts @@ -0,0 +1,34 @@ +import type { GraphQLNodes, Nullable, SlugNode } from '../../../../types'; +import { fetchGraphQL, getGraphQLUrl } from '../../../../utils/helpers'; +import { fetchThematicsCount } from './fetch-thematics-count'; + +type ThematicsSlugsResponse = { + thematics: Nullable<GraphQLNodes<SlugNode>>; +}; + +const thematicsSlugsQuery = `query ThematicsSlugs($first: Int) { + thematics(first: $first) { + nodes { + slug + } + } +}`; + +/** + * Retrieve the WordPress thematics slugs. + * + * @returns {Promise<string[]>} The thematics slugs. + */ +export const fetchAllThematicsSlugs = async (): Promise<string[]> => { + const thematicsCount = await fetchThematicsCount(); + const response = await fetchGraphQL<ThematicsSlugsResponse>({ + query: thematicsSlugsQuery, + url: getGraphQLUrl(), + variables: { first: thematicsCount }, + }); + + if (!response.thematics) + return Promise.reject(new Error('Unable to find the thematics slugs.')); + + return response.thematics.nodes.map((node) => node.slug); +}; |
