From 364b20449ac8dbe388ad6df1e014846190c5492f Mon Sep 17 00:00:00 2001 From: Emmanuel Gautier Date: Sat, 27 Jan 2024 15:39:07 +0100 Subject: [PATCH] fix(@galactiks/explorer): avoid page duplication --- .../src/core/content/hydrate/common.mts | 9 ++-- .../core/content/hydrate/listing-pages.mts | 49 ++++++++++--------- 2 files changed, 28 insertions(+), 30 deletions(-) diff --git a/packages/explorer/src/core/content/hydrate/common.mts b/packages/explorer/src/core/content/hydrate/common.mts index efb34483..b24e15b0 100644 --- a/packages/explorer/src/core/content/hydrate/common.mts +++ b/packages/explorer/src/core/content/hydrate/common.mts @@ -1,17 +1,14 @@ import type { ContentlayerWebPageDocument } from '../../types/index.mjs' -import { createIdentifierFromString } from '../utils.mjs'; import { addBodyRender, emptyRender } from './render.mjs'; export function createPage( identifier: string, document: Partial ) { - const id = createIdentifierFromString(identifier); - return { - _id: id, - identifier: id, - slug: id, + _id: identifier, + identifier, + slug: identifier, description: '', type: 'Page', name: identifier, diff --git a/packages/explorer/src/core/content/hydrate/listing-pages.mts b/packages/explorer/src/core/content/hydrate/listing-pages.mts index 8154bb75..8de0981d 100644 --- a/packages/explorer/src/core/content/hydrate/listing-pages.mts +++ b/packages/explorer/src/core/content/hydrate/listing-pages.mts @@ -1,5 +1,6 @@ import type { Id } from '@galactiks/contentlayer'; import { documentByIdentifierSelector, isInLanguage } from '../selectors.mjs'; +import { createIdentifierFromString } from '../utils.mjs'; import type { ContentlayerWebPageDocument, ContentlayerDocumentWithRender, ContentlayerWebPageDocumentWithRender } from '../../types/index.mjs'; import { createPage } from './common.mjs'; @@ -29,38 +30,38 @@ export const computeRemainingListingPages = () => async ( inLanguage: _d.inLanguage, }; - // If parent page does not exist, create it - if ( - _d.isPartOf && - acc.some( - (_a) => _a.identifier === _d.isPartOf && isInLanguage(_a, _d.inLanguage) - ) === false - ) { - let translationOfWork: Id | undefined = undefined; - if (_d.translationOfWork && _d.translationOfWork['@id']) { - const translationOfWorkDocument = getDocumentByIdentifier( - _d.translationOfWork['@id'] - ); - if (translationOfWorkDocument?.isPartOf) { - translationOfWork = { - type: 'Id', - '@id': translationOfWorkDocument.isPartOf, - }; + if (_d.isPartOf) { + const _isPartOfIdentifier = createIdentifierFromString(_d.isPartOf); + + // If parent page does not exist, create it + if (acc.some((_a) => _a.identifier === _isPartOfIdentifier && isInLanguage(_a, _d.inLanguage)) === false) { + let translationOfWork: Id | undefined = undefined; + if (_d.translationOfWork && _d.translationOfWork['@id']) { + const translationOfWorkDocument = getDocumentByIdentifier( + _d.translationOfWork['@id'] + ); + if (translationOfWorkDocument?.isPartOf) { + translationOfWork = { + type: 'Id', + '@id': translationOfWorkDocument.isPartOf, + }; + } } - } - acc = acc.concat( - createListingPage(_d.isPartOf, { - ...templateDocument, - translationOfWork, - }) - ); + acc = acc.concat( + createListingPage(_isPartOfIdentifier, { + ...templateDocument, + translationOfWork, + }) + ); + } } // Create all keywords pages not existing yet if (Array.isArray(_d.keywords)) { acc = acc.concat( _d.keywords + .map(createIdentifierFromString) .filter( (_k) => _k &&