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