{"version":3,"file":"global.page_designer.bundle.js","mappings":"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","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":""}