Skip to content

Commit

Permalink
Merge branch 'stage' into mepactionarea
Browse files Browse the repository at this point in the history
  • Loading branch information
vgoodric authored Sep 5, 2024
2 parents 0db0bea + 264c998 commit ff27f4b
Show file tree
Hide file tree
Showing 8 changed files with 66 additions and 3 deletions.
7 changes: 5 additions & 2 deletions libs/blocks/merch/merch.js
Original file line number Diff line number Diff line change
Expand Up @@ -364,14 +364,16 @@ async function openExternalModal(url, getModal) {
});
}

const isInternalModal = (url) => /\/fragments\//.test(url);

export async function openModal(e, url, offerType) {
e.preventDefault();
e.stopImmediatePropagation();
const { getModal } = await import('../modal/modal.js');
await import('../modal/modal.merch.js');
const offerTypeClass = offerType === OFFER_TYPE_TRIAL ? 'twp' : 'crm';
let modal;
if (/\/fragments\//.test(url)) {
if (isInternalModal(url)) {
const fragmentPath = url.split(/hlx.(page|live)/).pop();
modal = await openFragmentModal(fragmentPath, getModal);
} else {
Expand All @@ -398,7 +400,8 @@ export async function getModalAction(offers, options) {
const columnName = (offerType === OFFER_TYPE_TRIAL) ? FREE_TRIAL_PATH : BUY_NOW_PATH;
let url = checkoutLinkConfig[columnName];
if (!url) return undefined;
url = localizeLink(checkoutLinkConfig[columnName]);
url = isInternalModal(url)
? localizeLink(checkoutLinkConfig[columnName]) : checkoutLinkConfig[columnName];
return { url, handler: (e) => openModal(e, url, offerType) };
}

Expand Down
13 changes: 13 additions & 0 deletions libs/features/dynamic-navigation.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,19 @@
import { getMetadata } from '../utils/utils.js';

function isDynamicNavDisabled() {
const dynamicNavDisableValues = getMetadata('dynamic-nav-disable');
if (!dynamicNavDisableValues) return false;

const metadataPairsMap = dynamicNavDisableValues.split(',').map((pair) => pair.split(';'));
return metadataPairsMap.some(([metadataKey, metadataContent]) => {
const metaTagContent = getMetadata(metadataKey.toLowerCase());
return (metaTagContent
&& metaTagContent.toLowerCase() === metadataContent.toLowerCase());
});
}

export default function dynamicNav(url, key) {
if (isDynamicNavDisabled()) return url;
const metadataContent = getMetadata('dynamic-nav');

if (metadataContent === 'entry') {
Expand Down
32 changes: 31 additions & 1 deletion test/features/dynamic-nav/dynamicNav.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,40 @@ describe('Dynamic nav', () => {
expect(url).to.equal('some-source-string');
});

it('Returns the pprovided url if it does not find an item in sessionStorage and dynamic nav is on', async () => {
it('Returns the provided url if it does not find an item in sessionStorage and dynamic nav is on', async () => {
document.head.innerHTML = await readFile({ path: './mocks/on.html' });
window.sessionStorage.removeItem('gnavSource');
const url = dynamicNav('gnav/aem-sites', 'bacom');
expect(url).to.equal('gnav/aem-sites');
});

it('Returns the provided url if it finds a metadata that matches items in the ignore list', async () => {
document.head.innerHTML = await readFile({ path: './mocks/on-ignore-match.html' });
const url = dynamicNav('gnav/aem-sites', 'bacom');
expect(url).to.equal('gnav/aem-sites');
});

it('Returns the provided url when ignore items match some metadata but not all', async () => {
document.head.innerHTML = await readFile({ path: './mocks/on-ignore-some-matches.html' });
const url = dynamicNav('gnav/aem-sites', 'bacom');
expect(url).to.equal('gnav/aem-sites');
});

it('Returns the sessionStorage url when dynamic nav ignore items are present but do not match the metadata', async () => {
document.head.innerHTML = await readFile({ path: './mocks/on-ignore-does-not-match.html' });
const url = dynamicNav('gnav/aem-sites', 'bacom');
expect(url).to.equal('some-source-string');
});

it('Returns the sessionStorage url when dynamic nav ignore metadata is not found', async () => {
document.head.innerHTML = await readFile({ path: './mocks/on-ignore-misspelled.html' });
const url = dynamicNav('gnav/aem-sites', 'bacom');
expect(url).to.equal('some-source-string');
});

it('Returns the sessionStorage url when dynamic nav ignore metadata content is empty', async () => {
document.head.innerHTML = await readFile({ path: './mocks/on-ignore-no-content.html' });
const url = dynamicNav('gnav/aem-sites', 'bacom');
expect(url).to.equal('some-source-string');
});
});
3 changes: 3 additions & 0 deletions test/features/dynamic-nav/mocks/on-ignore-does-not-match.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<meta name="dynamic-nav" content="on">
<meta name="primaryproductname" content="Commerce Cloud">
<meta name="dynamic-nav-disable" content="primaryProductName;DX Solutions, caas:content-type;summary">
3 changes: 3 additions & 0 deletions test/features/dynamic-nav/mocks/on-ignore-match.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<meta name="dynamic-nav" content="on">
<meta name="primaryproductname" content="Dx Solutions">
<meta name="dynamic-nav-disable" content="primaryProductName;DX Solutions, caas:content-type;summary">
3 changes: 3 additions & 0 deletions test/features/dynamic-nav/mocks/on-ignore-misspelled.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<meta name="dynamic-nav" content="on">
<meta name="primaryproductname" content="Dx Solutions">
<meta name="dynamic-nav-dise" content="primaryProductName;DX Solutions, caas:content-type;summary">
3 changes: 3 additions & 0 deletions test/features/dynamic-nav/mocks/on-ignore-no-content.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<meta name="dynamic-nav" content="on">
<meta name="primaryproductname" content="Dx Solutions">
<meta name="dynamic-nav-disable" content="">
5 changes: 5 additions & 0 deletions test/features/dynamic-nav/mocks/on-ignore-some-matches.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<meta name="dynamic-nav" content="on">
<meta name="primaryproductname" content="Dx Solutions">
<meta name="dynamic-nav-disable" content="primaryProductName;DX Solutions, caas:content-type;summary">
<meta name="caas:content" content="presentation">
<meta name="test" content="stub">

0 comments on commit ff27f4b

Please sign in to comment.