{"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","product","showUnavailableVariants","addClass","disabled","attr","message","html","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"],"mappings":"OAASA,0BAA6B,kCAC7BC,wBAA2B,6BAEpC,MAAMC,EAAIC,OAAOC,OACXC,OAASF,OAAOG,aAEAC,iCAAiCN,oBAGzCO,qBACN,MAAMC,EAAOC,KACPC,EAA4BT,EAAEO,EAAKG,0BAEzCD,EAA0BE,GAAG,QAAS,SAAUC,GAC5CA,EAAIC,iBACJb,EAAEQ,MAAMM,YAAY,YAGxBP,EAAKQ,UAAYN,EAA0BO,KAAK,eAChDT,EAAKQ,UAAUJ,GAAG,QAAS,SAAUC,GACjCA,EAAIC,iBAEJ,IAAII,EAAmBjB,EAAEQ,MACzBD,EAAKW,oBAAoBD,KAG7Bd,OAAOgB,QAAQ,kCAAmC,CAAEC,QAASb,EAAKc,oBAAqBC,UAAWb,IAG/Fc,YAAYC,GACf,IAAIP,EAAmBT,KAAKO,UAAUU,OAAO,oBAAsBD,EAAY,MAChDP,EAAiBS,SAAS,aAEI,IAA5BT,EAAiBU,QAC9CnB,KAAKU,oBAAoBD,GAI1BW,kBAAkBC,GACrB,GAAIA,EAAkB,CAClB,MAAMC,EAAoBtB,KAAKuB,YAAYC,SAAShB,KAAK,SAAUiB,GAC/D,OAAOnC,sBAAsBmC,EAAeC,KAAML,KAGlDC,GACAtB,KAAKe,YAAYO,EAAkBK,GAAGC,aAK3CC,cAEH,OADgB7B,KAAKO,UAAUU,OAAO,aACrBa,KAAK,cAAgB,EAGnCC,eAAeC,EAA0BC,GAC5C,MAAMlC,EAAOC,KACb,IAAIkC,EAEJlC,KAAKO,UAAU4B,KAAK,WAChB,IAAIC,EAAQ5C,EAAEQ,MACVqC,EAAeD,EAAM5B,KAAK,wBAC1BQ,EAAYoB,EAAMN,KAAK,aAEvBd,GAAa,IAIXsB,EAAqBN,EAAoBhB,GAE3CjB,EAAKwC,QAAQC,wBACTF,GACAF,EAAMK,SAAS,YAEXH,EAAmBI,UACnBN,EAAMO,KAAK,WAAY,YAGxBL,EAAmBM,UAClBP,EAAaQ,KAAKP,EAAmBM,SACrCP,EAAaS,QAAQ,kCAAkCC,OACvDX,EAAMO,KAAK,QAASL,EAAmBM,YAG3CR,EAAMY,YAAY,YAClBZ,EAAMa,WAAW,YAEjBZ,EAAaQ,KAAK,IAClBR,EAAaS,QAAQ,kCAAkCI,OACvDd,EAAMa,WAAW,SAEjBf,OAA+D,IAA9B,EAA4CE,EAAQ,MAIrFE,EACAF,EAAMc,OAENd,EAAMW,UAMdb,GAA2BD,GACRlC,EAAK8B,eACTK,EAAwBJ,KAAK,cAExC/B,EAAKgB,YAAYmB,GAKtBiB,gBAAgBC,GACnBpD,KAAKO,UAAU4B,KAAK,WAChB,IASQkB,EATJjB,EAAQ5C,EAAEQ,MACVgB,EAAYoB,EAAMN,KAAK,aAEvBd,GAAa,IAIbsC,EAAcF,EAA4BpC,KAC3BsC,EAAYC,aAAaC,WACpCH,EAAqBC,EAAYC,aAAaE,SAASC,QAAQ,OAAQ,KAAKC,cAChFvB,EAAMK,SAASY,EAAqB,SAAWC,EAAYC,aAAaK,OAAS,IAAMP,MAKzF3C,oBAAoBD,GAC1B,MAAMR,EAA4BT,EAAEQ,KAAKE,0BACzC,IAAI2D,EAA2BpD,EAAiBS,SAAS,YAIrD4C,GAFJ9D,KAAKO,UAAUyC,YAAY,YAED,MAMtBe,GALCF,IACDpD,EAAiBgC,SAAS,YAC1BqB,EAAsBrD,EAAiBqB,KAAK,cAGhB9B,KAAKgE,uBACrC/D,EAA0BgE,QAAQjE,KAAKkE,sBAAuB,CAAClE,KAAKuB,YAAauC,GAAuB,EAAGC,EAA2B/D,KAAKuC,QAAQ4B,YAEnJnE,KAAKoE,8BAAmD,EAArBpE,KAAK6B,cAClC7B,KAAKa,oBAAoBwD,OAAOC,gBAChCtE,KAAKa,oBAAoBwD,OAAOE,QAGhCP,sBACN,IAAIQ,EAAYxE,KAAKO,UAAUU,OAAO,aAGtC,OAA4B,IAArBuD,EAAUrD,QAAgBqD,EAAUC,GAAG,mBAGxCL,8BAA8BM,GACpC,MAAMzE,EAA4BT,EAAEQ,KAAKE,0BACbD,EAA0BO,KAAK,4BACrCmE,KAAQD,EAAH,IAAa1E,KAAKa,oBAAoB+D,yBA1JnD/E","file":"tiles-variant-selector-base.js","sourcesContent":["import { caseInsensitiveEquals } from \"../../../utils/number.js\";\nimport { VariantSelectorBase } from \"./variant-selector-base.js\";\n\nconst $ = window.jQuery;\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 const foundVariantValue = this.variantType.variants.find(function (currentVariant) {\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 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 if(unavailableVariant.message){\n $unavailable.html(unavailableVariant.message);\n $unavailable.closest('.js-unavailable-text-container').show();\n $this.attr('title', unavailableVariant.message);\n }\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"]}