{"version":3,"file":"js/special_offers_banner-special_offers_banner-js-9a9958235c034eb823ee.chunk.js","mappings":"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","sources":["webpack://cms-web/./app/frontend/src/blocks/special_offers_banner/special_offers_banner.analytics.js","webpack://cms-web/./app/frontend/src/blocks/special_offers_banner/special_offers_banner.js","webpack://cms-web/./app/frontend/src/utils/debug.js","webpack://cms-web/./app/frontend/src/utils/get_real_market_content.js","webpack://cms-web/./app/frontend/src/utils/i18n.js"],"sourcesContent":["import { sendUtagEvent } from '../../core/analytics/utag_events'\nimport on from '../../utils/events_delegation'\n\nexport default function initializeUtagEvents(specialOffersBanner) {\n if (!specialOffersBanner || !IB.utag_eec_events) return\n\n if (IB.utag_eec_events.promotionImpressionObserver) {\n IB.utag_eec_events.promotionImpressionObserver.observe(specialOffersBanner)\n }\n on({\n eventName: 'click',\n selector: '.js-special-offers-banner .utag-see-offer',\n handler() {\n sendUtagEvent({\n data: {\n event_name: 'offers',\n event_cat: 'offers',\n event_act: 'view offers conditions',\n event_structure: 'body',\n event_purpose: 'information',\n },\n })\n },\n })\n}\n","import '../../vendors/swiper/swiper.scss'\n\nimport Swiper from 'swiper'\nimport { Navigation, Pagination, Scrollbar } from 'swiper/modules'\n\nimport { currentDevice } from '../../core/utils/currentDevice'\nimport getRealMarketContent, { dispatchRealMarketContentUpdatedEvent } from '../../utils/get_real_market_content'\n\nimport initializeUtagEvents from './special_offers_banner.analytics'\n\nSwiper.use([Navigation, Pagination, Scrollbar])\n\nconst slides_limit = currentDevice.isMobile ? 1.2 : 5\n\nfunction initSwiper(blockId) {\n const block = document.querySelector(`[data-block-id=\"${blockId}\"]`)\n const swiperScrollbarN = block.querySelector('.js-swiper-scrollbar-navigation')\n\n // NAVIGATION NEW SWIPER\n const swiperScrollbarNScroll = swiperScrollbarN.querySelector(\n ':scope > .js-swiper-navigation-wrapper .js-swiper-scrollbar-scroll'\n )\n const swiperScrollbarNScrollPrev = swiperScrollbarN.querySelector(\n ':scope > .js-swiper-navigation-wrapper .js-swiper-button-prev'\n )\n const swiperScrollbarNScrollNext = swiperScrollbarN.querySelector(\n ':scope > .js-swiper-navigation-wrapper .js-swiper-button-next'\n )\n\n // NEW SWIPER CONFIG\n new Swiper(swiperScrollbarN, {\n spaceBetween: 12,\n slidesPerView: slides_limit,\n loop: false,\n scrollbar: {\n el: swiperScrollbarNScroll,\n hide: false,\n draggable: true,\n },\n navigation: {\n prevEl: swiperScrollbarNScrollPrev,\n nextEl: swiperScrollbarNScrollNext,\n },\n })\n}\n\n// Initializes current block swiper and utag events\nfunction initializeBlock(blockId) {\n const specialOffersBanner = document.querySelector(`[data-block-id=\"${blockId}\"]`)\n if (!specialOffersBanner) return\n\n initializeUtagEvents(specialOffersBanner)\n\n initSwiper(blockId)\n}\n\n// Called by the lazy_assets_loader observer when the element is in the viewport\nexport function init(blockId) {\n const blockSelector = `[data-block-id=\"${blockId}\"]`\n const specialOffersBanner = document.querySelector(blockSelector)\n if (!specialOffersBanner) return\n\n initializeBlock(blockId)\n initializeUtagEvents(specialOffersBanner)\n\n // Replace all the HTML content with the real market HTML content\n // Destroy all previous initializations and reinitialize the block\n const constrainedViewId = specialOffersBanner.dataset.constrainedViewId\n\n getRealMarketContent({ blockId, constrainedViewId })\n .then(response => {\n const mainContainer = specialOffersBanner.closest('.js-special-offers-banner-layer')\n if (!mainContainer) return\n\n const swiperContainer = specialOffersBanner.querySelector('[data-swiper-container]')\n // Destroy old swiper\n if (swiperContainer?.swiper) {\n swiperContainer.swiper.destroy()\n }\n\n mainContainer.innerHTML = response.html_replacement\n IB.lazyImg.loadAllImagesSelector($(mainContainer))\n initializeBlock(blockId)\n\n dispatchRealMarketContentUpdatedEvent({ blockSelector, blockName: 'special-offers-banners' })\n })\n .catch(error => {\n //console.warn(error)\n })\n}\n","// Returns true if Debug is enabled (only in development mode)\nexport const isDebugEnabled = () => document.documentElement.dataset.debug === 'true'\n\n// Returns true if debug console is enabled (only in development mode)\nexport const isDebugConsoleEnabled = () => document.documentElement.dataset.debugConsole === 'true'\n","import { isDebugConsoleEnabled } from './debug'\nimport { getLang, getLangPrefix } from './i18n'\n\n/**\n * Retrieves real market content based on the provided parameters.\n * @param {Object} options - The options object.\n * @param {string} options.contentName - The name of the content.\n * @param {string} options.blockId - The ID of the block.\n * @param {string} options.constrainedViewId - The ID of the constrained view.\n * @param {string} options.additionalParams - If provided, it will be appended to the query string.\n * @returns {Promise} A promise that resolves to the retrieved data or rejects with an error.\n * @example\n * getRealMarketContent({ contentName: 'menu_offers' }).then(response => {\n * const container = document.querySelector('.js-container')\n * container.outerHTML = response.html_replacement\n * })\n */\nconst getRealMarketContent = ({ contentName, blockId, constrainedViewId, additionalParams = '' } = {}) => {\n const showErrorMessage = errorMessage => {\n // show console messages only in debug mode\n if (isDebugConsoleEnabled && errorMessage) {\n // eslint-disable-next-line no-console\n console.warn(`[Update with real market]: ${errorMessage}`)\n }\n }\n\n // Check if real market is already applied (data-is-real-market present in body)\n if ('isRealMarket' in document.body.dataset) {\n showErrorMessage('real market is already applied')\n return Promise.reject('alreadyApplied')\n }\n\n // Check presence of required params\n if (\n (!contentName && !blockId) ||\n (contentName && blockId) ||\n (blockId && !constrainedViewId) ||\n (!blockId && constrainedViewId)\n ) {\n // show console messages only in debug mode\n let msg = ''\n if (!contentName && !blockId) {\n msg = 'request could not be performed because neither contentName nor blockId has been provided'\n } else if (contentName && blockId) {\n msg = 'request could not be performed because both contentName and blockId have been provided'\n } else if (blockId && !constrainedViewId) {\n msg = 'request could not be performed because blockId has been provided but not constrainedViewId'\n } else if (!blockId && constrainedViewId) {\n msg = 'request could not be performed because constrainedViewId has been provided but not blockId'\n }\n\n showErrorMessage(msg)\n return Promise.reject(new Error(msg))\n }\n\n const currentLang = getLang()\n const urlPrefix = getLangPrefix().replace('/', '')\n\n const urlParams = new URLSearchParams(window.location.search)\n const aac = urlParams.get('AAC') || urlParams.get('aac')\n\n if (aac) {\n additionalParams = additionalParams ? `${additionalParams}&AAC=${aac}` : `AAC=${aac}`\n }\n\n const urlBlockParams = contentName\n ? `content_name=${contentName}`\n : `block_id=${blockId}&constrained_view_id=${constrainedViewId}`\n const otherParams = additionalParams ? `&${additionalParams}` : ''\n\n let simulate_market = get_simulated_market();\n const simulate_market_parameter = typeof simulate_market != 'undefined' ? `&simulate_market=${simulate_market}` : ``\n\n const getMarketContentUrl = `/${\n urlPrefix ? `${urlPrefix}/` : ''\n }get_market_content?lang=${currentLang}&${urlBlockParams}${otherParams}${simulate_market_parameter}`\n\n return fetch(getMarketContentUrl)\n .then(response => {\n if (!response.ok) {\n throw new Error(`[Update with real market] Error in API response: ${response.status} ${response.statusText}`)\n }\n return response.json()\n })\n .catch(error => {\n console.error(error)\n throw error\n })\n}\n\nfunction getParameters() {\n let vars = {};\n let parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (m, key, value) {\n vars[key] = value;\n });\n return vars;\n}\n\nlet get_simulated_market = function () {\n let market = getParameters()['simulate_market'];\n return market;\n};\n\nexport const dispatchRealMarketContentUpdatedEvent = ({ blockSelector, blockName } = {}) => {\n // Check presence of required params\n if (!blockSelector || !blockName) {\n console.error(\n '[Update with real market]: event could not be dispatched because blockSelector or blockName has not been provided'\n )\n return\n }\n\n const event = new CustomEvent(`html-updated:${blockName}`, {\n detail: blockSelector,\n })\n\n document.dispatchEvent(event)\n}\n\nexport default getRealMarketContent\n","export const getLang = () => document.documentElement.dataset.jsLang\n\nexport const getLangPrefix = () => document.documentElement.getAttribute('prefix')\n"],"names":["initializeUtagEvents","specialOffersBanner","IB","utag_eec_events","promotionImpressionObserver","observe","on","eventName","selector","handler","sendUtagEvent","data","event_name","event_cat","event_act","event_structure","event_purpose","Swiper","use","Navigation","Pagination","Scrollbar","slides_limit","currentDevice","isMobile","initializeBlock","blockId","document","querySelector","swiperScrollbarN","swiperScrollbarNScroll","swiperScrollbarNScrollPrev","swiperScrollbarNScrollNext","spaceBetween","slidesPerView","loop","scrollbar","el","hide","draggable","navigation","prevEl","nextEl","initSwiper","init","blockSelector","constrainedViewId","dataset","getRealMarketContent","then","response","mainContainer","closest","swiperContainer","swiper","destroy","innerHTML","html_replacement","lazyImg","loadAllImagesSelector","$","dispatchRealMarketContentUpdatedEvent","blockName","catch","error","isDebugConsoleEnabled","documentElement","debugConsole","get_simulated_market","vars","window","location","href","replace","m","key","value","getParameters","arguments","length","undefined","console","event","CustomEvent","detail","dispatchEvent","contentName","additionalParams","showErrorMessage","errorMessage","warn","body","Promise","reject","msg","Error","currentLang","jsLang","urlPrefix","getAttribute","urlParams","URLSearchParams","search","aac","get","urlBlockParams","otherParams","simulate_market","fetch","ok","status","statusText","json"],"sourceRoot":""}