{"version":3,"sources":["archive/product/variant-selector-provider/tiles-variant-selector-base.ts"],"names":["caseInsensitiveEquals","VariantSelectorBase","$","window","jQuery","pubsub","PubSub","TilesVariantSelectorBase","processAfterRender","self","this","$selectorContainerElement","selectorContainerElement","on","evt","preventDefault","toggleClass","$variants","find","$variantToSelect","setSelectedInternal","publish","variant","variantSelectorData","container","setSelected","variantId","filter","hasClass","length","setSelectedByName","variantValueName","foundVariantValue","variantType","variants","currentVariant","name","id","toString","getSelected","data","filterVariants","unavailableVariants","preselectSingleAvailable","$singleAvailableVariant","each","$this","$unavailable","unavailableVariant","exists","hide","addClass","disabled","attr","removeAttr","message","html","closest","show","removeClass","processVariants","variantTypeToProductInfoMap","replaceEmptyString","productInfo","discountInfo","isOutlet","flagName","replace","toLowerCase","flagId","isVariantAlreadySelected","currentVariantValue","isSelectedOptionAvailable","isSelectedAvailable","trigger","VARIANT_CHANGED_EVENT","product","productId","setVariantSelectorLabelPrefix","labels","changeSelection","select","$selected","is","prefix","text","variantTypeName"],"mappings":"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","file":"tiles-variant-selector-base.js","sourcesContent":["import { caseInsensitiveEquals } from \"../../../utils/number.js\";\r\nimport { VariantSelectorBase } from \"./variant-selector-base.js\";\r\n\r\nconst $ = window.jQuery;\r\nconst pubsub = window.PubSub;\r\n\r\nexport abstract class TilesVariantSelectorBase extends VariantSelectorBase {\r\n protected $variants: any;\r\n\r\n protected processAfterRender() {\r\n const self = this;\r\n const $selectorContainerElement = $(self.selectorContainerElement);\r\n\r\n $selectorContainerElement.on('click', function (evt: Event) {\r\n evt.preventDefault();\r\n $(this).toggleClass('active');\r\n });\r\n\r\n self.$variants = $selectorContainerElement.find('.js-variant');\r\n self.$variants.on('click', function (evt: Event) {\r\n evt.preventDefault();\r\n\r\n var $variantToSelect = $(this);\r\n self.setSelectedInternal($variantToSelect);\r\n });\r\n\r\n pubsub.publish('variantprocessor.variant.render', { variant: self.variantSelectorData, container: $selectorContainerElement });\r\n }\r\n\r\n public setSelected(variantId: string): void {\r\n var $variantToSelect = this.$variants.filter('[data-variantid=\"' + variantId + '\"]');\r\n var isVariantAlreadySelected = $variantToSelect.hasClass('selected');\r\n\r\n if (!isVariantAlreadySelected && $variantToSelect.length === 1) {\r\n this.setSelectedInternal($variantToSelect);\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) {\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 var $selected = this.$variants.filter('.selected');\r\n return $selected.data('variantid') || 0;\r\n }\r\n\r\n public filterVariants(unavailableVariants: any, preselectSingleAvailable: any): void {\r\n const self = this;\r\n var $singleAvailableVariant;\r\n\r\n this.$variants.each(function () {\r\n var $this = $(this);\r\n var $unavailable = $this.find('.js-unavailable-text');\r\n var variantId = $this.data('variantid');\r\n\r\n if (variantId <= 0) {\r\n return; // Default option\r\n }\r\n\r\n const unavailableVariant = unavailableVariants[variantId];\r\n\r\n if (unavailableVariant) {\r\n if (unavailableVariant.exists === false) {\r\n $this.hide();\r\n } else {\r\n $this.addClass('disabled');\r\n\r\n if (unavailableVariant.disabled) {\r\n $this.attr('disabled', 'disabled');\r\n } else {\r\n $this.removeAttr('disabled');\r\n }\r\n\r\n if (unavailableVariant.message) {\r\n $unavailable.html(unavailableVariant.message);\r\n $unavailable.closest('.js-unavailable-text-container').show();\r\n $this.attr('title', unavailableVariant.message);\r\n }\r\n\r\n $this.show();\r\n }\r\n } else {\r\n $this.removeClass('disabled');\r\n $this.removeAttr('disabled');\r\n\r\n $unavailable.html('');\r\n $unavailable.closest('.js-unavailable-text-container').hide();\r\n $this.removeAttr('title');\r\n $this.show();\r\n\r\n $singleAvailableVariant = typeof ($singleAvailableVariant) === 'undefined' ? $this : null;\r\n }\r\n });\r\n\r\n // ReSharper disable once CoercedEqualsUsing\r\n if ($singleAvailableVariant && preselectSingleAvailable) {\r\n var currentValue = self.getSelected();\r\n var newValue = $singleAvailableVariant.data('variantid');\r\n if (currentValue != newValue) {\r\n self.setSelected($singleAvailableVariant);\r\n }\r\n }\r\n }\r\n\r\n public processVariants(variantTypeToProductInfoMap: any): void {\r\n this.$variants.each(function () {\r\n var $this = $(this);\r\n var variantId = $this.data('variantid');\r\n\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 $this.addClass(replaceEmptyString + ' flag-' + productInfo.discountInfo.flagId + '-' + replaceEmptyString);\r\n }\r\n });\r\n }\r\n\r\n protected setSelectedInternal($variantToSelect: any): void {\r\n const $selectorContainerElement = $(this.selectorContainerElement);\r\n var isVariantAlreadySelected = $variantToSelect.hasClass('selected');\r\n\r\n this.$variants.removeClass('selected');\r\n\r\n var currentVariantValue = null;\r\n if (!isVariantAlreadySelected) {\r\n $variantToSelect.addClass('selected');\r\n currentVariantValue = $variantToSelect.data('variantid');\r\n }\r\n\r\n var isSelectedOptionAvailable = this.isSelectedAvailable();\r\n $selectorContainerElement.trigger(this.VARIANT_CHANGED_EVENT, [this.variantType, currentVariantValue || 0, 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 protected isSelectedAvailable() {\r\n var $selected = this.$variants.filter('.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 protected setVariantSelectorLabelPrefix(prefix) {\r\n const $selectorContainerElement = $(this.selectorContainerElement);\r\n var $variantSelectorLabel = $selectorContainerElement.find('.js-select-variant-label');\r\n $variantSelectorLabel.text(`${prefix} ${this.variantSelectorData.variantTypeName}`);\r\n }\r\n}\r\n"]}