aboutsummaryrefslogtreecommitdiffstats
path: root/src/services/graphql/helpers/convert-wp-topic-to-topic.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/services/graphql/helpers/convert-wp-topic-to-topic.ts')
-rw-r--r--src/services/graphql/helpers/convert-wp-topic-to-topic.ts56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/services/graphql/helpers/convert-wp-topic-to-topic.ts b/src/services/graphql/helpers/convert-wp-topic-to-topic.ts
new file mode 100644
index 0000000..b0136c7
--- /dev/null
+++ b/src/services/graphql/helpers/convert-wp-topic-to-topic.ts
@@ -0,0 +1,56 @@
+import type { PageLink, Topic, WPPostPreview, WPTopic } from '../../../types';
+import { ROUTES } from '../../../utils/constants';
+import {
+ getUniquePageLinks,
+ sortPageLinksByName,
+} from '../../../utils/helpers';
+import { convertPostPreviewToArticlePreview } from './convert-post-preview-to-article-preview';
+import { convertWPThematicPreviewToPageLink } from './convert-taxonomy-to-page-link';
+import { convertWPImgToImg } from './convert-wp-image-to-img';
+
+const getRelatedThematicsFrom = (posts: WPPostPreview[]): PageLink[] => {
+ const thematics: PageLink[] = [];
+
+ for (const post of posts) {
+ if (
+ post.acfPosts &&
+ 'postsInThematic' in post.acfPosts &&
+ post.acfPosts.postsInThematic
+ ) {
+ thematics.push(
+ ...post.acfPosts.postsInThematic.map(convertWPThematicPreviewToPageLink)
+ );
+ }
+ }
+
+ return getUniquePageLinks(thematics).sort(sortPageLinksByName);
+};
+
+export const convertWPTopicToTopic = (topic: WPTopic): Topic => {
+ return {
+ content: topic.contentParts.afterMore,
+ intro: topic.contentParts.beforeMore,
+ meta: {
+ articles: topic.acfTopics?.postsInTopic?.map(
+ convertPostPreviewToArticlePreview
+ ),
+ cover: topic.featuredImage
+ ? convertWPImgToImg(topic.featuredImage.node)
+ : undefined,
+ dates: {
+ publication: topic.date,
+ update: topic.modified,
+ },
+ seo: {
+ description: topic.seo.metaDesc,
+ title: topic.seo.title,
+ },
+ relatedThematics: topic.acfTopics?.postsInTopic
+ ? getRelatedThematicsFrom(topic.acfTopics.postsInTopic)
+ : undefined,
+ website: topic.acfTopics?.officialWebsite ?? undefined,
+ },
+ slug: `${ROUTES.TOPICS}/${topic.slug}`,
+ title: topic.title,
+ };
+};