diff --git a/.changeset/orange-beans-drop.md b/.changeset/orange-beans-drop.md new file mode 100644 index 000000000..bac38c125 --- /dev/null +++ b/.changeset/orange-beans-drop.md @@ -0,0 +1,5 @@ +--- +"nextjs-website": minor +--- + +Update url mapping for documentation diff --git a/apps/nextjs-website/src/_contents/products.ts b/apps/nextjs-website/src/_contents/products.ts index 398dcbb44..8af34d91c 100644 --- a/apps/nextjs-website/src/_contents/products.ts +++ b/apps/nextjs-website/src/_contents/products.ts @@ -97,7 +97,7 @@ export const spaceToPrefixMap = pipe( /** * Contains the mapping between the docs.pagopa.it url and the developer portal url. */ -export const urlReplacesMap: { readonly [url: string]: string } = { +export const staticUrlReplaceMap: { readonly [url: string]: string } = { // App IO 'https://docs.pagopa.it/io-guida-tecnica-1.3/': '/app-io/guides/io-guida-tecnica/v1.3', diff --git a/apps/nextjs-website/src/app/[productSlug]/guides/[...productGuidePage]/page.tsx b/apps/nextjs-website/src/app/[productSlug]/guides/[...productGuidePage]/page.tsx index fed4e565c..e8d8e3b9d 100644 --- a/apps/nextjs-website/src/app/[productSlug]/guides/[...productGuidePage]/page.tsx +++ b/apps/nextjs-website/src/app/[productSlug]/guides/[...productGuidePage]/page.tsx @@ -4,11 +4,7 @@ import ProductLayout, { import { getGuide, getProductGuidePath } from '@/lib/api'; import { Product } from '@/lib/types/product'; import React from 'react'; -import { - gitBookPagesWithTitle, - spaceToPrefixMap, - urlReplacesMap, -} from '@/_contents/products'; +import { gitBookPagesWithTitle, spaceToPrefixMap } from '@/_contents/products'; import { ParseContentConfig } from 'gitbook-docs/parseContent'; import { Metadata } from 'next'; import { @@ -17,7 +13,7 @@ import { } from '@/helpers/metadata.helpers'; import GitBookTemplate from '@/components/templates/GitBookTemplate/GitBookTemplate'; import { productPageToBreadcrumbs } from '@/helpers/breadcrumbs.helpers'; -import { getGuidesProps } from '@/lib/cmsApi'; +import { getGuidesProps, getUrlReplaceMapProps } from '@/lib/cmsApi'; import { generateStructuredDataScripts } from '@/helpers/generateStructuredDataScripts.helpers'; import { breadcrumbItemByProduct, @@ -81,7 +77,7 @@ const Page = async ({ params }: { params: Params }) => { params?.productSlug, params?.productGuidePage ?? [''] ); - + const urlReplaceMap = await getUrlReplaceMapProps(); const { product, page, guide, version, versions, source, bannerLinks, seo } = guideProps; const props: ProductGuidePageProps = { @@ -98,7 +94,7 @@ const Page = async ({ params }: { params: Params }) => { assetsPrefix: source.assetsPrefix, gitBookPagesWithTitle, spaceToPrefix: spaceToPrefixMap, - urlReplaces: urlReplacesMap, + urlReplaces: urlReplaceMap, }, }; diff --git a/apps/nextjs-website/src/app/[productSlug]/tutorials/[...productTutorialPage]/page.tsx b/apps/nextjs-website/src/app/[productSlug]/tutorials/[...productTutorialPage]/page.tsx index 5645e925e..72d47f22c 100644 --- a/apps/nextjs-website/src/app/[productSlug]/tutorials/[...productTutorialPage]/page.tsx +++ b/apps/nextjs-website/src/app/[productSlug]/tutorials/[...productTutorialPage]/page.tsx @@ -9,11 +9,7 @@ import { import { Product } from '@/lib/types/product'; import GitBookContent from '@/components/organisms/GitBookContent/GitBookContent'; import { Box } from '@mui/material'; -import { - gitBookPagesWithTitle, - spaceToPrefixMap, - urlReplacesMap, -} from '@/_contents/products'; +import { gitBookPagesWithTitle, spaceToPrefixMap } from '@/_contents/products'; import { ParseContentConfig } from 'gitbook-docs/parseContent'; import { Metadata } from 'next'; import { @@ -34,6 +30,7 @@ import { breadcrumbItemByProduct, productToBreadcrumb, } from '@/helpers/structuredData.helpers'; +import { getUrlReplaceMapProps } from '@/lib/cmsApi'; type Params = { productSlug: string; @@ -124,6 +121,7 @@ const Page = async ({ params }: { params: Params }) => { ); } + const urlReplaceMap = await getUrlReplaceMapProps(); const tutorialProps = await getStaticTutorial(productSlug, [tutorialPath]); const { product, page, bannerLinks, source, relatedLinks } = tutorialProps; const props: ProductTutorialPageProps = { @@ -137,7 +135,7 @@ const Page = async ({ params }: { params: Params }) => { assetsPrefix: source.assetsPrefix, gitBookPagesWithTitle, spaceToPrefix: spaceToPrefixMap, - urlReplaces: urlReplacesMap, + urlReplaces: urlReplaceMap, }, }; diff --git a/apps/nextjs-website/src/app/solutions/[solutionSlug]/[...solutionSubPathSlugs]/page.tsx b/apps/nextjs-website/src/app/solutions/[solutionSlug]/[...solutionSubPathSlugs]/page.tsx index 213f3b3cc..b833b9a97 100644 --- a/apps/nextjs-website/src/app/solutions/[solutionSlug]/[...solutionSubPathSlugs]/page.tsx +++ b/apps/nextjs-website/src/app/solutions/[solutionSlug]/[...solutionSubPathSlugs]/page.tsx @@ -1,16 +1,12 @@ import React from 'react'; -import { - gitBookPagesWithTitle, - spaceToPrefixMap, - urlReplacesMap, -} from '@/_contents/products'; +import { gitBookPagesWithTitle, spaceToPrefixMap } from '@/_contents/products'; import { Metadata } from 'next'; import { makeMetadata } from '@/helpers/metadata.helpers'; import { getSolutionDetail, getSolutionSubPaths } from '@/lib/api'; import GitBookTemplate from '@/components/templates/GitBookTemplate/GitBookTemplate'; import { pageToBreadcrumbs } from '@/helpers/breadcrumbs.helpers'; import { ParseContentConfig } from 'gitbook-docs/parseContent'; -import { getSolutionsProps } from '@/lib/cmsApi'; +import { getSolutionsProps, getUrlReplaceMapProps } from '@/lib/cmsApi'; import { SolutionTemplateProps } from '@/components/templates/SolutionTemplate/SolutionTemplate'; import { generateStructuredDataScripts } from '@/helpers/generateStructuredDataScripts.helpers'; import { getItemFromPaths } from '@/helpers/structuredData.helpers'; @@ -64,6 +60,7 @@ const Page = async ({ params }: { params: Params }) => { params?.solutionSubPathSlugs ); + const urlReplaceMap = await getUrlReplaceMapProps(); if (!solutionProps) { return null; } @@ -79,7 +76,7 @@ const Page = async ({ params }: { params: Params }) => { assetsPrefix: source.assetsPrefix, gitBookPagesWithTitle, spaceToPrefix: spaceToPrefixMap, - urlReplaces: urlReplacesMap, + urlReplaces: urlReplaceMap, }, }; diff --git a/apps/nextjs-website/src/lib/cmsApi.ts b/apps/nextjs-website/src/lib/cmsApi.ts index 95173d981..71201bffb 100644 --- a/apps/nextjs-website/src/lib/cmsApi.ts +++ b/apps/nextjs-website/src/lib/cmsApi.ts @@ -24,6 +24,7 @@ import { overviews, products, quickStartGuides, + staticUrlReplaceMap, tutorialLists, } from '@/_contents/products'; import { makeCaseHistoriesProps } from './strapi/makeProps/makeCaseHistories'; @@ -47,6 +48,9 @@ import { fetchOverviews } from '@/lib/strapi/fetches/fetchOverviews'; import { makeOverviewsProps } from '@/lib/strapi/makeProps/makeOverviews'; import { fetchTutorialListPages } from './strapi/fetches/fetchTutorialListPages'; import { makeTutorialListPagesProps } from './strapi/makeProps/makeTutorialListPages'; +import { fetchUrlReplaceMap } from './strapi/fetches/fetchUrlReplaceMap'; +import build from 'next/dist/build'; +import { makeUrlReplaceMap } from './strapi/makeProps/makeUrlReplaceMap'; // a BuildEnv instance ready to be used const buildEnv = pipe( @@ -136,6 +140,18 @@ export const getQuickStartGuidesProps = async () => { } }; +export const getUrlReplaceMapProps = async () => { + const { + config: { FETCH_FROM_STRAPI: fetchFromStrapi }, + } = buildEnv; + + if (fetchFromStrapi) { + const urlReplaceMap = await fetchUrlReplaceMap(buildEnv); + return { ...staticUrlReplaceMap, ...makeUrlReplaceMap(urlReplaceMap) }; + } + return staticUrlReplaceMap; +}; + export const getApiDataListPagesProps = async () => { const { config: { FETCH_FROM_STRAPI: fetchFromStrapi }, diff --git a/apps/nextjs-website/src/lib/strapi/__tests__/urlReplaceMap.test.ts b/apps/nextjs-website/src/lib/strapi/__tests__/urlReplaceMap.test.ts index 14436aaa4..218ef4e89 100644 --- a/apps/nextjs-website/src/lib/strapi/__tests__/urlReplaceMap.test.ts +++ b/apps/nextjs-website/src/lib/strapi/__tests__/urlReplaceMap.test.ts @@ -1,8 +1,8 @@ -import { UrlReplaceMapCodec } from '../codecs/UrlReplaceMapCodec'; import * as Either from 'fp-ts/lib/Either'; +import { pipe } from 'fp-ts/lib/function'; +import { UrlReplaceMapCodec } from '../codecs/UrlReplaceMapCodec'; import { productJson } from './fixtures/product'; import { makeUrlReplaceMap } from '../makeProps/makeUrlReplaceMap'; -import { pipe } from 'fp-ts/lib/function'; import { mediaRasterJson } from './fixtures/media'; const strapiResponse = { @@ -73,7 +73,7 @@ describe('UrlReplaceMapCodec', () => { const urlReplaceMap = makeUrlReplaceMap(result!); expect(urlReplaceMap).toEqual({ - aaaa: 'firma-con-io/guides/aaaa/2', + aaaa: '/firma-con-io/guides/aaaa/2', }); }); }); diff --git a/apps/nextjs-website/src/lib/strapi/fetches/fetchUrlReplaceMap.ts b/apps/nextjs-website/src/lib/strapi/fetches/fetchUrlReplaceMap.ts index 5d163c2fc..1db7b7298 100644 --- a/apps/nextjs-website/src/lib/strapi/fetches/fetchUrlReplaceMap.ts +++ b/apps/nextjs-website/src/lib/strapi/fetches/fetchUrlReplaceMap.ts @@ -4,17 +4,25 @@ import qs from 'qs'; const makeStrapiUrlReplaceMapPopulate = () => qs.stringify({ - populate: [ - 'urlToGuide.guide.*', - 'urlToGuide.guide.image', - 'urlToGuide.guide.mobileImage', - 'urlToGuide.guide.listItems', - 'urlToGuide.guide.product.*', - 'urlToGuide.guide.versions.*', - 'urlToGuide.guide.seo.*', - 'urlToGuide.guide.product.bannerLinks.*', - 'urlToGuide.guide.product.bannerLinks.icon', - ], + populate: { + urlToGuide: { + populate: { + guide: { + populate: [ + 'image', + 'mobileImage', + 'listItems', + 'versions', + 'bannerLinks.icon', + 'seo', + 'seo.metaSocial.image', + 'product.logo', + 'product.bannerLinks.icon', + ], + }, + }, + }, + }, }); export const fetchUrlReplaceMap = fetchFromStrapi( diff --git a/apps/nextjs-website/src/lib/strapi/makeProps/makeUrlReplaceMap.ts b/apps/nextjs-website/src/lib/strapi/makeProps/makeUrlReplaceMap.ts index 764aa09a0..fdeb5bdce 100644 --- a/apps/nextjs-website/src/lib/strapi/makeProps/makeUrlReplaceMap.ts +++ b/apps/nextjs-website/src/lib/strapi/makeProps/makeUrlReplaceMap.ts @@ -5,15 +5,14 @@ export type UrlReplaceMap = Record; export function makeUrlReplaceMap( urlReplacemap: StrapiUrlReplaceMap ): UrlReplaceMap { - const map = urlReplacemap.data.attributes.urlToGuide.reduce((map, obj) => { + return urlReplacemap.data.attributes.urlToGuide.reduce((map, obj) => { return { ...map, - [obj.url]: `${ + [obj.url]: `/${ obj.guide.data?.attributes.product.data.attributes.slug }/guides/${obj.guide.data?.attributes.slug}${ obj.version ? `/${obj.version}` : '' }`, }; }, {} as UrlReplaceMap); - return map; }