From e1d69e38ac28d1067d50ed55c42f81bd215958b2 Mon Sep 17 00:00:00 2001 From: Artem Alexeyenko Date: Tue, 7 Mar 2023 08:19:56 -0500 Subject: [PATCH 1/6] add support for fallback point of sale --- .../src/components/CdpPageView.tsx | 5 +- packages/sitecore-jss-nextjs/src/index.ts | 2 +- .../src/middleware/personalize-middleware.ts | 5 +- .../sitecore-jss-nextjs/src/utils.test.ts | 62 ++++++++++++++++++- packages/sitecore-jss-nextjs/src/utils.ts | 7 +++ 5 files changed, 73 insertions(+), 8 deletions(-) diff --git a/packages/create-sitecore-jss/src/templates/nextjs-personalize/src/components/CdpPageView.tsx b/packages/create-sitecore-jss/src/templates/nextjs-personalize/src/components/CdpPageView.tsx index 30b66012c6..4dff989828 100644 --- a/packages/create-sitecore-jss/src/templates/nextjs-personalize/src/components/CdpPageView.tsx +++ b/packages/create-sitecore-jss/src/templates/nextjs-personalize/src/components/CdpPageView.tsx @@ -3,6 +3,7 @@ import { LayoutServicePageState, SiteInfo, useSitecoreContext, + resolvePointOfSale, } from '@sitecore-jss/sitecore-jss-nextjs'; import { useEffect } from 'react'; import config from 'temp/config'; @@ -29,9 +30,7 @@ const CdpPageView = (): JSX.Element => { site: SiteInfo, pageVariantId: string ) => { - const pointOfSale = site.pointOfSale - ? site.pointOfSale[language] || site.pointOfSale[site.language] - : ''; + const pointOfSale = resolvePointOfSale(site, language); const engage = await init({ clientKey: process.env.NEXT_PUBLIC_CDP_CLIENT_KEY || '', targetURL: process.env.NEXT_PUBLIC_CDP_TARGET_URL || '', diff --git a/packages/sitecore-jss-nextjs/src/index.ts b/packages/sitecore-jss-nextjs/src/index.ts index 245207956d..264da5a182 100644 --- a/packages/sitecore-jss-nextjs/src/index.ts +++ b/packages/sitecore-jss-nextjs/src/index.ts @@ -117,7 +117,7 @@ export { useComponentProps, } from './components/ComponentPropsContext'; -export { handleEditorFastRefresh, getPublicUrl } from './utils'; +export { handleEditorFastRefresh, getPublicUrl, resolvePointOfSale } from './utils'; export { Link, LinkProps } from './components/Link'; export { RichText, RichTextProps } from './components/RichText'; diff --git a/packages/sitecore-jss-nextjs/src/middleware/personalize-middleware.ts b/packages/sitecore-jss-nextjs/src/middleware/personalize-middleware.ts index 946f96d55c..63494f38f9 100644 --- a/packages/sitecore-jss-nextjs/src/middleware/personalize-middleware.ts +++ b/packages/sitecore-jss-nextjs/src/middleware/personalize-middleware.ts @@ -9,6 +9,7 @@ import { } from '@sitecore-jss/sitecore-jss/personalize'; import { SiteResolver } from '@sitecore-jss/sitecore-jss/site'; import { debug, NativeDataFetcher } from '@sitecore-jss/sitecore-jss'; +import { resolvePointOfSale } from '../utils'; export type PersonalizeMiddlewareConfig = { /** @@ -235,9 +236,7 @@ export class PersonalizeMiddleware { // Execute targeted experience in CDP const { ua } = userAgent(req); const params = this.getExperienceParams(req); - const pointOfSale = site.pointOfSale - ? site.pointOfSale[language] || site.pointOfSale[site.language] - : ''; + const pointOfSale = resolvePointOfSale(site, language); const variantId = await this.cdpService.executeExperience( personalizeInfo.contentId, browserId, diff --git a/packages/sitecore-jss-nextjs/src/utils.test.ts b/packages/sitecore-jss-nextjs/src/utils.test.ts index 51a3e7af4c..ee36c5a26e 100644 --- a/packages/sitecore-jss-nextjs/src/utils.test.ts +++ b/packages/sitecore-jss-nextjs/src/utils.test.ts @@ -1,6 +1,7 @@ /* eslint-disable no-unused-expressions */ import { expect } from 'chai'; -import { getPublicUrl, getJssEditingSecret } from './utils'; +import { SiteInfo } from './middleware'; +import { getPublicUrl, getJssEditingSecret, resolvePointOfSale } from './utils'; describe('utils', () => { describe('getPublicUrl', () => { @@ -55,4 +56,63 @@ describe('utils', () => { expect(result).to.equal(secret); }); }); + + describe('resolvePointOfSale', () => { + it('should return empty when no point of sale present', () => { + const site: SiteInfo = { + name: 'no-pos', + hostName: 'www.nopos.com', + language: 'en', + }; + const language = 'en'; + const result = resolvePointOfSale(site, language); + expect(result).to.equal(''); + }); + + it('should return pos for provided language', () => { + const myPoint = 'apos.com'; + const site: SiteInfo = { + name: 'apos', + hostName: 'www.apos.com', + pointOfSale: { + 'en': myPoint, + }, + language: 'de-DE', + }; + + const result = resolvePointOfSale(site, 'en'); + expect(result).to.equal(myPoint); + }); + + it('should return pos for site language as first backup', () => { + const site: SiteInfo = { + name: 'apos', + hostName: 'www.apos.com', + pointOfSale: { + 'de-DE': 'depos.com', + 'es-ES': 'espos.com', + }, + language: 'de-DE', + }; + + const result = resolvePointOfSale(site, 'en'); + expect(result).to.equal('depos.com'); + }); + + it('should use fallback value when other values missing', () => { + const site: SiteInfo = { + name: 'apos', + hostName: 'www.apos.com', + pointOfSale: { + 'de-DE': 'depos.com', + 'es-ES': 'espos.com', + '*': 'fallpos.com', + }, + language: 'en-CA', + }; + + const result = resolvePointOfSale(site, 'en'); + expect(result).to.equal('fallpos.com'); + }); + }); }); diff --git a/packages/sitecore-jss-nextjs/src/utils.ts b/packages/sitecore-jss-nextjs/src/utils.ts index 16529c3879..3020669cc6 100644 --- a/packages/sitecore-jss-nextjs/src/utils.ts +++ b/packages/sitecore-jss-nextjs/src/utils.ts @@ -1,5 +1,6 @@ import chalk from 'chalk'; import { isEditorActive, resetEditorChromes } from '@sitecore-jss/sitecore-jss/utils'; +import { SiteInfo } from './middleware'; /** * Get the publicUrl. @@ -75,3 +76,9 @@ export const getJssEditingSecret = (): string => { } return secret; }; + +export const resolvePointOfSale = (site: SiteInfo, language: string): string => { + return site.pointOfSale + ? site.pointOfSale[language] || site.pointOfSale[site.language] || site.pointOfSale['*'] + : ''; +}; From c6efa4f05e1f5689da88a256c392cb1f8349b407 Mon Sep 17 00:00:00 2001 From: Artem Alexeyenko Date: Tue, 7 Mar 2023 08:57:26 -0500 Subject: [PATCH 2/6] lint package --- packages/sitecore-jss-nextjs/src/utils.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sitecore-jss-nextjs/src/utils.test.ts b/packages/sitecore-jss-nextjs/src/utils.test.ts index ee36c5a26e..4731aa4bf3 100644 --- a/packages/sitecore-jss-nextjs/src/utils.test.ts +++ b/packages/sitecore-jss-nextjs/src/utils.test.ts @@ -75,7 +75,7 @@ describe('utils', () => { name: 'apos', hostName: 'www.apos.com', pointOfSale: { - 'en': myPoint, + en: myPoint, }, language: 'de-DE', }; From 97f7c12d7a90892a0480355029f14d5622a9b47c Mon Sep 17 00:00:00 2001 From: Artem Alexeyenko Date: Tue, 7 Mar 2023 14:47:25 -0500 Subject: [PATCH 3/6] configurable pos resolver for personalize middleware --- .../src/lib/middleware/plugins/personalize.ts | 2 ++ .../src/middleware/personalize-middleware.ts | 13 +++++++++++-- packages/sitecore-jss-nextjs/src/utils.test.ts | 15 +++++++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/packages/create-sitecore-jss/src/templates/nextjs-personalize/src/lib/middleware/plugins/personalize.ts b/packages/create-sitecore-jss/src/templates/nextjs-personalize/src/lib/middleware/plugins/personalize.ts index b2e80fc226..6cee142d02 100644 --- a/packages/create-sitecore-jss/src/templates/nextjs-personalize/src/lib/middleware/plugins/personalize.ts +++ b/packages/create-sitecore-jss/src/templates/nextjs-personalize/src/lib/middleware/plugins/personalize.ts @@ -50,6 +50,8 @@ class PersonalizePlugin implements MiddlewarePlugin { excludeRoute: () => false, // Site resolver implementation siteResolver, + // you can also pass a custom point of sale resolver into middleware + // resolvePointOfSale: (site, language) => { ... } }); } diff --git a/packages/sitecore-jss-nextjs/src/middleware/personalize-middleware.ts b/packages/sitecore-jss-nextjs/src/middleware/personalize-middleware.ts index 63494f38f9..e596402639 100644 --- a/packages/sitecore-jss-nextjs/src/middleware/personalize-middleware.ts +++ b/packages/sitecore-jss-nextjs/src/middleware/personalize-middleware.ts @@ -7,7 +7,7 @@ import { ExperienceParams, getPersonalizedRewrite, } from '@sitecore-jss/sitecore-jss/personalize'; -import { SiteResolver } from '@sitecore-jss/sitecore-jss/site'; +import { SiteInfo, SiteResolver } from '@sitecore-jss/sitecore-jss/site'; import { debug, NativeDataFetcher } from '@sitecore-jss/sitecore-jss'; import { resolvePointOfSale } from '../utils'; @@ -44,6 +44,13 @@ export type PersonalizeMiddlewareConfig = { * @default localhost */ defaultHostname?: string; + /** + * function to resolve point of sale endpoint for a site + * @param {Siteinfo} site to get info from + * @param {string} language to get info for + * @returns point of sale value for site/language combination + */ + resolvePointOfSale?: (site?: SiteInfo, language?: string) => string; }; /** @@ -236,7 +243,9 @@ export class PersonalizeMiddleware { // Execute targeted experience in CDP const { ua } = userAgent(req); const params = this.getExperienceParams(req); - const pointOfSale = resolvePointOfSale(site, language); + const pointOfSale = this.config.resolvePointOfSale + ? this.config.resolvePointOfSale(site, language) + : resolvePointOfSale(site, language); const variantId = await this.cdpService.executeExperience( personalizeInfo.contentId, browserId, diff --git a/packages/sitecore-jss-nextjs/src/utils.test.ts b/packages/sitecore-jss-nextjs/src/utils.test.ts index 4731aa4bf3..b30160c887 100644 --- a/packages/sitecore-jss-nextjs/src/utils.test.ts +++ b/packages/sitecore-jss-nextjs/src/utils.test.ts @@ -99,6 +99,21 @@ describe('utils', () => { expect(result).to.equal('depos.com'); }); + it('should return pos for site language when provided language is empty', () => { + const site: SiteInfo = { + name: 'apos', + hostName: 'www.apos.com', + pointOfSale: { + 'de-DE': 'depos.com', + 'es-ES': 'espos.com', + }, + language: 'de-DE', + }; + + const result = resolvePointOfSale(site, ''); + expect(result).to.equal('depos.com'); + }); + it('should use fallback value when other values missing', () => { const site: SiteInfo = { name: 'apos', From dd3060094635cbaae926aab4c1fd6100d8213dba Mon Sep 17 00:00:00 2001 From: Artem Alexeyenko Date: Wed, 8 Mar 2023 11:31:01 -0500 Subject: [PATCH 4/6] convert point of sale resolver into a class --- .../src/components/CdpPageView.tsx | 4 +- packages/sitecore-jss-nextjs/src/index.ts | 1 + .../sitecore-jss-nextjs/src/utils.test.ts | 77 +------------------ packages/sitecore-jss-nextjs/src/utils.ts | 6 -- .../sitecore-jss/src/personalize/index.ts | 1 + .../src/personalize/pos-resolver.test.ts | 77 +++++++++++++++++++ .../src/personalize/pos-resolver.ts | 9 +++ 7 files changed, 91 insertions(+), 84 deletions(-) create mode 100644 packages/sitecore-jss/src/personalize/pos-resolver.test.ts create mode 100644 packages/sitecore-jss/src/personalize/pos-resolver.ts diff --git a/packages/create-sitecore-jss/src/templates/nextjs-personalize/src/components/CdpPageView.tsx b/packages/create-sitecore-jss/src/templates/nextjs-personalize/src/components/CdpPageView.tsx index 4dff989828..33d73bc2f4 100644 --- a/packages/create-sitecore-jss/src/templates/nextjs-personalize/src/components/CdpPageView.tsx +++ b/packages/create-sitecore-jss/src/templates/nextjs-personalize/src/components/CdpPageView.tsx @@ -3,7 +3,7 @@ import { LayoutServicePageState, SiteInfo, useSitecoreContext, - resolvePointOfSale, + PosResolver } from '@sitecore-jss/sitecore-jss-nextjs'; import { useEffect } from 'react'; import config from 'temp/config'; @@ -30,7 +30,7 @@ const CdpPageView = (): JSX.Element => { site: SiteInfo, pageVariantId: string ) => { - const pointOfSale = resolvePointOfSale(site, language); + const pointOfSale = PosResolver.resolve(site, language); const engage = await init({ clientKey: process.env.NEXT_PUBLIC_CDP_CLIENT_KEY || '', targetURL: process.env.NEXT_PUBLIC_CDP_TARGET_URL || '', diff --git a/packages/sitecore-jss-nextjs/src/index.ts b/packages/sitecore-jss-nextjs/src/index.ts index 264da5a182..816e65c358 100644 --- a/packages/sitecore-jss-nextjs/src/index.ts +++ b/packages/sitecore-jss-nextjs/src/index.ts @@ -65,6 +65,7 @@ export { getPersonalizedRewriteData, normalizePersonalizedRewrite, CdpHelper, + PosResolver, } from '@sitecore-jss/sitecore-jss/personalize'; export { GraphQLRequestClient } from '@sitecore-jss/sitecore-jss'; diff --git a/packages/sitecore-jss-nextjs/src/utils.test.ts b/packages/sitecore-jss-nextjs/src/utils.test.ts index b30160c887..51a3e7af4c 100644 --- a/packages/sitecore-jss-nextjs/src/utils.test.ts +++ b/packages/sitecore-jss-nextjs/src/utils.test.ts @@ -1,7 +1,6 @@ /* eslint-disable no-unused-expressions */ import { expect } from 'chai'; -import { SiteInfo } from './middleware'; -import { getPublicUrl, getJssEditingSecret, resolvePointOfSale } from './utils'; +import { getPublicUrl, getJssEditingSecret } from './utils'; describe('utils', () => { describe('getPublicUrl', () => { @@ -56,78 +55,4 @@ describe('utils', () => { expect(result).to.equal(secret); }); }); - - describe('resolvePointOfSale', () => { - it('should return empty when no point of sale present', () => { - const site: SiteInfo = { - name: 'no-pos', - hostName: 'www.nopos.com', - language: 'en', - }; - const language = 'en'; - const result = resolvePointOfSale(site, language); - expect(result).to.equal(''); - }); - - it('should return pos for provided language', () => { - const myPoint = 'apos.com'; - const site: SiteInfo = { - name: 'apos', - hostName: 'www.apos.com', - pointOfSale: { - en: myPoint, - }, - language: 'de-DE', - }; - - const result = resolvePointOfSale(site, 'en'); - expect(result).to.equal(myPoint); - }); - - it('should return pos for site language as first backup', () => { - const site: SiteInfo = { - name: 'apos', - hostName: 'www.apos.com', - pointOfSale: { - 'de-DE': 'depos.com', - 'es-ES': 'espos.com', - }, - language: 'de-DE', - }; - - const result = resolvePointOfSale(site, 'en'); - expect(result).to.equal('depos.com'); - }); - - it('should return pos for site language when provided language is empty', () => { - const site: SiteInfo = { - name: 'apos', - hostName: 'www.apos.com', - pointOfSale: { - 'de-DE': 'depos.com', - 'es-ES': 'espos.com', - }, - language: 'de-DE', - }; - - const result = resolvePointOfSale(site, ''); - expect(result).to.equal('depos.com'); - }); - - it('should use fallback value when other values missing', () => { - const site: SiteInfo = { - name: 'apos', - hostName: 'www.apos.com', - pointOfSale: { - 'de-DE': 'depos.com', - 'es-ES': 'espos.com', - '*': 'fallpos.com', - }, - language: 'en-CA', - }; - - const result = resolvePointOfSale(site, 'en'); - expect(result).to.equal('fallpos.com'); - }); - }); }); diff --git a/packages/sitecore-jss-nextjs/src/utils.ts b/packages/sitecore-jss-nextjs/src/utils.ts index 3020669cc6..595d26a536 100644 --- a/packages/sitecore-jss-nextjs/src/utils.ts +++ b/packages/sitecore-jss-nextjs/src/utils.ts @@ -76,9 +76,3 @@ export const getJssEditingSecret = (): string => { } return secret; }; - -export const resolvePointOfSale = (site: SiteInfo, language: string): string => { - return site.pointOfSale - ? site.pointOfSale[language] || site.pointOfSale[site.language] || site.pointOfSale['*'] - : ''; -}; diff --git a/packages/sitecore-jss/src/personalize/index.ts b/packages/sitecore-jss/src/personalize/index.ts index 761bfb566a..013af4c214 100644 --- a/packages/sitecore-jss/src/personalize/index.ts +++ b/packages/sitecore-jss/src/personalize/index.ts @@ -1,4 +1,5 @@ export { personalizeLayout } from './layout-personalizer'; +export { PosResolver } from './pos-resolver'; export { GraphQLPersonalizeService, GraphQLPersonalizeServiceConfig, diff --git a/packages/sitecore-jss/src/personalize/pos-resolver.test.ts b/packages/sitecore-jss/src/personalize/pos-resolver.test.ts new file mode 100644 index 0000000000..798586f238 --- /dev/null +++ b/packages/sitecore-jss/src/personalize/pos-resolver.test.ts @@ -0,0 +1,77 @@ +import { expect } from 'chai'; +import { SiteInfo } from '../site'; +import { PosResolver } from './pos-resolver'; + +describe('resolvePointOfSale', () => { + it('should return empty when no point of sale present', () => { + const site: SiteInfo = { + name: 'no-pos', + hostName: 'www.nopos.com', + language: 'en', + }; + const language = 'en'; + const result = PosResolver.resolve(site, language); + expect(result).to.equal(''); + }); + + it('should return pos for provided language', () => { + const myPoint = 'apos.com'; + const site: SiteInfo = { + name: 'apos', + hostName: 'www.apos.com', + pointOfSale: { + en: myPoint, + }, + language: 'de-DE', + }; + + const result = PosResolver.resolve(site, 'en'); + expect(result).to.equal(myPoint); + }); + + it('should return pos for site language as first backup', () => { + const site: SiteInfo = { + name: 'apos', + hostName: 'www.apos.com', + pointOfSale: { + 'de-DE': 'depos.com', + 'es-ES': 'espos.com', + }, + language: 'de-DE', + }; + + const result = PosResolver.resolve(site, 'en'); + expect(result).to.equal('depos.com'); + }); + + it('should return pos for site language when provided language is empty', () => { + const site: SiteInfo = { + name: 'apos', + hostName: 'www.apos.com', + pointOfSale: { + 'de-DE': 'depos.com', + 'es-ES': 'espos.com', + }, + language: 'de-DE', + }; + + const result = PosResolver.resolve(site, ''); + expect(result).to.equal('depos.com'); + }); + + it('should use fallback value when other values missing', () => { + const site: SiteInfo = { + name: 'apos', + hostName: 'www.apos.com', + pointOfSale: { + 'de-DE': 'depos.com', + 'es-ES': 'espos.com', + '*': 'fallpos.com', + }, + language: 'en-CA', + }; + + const result = PosResolver.resolve(site, 'en'); + expect(result).to.equal('fallpos.com'); + }); +}); diff --git a/packages/sitecore-jss/src/personalize/pos-resolver.ts b/packages/sitecore-jss/src/personalize/pos-resolver.ts new file mode 100644 index 0000000000..4238aeb0ea --- /dev/null +++ b/packages/sitecore-jss/src/personalize/pos-resolver.ts @@ -0,0 +1,9 @@ +import { SiteInfo } from '../site'; + +export class PosResolver { + static resolve = (site: SiteInfo, language: string) => { + return site.pointOfSale + ? site.pointOfSale[language] || site.pointOfSale[site.language] || site.pointOfSale['*'] + : ''; + }; +} From 7f79cc6e345070b5c49332717b9cda5b3ae2a626 Mon Sep 17 00:00:00 2001 From: Artem Alexeyenko Date: Wed, 8 Mar 2023 12:00:32 -0500 Subject: [PATCH 5/6] cleanup nextjs utils export --- packages/sitecore-jss-nextjs/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sitecore-jss-nextjs/src/index.ts b/packages/sitecore-jss-nextjs/src/index.ts index 816e65c358..e8bc102357 100644 --- a/packages/sitecore-jss-nextjs/src/index.ts +++ b/packages/sitecore-jss-nextjs/src/index.ts @@ -118,7 +118,7 @@ export { useComponentProps, } from './components/ComponentPropsContext'; -export { handleEditorFastRefresh, getPublicUrl, resolvePointOfSale } from './utils'; +export { handleEditorFastRefresh, getPublicUrl } from './utils'; export { Link, LinkProps } from './components/Link'; export { RichText, RichTextProps } from './components/RichText'; From 6991472e2bd8dd139e6d2060267a2a33db571eea Mon Sep 17 00:00:00 2001 From: Artem Alexeyenko Date: Wed, 8 Mar 2023 14:59:30 -0500 Subject: [PATCH 6/6] fix build issues, add more comments + changelog --- CHANGELOG.md | 2 ++ .../src/lib/middleware/plugins/personalize.ts | 5 +++-- .../src/middleware/personalize-middleware.ts | 12 ++++++------ packages/sitecore-jss-nextjs/src/utils.ts | 1 - 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f1d2295d8d..375555febc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,8 @@ Our versioning strategy is as follows: * `import { editingDataService } from '@sitecore-jss/sitecore-jss-nextjs/editing';` * `import { EditingRenderMiddleware } from '@sitecore-jss/sitecore-jss-nextjs/editing';` +* `[sitecore-jss-nextjs] [templates/nextjs-personalize]` getPointOfSale function passed into personalize middleware now accepts two parameters: site and language. Personalize middleware will use a built-in resolver if no function is passed. + * `[sitecore-jss-angular][templates/angular]` jss-angular package and sample has been updated to version 14. This means several changes: * JSS Angular sample is now using Ivy * IE11 no longer supported by JSS Angular diff --git a/packages/create-sitecore-jss/src/templates/nextjs-personalize/src/lib/middleware/plugins/personalize.ts b/packages/create-sitecore-jss/src/templates/nextjs-personalize/src/lib/middleware/plugins/personalize.ts index 6cee142d02..dfc79e8ea4 100644 --- a/packages/create-sitecore-jss/src/templates/nextjs-personalize/src/lib/middleware/plugins/personalize.ts +++ b/packages/create-sitecore-jss/src/templates/nextjs-personalize/src/lib/middleware/plugins/personalize.ts @@ -50,8 +50,9 @@ class PersonalizePlugin implements MiddlewarePlugin { excludeRoute: () => false, // Site resolver implementation siteResolver, - // you can also pass a custom point of sale resolver into middleware - // resolvePointOfSale: (site, language) => { ... } + // Personalize middleware will use PosResolver.resolve(site, language) (same as CdpPageView) by default to get point of sale. + // You can also pass a custom point of sale resolver into middleware to override it like so: + // getPointOfSale: (site, language) => { ... } }); } diff --git a/packages/sitecore-jss-nextjs/src/middleware/personalize-middleware.ts b/packages/sitecore-jss-nextjs/src/middleware/personalize-middleware.ts index e596402639..74a06bb28e 100644 --- a/packages/sitecore-jss-nextjs/src/middleware/personalize-middleware.ts +++ b/packages/sitecore-jss-nextjs/src/middleware/personalize-middleware.ts @@ -9,7 +9,7 @@ import { } from '@sitecore-jss/sitecore-jss/personalize'; import { SiteInfo, SiteResolver } from '@sitecore-jss/sitecore-jss/site'; import { debug, NativeDataFetcher } from '@sitecore-jss/sitecore-jss'; -import { resolvePointOfSale } from '../utils'; +import { PosResolver } from '@sitecore-jss/sitecore-jss/personalize'; export type PersonalizeMiddlewareConfig = { /** @@ -45,12 +45,12 @@ export type PersonalizeMiddlewareConfig = { */ defaultHostname?: string; /** - * function to resolve point of sale endpoint for a site + * function to resolve point of sale for a site * @param {Siteinfo} site to get info from * @param {string} language to get info for * @returns point of sale value for site/language combination */ - resolvePointOfSale?: (site?: SiteInfo, language?: string) => string; + getPointOfSale?: (site: SiteInfo, language: string) => string; }; /** @@ -243,9 +243,9 @@ export class PersonalizeMiddleware { // Execute targeted experience in CDP const { ua } = userAgent(req); const params = this.getExperienceParams(req); - const pointOfSale = this.config.resolvePointOfSale - ? this.config.resolvePointOfSale(site, language) - : resolvePointOfSale(site, language); + const pointOfSale = this.config.getPointOfSale + ? this.config.getPointOfSale(site, language) + : PosResolver.resolve(site, language); const variantId = await this.cdpService.executeExperience( personalizeInfo.contentId, browserId, diff --git a/packages/sitecore-jss-nextjs/src/utils.ts b/packages/sitecore-jss-nextjs/src/utils.ts index 595d26a536..16529c3879 100644 --- a/packages/sitecore-jss-nextjs/src/utils.ts +++ b/packages/sitecore-jss-nextjs/src/utils.ts @@ -1,6 +1,5 @@ import chalk from 'chalk'; import { isEditorActive, resetEditorChromes } from '@sitecore-jss/sitecore-jss/utils'; -import { SiteInfo } from './middleware'; /** * Get the publicUrl.