From 3ddd92000fa30d33d0e54dbdb56ed8e53b2fab77 Mon Sep 17 00:00:00 2001 From: Gabriele Antonini <106664971+gabriele-ct@users.noreply.github.com> Date: Wed, 12 Jun 2024 12:15:56 +0200 Subject: [PATCH] feat: create utils for generating release notes urls with right filters (#1998) * feat: calculate the release notes url based on product and productArea * chore: release notes links to point to the new search page --- .changeset/cold-owls-grab.md | 5 ++ packages/gatsby-theme-docs/index.js | 1 + .../src/layouts/internals/sidebar.js | 5 +- .../src/utils/release-notes.js | 51 +++++++++++++++++ .../src/utils/release-notes.spec.js | 55 +++++++++++++++++++ 5 files changed, 116 insertions(+), 1 deletion(-) create mode 100644 .changeset/cold-owls-grab.md create mode 100644 packages/gatsby-theme-docs/src/utils/release-notes.js create mode 100644 packages/gatsby-theme-docs/src/utils/release-notes.spec.js diff --git a/.changeset/cold-owls-grab.md b/.changeset/cold-owls-grab.md new file mode 100644 index 0000000000..15bef1fa77 --- /dev/null +++ b/.changeset/cold-owls-grab.md @@ -0,0 +1,5 @@ +--- +'@commercetools-docs/gatsby-theme-docs': patch +--- + +Add util function to calculate the url for release notes page with pre initialized fields diff --git a/packages/gatsby-theme-docs/index.js b/packages/gatsby-theme-docs/index.js index 0cf54d49fe..609caaa5dd 100644 --- a/packages/gatsby-theme-docs/index.js +++ b/packages/gatsby-theme-docs/index.js @@ -40,3 +40,4 @@ export { } from './src/modules/self-learning/components/if-user-logged'; export { default as LoginButton } from './src/modules/sso/components/login-button'; export * from './src/modules/ai-assistant'; +export * from './src/utils/release-notes'; diff --git a/packages/gatsby-theme-docs/src/layouts/internals/sidebar.js b/packages/gatsby-theme-docs/src/layouts/internals/sidebar.js index 2c80197345..d09352275f 100644 --- a/packages/gatsby-theme-docs/src/layouts/internals/sidebar.js +++ b/packages/gatsby-theme-docs/src/layouts/internals/sidebar.js @@ -32,6 +32,7 @@ import { isRightChapterRecursive, } from './sidebar.utils'; import { useSiteData } from '../../hooks/use-site-data'; +import { getReleaseNotesQueryStringBySiteTitle } from '../../utils/release-notes'; const ReleaseNotesIcon = createStyledIcon(Icons.ReleaseNotesSvgIcon); @@ -534,7 +535,9 @@ const Sidebar = (props) => { {shouldRenderLinkToReleaseNotes && ( { + let searchState = { + range: { + dateTimestamp: `${MIN_DATERANGE}:${MAX_DATERANGE}`, + }, + }; + if (product) { + searchState.refinementList = { + ...searchState.refinementList, + product: [product], + }; + } + if (productArea) { + searchState.refinementList = { + ...searchState.refinementList, + product: [productArea], + }; + } + return searchState.refinementList + ? `?searchState=${encodeURIComponent(JSON.stringify(searchState))}` + : ''; +}; + +export const getReleaseNotesQueryStringBySiteTitle = (siteTitle) => { + const productArea = mapSiteTitleToFacetFilter.get(siteTitle); + if (productArea) { + return buildReleaseNotesQueryString( + productArea.product, + productArea.productArea + ); + } + return ''; +}; diff --git a/packages/gatsby-theme-docs/src/utils/release-notes.spec.js b/packages/gatsby-theme-docs/src/utils/release-notes.spec.js new file mode 100644 index 0000000000..545bae205b --- /dev/null +++ b/packages/gatsby-theme-docs/src/utils/release-notes.spec.js @@ -0,0 +1,55 @@ +import { + buildReleaseNotesQueryString, + getReleaseNotesQueryStringBySiteTitle, +} from './release-notes'; + +describe('buildReleaseNotesQueryString', () => { + it('should return a query string with product and productArea', () => { + const product = 'Merchant Center'; + const productArea = 'Frontend Development'; + + const queryString = buildReleaseNotesQueryString(product, productArea); + + expect(queryString).toBe( + '?searchState=%7B%22range%22%3A%7B%22dateTimestamp%22%3A%220%3A2537011284%22%7D%2C%22refinementList%22%3A%7B%22product%22%3A%5B%22Frontend%20Development%22%5D%7D%7D' + ); + }); + + it('should return a query string with only product', () => { + const product = 'Checkout'; + + const queryString = buildReleaseNotesQueryString(product); + + expect(queryString).toBe( + '?searchState=%7B%22range%22%3A%7B%22dateTimestamp%22%3A%220%3A2537011284%22%7D%2C%22refinementList%22%3A%7B%22product%22%3A%5B%22Checkout%22%5D%7D%7D' + ); + }); + + it('should return an empty query string if no arguments are provided', () => { + const queryString = buildReleaseNotesQueryString(); + + expect(queryString).toBe(''); + }); +}); + +describe('getReleaseNotesQueryStringBySiteTitle', () => { + it('should return a query string with productArea for "Merchant Center"', () => { + const siteTitle = 'Merchant Center'; + const queryString = getReleaseNotesQueryStringBySiteTitle(siteTitle); + expect(queryString).toBe( + '?searchState=%7B%22range%22%3A%7B%22dateTimestamp%22%3A%220%3A2537011284%22%7D%2C%22refinementList%22%3A%7B%22product%22%3A%5B%22Merchant%20Center%22%5D%7D%7D' + ); + }); + + it('should return an empty query string if siteTitle is not found', () => { + const siteTitle = 'Non-existent Title'; + const queryString = getReleaseNotesQueryStringBySiteTitle(siteTitle); + expect(queryString).toBe(''); + }); +}); + +it('should return an empty query string if siteTitle is not found', () => { + const siteTitle = 'Non-existent Title'; + const queryString = getReleaseNotesQueryStringBySiteTitle(siteTitle); + expect(queryString).toBe(''); +});