{"version":3,"file":"LocalizationMenu.js","names":["LocalizationMenu","a","setters","Component","default","deepMerge","Registry","on","off","trigger","Event","execute","constructor","element","options","arguments","length","countriesConfig","currentCountryCode","currentCurrencyCode","currentLanguageCode","initCache","selectors","countryField","querySelector","currencyComponent","closest","languageComponent","currencyBlock","languageBlock","oneLanguageBlock","oneCurrencyBlock","oneCurrencyLabel","oneLanguageLabel","classes","hidden","bindEvents","onChange","bind","onTooltipHide","onHamburgerSubmenuClose","afterInit","registerChildren","id","resetFields","value","bubbles","event","target","countryObj","countries","getComponent","currencyOptions","Object","keys","currencyLabels","filter","currencyCode","currencies","indexOf","map","val","label","selected","languageOptions","languages","languageCode","languageLabels","updateOptions","remote","isEditorialMode","classList","add","remove","innerHTML","destroy","removeListener"],"sources":["components/header/LocalizationMenu.js"],"sourcesContent":["import Component from 'core/Component';\nimport { deepMerge } from 'toolbox/deepMerge';\nimport Registry from 'core/ComponentRegistry';\nimport { on, off, trigger } from 'toolbox/event';\nimport { Event } from 'services/EventEmitter';\n\n/* eslint complexity: [\"error\", {\"max\": 10}] */\n\n/**\n * This is a description of the LocalizationMenu constructor function.\n * @class\n * @classdesc This component is needed to manage currency and language options/blocks on country change.\n * @extends Component\n */\nexport default class LocalizationMenu extends Component {\n /**\n * Constructor of the class that mainly merge the options of the components\n * @param {HTMLElement} element HTMLElement of the component\n * @param {object} options options that belongs to the component\n */\n constructor(element, options = {}) {\n super(element, deepMerge({\n countriesConfig: null, // config with combinations of allowed currencies, languages of each country\n currentCountryCode: null,\n currentCurrencyCode: null,\n currentLanguageCode: null,\n }, options));\n }\n\n /**\n * All selectors must be cached. Never cache elements that are out of the component scope\n */\n initCache() {\n this.selectors.countryField = this.element.querySelector('select[name=\"country\"]');\n this.selectors.currencyComponent = this.element.querySelector('select[name=\"currency\"]').closest('[data-js-field-component]');\n this.selectors.languageComponent = this.element.querySelector('select[name=\"language\"]').closest('[data-js-field-component]');\n this.selectors.currencyBlock = this.element.querySelector('[data-currency-block]');\n this.selectors.languageBlock = this.element.querySelector('[data-language-block]');\n this.selectors.oneLanguageBlock = this.element.querySelector('[data-onelanguage-block]');\n this.selectors.oneCurrencyBlock = this.element.querySelector('[data-onecurrency-block]');\n this.selectors.oneCurrencyLabel = this.element.querySelector('[data-onecurrency-label]');\n this.selectors.oneLanguageLabel = this.element.querySelector('[data-onelanguage-label]');\n\n this.classes = {\n hidden: 'h-hidden',\n };\n }\n\n /**\n * Should contain only event listeners and nothing else\n * All the event handlers should be into a separated function. No usage of anonyous function\n */\n bindEvents() {\n on('change.localizationmenu', this.selectors.countryField, this.onChange.bind(this));\n Event.on('tooltip.hide.content', this.onTooltipHide, this);\n Event.on('hamburger.submenu.close', this.onHamburgerSubmenuClose, this);\n }\n\n /**\n * After init\n * Run any script after the component is fully initialized\n */\n afterInit() {\n Registry.registerChildren(this.element);\n }\n\n /**\n * Call Reset method after tooltip is hide\n * @param {String} id parent component ID\n */\n onTooltipHide(id) {\n if (!this.element || !this.element.closest(`#${id}`)) {\n return;\n }\n\n this.resetFields();\n }\n\n /**\n * Call Reset method after Hamburger submenu is closed\n * @param {String} id parent component ID\n */\n onHamburgerSubmenuClose(id) {\n if (!this.element || !this.element.closest(`[data-component-id=\"${id}\"]`)) {\n return;\n }\n\n this.resetFields();\n }\n\n /**\n * Reset localization fields to default state\n * @param {String} id parent component ID\n */\n resetFields() {\n this.selectors.countryField.value = this.options.currentCountryCode;\n\n trigger('change', this.selectors.countryField, {\n bubbles: true,\n });\n }\n\n /**\n * Country field change event handler\n * Update currency and language options for selected country\n * @param {Event} event event object\n */\n onChange(event) {\n const { target: { value } } = event;\n const { options: { countriesConfig, currentCurrencyCode, currentLanguageCode } } = this;\n const countryObj = countriesConfig && countriesConfig.countries[value];\n\n const currencyComponent = Registry.getComponent(this.selectors.currencyComponent);\n const languageComponent = Registry.getComponent(this.selectors.languageComponent);\n\n if (!countryObj || !currencyComponent || !languageComponent) {\n return;\n }\n\n const currencyOptions = Object.keys(countriesConfig.currencyLabels)\n .filter(currencyCode => !countryObj.currencies || countryObj.currencies.indexOf(currencyCode) !== -1)\n .map(currencyCode => ({\n val: currencyCode,\n label: countriesConfig.currencyLabels[currencyCode],\n selected: currentCurrencyCode === currencyCode,\n }));\n const languageOptions = countryObj.languages\n .map(languageCode => ({\n val: languageCode,\n label: countriesConfig.languageLabels[languageCode],\n selected: currentLanguageCode === languageCode,\n }), this);\n currencyComponent.updateOptions(currencyOptions);\n languageComponent.updateOptions(languageOptions);\n\n if (countryObj.remote || countriesConfig.isEditorialMode) {\n this.selectors.oneCurrencyBlock.classList.add(this.classes.hidden);\n this.selectors.currencyBlock.classList.add(this.classes.hidden);\n } else if (currencyOptions.length === 1) {\n this.selectors.oneCurrencyBlock.classList.remove(this.classes.hidden);\n this.selectors.oneCurrencyLabel.innerHTML = currencyOptions[0].label;\n this.selectors.currencyBlock.classList.add(this.classes.hidden);\n } else {\n this.selectors.oneCurrencyBlock.classList.add(this.classes.hidden);\n this.selectors.currencyBlock.classList.remove(this.classes.hidden);\n }\n\n if (languageOptions.length === 1) {\n this.selectors.oneLanguageBlock.classList.remove(this.classes.hidden);\n this.selectors.oneLanguageLabel.innerHTML = languageOptions[0].label;\n this.selectors.languageBlock.classList.add(this.classes.hidden);\n } else {\n this.selectors.oneLanguageBlock.classList.add(this.classes.hidden);\n this.selectors.languageBlock.classList.remove(this.classes.hidden);\n }\n }\n\n /**\n * Destroy is called automatically after the component is being removed from the DOM\n * You must always destroy the listeners attached to an element to avoid any memory leaks\n */\n destroy() {\n off('change.localizationmenu', this.selectors.countryField);\n Event.removeListener('tooltip.hide.content', this.onTooltipHide);\n Event.removeListener('hamburger.submenu.toggle', this.onHamburgerSubmenuClose);\n }\n}\n"],"mappings":"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","ignoreList":[]}