import type { Nullable, WPThematic } from '../../../../types'; import { fetchGraphQL, getGraphQLUrl } from '../../../../utils/helpers'; type ThematicResponse = { thematic: Nullable; }; const thematicQuery = `query Thematic($slug: ID!) { thematic(id: $slug, idType: SLUG) { acfThematics { postsInThematic { ... on Post { acfPosts { postsInTopic { ... on Topic { databaseId slug title } } } author { node { name } } commentCount contentParts { beforeMore } databaseId date featuredImage { node { altText mediaDetails { height width } sourceUrl title } } info { wordsCount } modified slug title } } } contentParts { afterMore beforeMore } featuredImage { node { altText mediaDetails { height width } sourceUrl title } } seo { metaDesc title } slug title } }`; /** * Retrieve a WordPress thematic by slug. * * @param {string} slug - The thematic slug. * @returns {Promise} The requested thematic. */ export const fetchThematic = async (slug: string): Promise => { const response = await fetchGraphQL({ query: thematicQuery, url: getGraphQLUrl(), variables: { slug }, }); if (!response.thematic) return Promise.reject( new Error(`No thematic found for the following slug ${slug}.`) ); return response.thematic; };