From e0c6d259a425f98ae20e1c35c850efa04cec718e Mon Sep 17 00:00:00 2001 From: GatsbyJS Bot Date: Thu, 23 Feb 2023 06:48:17 -0500 Subject: [PATCH] feat(gatsby-source-drupal): filter api requests by languages (#37684) (#37691) * filter by languages * add option to schema * readme/remove import * specify boolean (cherry picked from commit 310b30d3dac26a4557bda8fdd915115e4839bd6d) Co-authored-by: Katherine Beck <49894658+kathmbeck@users.noreply.github.com> --- packages/gatsby-source-drupal/README.md | 2 + .../gatsby-source-drupal/src/gatsby-node.ts | 52 +++++++++++++++++-- .../src/plugin-options.ts | 1 + 3 files changed, 50 insertions(+), 5 deletions(-) diff --git a/packages/gatsby-source-drupal/README.md b/packages/gatsby-source-drupal/README.md index 422f30df06b93..1925244b5fd80 100644 --- a/packages/gatsby-source-drupal/README.md +++ b/packages/gatsby-source-drupal/README.md @@ -474,6 +474,8 @@ module.exports = { as: `uk`, }, ], + filterByLanguages: false + // add a boolean `true` here if you'd like to filter the Drupal API response by the current language translatableEntities: [`node--article`], nonTranslatableEntities: [`file--file`], }, diff --git a/packages/gatsby-source-drupal/src/gatsby-node.ts b/packages/gatsby-source-drupal/src/gatsby-node.ts index b4a618a189679..b5a51b50a0156 100644 --- a/packages/gatsby-source-drupal/src/gatsby-node.ts +++ b/packages/gatsby-source-drupal/src/gatsby-node.ts @@ -176,6 +176,7 @@ exports.sourceNodes = async ( fastBuilds = false, entityReferenceRevisions = [], languageConfig = { + filterByLanguages: false, defaultLanguage: `und`, enabledLanguages: [`und`], translatableEntities: [], @@ -512,7 +513,12 @@ ${JSON.stringify(webhookBody, null, 4)}` entityType => entityType === type ) - const getNext = async (url, currentLanguage) => { + const getNext = async ( + url, + currentLanguage, + filterByLanguages, + renamedEnabledLanguages + ) => { if (typeof url === `object`) { // url can be string or object containing href field url = url.href @@ -570,6 +576,22 @@ ${JSON.stringify(webhookBody, null, 4)}` } } + if (d.body.data && currentLanguage && filterByLanguages) { + const languageCodeForFilter = + renamedEnabledLanguages && + renamedEnabledLanguages.find( + language => language.as === currentLanguage + ) + ? renamedEnabledLanguages.find( + language => language.as === currentLanguage + ).langCode + : currentLanguage + + d.body.data = d.body.data.filter( + n => n.attributes.langcode === languageCodeForFilter + ) + } + if (d.body.data) { // @ts-ignore dataArray.push(...(d.body.data || [])) @@ -618,17 +640,27 @@ ${JSON.stringify(webhookBody, null, 4)}` `page[offset]`, String(pageOffset * pageSize) ) - return getNext(newUrl.toString(), currentLanguage) + return getNext( + newUrl.toString(), + currentLanguage, + filterByLanguages, + renamedEnabledLanguages + ) }) ) } } else if (d.body.links?.next) { - await getNext(d.body.links.next, currentLanguage) + await getNext( + d.body.links.next, + currentLanguage, + filterByLanguages, + renamedEnabledLanguages + ) } } if (isTranslatable === false) { - await getNext(url, ``) + await getNext(url, ``, false, ``) } else { for (let i = 0; i < languageConfig.enabledLanguages.length; i++) { let currentLanguage = languageConfig.enabledLanguages[i] @@ -651,7 +683,16 @@ ${JSON.stringify(webhookBody, null, 4)}` urlPath ) - await getNext(joinedUrl, currentLanguage) + const renamedEnabledLanguages = + getOptions().languageConfig.renamedEnabledLanguages + const filterByLanguages = + getOptions().languageConfig.filterByLanguages + await getNext( + joinedUrl, + currentLanguage, + filterByLanguages, + renamedEnabledLanguages + ) } } @@ -888,6 +929,7 @@ exports.pluginOptionsSchema = ({ Joi }) => }) ) .required(), + filterByLanguages: Joi.boolean().default(false), translatableEntities: Joi.array().items(Joi.string()).required(), nonTranslatableEntities: Joi.array().items(Joi.string()).required(), }), diff --git a/packages/gatsby-source-drupal/src/plugin-options.ts b/packages/gatsby-source-drupal/src/plugin-options.ts index e03aa1d1c7b4e..3359f576d3e5e 100644 --- a/packages/gatsby-source-drupal/src/plugin-options.ts +++ b/packages/gatsby-source-drupal/src/plugin-options.ts @@ -12,6 +12,7 @@ type Options = { languageConfig?: { enabledLanguages?: Array renamedEnabledLanguages?: Array + filterByLanguages?: boolean defaultLanguage?: string translatableEntities?: Array nonTranslatableEntities?: Array