{"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","sizeMap","startsWithNumberRegEx","onVariantsSortEvent","Event","isDefaultPrevented","result","productSizeVariantSorting","length","split","map","v","trim","toLowerCase","filter","sortBy","variant","variantNameWithSpaces","variantName","positionInSize","matches","enableVariantValuesManualSorting","isNumeric","orderNumber","parseInt","normalize","replace","parseFloat","indexOf","sizesRange","match"],"mappings":"OAASA,MAAwB,KAAV,WAEvB,MAAMC,EAAIC,OAAOC,OACXC,EAAIF,OAAOE,QAyCKC,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,CAAa,EACxFI,KAAKH,aAAeA,EACpBG,KAAKF,kBAAoBA,EACzBE,KAAKD,mBAAqBA,CAC9B,CAEOd,SACHe,KAAKS,oBAAsBT,KAAKU,oBAAmB,EAGnDxB,EAAEc,KAAKN,wBAAwB,EAAEiB,QAAQX,KAAKE,4BAA6B,CAACF,KAAKS,oBAAqBT,KAAKP,KAAK,EAEhHR,OAAOe,KAAKY,SAAQ,EAAIZ,KAAKN,yBAA0B,CAACmB,YAAc,CAAA,CAAK,CAAC,EAE5Eb,KAAKT,mBAAkB,CAC3B,CAEOuB,aAAaC,EAAgBC,EAAerB,GAC/C,IAOIsB,EAMAC,EAbAC,EAAsBjC,EAAEkC,MAAMpB,KAAKG,kBAAkB,EAGzD,OAFAjB,EAAE6B,CAAS,EAAEJ,QAAQQ,EAAqB,CAACH,EAAS,EAEhDG,EAAoBE,mBAAkB,EAC/BF,EAAoBG,QAG3BL,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,QAElNtB,EAAQ4B,2BAA6B5B,EAAQ4B,0BAA0BC,SACvEP,EAAUtB,EAAQ4B,0BAA0BE,MAAM,GAAG,EAAEC,IAAIC,GAAKA,GAAKA,EAAEC,KAAI,EAAGC,YAAW,CAAE,EAAEC,OAAOH,GAAKA,GAAKA,EAAEH,MAAM,GAGtHN,EAAwB,QAErB7B,EAAE0C,OAAOf,EAAU,SAAUgB,GAEhC,IAIIC,EACAC,EAMAC,EAaAC,EAxBJ,OAAIzC,EAAQ0C,kCAAoCnD,EAAEoD,UAAUN,EAAQO,WAAW,EACpEC,SAASR,EAAQO,WAAW,GAInCL,GADAD,GAA6D,YAApC,OAAQD,EAAQvC,KAAc,UAAmBuC,EAAQvC,KAAKgD,UAAS,EAAKT,EAAQvC,MAAMoC,YAAW,GAC1Fa,QAAQ,SAAU,EAAE,EAExDxD,EAAEoD,UAAUJ,CAAW,EAChBS,WAAWT,CAAW,EAIV,CAAC,KADpBC,EAAiBlB,EAAQ2B,QAAQV,CAAW,KAK5CW,EAAaX,EAAYT,MAAM,IAAK,CAAC,GAC1BD,QAEY,CAAC,KADxBW,EAAiBlB,EAAQ2B,QAAQC,EAAW,GAAGjB,KAAI,CAAE,GAE1CO,GAIXC,EAAUH,EAAsBa,MAAM5B,CAAqB,IAChDkB,EAAQZ,QAAUtC,EAAEoD,UAAUF,EAAQ,EAAE,IAIvDA,EAAUF,EAAYY,MAAM5B,CAAqB,IAClCkB,EAAQZ,QAAUtC,EAAEoD,UAAUF,EAAQ,EAAE,EAC5CO,WAAWP,EAAQ,EAAE,EADhC,KAAA,EAKJ,CAAC,EACL,C,QAjGkB9C,mB","file":"variant-selector-base.js","sourcesContent":["import { render } from 'lit-html';\r\n\r\nconst $ = window.jQuery;\r\nconst _ = window._;\r\n\r\nexport interface IVariantImage{\r\n title: string;\r\n thumbnailUrl: string;\r\n thumbnailDisplayWidth: number;\r\n thumbnailDisplayHeight: number;\r\n}\r\n\r\nexport interface IVariant{\r\n id: number;\r\n name: string;\r\n image: IVariantImage;\r\n}\r\n\r\nexport interface IVariantType{\r\n id: number;\r\n name: string;\r\n variants: Array;\r\n}\r\n\r\nexport interface IVariantProduct{\r\n productId: number;\r\n variants: Array;\r\n stockText: string;\r\n stockTextColor: string;\r\n stockCssClass: string;\r\n imageUrl: string;\r\n}\r\n\r\nexport interface IProductWithVariants{\r\n uniqueId: string;\r\n productId: number;\r\n relatedImages: Array;\r\n variantRelImageMatchRegExp: string;\r\n thumbnailImageMode: string;\r\n thumbnailImageWidth: number;\r\n variantTypes: Array;\r\n variantProducts: Array\r\n}\r\n\r\nexport abstract class VariantSelectorBase {\r\n protected VARIANT_CHANGED_EVENT: string = 'variantselector:changed';\r\n protected VARIANT_BEFORE_RENDER_EVENT: string = 'variantselector:beforevariantrender';\r\n protected VARIANT_SORT_EVENT: string = 'variantselector:onsort';\r\n\r\n protected selectorContainerElement: HTMLElement;\r\n protected product: IProductWithVariants;\r\n protected variantType: IVariantType;\r\n protected translations: Map;\r\n protected showPricesInclVat: boolean;\r\n protected loadAdditionalInfo: boolean;\r\n protected variantSelectorData: any;\r\n\r\n protected abstract getDataBeforeRender(): any;\r\n protected abstract template: () => any;\r\n protected processAfterRender(): any {};\r\n\r\n public abstract setSelected(variantId: string): void;\r\n public abstract setSelectedByName(variantValueName: string): void;\r\n public abstract getSelected(): number;\r\n public abstract filterVariants(unavailableVariants: any, preselectSingleAvailable: any): void;\r\n public abstract processVariants(variantTypeToProductInfoMap: any): void;\r\n\r\n constructor(public name: string, selectorContainerElement: HTMLElement, product: IProductWithVariants, variantTypeId: number, translations: Map, showPricesInclVat: boolean, loadAdditionalInfo: boolean){\r\n this.selectorContainerElement = selectorContainerElement;\r\n this.product = product;\r\n this.variantType = product.variantTypes.find((x: IVariantType) => x.id === variantTypeId);\r\n this.translations = translations;\r\n this.showPricesInclVat = showPricesInclVat;\r\n this.loadAdditionalInfo = loadAdditionalInfo;\r\n }\r\n\r\n public render() {\r\n this.variantSelectorData = this.getDataBeforeRender();\r\n\r\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.\r\n $(this.selectorContainerElement).trigger(this.VARIANT_BEFORE_RENDER_EVENT, [this.variantSelectorData, this.name]);\r\n\r\n render(this.template(), this.selectorContainerElement, {isConnected : false});\r\n\r\n this.processAfterRender();\r\n }\r\n\r\n public sortVariants(container: any, variants: any, product: any) {\r\n var onVariantsSortEvent = $.Event(this.VARIANT_SORT_EVENT);\r\n $(container).trigger(onVariantsSortEvent, [variants]);\r\n\r\n if (onVariantsSortEvent.isDefaultPrevented()) {\r\n return onVariantsSortEvent.result;\r\n }\r\n\r\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'];\r\n\r\n if (product.productSizeVariantSorting && product.productSizeVariantSorting.length) {\r\n sizeMap = product.productSizeVariantSorting.split(';').map(v => v && v.trim().toLowerCase()).filter(v => v && v.length);\r\n }\r\n\r\n var startsWithNumberRegEx = /^\\d+/g;\r\n\r\n return _.sortBy(variants, function (variant) {\r\n\r\n if (product.enableVariantValuesManualSorting && $.isNumeric(variant.orderNumber)) {\r\n return parseInt(variant.orderNumber);\r\n }\r\n\r\n var variantNameWithSpaces = (typeof (variant.name.normalize) === 'function' ? variant.name.normalize() : variant.name).toLowerCase();\r\n var variantName = variantNameWithSpaces.replace(/[\\s,]/g, '');\r\n\r\n if ($.isNumeric(variantName)) {\r\n return parseFloat(variantName);\r\n }\r\n\r\n var positionInSize = sizeMap.indexOf(variantName);\r\n if (positionInSize !== -1) {\r\n return positionInSize;\r\n }\r\n\r\n var sizesRange = variantName.split('-', 1);\r\n if (sizesRange.length) {\r\n positionInSize = sizeMap.indexOf(sizesRange[0].trim());\r\n if (positionInSize !== -1) {\r\n return positionInSize;\r\n }\r\n }\r\n\r\n var matches = variantNameWithSpaces.match(startsWithNumberRegEx);\r\n if (matches && matches.length && $.isNumeric(matches[0])) {\r\n return parseFloat(matches[0]);\r\n }\r\n\r\n matches = variantName.match(startsWithNumberRegEx);\r\n if (matches && matches.length && $.isNumeric(matches[0])) {\r\n return parseFloat(matches[0]);\r\n }\r\n\r\n return undefined;\r\n });\r\n }\r\n}\r\n"]}