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-thematic-to-thematic.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-thematic-to-thematic.ts')
| -rw-r--r-- | src/services/graphql/helpers/convert-wp-thematic-to-thematic.ts | 60 |
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, + }; +}; |
