From c70a965c7ddb6e405dbc1f2abd5bd23d74323a9e Mon Sep 17 00:00:00 2001 From: Luis Alvarez Date: Thu, 29 Oct 2020 19:21:46 -0500 Subject: [PATCH] Improved log and moved out of the page --- lib/usage-warns.ts | 22 ++++++++++++++++++++++ pages/[...pages].tsx | 24 +++++++++++++----------- 2 files changed, 35 insertions(+), 11 deletions(-) create mode 100644 lib/usage-warns.ts diff --git a/lib/usage-warns.ts b/lib/usage-warns.ts new file mode 100644 index 000000000..a81b6dc09 --- /dev/null +++ b/lib/usage-warns.ts @@ -0,0 +1,22 @@ +export function missingLocaleInPages(): [string[], () => void] { + const invalidPaths: string[] = [] + const log = () => { + if (invalidPaths.length) { + const single = invalidPaths.length === 0 + const pages = single ? 'page' : 'pages' + + console.log( + `The ${pages} "${invalidPaths.join(', ')}" ${ + single ? 'does' : 'do' + } not include a locale, when using i18n web pages from BigCommerce +are expected to have a locale or they will be ignored.\n +Please update the ${pages} to include the default locale or make the ${pages} invisible by +unchecking the "Navigation Menu" option in the settings of ${ + single ? 'the' : 'each' + } web page\n` + ) + } + } + + return [invalidPaths, log] +} diff --git a/pages/[...pages].tsx b/pages/[...pages].tsx index 0b535bdfc..ccd59932a 100644 --- a/pages/[...pages].tsx +++ b/pages/[...pages].tsx @@ -8,6 +8,7 @@ import getPage from '@bigcommerce/storefront-data-hooks/api/operations/get-page' import getAllPages from '@bigcommerce/storefront-data-hooks/api/operations/get-all-pages' import getSlug from '@lib/get-slug' import { Layout, HTMLContent } from '@components/core' +import { missingLocaleInPages } from '@lib/usage-warns' export async function getStaticProps({ preview, @@ -38,19 +39,20 @@ export async function getStaticProps({ export async function getStaticPaths({ locales }: GetStaticPathsContext) { const { pages } = await getAllPages() + const [invalidPaths, log] = missingLocaleInPages() + const paths = pages + .map((page) => page.url) + .filter((url) => { + if (!url || !locales) return url + // If there are locales, only include the pages that include one of the available locales + if (locales.includes(getSlug(url).split('/')[0])) return url + + invalidPaths.push(url) + }) + log() return { - paths: pages - .map((page) => page.url) - .filter((url) => { - if (!locales) return url - // If there are locales, only include the pages that include one of the available locales - if (url && locales.includes(getSlug(url).split('/')[0])) return url - - console.log( - `The page '${url}' does not include a locale, when using i18n web pages from BigCommerce are expected to have a locale or they will be ignored` - ) - }), + paths, // Fallback shouldn't be enabled here or otherwise this route // will catch every page, even 404s, and we don't want that fallback: false,