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