{"version":3,"file":"global.page_designer.bundle.js","mappings":";;;;;;;;;;;;;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACuD;AACE;AACzD,MAAME,gBAAgB,GAAG,MAAM;;AAE/B;AACA;AACA;AACA;AACA,6BAAe,oCAAUC,MAAe,EAAE;EACtC;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACI,MAAMC,sBAAsB,SAASD,MAAM,CAAC;IACxCE,KAAKA,CAAA,EAAG;MACJ,OAAO;QACHC,KAAK,EAAE,EAAE;QACTC,WAAW,EAAE,EAAE;QACfC,UAAU,EAAE,EAAE;QACdC,gBAAgB,EAAE,EAAE;QACpBC,kBAAkB,EAAE,EAAE;QACtBC,oBAAoB,EAAE,EAAE;QACxBC,kBAAkB,EAAE,EAAE;QACtBC,UAAU,EAAE,CAAC,CAAC;QACdC,OAAO,EAAE,EAAE;QACXC,eAAe,EAAE,EAAE;QACnBC,eAAe,EAAE,EAAE;QACnBC,eAAe,EAAE,KAAK;QACtBC,qBAAqB,EAAE,KAAK;QAC5BC,YAAY,EAAE,EAAE;QAChB,GAAG,KAAK,CAACd,KAAK,CAAC;MACnB,CAAC;IACL;IAEAe,IAAIA,CAAA,EAAG;MACH,KAAK,CAACA,IAAI,CAAC,CAAC;MACZ,IAAI,CAACC,2BAA2B,CAAC,CAAC;IACtC;;IAEA;AACR;AACA;AACA;IACQA,2BAA2BA,CAAA,EAAG;MAC1B,MAAMC,aAAa,GAAG,IAAI,CAACC,gBAAgB,CAAC,CAAC;MAE7C,IAAI,CAACD,aAAa,EAAE;QAChB;MACJ;;MAEA;MACA,MAAME,MAAM,GAAG;QACXC,MAAM,EAAEH,aAAa,CAACI,WAAW,CAAC,CAAC;QACnCC,QAAQ,EAAEL,aAAa,CAACM,aAAa,CAAC,CAAC;QACvCC,OAAO,EAAEP,aAAa,CAACQ,gBAAgB,CAAC,CAAC;QACzCC,OAAO,EAAET,aAAa,CAACU,gBAAgB,CAAC,CAAC;QACzCC,KAAK,EAAE/B;MACX,CAAC;MACD,MAAMgC,OAAO,GAAG,IAAI,CAACC,YAAY,CAAC,CAAC;MAEnC,IAAID,OAAO,EAAE;QACT;QACAV,MAAM,CAACU,OAAO,GAAGA,OAAO;MAC5B;MAEA,IAAIZ,aAAa,CAACc,OAAO,EAAE;QACvBd,aAAa,CAACc,OAAO,CACjBd,aAAa,CAACe,QAAQ,EAAE,IAAI,CAAChC,KAAK,CAAC,CAAC,CAACE,WAAW,EAChDiB,MAAM,EACN,EAAC,2BAA4Bc,YAAY,KAAK;UAC1C,IAAI,CAACC,YAAY,CAACD,YAAY,CAAC;QACnC,CACJ,CAAC;MACL,CAAC,MAAM;QACH;QACA;QACA;QACAhB,aAAa,CAACkB,OAAO,GAAGlB,aAAa,CAACkB,OAAO,IAAI,EAAE,CAAC,CAAC;QACrDlB,aAAa,CAACkB,OAAO,CAACC,IAAI,CAAC;UACvBC,eAAe,EAAE,IAAI,CAACrC,KAAK,CAAC,CAAC,CAACE,WAAW;UACzCoC,UAAU,EAAEnB,MAAM;UAClBoB,QAAQ,EAAEA,CAAA,CAAC,2BAA4BN,YAAY,KAAK;YACpD,IAAI,CAACC,YAAY,CAACD,YAAY,CAAC;UACnC;QACJ,CAAC,CAAC;MACN;IACJ;;IAEA;AACR;AACA;AACA;AACA;AACA;IACQH,YAAYA,CAAA,EAAG;MACX,IAAI,IAAI,CAAC9B,KAAK,CAAC,CAAC,CAACG,UAAU,EAAE;QACzB,OAAO,CAAC;UAAEqC,EAAE,EAAE,IAAI,CAACxC,KAAK,CAAC,CAAC,CAACG;QAAW,CAAC,CAAC;MAC5C;MAEA,IAAI,IAAI,CAACH,KAAK,CAAC,CAAC,CAACI,gBAAgB,EAAE;QAC/B,OAAO,CAAC;UACJoC,EAAE,EAAE,IAAI,CAACxC,KAAK,CAAC,CAAC,CAACI,gBAAgB;UACjCqC,GAAG,EAAE,IAAI,CAACzC,KAAK,CAAC,CAAC,CAACK,kBAAkB;UACpCqC,IAAI,EAAE,IAAI,CAAC1C,KAAK,CAAC,CAAC,CAACM,oBAAoB;UACvCqC,MAAM,EAAE,IAAI,CAAC3C,KAAK,CAAC,CAAC,CAACO;QACzB,CAAC,CAAC;MACN;MAEA,OAAOqC,SAAS;IACpB;;IAEA;AACR;AACA;AACA;IACQ1B,gBAAgBA,CAAA,EAAG;MACf;MACA,MAAMD,aAAa,GAAG4B,MAAM,CAACC,SAAS;MAEtC,IAAI7B,aAAa,IACT,OAAOA,aAAa,CAACI,WAAW,KAAK,UAAW,IAChD,OAAOJ,aAAa,CAACM,aAAa,KAAK,UAAW,IAClD,OAAON,aAAa,CAACQ,gBAAgB,KAAK,UAAW,IACrD,OAAOR,aAAa,CAACU,gBAAgB,KAAK,UAAW,EAAE;QAC3D,OAAOV,aAAa;MACxB;MAEA,OAAO,IAAI;IACf;;IAEA;AACR;AACA;AACA;AACA;IACQiB,YAAYA,CAACD,YAAY,EAAE;MACvB,IAAI,CAACA,YAAY,IAAI,CAACA,YAAY,CAAC,IAAI,CAACjC,KAAK,CAAC,CAAC,CAACE,WAAW,CAAC,EAAE;QAC1D,OAAO6C,OAAO,CAACC,OAAO,CAAC,IAAI,CAAC;MAChC;MAEA,MAAMC,IAAI,GAAGhB,YAAY,CAAC,IAAI,CAACjC,KAAK,CAAC,CAAC,CAACE,WAAW,CAAC,CAAC+C,IAAI,IAAI,EAAE;MAE9D,IAAIA,IAAI,CAACC,MAAM,KAAK,CAAC,EAAE;QACnB;QACA,OAAOH,OAAO,CAACC,OAAO,CAAC,IAAI,CAAC;MAChC;MAEA,MAAMG,IAAI,GAAGF,IAAI,CAACG,GAAG,CAAEC,GAAG,IAAKA,GAAG,CAACb,EAAE,CAAC;MACtC,MAAMc,GAAG,GAAG1D,uEAAiB,CAAC,IAAI,CAACI,KAAK,CAAC,CAAC,CAACS,OAAO,EAAE;QAChD0C,IAAI,EAAEI,IAAI,CAACC,SAAS,CAACL,IAAI,CAAC;QAC1B3C,UAAU,EAAE+C,IAAI,CAACC,SAAS,CAAC,IAAI,CAACxD,KAAK,CAAC,CAAC,CAACQ,UAAU,CAAC;QACnDP,KAAK,EAAE,IAAI,CAACD,KAAK,CAAC,CAAC,CAACC,KAAK;QACzBS,eAAe,EAAE,IAAI,CAACV,KAAK,CAAC,CAAC,CAACU,eAAe;QAC7CC,eAAe,EAAE,IAAI,CAACX,KAAK,CAAC,CAAC,CAACW,eAAe;QAC7CC,eAAe,EAAE,IAAI,CAACZ,KAAK,CAAC,CAAC,CAACY,eAAe;QAC7CC,qBAAqB,EAAE,IAAI,CAACb,KAAK,CAAC,CAAC,CAACa,qBAAqB;QACzDC,YAAY,EAAE,IAAI,CAACd,KAAK,CAAC,CAAC,CAACc;MAC/B,CAAC,CAAC;MAEF,OAAOnB,qEAAe,CAAC2D,GAAG,CAAC,CAACG,IAAI,CAAEC,QAAQ,IAAK;QAC3C,OAAO,IAAI,CAACC,MAAM,CAACf,SAAS,EAAEA,SAAS,EAAE,IAAI,CAACgB,GAAG,CAAC,MAAM,CAAC,EAAEF,QAAQ,CAACG,QAAQ,CAAC,CAAC,CAAC,CAC1EJ,IAAI,CAAC,MAAMC,QAAQ,CAAC;MAC7B,CAAC,CAAC;IACN;EACJ;EAEA,OAAO3D,sBAAsB;AACjC","sources":["webpack://sfra-boilerplate/./cartridges/app_page_designer_w/cartridge/client/default/js/widgets/page_designer/EinsteinCarouselLoader.ts"],"sourcesContent":["import { TWidget } from 'widgets/Widget';\n/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n * @typedef {object.<string, {recs: Array<{id: string}>}>} Recommenders\n */\n/**\n * @typedef {object} CQuotient - SFCC Analytics global object\n * @property {string} clientId\n * @property {Function} getCQUserId\n * @property {Function} getCQCookieId\n * @property {Function} getRecs\n * @property {Function} getCQHashedEmail\n * @property {Function} getCQHashedLogin\n * @property {Array<object>} widgets\n */\n/**\n * @typedef {object} RecsParams\n * @property {string} userId\n * @property {string} cookieId\n * @property {string} emailId\n * @property {string} loginId\n * @property {string} ccver\n * @property {object|undefined} [anchors]\n */\nimport { getContentByUrl } from 'widgets/toolbox/ajax';\nimport { appendParamsToUrl } from 'widgets/toolbox/util';\nconst EINSTEIN_VERSION = '1.02';\n\n/**\n * @param Widget Base widget for extending\n * @returns EinsteinCarouselLoader widget\n */\nexport default function (Widget: TWidget) {\n /**\n * @category widgets\n * @subcategory app_page_designer_w\n * @class EinsteinCarouselLoader\n * @augments Widget\n * @classdesc EinsteinCarouselLoader Widget - used to load recommendation data from Einstein engine\n * and pass data to backend for carousel markup rendering\n * @property {string} data-title - Carousel title\n * @property {string} data-recommender - Einstein recommender to use\n * @property {string} data-category-id - category id if need show recommendations in context of category\n * @property {string} data-primary-product-id - product id if need show recommendations in context of product.\n * For variations or variations groups it is ID of master product\n * @property {string} data-secondary-product-id - if context product is variations or variations groups it is their id, otherwise empty\n * @property {string} data-alternative-group-type - if product has types 'set', 'bundle' or 'vgroup' then it has same value, otherwise empty\n * @property {string} data-alternative-group-id - product id if product has type 'set', 'bundle' or 'vgroup'\n * @property {object} data-tile-params - tile rendering parameters\n * @property {string} data-load-url - URL to get rendered carousel markup\n * @example <caption>Example of EinsteinCarouselLoader widget usage</caption>\n * <section\n * data-widget=\"einsteinCarouselLoader\"\n * data-title=\"<isprint value=\"${pdict.title}\" encoding=\"htmldoublequote\"/>\"\n * data-recommender=\"${pdict.recommender}\"\n * data-load-url=\"${pdict.productLoadUrl}\"\n * data-primary-product-id=\"${pdict.primaryProductId}\"\n * data-secondary-product-id=\"${pdict.secondaryProductId}\"\n * data-alternative-group-type=\"${pdict.alternativeGroupType}\"\n * data-alternative-group-id=\"${pdict.alternativeGroupId}\"\n * data-category-id=\"${pdict.categoryId}\"\n * data-tile-params=\"<isprint value=\"${JSON.stringify(pdict.tileParams)}\" encoding=\"htmldoublequote\"/>\"\n * ></section>\n */\n class EinsteinCarouselLoader extends Widget {\n prefs() {\n return {\n title: '',\n recommender: '',\n categoryId: '',\n primaryProductId: '',\n secondaryProductId: '',\n alternativeGroupType: '',\n alternativeGroupId: '',\n tileParams: {},\n loadUrl: '',\n backgroundColor: '',\n backgroundImage: '',\n autoplayEnabled: false,\n infinitescrollEnabled: false,\n customStyles: '',\n ...super.prefs()\n };\n }\n\n init() {\n super.init();\n this.loadEinsteinRecommendations();\n }\n\n /**\n * @description Build request to Einstein engine and submit it to get recommenders object\n * @returns {void}\n */\n loadEinsteinRecommendations() {\n const einsteinUtils = this.getEinsteinUtils();\n\n if (!einsteinUtils) {\n return;\n }\n\n /** @type {RecsParams} */\n const params = {\n userId: einsteinUtils.getCQUserId(),\n cookieId: einsteinUtils.getCQCookieId(),\n emailId: einsteinUtils.getCQHashedEmail(),\n loginId: einsteinUtils.getCQHashedLogin(),\n ccver: EINSTEIN_VERSION\n };\n const anchors = this.createAnchor();\n\n if (anchors) {\n // @ts-expect-error ts-migrate(2339) FIXME: Property 'anchors' does not exist on type '{ userI... Remove this comment to see the full error message\n params.anchors = anchors;\n }\n\n if (einsteinUtils.getRecs) {\n einsteinUtils.getRecs(\n einsteinUtils.clientId, this.prefs().recommender,\n params,\n (/** @type {Recommenders} */ recommenders) => {\n this.loadCarousel(recommenders);\n }\n );\n } else {\n // If SFCC Analytics is not inited at time of this code execution\n // we can put our params into widgets array that will be processed\n // on SFCC Analytic init\n einsteinUtils.widgets = einsteinUtils.widgets || []; // eslint-disable-line no-param-reassign\n einsteinUtils.widgets.push({\n recommenderName: this.prefs().recommender,\n parameters: params,\n callback: (/** @type {Recommenders} */ recommenders) => {\n this.loadCarousel(recommenders);\n }\n });\n }\n }\n\n /**\n * @description Create anchor parameter object to be passed to Einstein engine.\n * If category is specified then it will be used as anchor\n * Otherwise will be used product, or undefined for global recommendations\n * @returns {undefined|object} anchor object\n */\n createAnchor() {\n if (this.prefs().categoryId) {\n return [{ id: this.prefs().categoryId }];\n }\n\n if (this.prefs().primaryProductId) {\n return [{\n id: this.prefs().primaryProductId,\n sku: this.prefs().secondaryProductId,\n type: this.prefs().alternativeGroupType,\n alt_id: this.prefs().alternativeGroupId\n }];\n }\n\n return undefined;\n }\n\n /**\n * @description Validates and Return the cquotient namespace provided by the commerce cloud platform\n * @returns {CQuotient|null} - einsteinUtils or null\n */\n getEinsteinUtils() {\n // @ts-ignore Expected Error\n const einsteinUtils = window.CQuotient;\n\n if (einsteinUtils\n && (typeof einsteinUtils.getCQUserId === 'function')\n && (typeof einsteinUtils.getCQCookieId === 'function')\n && (typeof einsteinUtils.getCQHashedEmail === 'function')\n && (typeof einsteinUtils.getCQHashedLogin === 'function')) {\n return einsteinUtils;\n }\n\n return null;\n }\n\n /**\n * @description Based on recommenders response build URL and load recommendation carousel markup\n * @param {Recommenders} recommenders object received from Einstein engine\n * @returns {Promise<object|null>} Promise object represents server response with carousel markup\n */\n loadCarousel(recommenders) {\n if (!recommenders || !recommenders[this.prefs().recommender]) {\n return Promise.resolve(null);\n }\n\n const recs = recommenders[this.prefs().recommender].recs || [];\n\n if (recs.length === 0) {\n // If recommendations are empty not make sense execute request\n return Promise.resolve(null);\n }\n\n const pids = recs.map((rec) => rec.id);\n const url = appendParamsToUrl(this.prefs().loadUrl, {\n pids: JSON.stringify(pids),\n tileParams: JSON.stringify(this.prefs().tileParams),\n title: this.prefs().title,\n backgroundColor: this.prefs().backgroundColor,\n backgroundImage: this.prefs().backgroundImage,\n autoplayEnabled: this.prefs().autoplayEnabled,\n infinitescrollEnabled: this.prefs().infinitescrollEnabled,\n customStyles: this.prefs().customStyles\n });\n\n return getContentByUrl(url).then((response) => {\n return this.render(undefined, undefined, this.ref('self'), response.toString())\n .then(() => response);\n });\n }\n }\n\n return EinsteinCarouselLoader;\n}\n"],"names":["getContentByUrl","appendParamsToUrl","EINSTEIN_VERSION","Widget","EinsteinCarouselLoader","prefs","title","recommender","categoryId","primaryProductId","secondaryProductId","alternativeGroupType","alternativeGroupId","tileParams","loadUrl","backgroundColor","backgroundImage","autoplayEnabled","infinitescrollEnabled","customStyles","init","loadEinsteinRecommendations","einsteinUtils","getEinsteinUtils","params","userId","getCQUserId","cookieId","getCQCookieId","emailId","getCQHashedEmail","loginId","getCQHashedLogin","ccver","anchors","createAnchor","getRecs","clientId","recommenders","loadCarousel","widgets","push","recommenderName","parameters","callback","id","sku","type","alt_id","undefined","window","CQuotient","Promise","resolve","recs","length","pids","map","rec","url","JSON","stringify","then","response","render","ref","toString"],"sourceRoot":""}