diff options
| author | Armand Philippot <git@armandphilippot.com> | 2023-11-29 12:28:03 +0100 |
|---|---|---|
| committer | Armand Philippot <git@armandphilippot.com> | 2023-11-29 13:47:07 +0100 |
| commit | dfa894b76ee3584bf169710c78c57330c5d6ee67 (patch) | |
| tree | 41380a93e2838452236a720f27f85fb14502f56a /src/services/graphql/helpers/convert-wp-topic-to-topic.ts | |
| parent | 29a1dec4de0aa7ba64ef068a83b1b8589fbc3ad0 (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-topic-to-topic.ts')
| -rw-r--r-- | src/services/graphql/helpers/convert-wp-topic-to-topic.ts | 56 |
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, + }; +}; |
