aboutsummaryrefslogtreecommitdiffstats
path: root/src/services/graphql/helpers/convert-wp-thematic-to-thematic.ts
diff options
context:
space:
mode:
authorArmand Philippot <git@armandphilippot.com>2023-11-29 12:28:03 +0100
committerArmand Philippot <git@armandphilippot.com>2023-11-29 13:47:07 +0100
commitdfa894b76ee3584bf169710c78c57330c5d6ee67 (patch)
tree41380a93e2838452236a720f27f85fb14502f56a /src/services/graphql/helpers/convert-wp-thematic-to-thematic.ts
parent29a1dec4de0aa7ba64ef068a83b1b8589fbc3ad0 (diff)
fix(pages,services): make thematics & topics pages usable again
When I refactored the fetchers and convertors in #f111685 I forgot to convert WPThematicPreview and WPTopicPreview so the thematics and topics pages was broken. I also: * removed the ToC added by error in #70b4f63 * fix heading styles * fix website url in topics pages
Diffstat (limited to 'src/services/graphql/helpers/convert-wp-thematic-to-thematic.ts')
-rw-r--r--src/services/graphql/helpers/convert-wp-thematic-to-thematic.ts60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/services/graphql/helpers/convert-wp-thematic-to-thematic.ts b/src/services/graphql/helpers/convert-wp-thematic-to-thematic.ts
new file mode 100644
index 0000000..cabfa18
--- /dev/null
+++ b/src/services/graphql/helpers/convert-wp-thematic-to-thematic.ts
@@ -0,0 +1,60 @@
+import type {
+ PageLink,
+ Thematic,
+ WPPostPreview,
+ WPThematic,
+} from '../../../types';
+import { ROUTES } from '../../../utils/constants';
+import {
+ getUniquePageLinks,
+ sortPageLinksByName,
+} from '../../../utils/helpers';
+import { convertPostPreviewToArticlePreview } from './convert-post-preview-to-article-preview';
+import { convertWPTopicPreviewToPageLink } from './convert-taxonomy-to-page-link';
+import { convertWPImgToImg } from './convert-wp-image-to-img';
+
+const getRelatedTopicsFrom = (posts: WPPostPreview[]): PageLink[] => {
+ const topics: PageLink[] = [];
+
+ for (const post of posts) {
+ if (
+ post.acfPosts &&
+ 'postsInTopic' in post.acfPosts &&
+ post.acfPosts.postsInTopic
+ ) {
+ topics.push(
+ ...post.acfPosts.postsInTopic.map(convertWPTopicPreviewToPageLink)
+ );
+ }
+ }
+
+ return getUniquePageLinks(topics).sort(sortPageLinksByName);
+};
+
+export const convertWPThematicToThematic = (thematic: WPThematic): Thematic => {
+ return {
+ content: thematic.contentParts.afterMore,
+ intro: thematic.contentParts.beforeMore,
+ meta: {
+ articles: thematic.acfThematics?.postsInThematic?.map(
+ convertPostPreviewToArticlePreview
+ ),
+ cover: thematic.featuredImage
+ ? convertWPImgToImg(thematic.featuredImage.node)
+ : undefined,
+ dates: {
+ publication: thematic.date,
+ update: thematic.modified,
+ },
+ seo: {
+ description: thematic.seo.metaDesc,
+ title: thematic.seo.title,
+ },
+ relatedTopics: thematic.acfThematics?.postsInThematic
+ ? getRelatedTopicsFrom(thematic.acfThematics.postsInThematic)
+ : undefined,
+ },
+ slug: `${ROUTES.THEMATICS.INDEX}/${thematic.slug}`,
+ title: thematic.title,
+ };
+};