{"version":3,"sources":["archive/product/variant-selector-provider/variant-selector-base.ts"],"names":["render","$","window","jQuery","_","VariantSelectorBase","processAfterRender","constructor","name","selectorContainerElement","product","variantTypeId","translations","showPricesInclVat","loadAdditionalInfo","this","VARIANT_CHANGED_EVENT","VARIANT_BEFORE_RENDER_EVENT","VARIANT_SORT_EVENT","variantType","variantTypes","find","x","id","variantSelectorData","getDataBeforeRender","trigger","template","isConnected","sortVariants","container","variants","onVariantsSortEvent","Event","isDefaultPrevented","result","sizeMap","startsWithNumberRegEx","productSizeVariantSorting","length","split","map","v","trim","toLowerCase","filter","sortBy","variant","enableVariantValuesManualSorting","isNumeric","orderNumber","parseInt","variantNameWithSpaces","normalize","variantName","replace","parseFloat","positionInSize","indexOf","sizesRange","matches","match"],"mappings":"OAASA,WAAc,WAEvB,MAAMC,EAAIC,OAAOC,OACXC,EAAIF,OAAOE,QA2CKC,oBAeRC,sBAQVC,YAAmBC,EAAcC,EAAuCC,EAA+BC,EAAuBC,EAAmCC,EAA4BC,GAA1KC,KAAAP,KAAAA,EAtBTO,KAAAC,sBAAgC,0BAChCD,KAAAE,4BAAsC,sCACtCF,KAAAG,mBAA6B,yBAqBnCH,KAAKN,yBAA2BA,EAChCM,KAAKL,QAAUA,EACfK,KAAKI,YAAcT,EAAQU,aAAaC,KAAK,GAAqBC,EAAEC,KAAOZ,GAC3EI,KAAKH,aAAeA,EACpBG,KAAKF,kBAAoBA,EACzBE,KAAKD,mBAAqBA,EAGvBd,SACHe,KAAKS,oBAAsBT,KAAKU,sBAGhCxB,EAAEc,KAAKN,0BAA0BiB,QAAQX,KAAKE,4BAA6B,CAACF,KAAKS,oBAAqBT,KAAKP,OAE3GR,OAAOe,KAAKY,WAAYZ,KAAKN,yBAA0B,CAACmB,aAAc,IAEtEb,KAAKT,qBAGFuB,aAAaC,EAAgBC,EAAerB,GAC/C,IAAIsB,EAAsB/B,EAAEgC,MAAMlB,KAAKG,oBAGvC,GAFAjB,EAAE6B,GAAWJ,QAAQM,EAAqB,CAACD,IAEvCC,EAAoBE,qBACpB,OAAOF,EAAoBG,OAG/B,IAAIC,EAAU,CAAC,MAAO,MAAO,WAAY,KAAM,UAAW,IAAK,QAAS,IAAK,SAAU,IAAK,QAAS,KAAM,UAAW,MAAO,MAAO,WAAY,OAAQ,MAAO,YAAa,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,QAMlNC,GAJA3B,EAAQ4B,2BAA6B5B,EAAQ4B,0BAA0BC,SACvEH,EAAU1B,EAAQ4B,0BAA0BE,MAAM,KAAKC,IAAIC,GAAKA,GAAKA,EAAEC,OAAOC,eAAeC,OAAOH,GAAKA,GAAKA,EAAEH,SAGxF,SAE5B,OAAOnC,EAAE0C,OAAOf,EAAU,SAAUgB,GAEhC,GAAIrC,EAAQsC,kCAAoC/C,EAAEgD,UAAUF,EAAQG,aAChE,OAAOC,SAASJ,EAAQG,aAG5B,IAAIE,GAA6D,mBAA5BL,EAAQvC,KAAc,UAAmBuC,EAAQvC,KAAK6C,YAAcN,EAAQvC,MAAMoC,cACnHU,EAAcF,EAAsBG,QAAQ,SAAU,IAE1D,GAAItD,EAAEgD,UAAUK,GACZ,OAAOE,WAAWF,GAGtB,IAAIG,EAAiBrB,EAAQsB,QAAQJ,GACrC,IAAwB,IAApBG,EACA,OAAOA,EAGX,IAAIE,EAAaL,EAAYd,MAAM,IAAK,GACxC,GAAImB,EAAWpB,SAEa,KADxBkB,EAAiBrB,EAAQsB,QAAQC,EAAW,GAAGhB,SAE3C,OAAOc,EAIXG,EAAUR,EAAsBS,MAAMxB,GAC1C,OAAIuB,GAAWA,EAAQrB,QAAUtC,EAAEgD,UAAUW,EAAQ,MAIrDA,EAAUN,EAAYO,MAAMxB,KACbuB,EAAQrB,QAAUtC,EAAEgD,UAAUW,EAAQ,IAJ1CJ,WAAWI,EAAQ,SAI9B,YA3FUvD","file":"variant-selector-base.js","sourcesContent":["import { render } from 'lit-html';\n\nconst $ = window.jQuery;\nconst _ = window._;\n\nexport interface IVariantImage{\n title: string;\n thumbnailUrl: string;\n thumbnailDisplayWidth: number;\n thumbnailDisplayHeight: number;\n}\n\nexport interface IVariant{\n id: number;\n name: string;\n image: IVariantImage;\n}\n\nexport interface IVariantType{\n id: number;\n name: string;\n variants: Array;\n}\n\nexport interface IVariantProduct{\n productId: number;\n variants: Array;\n stockText: string;\n stockTextColor: string;\n stockCssClass: string;\n imageUrl: string;\n}\n\nexport interface IProductWithVariants{\n uniqueId: string;\n productId: number;\n showUnavailableVariants: boolean;\n showOutOfStockVariants: boolean,\n relatedImages: Array;\n variantRelImageMatchRegExp: string;\n thumbnailImageMode: string;\n thumbnailImageWidth: number;\n variantTypes: Array;\n variantProducts: Array\n}\n\nexport abstract class VariantSelectorBase {\n protected VARIANT_CHANGED_EVENT: string = 'variantselector:changed';\n protected VARIANT_BEFORE_RENDER_EVENT: string = 'variantselector:beforevariantrender';\n protected VARIANT_SORT_EVENT: string = 'variantselector:onsort';\n\n protected selectorContainerElement: HTMLElement;\n protected product: IProductWithVariants;\n protected variantType: IVariantType;\n protected translations: Map;\n protected showPricesInclVat: boolean;\n protected loadAdditionalInfo: boolean;\n protected variantSelectorData: any;\n\n protected abstract getDataBeforeRender(): any;\n protected abstract template: () => any;\n protected processAfterRender(): any {};\n\n public abstract setSelected(variantId: string): void;\n public abstract setSelectedByName(variantValueName: string): void;\n public abstract getSelected(): number;\n public abstract filterVariants(unavailableVariants: any, preselectSingleAvailable: any): void;\n public abstract processVariants(variantTypeToProductInfoMap: any): void;\n\n constructor(public name: string, selectorContainerElement: HTMLElement, product: IProductWithVariants, variantTypeId: number, translations: Map, showPricesInclVat: boolean, loadAdditionalInfo: boolean){\n this.selectorContainerElement = selectorContainerElement;\n this.product = product;\n this.variantType = product.variantTypes.find((x: IVariantType) => x.id === variantTypeId);\n this.translations = translations;\n this.showPricesInclVat = showPricesInclVat;\n this.loadAdditionalInfo = loadAdditionalInfo;\n }\n\n public render() {\n this.variantSelectorData = this.getDataBeforeRender();\n\n // Can not be changed to native dispatchEvent because the jQuery passes extra arguments ([this.templateData, this.name]) differently from dispatchEvent. The dispatchEvent uses {, detail: ...} field.\n $(this.selectorContainerElement).trigger(this.VARIANT_BEFORE_RENDER_EVENT, [this.variantSelectorData, this.name]);\n\n render(this.template(), this.selectorContainerElement, {isConnected : false});\n\n this.processAfterRender();\n }\n\n public sortVariants(container: any, variants: any, product: any) {\n var onVariantsSortEvent = $.Event(this.VARIANT_SORT_EVENT);\n $(container).trigger(onVariantsSortEvent, [variants]);\n\n if (onVariantsSortEvent.isDefaultPrevented()) {\n return onVariantsSortEvent.result;\n }\n\n var sizeMap = ['xxs', '2xs', 'xx-small', 'xs', 'x-small', 's', 'small', 'm', 'medium', 'l', 'large', 'xl', 'x-large', 'xxl', '2xl', 'xx-large', 'xxxl', '3xl', 'xxx-large', '4xl', '5xl', '6xl', '7xl', '8xl', '9xl', '10xl'];\n\n if (product.productSizeVariantSorting && product.productSizeVariantSorting.length) {\n sizeMap = product.productSizeVariantSorting.split(';').map(v => v && v.trim().toLowerCase()).filter(v => v && v.length);\n }\n\n var startsWithNumberRegEx = /^\\d+/g;\n\n return _.sortBy(variants, function (variant) {\n\n if (product.enableVariantValuesManualSorting && $.isNumeric(variant.orderNumber)) {\n return parseInt(variant.orderNumber);\n }\n\n var variantNameWithSpaces = (typeof (variant.name.normalize) === 'function' ? variant.name.normalize() : variant.name).toLowerCase();\n var variantName = variantNameWithSpaces.replace(/[\\s,]/g, '');\n\n if ($.isNumeric(variantName)) {\n return parseFloat(variantName);\n }\n\n var positionInSize = sizeMap.indexOf(variantName);\n if (positionInSize !== -1) {\n return positionInSize;\n }\n\n var sizesRange = variantName.split('-', 1);\n if (sizesRange.length) {\n positionInSize = sizeMap.indexOf(sizesRange[0].trim());\n if (positionInSize !== -1) {\n return positionInSize;\n }\n }\n\n var matches = variantNameWithSpaces.match(startsWithNumberRegEx);\n if (matches && matches.length && $.isNumeric(matches[0])) {\n return parseFloat(matches[0]);\n }\n\n matches = variantName.match(startsWithNumberRegEx);\n if (matches && matches.length && $.isNumeric(matches[0])) {\n return parseFloat(matches[0]);\n }\n\n return undefined;\n });\n }\n}\n"]}