{"version":3,"sources":["archive/product/variant-selector-provider/dropdown-variant-selector-base.ts"],"names":["render","caseInsensitiveEquals","VariantSelectorBase","$","window","jQuery","_","DropDownVariantSelectorBase","constructor","name","version","super","this","initialize","selectorContainerElement","product","variantTypeId","translations","showPricesInclVat","self","$dropDown","find","on","evt","newVariantValue","parseInt","target","value","_triggerSelectorChangedEvent","setSelected","variantId","getSelected","val","setSelectedByName","variantValueName","foundVariantValue","variantType","variants","currentVariant","id","filterVariants","unavailableVariants","preselectSingleAvailable","$singleAvailableOption","$options","each","cleanOptionName","$option","data","text","unavailableVariant","showUnavailableVariants","message","addClass","disabled","attr","removeClass","removeAttr","hide","show","length","is","parent","prepend","css","processVariants","variantTypeToProductInfoMap","replaceEmptyString","productInfo","discountInfo","isOutlet","flagName","replace","toLowerCase","flagId","_isSelectedAvailable","$selected","_setVariantSelectorLabelPrefix","prefix","variantSelectorData","variantTypeName","isSelectedOptionAvailable","trigger","VARIANT_CHANGED_EVENT","productId","labels","changeSelection","select","DropDownVariantSelectorBaseWithUnderscoreRendering","$mainContainer","templateString","getTemplateString","templateHtml","template","append","DropDownVariantSelectorBaseWithLitHtmlRendering"],"mappings":"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","file":"dropdown-variant-selector-base.js","sourcesContent":["import { render } from '../../../node_modules/lit-html/lit-html.js';\nimport { caseInsensitiveEquals } from \"../../../utils/number.js\";\nimport { VariantSelectorBase } from \"./variant-selector-base.js\";\n\nconst $ = window.jQuery;\nconst _ = window._;\n\nexport abstract class DropDownVariantSelectorBase extends VariantSelectorBase {\n private $dropDown: any;\n\n constructor(name: string, private version: number) {\n super(name);\n }\n\n public initialize(selectorContainerElement: HTMLElement, product: any, variantTypeId: number, translations: Map, showPricesInclVat: boolean): void {\n super.initialize(selectorContainerElement, product, variantTypeId, translations, showPricesInclVat);\n const self = this;\n\n this.$dropDown = $(this.selectorContainerElement).find('select');\n\n this.$dropDown.on('change', function (evt: any) {\n var newVariantValue = parseInt(evt.target.value) || 0;\n self._triggerSelectorChangedEvent(newVariantValue);\n });\n }\n\n public setSelected(variantId: string): void {\n var newVariantValue = parseInt(variantId) || 0;\n var currentVariantValue = this.getSelected();\n var isVariantAlreadySelected = newVariantValue === currentVariantValue;\n\n if (!isVariantAlreadySelected) {\n this.$dropDown.val(newVariantValue);\n\n this._triggerSelectorChangedEvent(newVariantValue);\n }\n }\n\n public setSelectedByName(variantValueName: string): void {\n if (variantValueName) {\n var foundVariantValue = _.find(this.variantType.variants, function (currentVariant: any) {\n return caseInsensitiveEquals(currentVariant.name, variantValueName);\n });\n\n if (foundVariantValue) {\n this.setSelected(foundVariantValue.id);\n }\n }\n }\n\n public getSelected(): number {\n return parseInt(this.$dropDown.val() || 0);\n }\n\n public filterVariants(unavailableVariants: any, preselectSingleAvailable: any): void {\n const self = this;\n var $singleAvailableOption;\n\n var $options = this.$dropDown.find('option');\n $options.each(function () {\n var $option = $(this);\n var variantId = $option.val();\n if (variantId <= 0) {\n return; // Default option\n }\n\n var cleanOptionName = $option.data('cleanname');\n if (typeof (cleanOptionName) === 'undefined') {\n cleanOptionName = $option.text();\n\n $option.data('cleanname', cleanOptionName);\n }\n\n const unavailableVariant = unavailableVariants[variantId];\n if (self.product.showUnavailableVariants) {\n if (unavailableVariant) {\n $option.text(cleanOptionName + ' (' + unavailableVariant.message + ')');\n $option.addClass('disabled');\n\n if (unavailableVariant.disabled) {\n $option.attr('disabled', 'disabled');\n }\n } else {\n $option.text(cleanOptionName);\n\n $option.removeClass('disabled');\n $option.removeAttr('disabled');\n\n $singleAvailableOption = typeof ($singleAvailableOption) === 'undefined' ? $option : null;\n }\n }\n else {\n if (unavailableVariant) {\n $option.attr('disabled', 'disabled');\n $option.hide();\n } else {\n $option.removeAttr('disabled');\n $option.show();\n }\n }\n });\n\n if ($singleAvailableOption && preselectSingleAvailable) {\n this.setSelected($singleAvailableOption.val());\n\n if ($options.length === 2 && this.$dropDown.is(':visible')) {\n this.$dropDown.parent().prepend('' + $singleAvailableOption.text() + '');\n this.$dropDown.css('display', 'none');\n }\n }\n }\n\n public processVariants(variantTypeToProductInfoMap: any): void {\n var $options = this.$dropDown.find('option');\n $options.each(function () {\n var $option = $(this);\n var variantId = $option.val();\n if (variantId <= 0) {\n return; // Default option\n }\n\n var productInfo = variantTypeToProductInfoMap[variantId];\n if (productInfo && productInfo.discountInfo.isOutlet) {\n var replaceEmptyString = productInfo.discountInfo.flagName.replace(/\\s+/g, \"-\").toLowerCase();\n $option.addClass(replaceEmptyString + ' flag-' + productInfo.discountInfo.flagId + '-' + replaceEmptyString);\n }\n });\n }\n\n private _isSelectedAvailable() {\n var $selected = this.$dropDown.find('option:selected');\n\n // Default option (or unselected state) should be marked as available. Otherwise, unavailable variants filtering will not happen on deselection.\n return $selected.length === 0 || $selected.is(':not(.disabled)');\n }\n\n private _setVariantSelectorLabelPrefix(prefix) {\n if (this.version == 2) {\n var $variantSelectorLabel = this.$dropDown.find('.js-select-variant-label');\n $variantSelectorLabel.text(`${prefix} ${this.variantSelectorData.variantTypeName}...`);\n } else {\n var $variantSelectorLabel = $(this.selectorContainerElement).find('.js-select-variant-label');\n $variantSelectorLabel.text(`${prefix} ${this.variantSelectorData.variantTypeName}`);\n }\n }\n\n private _triggerSelectorChangedEvent(newVariantValue: any) {\n var isSelectedOptionAvailable = this._isSelectedAvailable();\n $(this.selectorContainerElement).trigger(this.VARIANT_CHANGED_EVENT, [this.variantType, newVariantValue, isSelectedOptionAvailable, this.product.productId]);\n\n this._setVariantSelectorLabelPrefix(this.getSelected() > 0\n ? this.variantSelectorData.labels.changeSelection\n : this.variantSelectorData.labels.select);\n }\n}\n\nexport abstract class DropDownVariantSelectorBaseWithUnderscoreRendering extends DropDownVariantSelectorBase {\n protected $mainContainer: any;\n protected abstract getTemplateString(): string;\n\n public initialize(selectorContainerElement: HTMLElement, product: any, variantTypeId: number, translations: Map, showPricesInclVat: boolean): void {\n this.$mainContainer = $(selectorContainerElement);\n\n super.initialize(selectorContainerElement, product, variantTypeId, translations, showPricesInclVat);\n }\n\n protected render() {\n const templateString = this.getTemplateString();\n const templateHtml = _.template(templateString, this.variantSelectorData);\n this.$mainContainer.append(templateHtml);\n }\n}\n\nexport abstract class DropDownVariantSelectorBaseWithLitHtmlRendering extends DropDownVariantSelectorBase {\n protected abstract template: () => any;\n\n protected render() {\n render(this.template(), this.selectorContainerElement);\n }\n}"]}