{"version":3,"sources":["archive/product/variant-selector-provider/dropdown-variant-selector-v3.ts"],"names":["arraysAreEqual","html","repeat","DropDownVariantSelectorBase","ProductApi","$","window","jQuery","DropDownVariantSelectorV3","constructor","name","selectorContainerElement","product","variantTypeId","translations","showPricesInclVat","loadAdditionalInfo","super","this","_isOneTypeVariant","_productApi","_valuesToFill","Array","template","variantSelectorData","id","variants","length","labels","select","variantTypeName","variant","_variantTypeToCurrentValueMap","Map","variantTypes","map","variantType","document","on","VARIANT_CHANGED_EVENT","_onVariantChanged","bind","getDataBeforeRender","Date","valueOf","toLowerCase","sortVariants","get","changeSelection","processAfterRender","self","getVariantsShortInfo","productId","then","response","_variantsShortInfo","_fillVariantsInfo","_checkValuesToFill","evt","newVariantValue","isSelectedOptionAvailable","otherVariantTypeToValueMap","has","set","entries","filter","x","values","every","variantValue","otherSelectedValues","option","push","querySelector","options","selectedVariantValue","parseInt","value","selectedVariantValues","variantName","variantShortInfo","variantShortInfoList","find","variantValues","getAttribute","text","priceString","discountPercent","isOutlet","forEach","valuesToFill"],"mappings":"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","file":"dropdown-variant-selector-v3.js","sourcesContent":["import { arraysAreEqual } from \"../../../../components-shared/utils/array-utils.js\";\r\nimport { html } from 'lit-html';\r\nimport { repeat } from 'lit-html/directives/repeat';\r\nimport { IProductWithVariants, IVariant, IVariantType } from './variant-selector-base.js';\r\nimport { DropDownVariantSelectorBase } from \"./dropdown-variant-selector-base.js\";\r\nimport { ProductApi } from \"../../../api/archive/product/product-api.js\"\r\nimport { IVariantShortInfoResponse } from '../../../api/archive/product/interfaces/i-variant-short-info-response.js';\r\n\r\nconst $ = window.jQuery;\r\n\r\nexport class DropDownVariantSelectorV3 extends DropDownVariantSelectorBase {\r\n private _variantTypeToCurrentValueMap: Map;\r\n private _isOneTypeVariant: boolean = false;\r\n private _productApi: ProductApi = new ProductApi();\r\n private _variantsShortInfo: IVariantShortInfoResponse;\r\n private _valuesToFill: Array> = new Array>();\r\n\r\n constructor(name: string, selectorContainerElement: HTMLElement, product: IProductWithVariants, variantTypeId: number, translations: Map, showPricesInclVat: boolean, loadAdditionalInfo: boolean) {\r\n super(name, 1, selectorContainerElement, product, variantTypeId, translations, showPricesInclVat, loadAdditionalInfo);\r\n\r\n this._variantTypeToCurrentValueMap = new Map(this.product.variantTypes.map((variantType) => [variantType.id, 0]));\r\n this._isOneTypeVariant = this.product.variantTypes.length <= 1;\r\n\r\n $(document).on(this.VARIANT_CHANGED_EVENT, this._onVariantChanged.bind(this));\r\n }\r\n\r\n protected template = () => html`\r\n
\r\n \r\n
\r\n
\r\n \r\n
`;\r\n\r\n protected getDataBeforeRender() {\r\n return {\r\n id: new Date().valueOf() + '_vt' + this.variantType.id,\r\n variantTypeName: this.variantType.name.toLowerCase(),\r\n variants: this.sortVariants(this.selectorContainerElement, this.variantType.variants, this.product),\r\n labels: { select: this.translations.get('selectVariantPrefix'), changeSelection: this.translations.get('changeSelectionVariantPrefix') }\r\n };\r\n }\r\n\r\n protected processAfterRender() {\r\n super.processAfterRender();\r\n const self = this;\r\n\r\n if(this.loadAdditionalInfo){\r\n this._productApi.getVariantsShortInfo(this.product.productId, this.showPricesInclVat).then(response => {\r\n self._variantsShortInfo = response;\r\n if(self._isOneTypeVariant){\r\n self._fillVariantsInfo();\r\n } else {\r\n self._checkValuesToFill();\r\n }\r\n });\r\n } else {\r\n if(self._isOneTypeVariant){\r\n self._fillVariantsInfo();\r\n } else {\r\n self._checkValuesToFill();\r\n }\r\n }\r\n }\r\n\r\n private _onVariantChanged(evt: CustomEvent, variantType: IVariantType, newVariantValue: number, isSelectedOptionAvailable: boolean, productId: number){\r\n if(this.product.productId !== productId || this._isOneTypeVariant || !this._variantTypeToCurrentValueMap.has(variantType.id)){\r\n return;\r\n }\r\n\r\n this._variantTypeToCurrentValueMap.set(variantType.id, newVariantValue);\r\n const otherVariantTypeToValueMap = new Map([...this._variantTypeToCurrentValueMap.entries()].filter(x => x[0] !== this.variantType.id));\r\n const allOtherValuesSelected = [...otherVariantTypeToValueMap.values()].every(variantValue => variantValue > 0);\r\n\r\n if(allOtherValuesSelected){\r\n this._fillVariantsInfo([...otherVariantTypeToValueMap.values()]);\r\n }\r\n }\r\n\r\n private _fillVariantsInfo(otherSelectedValues: Array = null): void {\r\n if(this.loadAdditionalInfo && !this._variantsShortInfo){\r\n this._valuesToFill.push(otherSelectedValues);\r\n return;\r\n }\r\n\r\n const select = this.selectorContainerElement.querySelector('select') as HTMLSelectElement;\r\n for (var option of select.options) {\r\n const selectedVariantValue = parseInt(option.value);\r\n if(!selectedVariantValue){\r\n continue;\r\n }\r\n\r\n const selectedVariantValues = [selectedVariantValue];\r\n if(otherSelectedValues !== null) {\r\n selectedVariantValues.push(...otherSelectedValues);\r\n }\r\n\r\n const variantShortInfo = this._variantsShortInfo?.variantShortInfoList.find(variantShortInfo => arraysAreEqual(variantShortInfo.variantValues, selectedVariantValues));\r\n if(variantShortInfo){\r\n const variantName = option.getAttribute('data-name');\r\n option.text = `${variantName} ${variantShortInfo.priceString} ${variantShortInfo.discountPercent}%${variantShortInfo.isOutlet ? ' outlet' : ''}`;\r\n }\r\n }\r\n }\r\n\r\n private _checkValuesToFill(){\r\n const self = this;\r\n this._valuesToFill.forEach((valuesToFill: Array) => {\r\n self._fillVariantsInfo(valuesToFill);\r\n })\r\n this._valuesToFill = null;\r\n }\r\n}\r\n"]}