From e5b7867e8c4382b8cf6a1d9d0d57475316b8757f Mon Sep 17 00:00:00 2001 From: Qiyun Dai Date: Mon, 21 Oct 2024 04:18:58 -0500 Subject: [PATCH] [MWPW-152549] BYO SUSI Options to pass in adobeIMS.signIn() (#2850) * Adding the ability to pass dctx_id to global-navigation block * fix test error * susi options * quit getSusiOptions if no options passed * refactor * fallback on no envName val * try catch * unit tests added * test client side declaration * more clean up * Adding fallback value * const signInOptions * Update utils.js * revert changes for OST * Update ost.js * adding it to jarvis chat too * updated unit test * Update global-navigation.test.js * Update global-navigation.test.js * Update global-navigation.test.js --- .../global-navigation/global-navigation.js | 15 +- libs/blocks/gnav/gnav.js | 3 +- libs/features/jarvis-chat.js | 2 +- libs/utils/utils.js | 4 +- .../global-navigation.test.js | 18 ++ .../global-navigation-no-dropdown.plain.js | 277 ++++++++++++++++++ tools/send-to-caas/bulk-publish-to-caas.js | 3 +- tools/send-to-caas/send-to-caas.js | 9 +- 8 files changed, 318 insertions(+), 13 deletions(-) create mode 100644 test/blocks/global-navigation/mocks/global-navigation-no-dropdown.plain.js diff --git a/libs/blocks/global-navigation/global-navigation.js b/libs/blocks/global-navigation/global-navigation.js index bc76e60afb..c3c3f92f50 100644 --- a/libs/blocks/global-navigation/global-navigation.js +++ b/libs/blocks/global-navigation/global-navigation.js @@ -42,6 +42,8 @@ import { import { replaceKey, replaceKeyArray } from '../../features/placeholders.js'; +const SIGNIN_CONTEXT = getConfig()?.signInContext; + function getHelpChildren() { const { unav } = getConfig(); return unav?.unavHelpChildren || [ @@ -94,8 +96,8 @@ export const CONFIG = { }, }, callbacks: { - onSignIn: () => { window.adobeIMS?.signIn(); }, - onSignUp: () => { window.adobeIMS?.signIn(); }, + onSignIn: () => { window.adobeIMS?.signIn(SIGNIN_CONTEXT); }, + onSignUp: () => { window.adobeIMS?.signIn(SIGNIN_CONTEXT); }, }, }, }, @@ -147,13 +149,12 @@ export const LANGMAP = { }; // signIn, decorateSignIn and decorateProfileTrigger can be removed if IMS takes over the profile -const signIn = () => { +const signIn = (options = {}) => { if (typeof window.adobeIMS?.signIn !== 'function') { lanaLog({ message: 'IMS signIn method not available', tags: 'errorType=warn,module=gnav' }); return; } - - window.adobeIMS.signIn(); + window.adobeIMS.signIn(options); }; const decorateSignIn = async ({ rawElem, decoratedElem }) => { @@ -166,7 +167,7 @@ const decorateSignIn = async ({ rawElem, decoratedElem }) => { signInElem.addEventListener('click', (e) => { e.preventDefault(); - signIn(); + signIn(SIGNIN_CONTEXT); }); } else { signInElem = toFragment``; @@ -183,7 +184,7 @@ const decorateSignIn = async ({ rawElem, decoratedElem }) => { dropdownSignInAnchor.replaceWith(dropdownSignInButton); dropdownSignInButton.addEventListener('click', (e) => { e.preventDefault(); - signIn(); + signIn(SIGNIN_CONTEXT); }); } else { lanaLog({ message: 'Sign in link not found in dropdown.', tags: 'errorType=warn,module=gnav' }); diff --git a/libs/blocks/gnav/gnav.js b/libs/blocks/gnav/gnav.js index 9822d83f69..00e15144ab 100644 --- a/libs/blocks/gnav/gnav.js +++ b/libs/blocks/gnav/gnav.js @@ -510,7 +510,8 @@ class Gnav { } signInEl.addEventListener('click', (e) => { e.preventDefault(); - window.adobeIMS.signIn(); + const { signInContext } = getConfig(); + window.adobeIMS.signIn(signInContext); }); profileEl.append(signIn); }; diff --git a/libs/features/jarvis-chat.js b/libs/features/jarvis-chat.js index 03e516ba21..45edf16eee 100644 --- a/libs/features/jarvis-chat.js +++ b/libs/features/jarvis-chat.js @@ -246,7 +246,7 @@ const startInitialization = async (config, event, onDemand) => { initErrorCallback: () => {}, chatStateCallback: () => {}, getContextCallback: () => {}, - signInProvider: window.adobeIMS?.signIn, + signInProvider: () => window.adobeIMS?.signIn(config.signInContext), analyticsCallback: (eventData) => { if (!window.alloy_all || !window.digitalData) return; const data = eventData?.events?.[0]?.data; diff --git a/libs/utils/utils.js b/libs/utils/utils.js index 11e4548bd5..6376ecbdda 100644 --- a/libs/utils/utils.js +++ b/libs/utils/utils.js @@ -229,6 +229,7 @@ export const [setConfig, updateConfig, getConfig] = (() => { config.base = config.miloLibs || config.codeRoot; config.locale = pathname ? getLocale(conf.locales, pathname) : getLocale(conf.locales); config.autoBlocks = conf.autoBlocks ? [...AUTO_BLOCKS, ...conf.autoBlocks] : AUTO_BLOCKS; + config.signInContext = conf.signInContext || {}; config.doNotInline = conf.doNotInline ? [...DO_NOT_INLINE, ...conf.doNotInline] : DO_NOT_INLINE; @@ -691,7 +692,8 @@ export function decorateLinks(el) { a.href = a.href.replace(loginEvent, ''); a.addEventListener('click', (e) => { e.preventDefault(); - window.adobeIMS?.signIn(); + const { signInContext } = config; + window.adobeIMS?.signIn(signInContext); }); } const copyEvent = '#_evt-copy'; diff --git a/test/blocks/global-navigation/global-navigation.test.js b/test/blocks/global-navigation/global-navigation.test.js index d28284a70f..6369824680 100644 --- a/test/blocks/global-navigation/global-navigation.test.js +++ b/test/blocks/global-navigation/global-navigation.test.js @@ -20,6 +20,7 @@ import longNav from './mocks/global-navigation-long.plain.js'; import darkNav from './mocks/dark-global-navigation.plain.js'; import navigationWithCustomLinks from './mocks/navigation-with-custom-links.plain.js'; import globalNavigationMock from './mocks/global-navigation.plain.js'; +import noDropdownNav from './mocks/global-navigation-no-dropdown.plain.js'; import { getConfig } from '../../../tools/send-to-caas/send-utils.js'; // TODO @@ -73,6 +74,23 @@ describe('global navigation', () => { expect(window.lana.log.getCalls().find((c) => c.args[0].includes('Sign in link not found in dropdown.'))).to.exist; }); + it('should render backup signInElem if no dropdown div is found', async () => { + const ogIms = window.adobeIMS; + const gnav = await createFullGlobalNavigation({ + signedIn: false, + globalNavigation: noDropdownNav, + }); + const signInElem = document.querySelector(selectors.imsSignIn); + expect(isElementVisible(signInElem)).to.equal(true); + + let signInClicked = false; + window.adobeIMS = { signIn: () => { signInClicked = true; }, isSignedInUser: () => false }; + await gnav.imsReady(); + signInElem.click(); + expect(signInClicked).to.be.true; + window.adobeIMS = ogIms; + }); + it("should log when there's issues within onReady", async () => { const ogIms = window.adobeIMS; const gnav = await createFullGlobalNavigation({}); diff --git a/test/blocks/global-navigation/mocks/global-navigation-no-dropdown.plain.js b/test/blocks/global-navigation/mocks/global-navigation-no-dropdown.plain.js new file mode 100644 index 0000000000..1f1404ed4b --- /dev/null +++ b/test/blocks/global-navigation/mocks/global-navigation-no-dropdown.plain.js @@ -0,0 +1,277 @@ +// Uses the franklin structure without any customizations +export default `
+ +
+
+
+
+
+

+ Cloud Menu +

+
+
+
+
+
+
+
+
+

+ FEDS Menu +

+
+
+
+
+
+

w/ Promo

+ +
+
+
+

Business Resilience: Leading Through Change

+

+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas + porttitor congue massa. +

+

Check it out

+
+
+
+
+ + + + + + +
+
+
+
+
+

2 Col

+
Column 1 heading
+ + +
Column 2 heading
+ +

+ Events +

+
+
+

1 col

+ +
+
+

+ Primary +

+
+
+

+ Secondary +

+
+
+

Random text

+
+
+

No Dropdown

+
+
+ +
+
+
+
Free trial
+
Free trial
+
+
+
Your go-to for Instagram-gorgeous graphics.
+
Your go-to for Instagram-gorgeous graphics.
+
+
+
+

Everyone can.

+

Photoshop.

+
+
Everyone can.
Photoshop.
+
+
+
Buy now
+
Buy now
+
+
+
How do I compress a PDF without losing quality?
+
How do I compress a PDF without losing quality?
+
+
+
What size PDFs can I compress?
+
What size PDFs can I compress?
+
+
+
How do I check my PDF file size?
+
How do I check my PDF file size?
+
+
`; diff --git a/tools/send-to-caas/bulk-publish-to-caas.js b/tools/send-to-caas/bulk-publish-to-caas.js index ab00fdd894..346ac4b8f8 100644 --- a/tools/send-to-caas/bulk-publish-to-caas.js +++ b/tools/send-to-caas/bulk-publish-to-caas.js @@ -51,7 +51,8 @@ const checkIms = async () => { 'You must be logged in with an Adobe ID in order to publish to CaaS.\nDo you want to log in?', ); if (shouldLogIn) { - window.adobeIMS.signIn(); + const { signInContext } = getConfig(); + window.adobeIMS.signIn(signInContext); } return false; } diff --git a/tools/send-to-caas/send-to-caas.js b/tools/send-to-caas/send-to-caas.js index 1f94eab8f9..016fd7a1b8 100644 --- a/tools/send-to-caas/send-to-caas.js +++ b/tools/send-to-caas/send-to-caas.js @@ -10,6 +10,7 @@ import { loadCaasTags, postDataToCaaS, setConfig, + getConfig, } from './send-utils.js'; const [setPublishingTrue, setPublishingFalse, isPublishing] = (() => { @@ -297,7 +298,8 @@ const checkIms = async (publishingModal, loadScript) => { 'You must be logged in with an Adobe ID in order to publish to CaaS.\nDo you want to log in?', ); if (shouldLogIn) { - window.adobeIMS.signIn(); + const { signInContext } = getConfig(); + window.adobeIMS.signIn(signInContext); } setPublishingFalse(); return false; @@ -324,7 +326,10 @@ const postToCaaS = async ({ accessToken, caasEnv, caasProps, draftOnly, publishi ctaText: 'Login', }); setPublishingFalse(); - if (shouldLogIn) window.adobeIMS.signIn(); + if (shouldLogIn) { + const { signInContext } = getConfig(); + window.adobeIMS.signIn(signInContext); + } } else { showAlert( response.message || response.error || JSON.stringify(response),