{"version":3,"sources":["archive/product/variant-selector-provider/dropdown-variant-selector-base.ts"],"names":["caseInsensitiveEquals","VariantSelectorBase","$","window","jQuery","DropDownVariantSelectorBase","constructor","name","version","selectorContainerElement","product","variantTypeId","translations","showPricesInclVat","loadAdditionalInfo","super","this","processAfterRender","$dropDown","find","self","on","evt","newVariantValue","parseInt","target","value","_triggerSelectorChangedEvent","setSelected","variantId","getSelected","val","setSelectedByName","variantValueName","foundVariantValue","variantType","variants","currentVariant","id","toString","filterVariants","unavailableVariants","preselectSingleAvailable","$singleAvailableOption","$options","each","cleanOptionName","$option","data","text","unavailableVariant","showUnavailableVariants","showOutOfStockVariants","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"],"mappings":"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","file":"dropdown-variant-selector-base.js","sourcesContent":["import { render } from \"lit-html\";\nimport { caseInsensitiveEquals } from \"../../../utils/number.js\";\nimport { IProductWithVariants, IVariant, VariantSelectorBase } from \"./variant-selector-base.js\";\n\nconst $ = window.jQuery;\n\nexport abstract class DropDownVariantSelectorBase extends VariantSelectorBase {\n private $dropDown: any;\n\n constructor(name: string, private version: number, selectorContainerElement: HTMLElement, product: IProductWithVariants, variantTypeId: number, translations: Map, showPricesInclVat: boolean, loadAdditionalInfo: boolean) {\n super(name, selectorContainerElement, product, variantTypeId, translations, showPricesInclVat, loadAdditionalInfo);\n }\n\n protected processAfterRender() {\n super.processAfterRender();\n\n this.$dropDown = $(this.selectorContainerElement).find('select');\n\n const self = this;\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 const foundVariantValue = this.variantType.variants.find(function (currentVariant: IVariant) {\n return caseInsensitiveEquals(currentVariant.name, variantValueName);\n });\n\n if (foundVariantValue) {\n this.setSelected(foundVariantValue.id.toString());\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 && self.product.showOutOfStockVariants) {\n if (unavailableVariant) {\n $option.text(cleanOptionName + (unavailableVariant.message ? ' (' + 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"]}