{"version":3,"sources":["webpack://hwcatalog/webpack/universalModuleDefinition","webpack://hwcatalog/webpack/bootstrap","webpack://hwcatalog/external {\"commonjs\":\"@shop/common\",\"commonjs2\":\"@shop/common\",\"amd\":\"@shop/common\",\"root\":\"common\"}","webpack://hwcatalog/./src/web/ts/domain/PriceTemplateType.ts","webpack://hwcatalog/./src/web/ts/domain/MarketingClassificationType.ts","webpack://hwcatalog/./src/web/ts/domain/HwOnlyOrBundleState.ts","webpack://hwcatalog/./src/web/ts/service/HwCatalogService.ts","webpack://hwcatalog/./src/web/ts/domain/LogicType.ts","webpack://hwcatalog/external {\"root\":\"_\",\"commonjs\":\"underscore\",\"commonjs2\":\"underscore\",\"amd\":\"underscore\"}","webpack://hwcatalog/./src/web/ts/utilitys/TrackingFormatting.ts","webpack://hwcatalog/./src/web/ts/domain/HwOnlyOrBundleSwitcherValue.ts","webpack://hwcatalog/./src/web/ts/tracking/EventListenerRegistry.ts","webpack://hwcatalog/./src/web/ts/main.ts","webpack://hwcatalog/./src/web/ts/service/IHwCatalogService.ts","webpack://hwcatalog/./src/web/ts/controller/MainController.ts","webpack://hwcatalog/./src/web/ts/directive/filter/FilterController.ts","webpack://hwcatalog/./src/web/ts/directive/sortControl/coSortControlController.ts","webpack://hwcatalog/./src/web/ts/directive/hardwareTilesContainer/coHardwareTilesContainerController.ts","webpack://hwcatalog/./src/web/ts/directive/navigation/coNavigationController.ts","webpack://hwcatalog/./src/web/ts/directive/hardwareTile/coHardwareTile.ts","webpack://hwcatalog/./src/web/ts/directive/hardwareTile/coHardwareTileTemplate.html","webpack://hwcatalog/./src/web/ts/directive/priceLabel/coPriceLabel.ts","webpack://hwcatalog/./src/web/ts/directive/priceLabel/coPriceLabelTemplate.html","webpack://hwcatalog/./src/web/ts/directive/priceLabel/coPriceLabelController.ts","webpack://hwcatalog/./src/web/ts/directive/navigation/coNavigation.ts","webpack://hwcatalog/./src/web/ts/directive/navigation/coNavigationTemplate.html","webpack://hwcatalog/./src/web/ts/directive/priceBox/coPriceBoxBundleRecurringTemplate.html","webpack://hwcatalog/./src/web/ts/directive/priceBox/coPriceBoxDeviceRecurringTemplate.html","webpack://hwcatalog/./src/web/ts/directive/priceBox/coPriceBoxDeviceOneTimeTemplate.html","webpack://hwcatalog/./src/web/ts/directive/priceBox/createPriceBoxDirective.ts","webpack://hwcatalog/./src/web/ts/directive/priceBox/PriceBoxController.ts","webpack://hwcatalog/./src/web/ts/directive/filter/coFilter.ts","webpack://hwcatalog/./src/web/ts/directive/filter/coFilterTemplate.html","webpack://hwcatalog/./src/web/ts/directive/sortControl/coSortControl.ts","webpack://hwcatalog/./src/web/ts/directive/sortControl/coSortControlTemplate.html","webpack://hwcatalog/./src/web/ts/directive/hardwareTilesContainer/coHardwareTilesContainer.ts","webpack://hwcatalog/./src/web/ts/directive/hardwareTilesContainer/coHardwareTilesContainerTemplate.html","webpack://hwcatalog/./src/web/ts/domain/BundleValue.ts","webpack://hwcatalog/./src/web/ts/domain/CriteriaGroupValue.ts","webpack://hwcatalog/./src/web/ts/domain/CriteriaValue.ts","webpack://hwcatalog/./src/web/ts/domain/HwCatalogSelectedTabUrl.ts","webpack://hwcatalog/./src/web/ts/domain/HwCatalogPageValue.ts","webpack://hwcatalog/./src/web/ts/domain/HwCatalogTabValue.ts","webpack://hwcatalog/./src/web/ts/domain/HwCatalogValue.ts","webpack://hwcatalog/./src/web/ts/domain/HardwareValue.ts","webpack://hwcatalog/./src/web/ts/domain/PriceValue.ts","webpack://hwcatalog/./src/web/ts/domain/SortingValue.ts","webpack://hwcatalog/./src/web/ts/domain/HwCatalogSelectedConfigurationValue.ts","webpack://hwcatalog/./src/web/ts/directive/hwOnlyBundleSwitcher/coHwOnlyBundleSwitcherController.ts","webpack://hwcatalog/./src/web/ts/directive/hwOnlyBundleSwitcher/coHwOnlyBundleSwitcher.ts","webpack://hwcatalog/./src/web/ts/directive/hwOnlyBundleSwitcher/coHwOnlyBundleSwitcherTemplate.html","webpack://hwcatalog/./src/web/ts/directive/adspaceTopContainer/coAdspaceTopContainer.ts","webpack://hwcatalog/./src/web/ts/directive/adspaceTopContainer/coAdspaceTopContainerTemplate.html","webpack://hwcatalog/./src/web/ts/directive/adspaceTopContainer/coAdpsaceTopContainerController.ts","webpack://hwcatalog/./src/web/ts/domain/TargetGroupValue.ts","webpack://hwcatalog/./src/web/ts/domain/TargetGroupSwitcherValue.ts","webpack://hwcatalog/./src/web/ts/directive/targetGroupSwitcher/coTargetGroupSwitcher.ts","webpack://hwcatalog/./src/web/ts/directive/targetGroupSwitcher/coTargetGroupSwitcher.html","webpack://hwcatalog/./src/web/ts/directive/targetGroupSwitcher/coTargetGroupSwitcherController.ts","webpack://hwcatalog/./src/web/ts/domain/ActionTargetState.ts","webpack://hwcatalog/./src/web/ts/domain/HwCatalogSwitcherStateValue.ts","webpack://hwcatalog/./src/web/ts/directive/hardwareTile/HardwareTileController.ts","webpack://hwcatalog/./src/web/ts/directive/loadMoreButton/coLoadMoreButtonController.ts","webpack://hwcatalog/./src/web/ts/directive/loadMoreButton/coLoadMoreButton.ts","webpack://hwcatalog/./src/web/ts/directive/loadMoreButton/coLoadMoreButtonTemplate.html","webpack://hwcatalog/./src/web/ts/tracking/HwCatalogTrackingService.ts","webpack://hwcatalog/external \"angular\"","webpack://hwcatalog/./src/web/ts/directive/occlDeviceTradeIn/coOcclDeviceTradeIn.ts","webpack://hwcatalog/./src/web/ts/directive/occlDeviceTradeIn/coOcclDeviceTradeInTemplate.html","webpack://hwcatalog/./src/web/ts/directive/occlDeviceTradeIn/coOcclDeviceTradeInController.ts","webpack://hwcatalog/./src/web/ts/domain/DeviceTradeInPageValue.ts","webpack://hwcatalog/./src/web/ts/domain/DeviceTradeInChannel.ts","webpack://hwcatalog/./src/web/ts/domain/DeviceTradeInResultType.ts","webpack://hwcatalog/./src/web/ts/domain/DeviceTradeInResult.ts","webpack://hwcatalog/./src/web/ts/domain/EcommerceProductValue.ts","webpack://hwcatalog/./src/web/ts/domain/EnergyEfficiency.ts","webpack://hwcatalog/./src/web/ts/domain/LoginStatusTrackingValue.ts"],"names":["webpackUniversalModuleDefinition","root","factory","exports","module","require","define","amd","window","__WEBPACK_EXTERNAL_MODULE__0__","__WEBPACK_EXTERNAL_MODULE__6__","__WEBPACK_EXTERNAL_MODULE__65__","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","getDefault","getModuleExports","object","property","prototype","hasOwnProperty","p","s","common_1","PriceTemplateType","this","argsContract","arguments","_values","forName","obj","values","_","META_INFO","enumMetaInfo","BUNDLE_RECURRING","DEVICE_RECURRING","DEVICE_ONE_TIME","MarketingClassificationType","HERO_DEVICE","ORDINARY_DEVICE","HwOnlyOrBundleState","HW_ONLY","BUNDLE","IHwCatalogService_1","MarketingClassificationType_1","LogicType_1","HwOnlyOrBundleState_1","TrackingFormatting_1","HwCatalogService","pageValueProvider","$q","loggerService","postUrlService","$sce","relativeLocation","callService","renderModeService","trackingService","hwCatalogTrackingService","_this","rowsOnTab","alreadyTrackedProducts","logger","pageValue","getPageValue","newCatalogEnabled","state","ServiceState","compareState","HwCompareState","hardwareCompareCall","hardwarePlpTeaser","forEach","tabs","tab","hwCatalogSwitcherStateValue","getCurrentTab","hwCatalogValue","copy","tabName","isPrerender","Number","MAX_VALUE","NEW_PAGE_SIZE","OLD_PAGE_SIZE","localDeviceTradeInResult","deviceTradeInPageValue","deviceTradeInResult","recalculateState","addEventListener","hardwareRowList","length","scrollToElement","document","querySelector","hT","offsetTop","hH","offsetHeight","wH","innerHeight","pageYOffset","page","console","log","$onInit","handlePaginationForPageInit","getHwCatalogTrackingDataOnInitialLoad","urlParams","URLSearchParams","location","search","has","URL_PARAMETER_NAME_PAGE","_i","showMoreRows","updateWindowRegardingPagination","href","setTimeout","scrollToCurrentPage","recalculateRows","hardwareList","maxRowCount","columnCount","hardwareRow","hardware","push","marketingClassification","rawHardwareRowList","slice","Math","min","moreHardwareToShow","getManagedState","getListedProductsLength","listedProductsLength","list","getLoadMoreValue","remainingProductsLength","hardwareListSize","criteriaGroup","getCurrentCriteriaGroup","sorts","getCurrentSorts","selectedCriteriaList","getSelectedCriteriaList","filterHardwareList","getHardware","toString","sortedHardwareList","sortHardwareList","getSelectedSort","recalculateCompareState","salesHighlight","track","trackingInfoCall","hardwareValues","selectedHardwareDeviceForComparisonList","filter","hw","isSelectedForDeviceCompare","selectedHardwareDeviceForComparisonIsEmpty","isEmpty","selectedHardwareDeviceForComparison","sort","isUndefined","sortBy","indexBySortingName","criteriaGroups","selectedValues","getSelectedValues","logicType","LogicType","OR","intersection","criteriaValues","AND","difference","updatePageAfter","fn","when","then","getHwCatalogTrackingData","pageWwwCall","nextUrl","link","uri","enrichLocationWithCurrentSelection","catch","error","targetGroup","getSelectedTargetGroupName","url","URL","origin","searchParams","set","e","selectTargetStateAction","hwOnlyOrBundleState","currentTab","selectTab","hwOnlyOrBundleSwitcherValue","selectedTargetGroupSwitcher","actionTargetState","catalogRestCalls","pop","lastActionTargetState","updateSwitcherState","cachedHwCatalogValue","loadHwCatalog","catalogValue","updateCatalogValue","setCatalogValue","setNavigationPageUpdateFlag","sessionStorage","setItem","getNavigationPageUpdateFlag","getItem","selectHwOnlyMode","getBundleHwCatalogUrl","originUrlForBundle","substring","indexOf","pathNameUrlForBundle","pathname","replace","getHardwareOnlyHwCatalogUrl","selectBundleMode","originUrlForHwOnly","pathNameUrlForHwOnly","selectTargetGroup","newTargetGroupId","getCurrentHwOnlyOrBundleSwitcherState","updatePage","debug","selectSort","selectDeviceForCompare","allHardwareValuesOnPage","selectedHardwareValues","unselectedHardwareValues","each","setEnabledForDeviceCompare","getCompareState","executeHwFirstFlowCall","handleCall","hwFirstFlowCall","executeTabRedirection","postComparisonData","postUrlLink","formData","externalId","index","getTrustedUrl","trustAsUrl","detailWwwAbsoluteCall","buildFormAndPostToURL","getSelectedCriteria","restCall","promiseValue","isTariffExplicitlySet","tariffExplicitlySet","getHwCatalogTopAdspaceUrl","hwCatalogTopAdspaceUrl","getHeaderContent","headerContent","getHwTeaserTextContent","getFooterContent","footerContent","getShowSwitcher","showSwitcher","getTargetGroupSwitcherValue","targetGroupSwitcherValue","newLocation","paginationStep","getPaginationStep","appendFilterQueryParam","calculateLocation","pushState","updateCanonicalLink","updatePageTitle","originalLocation","basePath","filterIndex","isMoreQueryParamIndex","filterParam","REGEX_URL_PARAMETER_PAGE","setAttribute","cleanTitle","title","REGEX_TITLE_PAGE","step","getElementsByClassName","scrollIntoView","behavior","getPageSize","amountOfItems","reduce","acc","val","concat","getTabs","getCurrentTabValue","getCurrentHwCatalogSwitcherValue","getCurrentCriteriaValue","currentSelectedCriteria","selected","getCurrentTargetGroupValue","getCurrentSortValue","sortingValues","currentSort","isFilterParamsInURL","getHardwareListSize","tabValue","trackingCount","trackHwCatalogSelectionOnChange","filterType","prevStateValue","trackProductImpression","trackHwCatalogSelectionOnInitialLoad","getDeviceTradeInPageValue","isOcclDeviceTradeInEnabled","occlDeviceTradeInEnabled","deleteDeviceTradeInResult","deviceTradeinResultCall","PostCall","deviceTradeInDeleteResultLink","updateDeviceTradeInResult","internalId","deviceTradeInResultLink","deviceName","price","elabValue","buildTrackingObjectForDeviceTradeInSuccessful","TrackingFormatting","formatDeviceTradeInTrackingDataEval","hwCatalogSelectedTabUrl","bundleHwCatalogUrl","hardwareOnlyHwCatalogUrl","isNewCatalogEnabled","setFilterType","componentName","visitedHwProducts","currentStateValue","allHwProducts","row","productDifferenceCount","trackedProductCount","innerWidth","childrenDivIds","querySelectorAll","visitedDivIds_1","divId","id","divTop","getBoundingClientRect","top","divBottom","bottom","some","offerName","trackingHwProducts","trackedHw","buildTrackingObjectForProductImpression","ecommerceProductValue","map","_a","apply","_b","trackProductClick","hwIndex","RegExp","$inject","formatDeviceTradeInTrackingDataElab","priceWithoutDecimal","floor","priceDecimal","HwOnlyOrBundleSwitcherValue","valueMetaInfo","EventListenerRegistry","Events","HwCatalogService_1","MainController_1","FilterController_1","coSortControlController_1","coHardwareTilesContainerController_1","coNavigationController_1","coHardwareTile_1","coPriceLabel_1","coNavigation_1","coPriceBoxBundleRecurringTemplate_html_1","coPriceBoxDeviceRecurringTemplate_html_1","coPriceBoxDeviceOneTimeTemplate_html_1","createPriceBoxDirective_1","coFilter_1","coSortControl_1","coHardwareTilesContainer_1","BundleValue_1","CriteriaGroupValue_1","CriteriaValue_1","HwCatalogSelectedTabUrl_1","HwCatalogPageValue_1","HwCatalogTabValue_1","HwCatalogValue_1","HardwareValue_1","PriceTemplateType_1","PriceValue_1","SortingValue_1","HwCatalogSelectedConfigurationValue_1","HwOnlyOrBundleSwitcherValue_1","coHwOnlyBundleSwitcherController_1","coHwOnlyBundleSwitcher_1","coAdspaceTopContainer_1","coAdpsaceTopContainerController_1","TargetGroupValue_1","TargetGroupSwitcherValue_1","coTargetGroupSwitcher_1","coTargetGroupSwitcherController_1","ActionTargetState_1","HwCatalogSwitcherStateValue_1","HardwareTileController_1","coLoadMoreButtonController_1","coLoadMoreButton_1","HwCatalogTrackingService_1","EventListenerRegistry_1","angular","coOcclDeviceTradeIn_1","coOcclDeviceTradeInController_1","DeviceTradeInPageValue_1","DeviceTradeInChannel_1","DeviceTradeInResultType_1","DeviceTradeInResult_1","EcommerceProductValue_1","EnergyEfficiency_1","LoginStatusTrackingValue_1","classToFactory","controller","MainController","FilterController","OcclDeviceTradeInController","SortControlController","HardwareTilesContainerController","NavigationController","HwOnlyBundleSwitcherController","AdspaceTopContainerController","HardwareTileController","TargetGroupSwitcherController","LoadMoreButtonController","service","HwCatalogTrackingService","run","noop","eventService","emit","HW_CATALOG_INITIALIZED","directive","coOcclDeviceTradeIn","coHardwareTile","coPriceLabel","coNavigation","coHwOnlyBundleSwitcher","createPriceBoxDirective","default","coFilter","coSortControl","coHardwareTilesContainer","coAdspaceTopContainer","coTargetGroupSwitcher","coLoadMoreButton","config","mappingServiceProvider","addAnnotatedType","BundleValue","CriteriaGroupValue","CriteriaValue","HwCatalogSelectedTabUrl","HwCatalogPageValue","HwCatalogTabValue","LoginStatusTrackingValue","HwCatalogValue","HardwareValue","EcommerceProductValue","EnergyEfficiency","PriceValue","SortingValue","HwCatalogSelectedConfigurationValue","TargetGroupValue","TargetGroupSwitcherValue","ActionTargetState","HwCatalogSwitcherStateValue","DeviceTradeInPageValue","DeviceTradeInChannel","DeviceTradeInResult","DeviceTradeInResultType","externalService","initExternalApps","$locationProvider","html5Mode","enabled","requireBase","rewriteLinks","priceTemplateType","open","snapshotService","hwCatalogService","getState","snapshot","manufacturerTitleText","getVatPriceInfo","vatPriceInfo","getFilterItems","getCriteriaGroupValue","filterItems","defaultSelectedFilterItem","displayText","amountAfterFilter","getAllHardwaresOfSelectedTab","checkUpdated","JSON","parse","getNavigationFlagStatus","criteriaValueFromURL_1","rememberedSelectedCriteria_1","trackSelectedItemGet","mappedFilterItems","mapCriteriasToFilterItems","criterias","selectedCriteria_1","criteria","isSelectedCriteriaInFilterItems","item","matchedCriteria","selectedCriteriaGroup","matchedCriteriaValueFromURL","toLowerCase","trackSelectedItemSet","unselectAllCriterias","updateNavigationFlag","removeActiveFilter","toggle","getLastString","lastIndexOf","status","setSelected","activateCriterias","hwList","filteredHwList","filterItem","getHardwareList","event","filterValue","rememberedCriteriaValue","getClickedSortValue","sortType","find","sortingValue","$","clickedSortType","self","on","getSortingTitleText","sortingTitleText","$window","pushTrackedProductsToDataLayer","getProductLineFor","TrackingProductLine","HARDWARE_ONLY","getSchemaData","schemaData","rawData","positionCounter","data","@type","position","description","image","imageUrl","brand","attributes","dimension165","offers","priceCurrency","parseFloat","String","metric4","isNaN","metric5","toFixed","constantPayload","headObjectData","@context","itemListElement","stringify","preSelectedTab","selectedIndex","shadowHost","shadowRoot","tabItems","keyCode","preventDefault","textContent","trim","click","tabTitle","detail","activeItem","coHardwareTileTemplate_html_1","scope","hwCompareUrl","productLine","isHighlight","tileIndex","template","controllerAs","__webpack_exports__","coPriceLabelTemplate_html_1","coPriceLabelController_1","amount","textAfter","focus","hint","text","PriceLabelController","bindToController","adaptiveService","shouldShowSmallPrice","checkBreakpoints","coNavigationTemplate_html_1","PriceBoxController_1","directiveName","htmlTemplate","PriceBox","PriceBoxController","$scope","getTariffDescription","fox36Active","bundle","tariffDataVolume","tariffName","activationFee","Intl","NumberFormat","style","currency","format","hasActivationFee","getJoinedMonthlyPrices","nextMonthlyPrices","join","coFilterTemplate_html_1","coSortControlTemplate_html_1","coHardwareTilesContainerTemplate_html_1","tariffOfferName","newValue","selectedTab","selectedSort","toggleCriteria","selectedCriteria","currentGroup","unifiedTrackingEnabled","loginStatusTrackingValue","isHardwareLoaded","glyphiconIconValue","isLastPage","loadNextRestLink","beginIndex","resultCount","maxValue","isHero","undefined","selectedForDeviceCompare","setSelectedForDeviceCompare","isSelected","isEnabledForDeviceCompare","enabledForDeviceCompare","isEnabled","getRatingStars","ratingStars","isDeviceOneTime","urlName","colors","imageColorWithAltUrl","colorImageUrl","highlights","marketingHint","imageUrlSmall","stockHint","contractDurationHint","rateDurationText","rateDurationValue","monthlyText","oneTimeHwoText","oneTimeBundleText","fullPriceText","promotionActive","energyEfficiency","oneTimePrice","monthlyPrice","totalPrice","promotionOneTimePrice","promotionMonthlyPrice","promotionTotalPrice","promotionActivationFee","promotionNextMonthlyPrices","shopContext","hardwareOfferName","tariffPackNames","selectHwOnly","$event","selectBundle","isHwOnlySelected","element","coHwOnlyBundleSwitcherTemplate_html_1","coAdspaceTopContainerTemplate_html_1","label","tooltip","defaultTargetGroup","visibleTargetGroups","switcherLabelText","switcherToolTip","switcherTitleText","growHint","networkHint","packList","infoIconToggle","coTargetGroupSwitcher_html_1","checkBox","stopPropagation","getSwitcherToolTip","getSwitcherTitleText","select","targetGroupToSelect","clone","hwOnlyOrBundleSwitcherValueClone","tilePart","target","closest","nativeLazyLoadingAvailable","createElement","mapHardwareOptionColors","colorImg","includes","intersectionObserverAvailable","priceReplace","activationpricevisiblity","promotionActivation","getEnergyEfficencyLabel","energyEfficiencyLabel","productDataSheet","imageClass","temp","innerHTML","anchors","anchor","tempDataSheet","para","marketingText","replaceQuoteFromString","observeImages","images","lazyImageObserver_1","IntersectionObserver","entries","entry","isIntersecting","lazyImage","src","dataset","unobserve","observe","clickedProduct","getActivationFeeDisplay","promo","normal","isBundleProduct","handleModalKeydown","getGrowHint","getNetworkHint","getPackList","getHardwareDescription","hardwareValue","getHardwareShopBrand","getHardwareMonthlyPrice","getHardwareTotalPrice","getHardwareRateDuration","getHardwareRateDurationforTariff","match","parseInt","getTariffName","getTariffDataVolume","getConnectionFee","getMonthlyAfterBenefit","aep_monthly_price_final","showInfoIcon","getMaxCountOfItems","getPage","getCountOfItems","getParameterName","coLoadMoreButtonTemplate_html_1","isUnifiedTrackingEnabled","subscribe","trackPage","content","category","productCategory","application","pageCategory","ConstantCall","rawContent","stateValue","selectedCriteriaValue","targetGroupValue","sortValue","isFilterParamsInUrl","event_name","eCat","eAct","eLab","eVal","nonInteraction","attempt","previousEventState","buildTrackingObjectForDeviceTradeInLoaded","hardwareName","buildTrackingObjectForDeviceTradeInStarted","buttonLabel","evalValue","buildTrackingObjectForDeviceTradeInModuleButtonClick","eActValue","buildTrackingObjectForDeviceTradeInDropDownClick","buildTrackingObjectForDeviceTradeInWarning","warningMessage","ecommerceProductValues","__assign","quantity","eshop_login_status","ecommerce","impressions","actionField","products","coOcclDeviceTradeInTemplate_html_1","getElementById","ev","getDeviceTradeInResult","handleDeleteEvent","handleSuccessEvent","getDeviceTradeInExternalId","externalID","getDeviceTradeInAuthToken","deviceTradeInToken","getDeviceTradeInChannel","tradeInChannel","getDeviceTradeInCmsUrl","cmsUrl","getDeviceTradeInCssUrl","cssUrl","getDeviceTradeInBaseUrl","baseUrl","FACE_TO_FACE","REMOTE","UNKNOWN","PURCHASE_PORTAL","OFFER_PRICE","RECYCLING","REQUEST_PRICE","ERROR","deviceBootable","displayDamaged","caseId","imei","checkTradeInResult","cust_cookie_value","logged_in","user_type"],"mappings":"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","file":"hwcatalogBundle.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"@shop/common\"), require(\"underscore\"), require(\"angular\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"@shop/common\", \"underscore\", \"angular\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"hwcatalog\"] = factory(require(\"@shop/common\"), require(\"underscore\"), require(\"angular\"));\n\telse\n\t\troot[\"hwcatalog\"] = factory(root[\"common\"], root[\"_\"], root[\"angular\"]);\n})(window, function(__WEBPACK_EXTERNAL_MODULE__0__, __WEBPACK_EXTERNAL_MODULE__6__, __WEBPACK_EXTERNAL_MODULE__65__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 10);\n","module.exports = __WEBPACK_EXTERNAL_MODULE__0__;","import { enumMetaInfo } from '@shop/common';\nexport class PriceTemplateType {\n\n    static META_INFO = enumMetaInfo('hwCatalog:PriceTemplateType');\n\n    private static _values:{ [s:string]:PriceTemplateType; } = {};\n\n    static forName(obj):PriceTemplateType {\n        if (obj === null) {\n            return null;\n        }\n        return PriceTemplateType._values[obj];\n    }\n\n    static values():PriceTemplateType[] {\n        return _.values(PriceTemplateType._values);\n    }\n\n\n    static BUNDLE_RECURRING = new PriceTemplateType(\"BUNDLE_RECURRING\");\n    static DEVICE_RECURRING = new PriceTemplateType(\"DEVICE_RECURRING\");\n    static DEVICE_ONE_TIME = new PriceTemplateType(\"DEVICE_ONE_TIME\");\n\n    constructor(public  name:string) {\n        argsContract(arguments, 'str');\n        PriceTemplateType._values[name] = this;\n    }\n\n}\n    \n","import { enumMetaInfo } from '@shop/common';\nexport class MarketingClassificationType {\n\n    static META_INFO = enumMetaInfo('hwCatalog:MarketingClassificationType');\n\n    private static _values:{ [s:string]:MarketingClassificationType; } = {};\n\n    static forName(obj):MarketingClassificationType {\n        argsContract(arguments, 'str | undef');\n        if (obj === null) {\n            return null;\n        }\n        return MarketingClassificationType._values[obj];\n    }\n\n    static values():MarketingClassificationType[] {\n        return _.values(MarketingClassificationType._values);\n    }\n\n    static HERO_DEVICE = new MarketingClassificationType(\"HERO_DEVICE\");\n    static ORDINARY_DEVICE = new MarketingClassificationType(\"ORDINARY_DEVICE\");\n\n    constructor(public  name:string) {\n        argsContract(arguments, 'str');\n        MarketingClassificationType._values[name] = this;\n    }\n\n}\n","import { enumMetaInfo } from '@shop/common';\nexport class HwOnlyOrBundleState {\n\n    static META_INFO = enumMetaInfo('hwCatalog:HwOnlyOrBundleState');\n\n    private static _values:{ [s:string]:HwOnlyOrBundleState; } = {};\n\n    static forName(obj):HwOnlyOrBundleState {\n        argsContract(arguments, 'string | null');\n        if (obj === null) {\n            return null;\n        }\n        return HwOnlyOrBundleState._values[obj];\n    }\n\n    static values():HwOnlyOrBundleState[] {\n        return _.values(HwOnlyOrBundleState._values);\n    }\n\n    static HW_ONLY = new HwOnlyOrBundleState(\"HW_ONLY\");\n    static BUNDLE = new HwOnlyOrBundleState(\"BUNDLE\");\n\n    constructor(public  name:string) {\n        argsContract(arguments, 'str');\n        HwOnlyOrBundleState._values[name] = this;\n    }\n\n}\n","import { IHwCatalogService, ServiceState, HwCompareState } from './IHwCatalogService';\nimport {\n    IPageValueProvider, ILogger, ILoggerService, IPostUrlService,\n    IRelativeLocationService, ICallService, IRenderModeService, ITrackingService, PostCall, Call\n} from '@shop/common';\nimport { HwCatalogPageValue } from '../domain/HwCatalogPageValue';\nimport { HwCatalogTabValue } from '../domain/HwCatalogTabValue';\nimport { HardwareValue } from '../domain/HardwareValue';\nimport { MarketingClassificationType } from '../domain/MarketingClassificationType';\nimport { CriteriaGroupValue } from '../domain/CriteriaGroupValue';\nimport { SortingValue } from '../domain/SortingValue';\nimport { LogicType } from '../domain/LogicType';\nimport { HwCatalogValue } from '../domain/HwCatalogValue';\nimport { CriteriaValue } from '../domain/CriteriaValue';\nimport {HwOnlyOrBundleState} from \"../domain/HwOnlyOrBundleState\";\nimport {TargetGroupSwitcherValue} from \"../domain/TargetGroupSwitcherValue\";\nimport * as _ from \"underscore\";\nimport {ActionTargetState} from \"../domain/ActionTargetState\";\nimport {HwCatalogTrackingService} from \"../tracking/HwCatalogTrackingService\";\nimport {DeviceTradeInPageValue} from \"../domain/DeviceTradeInPageValue\";\nimport {DeviceTradeInResult} from \"../domain/DeviceTradeInResult\";\nimport {TrackingFormatting} from '../utilitys/TrackingFormatting';\nimport {EcommerceProductValue} from \"../domain/EcommerceProductValue\";\n\nexport class HwCatalogService implements IHwCatalogService {\n\n    public static URL_PARAMETER_NAME_PAGE = \"p\";\n    private static REGEX_URL_PARAMETER_PAGE = new RegExp(\"([?;&])\"+ HwCatalogService.URL_PARAMETER_NAME_PAGE +\"[^&;]*[;&]?\");\n    private static REGEX_TITLE_PAGE = new RegExp(\" - Seite \\\\d\\\\d?\");\n    static $inject = ['pageValueProvider', '$q', 'loggerService', 'postUrlService', '$sce', 'relativeLocation', 'callService', 'renderModeService', 'trackingService', 'hwCatalogTrackingService', '$location'];\n\n    private static OLD_PAGE_SIZE:number = 6;////changes\n    private static NEW_PAGE_SIZE:number = 1;\n    private rowsOnTab:{ [key:string]:number} = {};\n    private logger:ILogger;\n\n    /** Objects bound to UI **/\n    private state:ServiceState;\n    private compareState:HwCompareState;\n    private newCatalogEnabled: boolean;\n    private alreadyTrackedProducts: HardwareValue[] = [];\n\n    //This local state is needed because in current implementation pageValue is not updated if\n    // the deviceTradeInResult is changed\n    private localDeviceTradeInResult: DeviceTradeInResult;\n\n    constructor(private pageValueProvider:IPageValueProvider<HwCatalogPageValue>,\n                private $q:ng.IQService,\n                loggerService:ILoggerService,\n                private postUrlService:IPostUrlService,\n                private $sce:ng.ISCEService,\n                private relativeLocation:IRelativeLocationService,\n                private callService:ICallService,\n                private renderModeService:IRenderModeService,\n                private trackingService:ITrackingService,\n                private hwCatalogTrackingService: HwCatalogTrackingService) {\n        this.logger = loggerService.create('commerce.hwcatalog.HwCatalogService');\n        var pageValue = pageValueProvider.getPageValue();\n        this.newCatalogEnabled = pageValue.newCatalogEnabled;\n        this.state = new ServiceState();\n\n        this.compareState = new HwCompareState(pageValue.hardwareCompareCall);\n        this.state.hardwarePlpTeaser = pageValue.hardwarePlpTeaser;\n        // load initial page\n        _.forEach(pageValue.tabs, (tab:HwCatalogTabValue) => {\n            tab.hwCatalogSwitcherStateValue = pageValue.getCurrentTab().hwCatalogValue.hwCatalogSwitcherStateValue.copy();\n            /**\n             * while rendering a Snapshot, show all rows-\n             */\n            this.rowsOnTab[tab.tabName] = renderModeService.isPrerender() ? Number.MAX_VALUE : this.newCatalogEnabled ? HwCatalogService.NEW_PAGE_SIZE : HwCatalogService.OLD_PAGE_SIZE;\n        });\n        //On initial load deviceTradeInResult is read from pageValue and managed locally afterwards\n        this.localDeviceTradeInResult = !!pageValue.deviceTradeInPageValue ? pageValue.deviceTradeInPageValue.deviceTradeInResult : null;\n        this.recalculateState(pageValue);\n    window.addEventListener('scroll', ()=>{\n        if (!this.state.hardwareRowList) {\n            return;\n        }\n\n        if(this.state.hardwareRowList.length <= 2){\n            var scrollToElement = document.querySelector('.co-load-more-button') as HTMLElement;\n            if (!scrollToElement) {\n                return;\n            }\n            var hT = scrollToElement.offsetTop;\n            var hH = scrollToElement.offsetHeight;\n            var wH = window.innerHeight;\n            var wS = window.pageYOffset;\n            if (wS > (hT + hH - wH)) {\n                var page:HwCatalogPageValue = this.pageValueProvider.getPageValue();\n                var name = page.getCurrentTab().tabName;\n                this.rowsOnTab[name] += this.newCatalogEnabled ? HwCatalogService.NEW_PAGE_SIZE : HwCatalogService.OLD_PAGE_SIZE;\n                this.recalculateState(page);\n                console.log(\"this.state.hardwareRowList.length: \", this.state.hardwareRowList.length)\n            }\n        }else {\n            HwCatalogService.NEW_PAGE_SIZE = 2\n        }\n    })\n    }\n\n\n    $onInit() {\n        this.handlePaginationForPageInit();\n        this.getHwCatalogTrackingDataOnInitialLoad();\n    }\n\n    handlePaginationForPageInit() {\n        const urlParams = new URLSearchParams(window.location.search);\n        if(urlParams.has(HwCatalogService.URL_PARAMETER_NAME_PAGE)) {\n            const page = Number(urlParams.get(HwCatalogService.URL_PARAMETER_NAME_PAGE));\n            for (let _i = 1; _i < page; _i++) {\n                this.showMoreRows();\n            }\n            this.updateWindowRegardingPagination(window.location.href);\n            if(page > 1) {\n                setTimeout(this.scrollToCurrentPage.bind(this));\n            }\n        }\n    }\n\n\n    recalculateRows(hardwareList:HardwareValue[], maxRowCount:number) {\n        var i;\n        var columnCount = 0;\n        var hardwareRow:HardwareValue[] = [];\n        var hardwareRowList:HardwareValue[][] = [];\n        var totalColumnCount = 12;\n        for (i = 0; i < hardwareList.length; i += 1) {\n            var hardware = hardwareList[i];\n\n            hardwareRow.push(hardware);\n\n            if (hardware.marketingClassification === MarketingClassificationType.HERO_DEVICE) {\n                columnCount += 2;\n            } else {\n                columnCount += 1;\n            }\n            if (columnCount >= totalColumnCount) {\n                hardwareRowList.push(hardwareRow);\n                hardwareRow = [];\n                columnCount = 0;\n            }\n        }\n        if (hardwareRow.length > 0) {\n            hardwareRowList.push(hardwareRow);\n        }\n        this.state.rawHardwareRowList = hardwareRowList;\n        this.state.hardwareRowList = hardwareRowList.slice(0, Math.min(hardwareRowList.length, maxRowCount));\n        this.state.moreHardwareToShow = hardwareRowList.length !== this.state.hardwareRowList.length;\n    }\n\n    getManagedState():ServiceState {\n        return this.state;\n    }\n\n    getListedProductsLength(): any {\n        let listedProductsLength = 0;\n        if (!this.state.hardwareRowList) {\n            return listedProductsLength;\n        }\n        this.state.hardwareRowList.forEach(list => listedProductsLength += list.length)\n        return listedProductsLength;\n    }\n    getLoadMoreValue() {\n        let remainingProductsLength = Number(this.state.hardwareListSize) - this.getListedProductsLength();\n        return remainingProductsLength > 24 ? \"24\" : remainingProductsLength\n\n    }\n\n    recalculateState(pageValue:HwCatalogPageValue) {\n        this.state.tabs = pageValue.tabs;\n        this.state.criteriaGroup = pageValue.getCurrentCriteriaGroup();\n        this.state.sorts = pageValue.getCurrentSorts();\n        this.state.selectedCriteriaList = pageValue.getSelectedCriteriaList();\n        var maxRowCount = this.rowsOnTab[pageValue.getCurrentTab().tabName];\n        var hardwareList = this.filterHardwareList(pageValue.getHardware(), pageValue.getCurrentCriteriaGroup());\n        this.state.hardwareListSize = hardwareList.length > 0 ? hardwareList.length.toString() : \"Keine\";\n        var sortedHardwareList = this.sortHardwareList(hardwareList, pageValue.getSelectedSort());\n        this.recalculateRows(sortedHardwareList, maxRowCount);\n        this.recalculateCompareState(sortedHardwareList);\n        this.state.salesHighlight = pageValue.getCurrentTab().salesHighlight;\n        this.state.hardwarePlpTeaser = pageValue.hardwarePlpTeaser;\n\n        if (pageValue.getCurrentTab().hwCatalogValue) {\n            this.trackingService.track(pageValue.getCurrentTab().hwCatalogValue.trackingInfoCall);\n        }\n        this.state.deviceTradeInResult = this.localDeviceTradeInResult;\n    }\n\n    recalculateCompareState(hardwareValues:HardwareValue[]) {\n        var selectedHardwareDeviceForComparisonList:any[] = _.filter(\n            hardwareValues,\n            (hw:HardwareValue)=>hw.isSelectedForDeviceCompare()\n        );\n        this.compareState.selectedHardwareDeviceForComparisonIsEmpty = _.isEmpty(selectedHardwareDeviceForComparisonList);\n        this.compareState.selectedHardwareDeviceForComparison = selectedHardwareDeviceForComparisonList;\n    }\n\n    sortHardwareList(hardwareList:HardwareValue[], sort:SortingValue) {\n        if (sort != null && !_.isUndefined(sort) && sort.name != null && !_.isUndefined(sort.name)) {\n            return _.sortBy(hardwareList, (hardware) => hardware.indexBySortingName[sort.name]);\n        }\n        return hardwareList;\n    }\n\n    filterHardwareList(hardwareList:HardwareValue[], criteriaGroups: CriteriaGroupValue | null):HardwareValue[] {\n        return _.filter(hardwareList, (hw:HardwareValue) => {\n            let selectedValues: string[];\n            selectedValues = !!criteriaGroups ? criteriaGroups.getSelectedValues() : [];\n\n            if (selectedValues.length === 0) {\n                return true;\n            }\n\n            if (criteriaGroups.logicType === LogicType.OR) {\n                // one or more criteria is matching\n                return _.intersection(selectedValues, hw.criteriaValues).length !== 0;\n            }\n\n            if (criteriaGroups.logicType === LogicType.AND) {\n                // all criteria values must match\n                return _.difference(selectedValues, hw.criteriaValues).length === 0;\n            }\n        });\n    }\n\n    //asynchron\n    updatePageAfter(fn:(p:HwCatalogPageValue) => any):ng.IPromise<HwCatalogPageValue> {\n        var page:HwCatalogPageValue = this.pageValueProvider.getPageValue();\n\n        // reset the hardware row list... so if the operation take a while a user interface reaction is shown.\n        this.state.hardwareRowList = null;\n        return this.$q.when(fn(page)).then(\n            () => {\n                this.recalculateState(page);\n                this.getHwCatalogTrackingData('');\n                const call = page.getCurrentTab().pageWwwCall;\n                const nextUrl = (call && call['constantPayload'] && call['constantPayload']['link'])\n                    ? call['constantPayload'].link.uri\n                    : window.location.href;\n                this.updateWindowRegardingPagination(this.enrichLocationWithCurrentSelection(nextUrl));\n                return page;\n            }\n        ).catch((error) => {\n            // Keep UI recoverable when backend/catalog call fails during a segment switch.\n            this.recalculateState(page);\n            this.logger.error('updatePageAfter() failed', error);\n            return page;\n        })\n    }\n\n    private enrichLocationWithCurrentSelection(location: string): string {\n        const targetGroup = this.getSelectedTargetGroupName();\n        if (!targetGroup) {\n            return location;\n        }\n\n        try {\n            const url = new URL(location, window.location.origin);\n            url.searchParams.set('zielgruppe', targetGroup);\n            return url.toString();\n        } catch (e) {\n            // Keep original location if parsing fails to avoid breaking navigation.\n            return location;\n        }\n    }\n\n    private selectTargetStateAction(tab:HwCatalogTabValue, hwOnlyOrBundleState:HwOnlyOrBundleState, targetGroup:string) {\n        this.updatePageAfter(\n            (page: HwCatalogPageValue) => {\n                let currentTab = page.getCurrentTab();\n                if (tab) {\n                    page.selectTab(tab);\n                    currentTab = page.getCurrentTab();\n                }\n\n                if (!hwOnlyOrBundleState) {\n                    hwOnlyOrBundleState = currentTab.hwCatalogSwitcherStateValue.hwOnlyOrBundleSwitcherValue.hwOnlyOrBundleState;\n                }\n                if (!targetGroup) {\n                    targetGroup = currentTab.hwCatalogSwitcherStateValue.selectedTargetGroupSwitcher;\n                }\n\n                let actionTargetState = currentTab.catalogRestCalls\n                    .filter(s => s.hwOnlyOrBundleState == hwOnlyOrBundleState && s.targetGroup === targetGroup)\n                    .pop();\n\n                this.state.lastActionTargetState = actionTargetState;\n\n                /*\n                set the switcher state now, not later, to make sure we avoid the impression of 2 target groups selected\n                at the same time until we have fetched the data\n                 */\n                this.updateSwitcherState(page, currentTab, hwOnlyOrBundleState, targetGroup);\n\n                if (actionTargetState.cachedHwCatalogValue) {\n                    this.updateCatalogValue(currentTab, actionTargetState);\n                } else {\n                    // now make the call if we need it\n                    return this.loadHwCatalog(actionTargetState.call).then(\n                        (catalogValue: HwCatalogValue) => {\n                            if (actionTargetState === this.state.lastActionTargetState) {\n                                actionTargetState.cachedHwCatalogValue = catalogValue;\n                                this.updateCatalogValue(currentTab, actionTargetState);\n                            }\n                        }\n                    );\n                }\n            }\n        );\n    }\n\n    private updateCatalogValue(currentTab: HwCatalogTabValue, actionTargetState: ActionTargetState): void {\n        currentTab.setCatalogValue(actionTargetState.cachedHwCatalogValue);\n        currentTab.hwCatalogSwitcherStateValue = actionTargetState.cachedHwCatalogValue.hwCatalogSwitcherStateValue.copy();\n    }\n\n    private updateSwitcherState(page: HwCatalogPageValue, currentTab: HwCatalogTabValue, hwOnlyOrBundleState:HwOnlyOrBundleState, targetGroup:string):void{\n        // switcher state should be separate per tab!\n        currentTab.hwCatalogSwitcherStateValue.hwOnlyOrBundleSwitcherValue.hwOnlyOrBundleState = hwOnlyOrBundleState;\n        // target group state should be consistent across tabs!\n        page.tabs.forEach(tab => {\n            tab.hwCatalogSwitcherStateValue.selectedTargetGroupSwitcher = targetGroup;\n        });\n    }\n\n    setNavigationPageUpdateFlag(value:string):void {\n        sessionStorage.setItem(\"alreadyUpdated\",value);\n    };\n\n    getNavigationPageUpdateFlag():string {\n       return  sessionStorage.getItem(\"alreadyUpdated\");\n    };\n\n\n    selectHwOnlyMode(): void {\n        this.selectTargetStateAction(null, HwOnlyOrBundleState.HW_ONLY, null);\n\n        // Checking current window location is bundle hardware catalog url, in that case user want to\n        // see devices with hardware only selection, then it re-direct on hardware only hw catalog page.\n        if (null != this.getBundleHwCatalogUrl()) {\n            let originUrlForBundle = this.getBundleHwCatalogUrl().substring(0, this.getBundleHwCatalogUrl().indexOf(\"/e-shop/\"));\n            let pathNameUrlForBundle = this.getBundleHwCatalogUrl().substring(this.getBundleHwCatalogUrl().indexOf(\"/e-shop/\"), this.getBundleHwCatalogUrl().length);\n            if (window.location.origin === originUrlForBundle && window.location.pathname === pathNameUrlForBundle) {\n                window.location.replace(this.getHardwareOnlyHwCatalogUrl());\n            }\n        }\n    }\n\n    selectBundleMode(): void {\n        this.selectTargetStateAction(null, HwOnlyOrBundleState.BUNDLE, null);\n\n        // Checking current window location is hw only hardware catalog url, in that case user want\n        // to see devices with bundle selection, then it re-direct on bundle hw catalog page.\n        if (null != this.getHardwareOnlyHwCatalogUrl()) {\n            let originUrlForHwOnly = this.getHardwareOnlyHwCatalogUrl().substring(0, this.getHardwareOnlyHwCatalogUrl().indexOf(\"/e-shop/\"));\n            let pathNameUrlForHwOnly = this.getHardwareOnlyHwCatalogUrl().substring(this.getHardwareOnlyHwCatalogUrl().indexOf(\"/e-shop/\"), this.getHardwareOnlyHwCatalogUrl().length);\n            if (window.location.origin === originUrlForHwOnly && window.location.pathname === pathNameUrlForHwOnly) {\n                window.location.replace(this.getBundleHwCatalogUrl());\n            }\n        }\n    }\n\n    selectTargetGroup(newTargetGroupId: string): void {\n        this.selectTargetStateAction(null, null, newTargetGroupId);\n    }\n\n    getCurrentHwOnlyOrBundleSwitcherState():HwOnlyOrBundleState {\n        return this.getPageValue().getCurrentTab().hwCatalogSwitcherStateValue.hwOnlyOrBundleSwitcherValue.hwOnlyOrBundleState;\n    }\n\n    updatePage() {\n        this.logger.debug(\"updatePage()\");\n        this.recalculateState(this.pageValueProvider.getPageValue());\n    }\n\n    selectSort(sort:SortingValue) {\n        var page:HwCatalogPageValue = this.pageValueProvider.getPageValue();\n        page.selectSort(sort);\n        this.recalculateState(page);\n        this.getHwCatalogTrackingData('');\n    }\n\n    showMoreRows() {\n        this.logger.debug(\"showMoreRows()\");\n        if (this.state.moreHardwareToShow) {\n            var page:HwCatalogPageValue = this.pageValueProvider.getPageValue();\n            var name = page.getCurrentTab().tabName;\n            this.rowsOnTab[name] += this.newCatalogEnabled ? HwCatalogService.NEW_PAGE_SIZE : HwCatalogService.OLD_PAGE_SIZE;\n            this.recalculateState(page);\n        }\n    }\n\n    selectDeviceForCompare(hardware:HardwareValue) {\n        var page:HwCatalogPageValue = this.pageValueProvider.getPageValue();\n        var allHardwareValuesOnPage:HardwareValue[] = page.getHardware();\n        var selectedHardwareValues:HardwareValue[] = [];\n\n        for (var i = 0; i < allHardwareValuesOnPage.length; i += 1) {\n            if (allHardwareValuesOnPage[i].isSelectedForDeviceCompare()) {\n                selectedHardwareValues.push(allHardwareValuesOnPage[i]);\n            }\n        }\n\n        if (selectedHardwareValues.length > 2) {\n            var unselectedHardwareValues:HardwareValue[] = _.difference(allHardwareValuesOnPage, selectedHardwareValues);\n            _.each(unselectedHardwareValues, (hw:HardwareValue)=>hw.setEnabledForDeviceCompare(false));\n        }\n        else {\n            _.each(allHardwareValuesOnPage, (hw:HardwareValue)=>hw.setEnabledForDeviceCompare(true));\n        }\n        this.recalculateCompareState(allHardwareValuesOnPage);\n    }\n\n    getCompareState():HwCompareState {\n        return this.compareState;\n    }\n\n    executeHwFirstFlowCall() {\n        this.callService.handleCall(this.getPageValue().hwFirstFlowCall);\n    }\n\n    executeTabRedirection(tab:HwCatalogTabValue) {\n        this.callService.handleCall(tab.pageWwwCall);\n    }\n\n    postComparisonData(postUrlLink:PostCall<void>) {\n        var formData:{[key:string]:string} = {};\n\n        for (var i = 0; i < this.compareState.selectedHardwareDeviceForComparison.length; i += 1) {\n            if (!_.isEmpty(this.compareState.selectedHardwareDeviceForComparison[i].externalId)) {\n                var index = i + 1;\n                formData['hardware_id_' + index] = this.compareState.selectedHardwareDeviceForComparison[i].externalId;\n                formData['hardware_url_' + index] = this.$sce.getTrustedUrl(this.$sce.trustAsUrl(this.compareState.selectedHardwareDeviceForComparison[i].detailWwwAbsoluteCall.link.uri));\n            }\n        }\n\n        var url = this.$sce.getTrustedUrl(this.$sce.trustAsUrl(postUrlLink.link.uri));\n        this.postUrlService.buildFormAndPostToURL(formData, url);\n    }\n\n    getSelectedCriteria():CriteriaValue[] {\n        return this.pageValueProvider.getPageValue().getSelectedCriteriaList();\n    }\n\n    loadHwCatalog(restCall:Call<HwCatalogValue>):ng.IPromise<HwCatalogValue> {\n        return this.callService.handleCall(restCall)\n            .then((promiseValue: HwCatalogValue) => promiseValue);\n    }\n\n    isTariffExplicitlySet():boolean {\n        return this.getPageValue().tariffExplicitlySet;\n    }\n\n    getHwCatalogTopAdspaceUrl():string {\n        return this.getPageValue().hwCatalogTopAdspaceUrl;\n    }\n\n    getHeaderContent(): string {\n        return this.getPageValue().getCurrentTab().headerContent;\n    }\n    getHwTeaserTextContent(): string {\n        return this.getPageValue().hardwarePlpTeaser;\n    }\n    getFooterContent(): string {\n        return this.getPageValue().getCurrentTab().footerContent;\n    }\n\n    private getPageValue():HwCatalogPageValue {\n        return this.pageValueProvider.getPageValue()\n    }\n\n    getShowSwitcher():boolean {\n        return this.getPageValue().getCurrentTab().hwCatalogSwitcherStateValue.hwOnlyOrBundleSwitcherValue.showSwitcher;\n    }\n\n    getTargetGroupSwitcherValue():TargetGroupSwitcherValue{\n        return this.getPageValue().getCurrentTab().targetGroupSwitcherValue;\n    }\n\n    getSelectedTargetGroupName():string {\n        const currentTab = this.getPageValue() && this.getPageValue().getCurrentTab\n            ? this.getPageValue().getCurrentTab()\n            : null;\n        if (!currentTab || !currentTab.hwCatalogSwitcherStateValue) {\n            return null;\n        }\n        return currentTab.hwCatalogSwitcherStateValue.selectedTargetGroupSwitcher;\n    }\n\n    updateWindowRegardingPagination(newLocation:string): void {\n        const paginationStep = this.getPaginationStep();\n        const location = this.appendFilterQueryParam(\n            window.location.href,\n            this.calculateLocation(newLocation, paginationStep)\n        );\n\n        this.relativeLocation.pushState(location);\n        this.updateCanonicalLink(location);\n        this.updatePageTitle(paginationStep);\n    }\n\n    appendFilterQueryParam(originalLocation:string, newLocation: string): string {\n        let basePath = originalLocation;\n        const filterIndex = basePath.indexOf('filter');\n\n        if (filterIndex === -1) {\n            return newLocation;\n        } else {\n            const isMoreQueryParamIndex = basePath.indexOf('&', filterIndex);\n            let filterParam: string = '';\n            if (isMoreQueryParamIndex > -1) {\n                filterParam = basePath.slice(filterIndex, isMoreQueryParamIndex);\n            } else {\n                filterParam = basePath.slice(filterIndex, basePath.length);\n            }\n            if (newLocation.indexOf('?') > -1) {\n                return newLocation + '&' + filterParam;\n            } else {\n                return newLocation + '?' + filterParam;\n            }\n        }\n    }\n\n    calculateLocation(newLocation: string, paginationStep: number): string {\n        newLocation = newLocation.replace(HwCatalogService.REGEX_URL_PARAMETER_PAGE, '');\n        if(paginationStep > 1) {\n            newLocation = newLocation + (newLocation.indexOf('?') > 0 ? \"&\" : \"?\") + HwCatalogService.URL_PARAMETER_NAME_PAGE + \"=\" + paginationStep;\n        }\n        return newLocation;\n    }\n\n    updateCanonicalLink(newLocation: string) {\n        if(document.querySelector('link[rel=\"canonical\"]')) {\n            document.querySelector('link[rel=\"canonical\"]').setAttribute('href', newLocation);\n        }\n    }\n\n    updatePageTitle(paginationStep: number) {\n        const cleanTitle = document.title.replace(HwCatalogService.REGEX_TITLE_PAGE, '');\n        document.title = cleanTitle + ((paginationStep > 1) ? ' - Seite ' + paginationStep : '');\n    }\n\n    scrollToCurrentPage():void {\n        const step = this.getPaginationStep();\n        let tileRow;\n        if(this.newCatalogEnabled){\n            tileRow = document.getElementsByClassName(\"grid-container\")[(step-1) * HwCatalogService.NEW_PAGE_SIZE];\n        }else{\n            tileRow = document.getElementsByClassName(\"hardware-scroll\")[(step-1) * HwCatalogService.OLD_PAGE_SIZE];\n        }\n        tileRow.scrollIntoView({behavior: 'smooth'});\n    }\n\n    getPageSize(): number {\n        return this.newCatalogEnabled ? HwCatalogService.NEW_PAGE_SIZE * 12 : HwCatalogService.OLD_PAGE_SIZE * 4;\n    }\n\n    getPaginationStep(): number {\n        if(!this.state.hardwareRowList) {\n            return 1;\n        }\n        let amountOfItems = this.state.hardwareRowList.reduce((acc, val) => acc.concat(val), []).length;  //aktuell Anzahl an Elementen\n        let paginationStep = 0;\n        while (amountOfItems > 0) {\n            amountOfItems = amountOfItems - (this.newCatalogEnabled ? HwCatalogService.NEW_PAGE_SIZE * 12 : HwCatalogService.OLD_PAGE_SIZE * 4);\n            paginationStep = paginationStep + 1;\n        }\n        return paginationStep;\n    }\n\n    getTabs(): HwCatalogTabValue[] {\n        return this.getPageValue().tabs;\n    }\n\n    getCurrentTabValue(): string {\n        return this.getPageValue().getCurrentTab().title;\n    }\n\n    getCurrentHwCatalogSwitcherValue(): string {\n        //get current Hw Catalog state value\n        let hwCatalogSwitcherStateValue = this.getPageValue().getCurrentTab().hwCatalogSwitcherStateValue;\n\n        if(hwCatalogSwitcherStateValue && hwCatalogSwitcherStateValue.hwOnlyOrBundleSwitcherValue) {\n            return hwCatalogSwitcherStateValue.hwOnlyOrBundleSwitcherValue.hwOnlyOrBundleState.name;\n        }\n\n        return null;\n    }\n\n    getCurrentCriteriaValue(): string {\n        let currentSelectedCriteria  = this.getSelectedCriteria();\n        if(currentSelectedCriteria.length === 1 && currentSelectedCriteria[0].selected){\n           return currentSelectedCriteria[0].name;\n        }\n        else {\n            return 'Alle';\n        }\n    }\n\n    getCurrentTargetGroupValue(): string {\n        //get current Hw Catalog state value\n        let hwCatalogSwitcherStateValue = this.getPageValue().getCurrentTab().hwCatalogSwitcherStateValue;\n\n        if(hwCatalogSwitcherStateValue) {\n            return this.getSelectedTargetGroupName();\n        }\n\n        return null;\n    }\n\n    getCurrentSortValue(): string {\n        if(this.getPageValue().getCurrentTab().sortingValues){\n            let currentSort = this.getPageValue().getCurrentTab().sortingValues.filter(currentSort => currentSort.selected === true);\n            return currentSort[0].name;\n        }\n    }\n\n    isFilterParamsInURL(): boolean{\n        const urlParams = new URLSearchParams(window.location.search);\n        const filterParamsInURL: boolean = urlParams.has('filter');\n        return filterParamsInURL;\n    }\n\n    getHardwareListSize(): string {\n        return this.state.hardwareListSize;\n    }\n\n    getHwCatalogTrackingData(tabValue: string): void {\n        this.state.trackingCount+=this.hwCatalogTrackingService.trackHwCatalogSelectionOnChange(\n            tabValue != '' ? tabValue : this.getCurrentTabValue(),\n            this.getCurrentHwCatalogSwitcherValue(),\n            this.getCurrentCriteriaValue(),\n            this.getHardwareListSize(),\n            this.getCurrentTargetGroupValue(),\n            this.getCurrentSortValue(),\n            this.isFilterParamsInURL(),\n            this.state.trackingCount,\n            this.state.filterType,\n            this.state.prevStateValue);\n        this.trackProductImpression(\"filter\");\n\n    }\n\n    getHwCatalogTrackingDataOnInitialLoad() {\n        this.state.trackingCount = 1;\n        this.hwCatalogTrackingService.trackHwCatalogSelectionOnInitialLoad(this.getCurrentTabValue(), this.getCurrentHwCatalogSwitcherValue(), this.getCurrentCriteriaValue(), this.getHardwareListSize(), this.getCurrentTargetGroupValue(), this.getCurrentSortValue(), this.isFilterParamsInURL());\n    }\n\n    getDeviceTradeInPageValue(): DeviceTradeInPageValue {\n        return this.getPageValue().deviceTradeInPageValue;\n    }\n\n    public isOcclDeviceTradeInEnabled(): boolean {\n        return this.getPageValue().occlDeviceTradeInEnabled;\n    }\n\n    public deleteDeviceTradeInResult(): void {\n        let deviceTradeinResultCall = new PostCall(this.getPageValue().deviceTradeInPageValue.deviceTradeInDeleteResultLink, 0);\n        this.callService.handleCall(deviceTradeinResultCall).then(() => {\n            this.localDeviceTradeInResult = null;\n            this.state.deviceTradeInResult = null;\n            this.updatePage();\n        });\n    }\n\n    public updateDeviceTradeInResult(internalId: string) {\n        let deviceTradeinResultCall = new PostCall(this.getPageValue().deviceTradeInResultLink, internalId);\n        this.callService.handleCall(deviceTradeinResultCall).then((deviceTradeInResult: DeviceTradeInResult) => {\n            this.localDeviceTradeInResult = deviceTradeInResult;\n            this.state.deviceTradeInResult = deviceTradeInResult;\n\n            if (!!this.state.deviceTradeInResult) {\n                if (this.state.deviceTradeInResult.deviceName && this.state.deviceTradeInResult.price) {\n                    const elabValue = this.state.deviceTradeInResult.deviceName + ' | ' + this.state.deviceTradeInResult.price;\n                    this.hwCatalogTrackingService.buildTrackingObjectForDeviceTradeInSuccessful(\n                        TrackingFormatting.formatDeviceTradeInTrackingDataEval(this.state.deviceTradeInResult.price),\n                        elabValue)\n                }\n            }\n        });\n    }\n\n    getBundleHwCatalogUrl(): string {\n        if(null != this.getPageValue().hwCatalogSelectedTabUrl){\n            return this.getPageValue().hwCatalogSelectedTabUrl.bundleHwCatalogUrl;\n        }\n        return null;\n    }\n\n    getHardwareOnlyHwCatalogUrl(): string {\n        if (null != this.getPageValue().hwCatalogSelectedTabUrl) {\n            return this.getPageValue().hwCatalogSelectedTabUrl.hardwareOnlyHwCatalogUrl;\n        }\n        return null;\n    }\n\n    isNewCatalogEnabled(): boolean{\n        return this.getPageValue().newCatalogEnabled;\n    }\n\n    setFilterType(filterType: string) {\n        this.state.filterType = filterType;\n        this.state.prevStateValue = `${this.getCurrentTabValue()}/${this.getCurrentHwCatalogSwitcherValue()}/${this.getCurrentCriteriaValue()}_${this.getHardwareListSize()}/${this.getCurrentTargetGroupValue()}/${this.getCurrentSortValue()}/${!this.isFilterParamsInURL() ? 'no_url_params' : this.getCurrentCriteriaValue()}`;\n    }\n    trackProductImpression(componentName:string) {\n        if (!this.state.hardwareRowList || this.state.hardwareRowList.length === 0) {\n            return;\n        }\n        const currentStateValue = `${this.getCurrentTabValue()}/${this.getCurrentHwCatalogSwitcherValue()}/${this.getCurrentCriteriaValue()}_${this.getHardwareListSize()}/${this.getCurrentTargetGroupValue()}/${this.getCurrentSortValue()}/${!this.isFilterParamsInURL() ? 'no_url_params' : this.getCurrentCriteriaValue()}`;\n        const allHwProducts = this.state.hardwareRowList.reduce((acc, row) => acc.concat(row), []);\n        let visitedHwProducts;\n        if(componentName == \"filter\" || componentName == \"loadMoreButton\"){\n            if(componentName == \"filter\"){\n                this.alreadyTrackedProducts = [];\n            }\n            const productDifferenceCount = allHwProducts.length-this.alreadyTrackedProducts.length;\n            const trackedProductCount = this.alreadyTrackedProducts.length;\n            if(productDifferenceCount > 4){\n                    visitedHwProducts = window.innerWidth < 768 ? allHwProducts.slice(trackedProductCount,trackedProductCount+2) : allHwProducts.slice(trackedProductCount,trackedProductCount+4);\n            }else{\n                visitedHwProducts = allHwProducts.slice(trackedProductCount, allHwProducts.length);\n            }\n        }else{\n            const childrenDivIds = document.querySelectorAll(\"#hw-tiles-container div[id]\");\n            const visitedDivIds = [];\n\n            for (var i = 0; i < childrenDivIds.length; i++) {\n                var divId = childrenDivIds[i].id;\n                var divTop = childrenDivIds[i].getBoundingClientRect().top;\n                var divBottom = childrenDivIds[i].getBoundingClientRect().bottom;\n\n                if (divTop < window.innerHeight && divBottom >= 0) {\n                    visitedDivIds.push(divId);\n                }\n            }\n            visitedHwProducts = allHwProducts.filter(hw => visitedDivIds.some(divId => divId === hw.offerName));\n        }\n        const trackingHwProducts = visitedHwProducts.filter(hw => !this.alreadyTrackedProducts.some(trackedHw => trackedHw.offerName === hw.offerName));\n        if (trackingHwProducts.length >= 6) {\n            // Push tracking data to window.tefDataLayer\n            this.hwCatalogTrackingService.buildTrackingObjectForProductImpression(currentStateValue,trackingHwProducts.slice(0, 6)\n                .filter((hw) => hw.ecommerceProductValue != null)\n                .map((hw) => hw.ecommerceProductValue), this.alreadyTrackedProducts.length);\n            this.alreadyTrackedProducts.push(...trackingHwProducts.slice(0, 6));\n        } else if (trackingHwProducts.length > 0) {\n            // Push tracking data to window.tefDataLayer\n            this.hwCatalogTrackingService.buildTrackingObjectForProductImpression(currentStateValue,trackingHwProducts\n                .filter((hw) => hw.ecommerceProductValue != null)\n                .map((hw) => hw.ecommerceProductValue), this.alreadyTrackedProducts.length);\n            this.alreadyTrackedProducts.push(...trackingHwProducts);\n        }\n    }\n    trackProductClick(ecommerceProductValue: EcommerceProductValue, hwIndex: number) {\n        const currentStateValue = `${this.getCurrentTabValue()}/${this.getCurrentHwCatalogSwitcherValue()}/${this.getCurrentCriteriaValue()}_${this.getHardwareListSize()}/${this.getCurrentTargetGroupValue()}/${this.getCurrentSortValue()}/${!this.isFilterParamsInURL() ? 'no_url_params' : this.getCurrentCriteriaValue()}`;\n        this.hwCatalogTrackingService.trackProductClick(ecommerceProductValue, currentStateValue, hwIndex);\n    }\n}\n","import { enumMetaInfo } from '@shop/common';\nexport class LogicType {\n\n    static META_INFO = enumMetaInfo('hwCatalog:LogicType');\n\n    private static _values:{ [s:string]:LogicType; } = {};\n\n    static forName(obj):LogicType {\n        argsContract(arguments, 'string | null');\n        if (obj === null) {\n            return null;\n        }\n        return LogicType._values[obj];\n    }\n\n    static values():LogicType[] {\n        return _.values(LogicType._values);\n    }\n\n\n    static AND = new LogicType(\"AND\");\n    static OR = new LogicType(\"OR\");\n\n    constructor(public  name:string) {\n        argsContract(arguments, 'str');\n        LogicType._values[name] = this;\n    }\n\n}\n","module.exports = __WEBPACK_EXTERNAL_MODULE__6__;","import {DeviceTradeInResult} from '../domain/DeviceTradeInResult';\n\nexport class TrackingFormatting {\n\n   public static formatDeviceTradeInTrackingDataElab(deviceTradeInResult: DeviceTradeInResult) : string {\n        const priceWithoutDecimal = Math.floor(deviceTradeInResult.price / 100);\n        let priceDecimal = deviceTradeInResult.price % 100;\n        return deviceTradeInResult.deviceName + \" | \" +\n            priceWithoutDecimal + \",\" + (priceDecimal < 10 ? \"0\" + priceDecimal : priceDecimal) + \" €\";\n    }\n\n   public static formatDeviceTradeInTrackingDataEval(price: number) : number {\n        let priceWithoutDecimal = Math.floor(price / 100);\n        const priceDecimal = price % 100;\n        return priceDecimal > 0 ? priceWithoutDecimal++ : priceWithoutDecimal;\n    }\n}","import {valueMetaInfo} from \"@shop/common\";\nimport {HwOnlyOrBundleState} from \"./HwOnlyOrBundleState\";\n\nexport class HwOnlyOrBundleSwitcherValue {\n\n    static META_INFO = valueMetaInfo('hwCatalog:HwOnlyOrBundleSwitcherValue', {\n        hwOnlyOrBundleState: 'HwOnlyOrBundleState',\n        showSwitcher: 'boolean'\n    });\n\n    hwOnlyOrBundleState: HwOnlyOrBundleState;\n    showSwitcher: boolean;\n\n}","export class EventListenerRegistry {\n    static $inject: string[] = ['hwCatalogTrackingService']\n}\n\nexport enum Events {\n    HW_CATALOG_INITIALIZED = 'hwcatalog:initialized'\n}","import {HwCatalogService} from './service/HwCatalogService';\nimport {MainController} from './controller/MainController';\nimport {FilterController} from './directive/filter/FilterController';\nimport {SortControlController} from './directive/sortControl/coSortControlController';\nimport {HardwareTilesContainerController} from './directive/hardwareTilesContainer/coHardwareTilesContainerController';\nimport {NavigationController} from './directive/navigation/coNavigationController';\nimport {coHardwareTile} from './directive/hardwareTile/coHardwareTile';\nimport {coPriceLabel} from './directive/priceLabel/coPriceLabel';\nimport {coNavigation} from './directive/navigation/coNavigation';\nimport coPriceBoxBundleRecurringTemplateHtml from './directive/priceBox/coPriceBoxBundleRecurringTemplate.html';\nimport coPriceBoxDeviceRecurringTemplateHtml from './directive/priceBox/coPriceBoxDeviceRecurringTemplate.html';\nimport coPriceBoxDeviceOneTimeTemplateHtml from './directive/priceBox/coPriceBoxDeviceOneTimeTemplate.html';\nimport {createPriceBoxDirective} from './directive/priceBox/createPriceBoxDirective';\nimport {coFilter} from './directive/filter/coFilter';\nimport {coSortControl} from './directive/sortControl/coSortControl';\nimport {coHardwareTilesContainer} from './directive/hardwareTilesContainer/coHardwareTilesContainer';\nimport {classToFactory, EventService, IExternalService, IMappingServiceProvider} from '@shop/common';\nimport {BundleValue} from './domain/BundleValue';\nimport {CriteriaGroupValue} from './domain/CriteriaGroupValue';\nimport {CriteriaValue} from './domain/CriteriaValue';\nimport {HwCatalogSelectedTabUrl} from './domain/HwCatalogSelectedTabUrl';\nimport {HwCatalogPageValue} from './domain/HwCatalogPageValue';\nimport {HwCatalogTabValue} from './domain/HwCatalogTabValue';\nimport {HwCatalogValue} from './domain/HwCatalogValue';\nimport {HardwareValue} from './domain/HardwareValue';\nimport {PriceTemplateType} from './domain/PriceTemplateType';\nimport {LogicType} from './domain/LogicType';\nimport {MarketingClassificationType} from './domain/MarketingClassificationType';\nimport {PriceValue} from './domain/PriceValue';\nimport {SortingValue} from './domain/SortingValue';\nimport {HwCatalogSelectedConfigurationValue} from './domain/HwCatalogSelectedConfigurationValue';\nimport {HwOnlyOrBundleSwitcherValue} from \"./domain/HwOnlyOrBundleSwitcherValue\";\nimport {HwOnlyOrBundleState} from \"./domain/HwOnlyOrBundleState\";\nimport {HwOnlyBundleSwitcherController} from \"./directive/hwOnlyBundleSwitcher/coHwOnlyBundleSwitcherController\";\nimport {coHwOnlyBundleSwitcher} from \"./directive/hwOnlyBundleSwitcher/coHwOnlyBundleSwitcher\";\nimport {coAdspaceTopContainer} from \"./directive/adspaceTopContainer/coAdspaceTopContainer\";\nimport {AdspaceTopContainerController} from \"./directive/adspaceTopContainer/coAdpsaceTopContainerController\";\nimport {TargetGroupValue} from \"./domain/TargetGroupValue\";\nimport {TargetGroupSwitcherValue} from \"./domain/TargetGroupSwitcherValue\";\nimport {coTargetGroupSwitcher} from \"./directive/targetGroupSwitcher/coTargetGroupSwitcher\";\nimport {TargetGroupSwitcherController} from \"./directive/targetGroupSwitcher/coTargetGroupSwitcherController\";\nimport {ActionTargetState} from \"./domain/ActionTargetState\";\nimport {HwCatalogSwitcherStateValue} from \"./domain/HwCatalogSwitcherStateValue\";\nimport {HardwareTileController} from \"./directive/hardwareTile/HardwareTileController\";\nimport {LoadMoreButtonController} from \"./directive/loadMoreButton/coLoadMoreButtonController\";\nimport {coLoadMoreButton} from \"./directive/loadMoreButton/coLoadMoreButton\";\nimport {HwCatalogTrackingService} from \"./tracking/HwCatalogTrackingService\";\nimport {EventListenerRegistry, Events} from \"./tracking/EventListenerRegistry\";\nimport angular = require('angular');\nimport { coOcclDeviceTradeIn } from './directive/occlDeviceTradeIn/coOcclDeviceTradeIn';\nimport { OcclDeviceTradeInController } from './directive/occlDeviceTradeIn/coOcclDeviceTradeInController';\nimport {DeviceTradeInPageValue} from \"./domain/DeviceTradeInPageValue\";\nimport {DeviceTradeInChannel} from \"./domain/DeviceTradeInChannel\";\nimport {DeviceTradeInResultType} from \"./domain/DeviceTradeInResultType\";\nimport {DeviceTradeInResult} from \"./domain/DeviceTradeInResult\";\nimport {EcommerceProductValue} from \"./domain/EcommerceProductValue\";\nimport {EnergyEfficiency} from \"./domain/EnergyEfficiency\";\nimport {LoginStatusTrackingValue} from \"./domain/LoginStatusTrackingValue\";\n\n// this type is used to describe a constructor that construct a 'any'\n// this is necessary because to be a valid IController at least one optional property of controller must be present.\ntype AnyConstructor = { new(...args: any[]): any };\n\nangular.module('commerce_hwcatalog', ['commerce_common'])\n\n// service level dependencies\n    .factory('hwCatalogService', classToFactory(HwCatalogService))\n\n    //dont move this below the run()-configurations.\n    .controller('MainController', <AnyConstructor>MainController)\n\n    // markup level dependencies\n    .controller('FilterController', <AnyConstructor>FilterController)\n    .controller('OcclDeviceTradeInController', <AnyConstructor>OcclDeviceTradeInController)\n    .controller('SortControlController', <AnyConstructor>SortControlController)\n    .controller('HardwareTilesContainerController', <AnyConstructor>HardwareTilesContainerController)\n    .controller('NavigationController', <AnyConstructor>NavigationController)\n    .controller('HwOnlyBundleSwitcherController', <AnyConstructor>HwOnlyBundleSwitcherController)\n    .controller('AdspaceTopContainerController', <AnyConstructor>AdspaceTopContainerController)\n    .controller('HardwareTileController', <AnyConstructor>HardwareTileController)\n    .controller('TargetGroupSwitcherController', <AnyConstructor>TargetGroupSwitcherController)\n    .controller('LoadMoreButtonController', <AnyConstructor>LoadMoreButtonController)\n\n    .factory('eventListenerRegistry', classToFactory(EventListenerRegistry))\n    .service('hwCatalogTrackingService', classToFactory(HwCatalogTrackingService))\n\n    .run(['eventListenerRegistry', angular.noop])\n    .run(['eventService', (eventService: EventService) => {\n        eventService.emit(Events.HW_CATALOG_INITIALIZED);\n    }])\n\n    .directive(\"coOcclDeviceTradeIn\", coOcclDeviceTradeIn)\n    .directive('coHardwareTile', coHardwareTile)\n    .directive('coPriceLabel', coPriceLabel)\n    .directive('coNavigation', coNavigation)\n    .directive('coHwOnlyBundleSwitcher', coHwOnlyBundleSwitcher)\n    .directive('coPriceBoxBundleRecurring', createPriceBoxDirective('coPriceBoxBundleRecurring', coPriceBoxBundleRecurringTemplateHtml))\n    .directive('coPriceBoxDeviceRecurring', createPriceBoxDirective('coPriceBoxDeviceRecurring', coPriceBoxDeviceRecurringTemplateHtml))\n    .directive('coPriceBoxDeviceOneTime', createPriceBoxDirective('coPriceBoxDeviceOneTime', coPriceBoxDeviceOneTimeTemplateHtml))\n    .directive(\"coFilter\", coFilter)\n    .directive(\"coSortControl\", coSortControl)\n    .directive(\"coHardwareTilesContainer\", coHardwareTilesContainer)\n    .directive(\"coAdspaceTopContainer\", coAdspaceTopContainer)\n    .directive(\"coTargetGroupSwitcher\", coTargetGroupSwitcher)\n    .directive(\"coLoadMoreButton\", coLoadMoreButton)\n    .config(['mappingServiceProvider', function (mappingServiceProvider: IMappingServiceProvider) {\n        mappingServiceProvider.addAnnotatedType(BundleValue);\n        mappingServiceProvider.addAnnotatedType(CriteriaGroupValue);\n        mappingServiceProvider.addAnnotatedType(CriteriaValue);\n        mappingServiceProvider.addAnnotatedType(HwCatalogSelectedTabUrl);\n        mappingServiceProvider.addAnnotatedType(HwCatalogPageValue);\n        mappingServiceProvider.addAnnotatedType(HwCatalogTabValue);\n        mappingServiceProvider.addAnnotatedType(LoginStatusTrackingValue);\n        mappingServiceProvider.addAnnotatedType(HwCatalogValue);\n        mappingServiceProvider.addAnnotatedType(HardwareValue);\n        mappingServiceProvider.addAnnotatedType(PriceTemplateType);\n        mappingServiceProvider.addAnnotatedType(LogicType);\n        mappingServiceProvider.addAnnotatedType(MarketingClassificationType);\n        mappingServiceProvider.addAnnotatedType(EcommerceProductValue);\n        mappingServiceProvider.addAnnotatedType(EnergyEfficiency);\n        mappingServiceProvider.addAnnotatedType(PriceValue);\n        mappingServiceProvider.addAnnotatedType(SortingValue);\n        mappingServiceProvider.addAnnotatedType(HwCatalogSelectedConfigurationValue);\n        mappingServiceProvider.addAnnotatedType(HwOnlyOrBundleSwitcherValue);\n        mappingServiceProvider.addAnnotatedType(HwOnlyOrBundleState);\n        mappingServiceProvider.addAnnotatedType(TargetGroupValue);\n        mappingServiceProvider.addAnnotatedType(TargetGroupSwitcherValue);\n        mappingServiceProvider.addAnnotatedType(ActionTargetState);\n        mappingServiceProvider.addAnnotatedType(HwCatalogSwitcherStateValue);\n        mappingServiceProvider.addAnnotatedType(DeviceTradeInPageValue);\n        mappingServiceProvider.addAnnotatedType(DeviceTradeInChannel);\n        mappingServiceProvider.addAnnotatedType(DeviceTradeInResult);\n        mappingServiceProvider.addAnnotatedType(DeviceTradeInResultType);\n    }])\n    .run(['externalService', (externalService: IExternalService) => {\n        externalService.initExternalApps();\n    }])\n    .config(['$locationProvider', function ($locationProvider: ng.ILocationProvider) {\n        $locationProvider.html5Mode(<any>{\n            enabled: true,\n            requireBase: true,\n            rewriteLinks: false\n        });\n    }]);\n","\nimport { HardwareValue } from '../domain/HardwareValue';\nimport { HwCatalogTabValue } from '../domain/HwCatalogTabValue';\nimport { CriteriaGroupValue } from '../domain/CriteriaGroupValue';\nimport { SortingValue } from '../domain/SortingValue';\nimport { CriteriaValue } from '../domain/CriteriaValue';\nimport { PriceTemplateType } from '../domain/PriceTemplateType';\nimport { PostCall, Url } from '@shop/common';\nimport {TargetGroupSwitcherValue} from \"../domain/TargetGroupSwitcherValue\";\nimport {ActionTargetState} from \"../domain/ActionTargetState\";\nimport {DeviceTradeInPageValue} from \"../domain/DeviceTradeInPageValue\";\nimport {DeviceTradeInResult} from '../domain/DeviceTradeInResult';\nimport {EcommerceProductValue} from \"../domain/EcommerceProductValue\";\nexport class ServiceState {\n    rawHardwareRowList:HardwareValue[][] = [];\n    hardwareRowList:HardwareValue[][] = [];\n    moreHardwareToShow:boolean = false;\n    tabs:HwCatalogTabValue[] = [];\n    criteriaGroup:CriteriaGroupValue;\n    sorts:SortingValue[] = [];\n    title:string;\n    selectedCriteriaList:CriteriaValue[];\n    hardwareListSize:string;\n    salesHighlight:boolean;\n    priceTemplateType:PriceTemplateType = PriceTemplateType.BUNDLE_RECURRING;\n    lastActionTargetState:ActionTargetState;\n    deviceTradeInResult: DeviceTradeInResult;\n    trackingCount: number;\n    filterType: string;\n    prevStateValue: string;\n    hardwarePlpTeaser: string;\n}\n\nexport class HwCompareState {\n    open:boolean = false;\n    selectedHardwareDeviceForComparison:any[];\n    selectedHardwareDeviceForComparisonIsEmpty:boolean = true;\n    postUrlLink:PostCall<void>;\n\n    constructor(postUrlLink:PostCall<void>) {\n        this.postUrlLink = postUrlLink;\n    }\n}\n\nexport interface IHwCatalogService {\n    getManagedState():ServiceState\n    getCompareState():HwCompareState\n    selectHwOnlyMode()\n    selectBundleMode()\n    getCurrentHwOnlyOrBundleSwitcherState()\n    updatePage()\n    selectSort(sort:SortingValue)\n    showMoreRows()\n    selectDeviceForCompare(hardwareValue:HardwareValue):void\n    postComparisonData(postUrlLink:Url):void\n    getSelectedCriteria():CriteriaValue[]\n    isTariffExplicitlySet():boolean\n    executeHwFirstFlowCall()\n    getHwCatalogTopAdspaceUrl():string\n    getHeaderContent(): string\n    getFooterContent(): string\n    getShowSwitcher():boolean\n    getTargetGroupSwitcherValue():TargetGroupSwitcherValue\n    getSelectedTargetGroupName(): string\n    selectTargetGroup(newTargetGroupId: string): void\n    updateWindowRegardingPagination(newLocation:string): void\n    getPaginationStep(): number\n    getPageSize(): number\n    setNavigationPageUpdateFlag(value:string)\n    getNavigationPageUpdateFlag():string\n    getTabs(): HwCatalogTabValue[]\n    getHwCatalogTrackingData(tabValue: string)\n    isOcclDeviceTradeInEnabled()\n    getDeviceTradeInPageValue(): DeviceTradeInPageValue\n    updateDeviceTradeInResult(internalId: string): void\n    getHwCatalogTrackingDataOnInitialLoad()\n    deleteDeviceTradeInResult(): void;\n    getBundleHwCatalogUrl(): string;\n    getHardwareOnlyHwCatalogUrl(): string;\n    isNewCatalogEnabled(): boolean;\n    executeTabRedirection(tab:HwCatalogTabValue)\n    setFilterType(filterType: string);\n    trackProductImpression(componentName: string): void;\n    trackProductClick(ecommerceProductValue: EcommerceProductValue, hwIndex: number): void;\n    getHwTeaserTextContent(): string;\n    getListedProductsLength(): any;\n    getLoadMoreValue():any\n}\n    \n","import { ServiceState, IHwCatalogService } from '../service/IHwCatalogService';\nimport { ISnapshotService } from '@shop/common';\nimport {TargetGroupSwitcherValue} from \"../domain/TargetGroupSwitcherValue\";\nexport class MainController {\n\n    // state\n    state:ServiceState;\n\n    /**\n     * always keep this injector, it makes your services safe\n     * against html minification. Keep it near your constructor, as the\n     * array must match the arguments in the constructor.\n     * @type {string[]}\n     */\n    static $inject = ['snapshotService', 'hwCatalogService'];\n\n    /**\n     * Define your Dependencies in the constructor.\n     * Don´t make any assignments - typescript will handle this for you.\n     * @param snapshotService\n     * @param hwCatalogService\n     */\n    constructor(public snapshotService:ISnapshotService,\n                public hwCatalogService:IHwCatalogService) {\n\n        this.state = hwCatalogService.getManagedState();\n        snapshotService.snapshot();\n    }\n\n    /**\n     * ATTENTION : don´t you ever write methods like this:\n     * showMoreRows = function() {\n         *  this.hwCatalogService.showMoreRows();\n         * }\n     *\n     * Always use the typescript-variant:\n     * showMoreRows = () => {\n         *  this.hwCatalogService.showMoreRows();\n         * }\n     *\n     * It keeps your 'this'.\n     *\n     * This will silently fail for the \"Controller as\" - Syntax, as\n     * for controller as, 'this' will be the scope on runtime, not the controller.\n     */\n    showMoreRows = () => {\n        this.hwCatalogService.showMoreRows();\n    };\n\n    getState = ():ServiceState => {\n        return this.state;\n    };\n\n    getHeaderContent(): string {\n        return this.hwCatalogService.getHeaderContent();\n    }\n\n    getFooterContent(): string {\n        return this.hwCatalogService.getFooterContent();\n    }\n    getTargetGroupSwitcherValue(): string{\n        return this.hwCatalogService.getTargetGroupSwitcherValue().manufacturerTitleText;\n    }\n    getVatPriceInfo(): string{\n        return this.hwCatalogService.getTargetGroupSwitcherValue().vatPriceInfo;\n    }\n}\n","import {IOnInit} from 'angular';\nimport { ServiceState, IHwCatalogService } from '../../service/IHwCatalogService';\nimport { CriteriaValue } from '../../domain/CriteriaValue';\nimport {CriteriaGroupValue} from \"../../domain/CriteriaGroupValue\";\nimport {FilterItem} from \"../../domain/FilterItem\";\n\n\nexport class FilterController implements IOnInit {\n\n    // state\n    state:ServiceState;\n\n    /**\n     * always keep this injector, it makes your services safe\n     * against html minification. Keep it near your constructor, as the\n     * array must match the arguments in the constructor.\n     * @type {string[]}\n     */\n    static $inject = ['hwCatalogService'];\n\n    /**\n     * Define your Dependencies in the constructor.\n     * Don´t make any assignments - typescript will handle this for you.\n     * @param hwCatalogService\n     */\n    constructor(public hwCatalogService:IHwCatalogService) {\n        this.state = hwCatalogService.getManagedState();\n    }\n\n    $onInit() {\n        this.updateNavigationFlag(\"false\");\n\t\t!this.trackSelectedItemGet() ? this.trackSelectedItemSet(\"Alle\"): null;\n\n        window.addEventListener('occl.shop-filter.changed', (event) => {\n            this.hwCatalogService.setFilterType('category switcher');\n            const filterValue: String = event[\"detail\"][\"value\"];\n            const criteriaGroup = this.getCriteriaGroupValue();\n            const rememberedCriteriaValue = this.getLastString(filterValue).toString();\n\n            if(rememberedCriteriaValue){\n                this.trackSelectedItemSet(rememberedCriteriaValue);\n            }\n\n            if (criteriaGroup) {\n                const criterias = criteriaGroup.criterias;\n                this.unselectAllCriterias(criterias);\n\n                const matchedCriteria = criterias.filter(criteria => criteria.value === filterValue);\n                matchedCriteria.length > 0 ? this.activateCriterias(matchedCriteria) : this.unselectAllCriterias(criterias);\n\n                this.updatePage();\n            }\n            this.hwCatalogService.getHwCatalogTrackingData('');\n        });\n    }\n\n    getFilterItems = (): FilterItem[] => {\n        const criteriaGroup = this.getCriteriaGroupValue();\n        let filterItems: FilterItem[] = [];\n        const defaultSelectedFilterItem: FilterItem = {\n            displayText: \"Alle\",\n            amountAfterFilter: this.getAllHardwaresOfSelectedTab().length,\n            value: \"All\",\n            selected: false\n        }\n        const checkUpdated = JSON.parse(this.getNavigationFlagStatus());\n\n        if (criteriaGroup) {\n            const urlParams = new URLSearchParams(window.location.search);\n            const criteriaValueFromURL: string | null = urlParams.get('filter');\n\n\t\t\tlet rememberedSelectedCriteria: string | null = this.trackSelectedItemGet();\n\t\t\trememberedSelectedCriteria === '*' ? rememberedSelectedCriteria = \"Sonstige\" : rememberedSelectedCriteria;\n\n            const mappedFilterItems = this.mapCriteriasToFilterItems(criteriaGroup.criterias);\n            const selectedCriteria: CriteriaValue | undefined = criteriaGroup.criterias\n                .filter(criteria => criteria.selected).pop();\n            const isSelectedCriteriaInFilterItems = mappedFilterItems\n                .filter(item => {\n                    return selectedCriteria ? item.value === selectedCriteria.value : false\n                }).length > 0;\n\n\n\t\t\tif (rememberedSelectedCriteria) {\n\t\t\t\tlet matchedCriteria: FilterItem | undefined =  mappedFilterItems\n\t\t\t\t\t.filter(criteria => criteria.displayText === rememberedSelectedCriteria).pop();\n\t\t\t\tconst selectedCriteriaGroup: CriteriaValue | undefined =  criteriaGroup.criterias\n\t\t\t\t\t.filter(criteria => criteria.title === rememberedSelectedCriteria).pop();\n\n\t\t\t\t//If criteria value is available from URL\n\t\t\t\tif (criteriaValueFromURL) {\n\t\t\t\t\tconst matchedCriteriaValueFromURL: FilterItem | undefined = mappedFilterItems\n\t\t\t\t\t\t.filter(criteria => (criteria.displayText.replace(/ /g, \"_\").toLowerCase()) === criteriaValueFromURL.toLowerCase()).pop();\n\n\t\t\t\t\tif (matchedCriteriaValueFromURL) {\n\t\t\t\t\t\tmatchedCriteria = matchedCriteriaValueFromURL;\n\t\t\t\t\t\tmatchedCriteria.selected = true;\n\n\t\t\t\t\t\tthis.trackSelectedItemSet(matchedCriteriaValueFromURL.displayText);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.unselectAllCriterias(criteriaGroup.criterias);\n\t\t\t\t\t\tdefaultSelectedFilterItem.selected = true;\n\n\t\t\t\t\t\tthis.trackSelectedItemSet(\"Alle\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (matchedCriteria) {\n\t\t\t\t\tthis.unselectAllCriterias(criteriaGroup.criterias);\n\t\t\t\t\tmatchedCriteria.selected = true;\n\t\t\t\t\tselectedCriteriaGroup.selected = true;\n\n\t\t\t\t\tif(!checkUpdated){\n\t\t\t\t\t\tthis.updateNavigationFlag(\"true\");\n\t\t\t\t\t\tthis.updatePage();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.unselectAllCriterias(criteriaGroup.criterias);\n\t\t\t\t\tdefaultSelectedFilterItem.selected = true;\n\t\t\t\t\tthis.trackSelectedItemSet(\"Alle\");\n\t\t\t\t\tif(!checkUpdated){\n\t\t\t\t\t\tthis.updateNavigationFlag(\"true\");\n\t\t\t\t\t\tthis.updatePage();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n            else if (!selectedCriteria) {\n                defaultSelectedFilterItem.selected = true;\n                this.unselectAllCriterias(criteriaGroup.criterias);\n            } else if (selectedCriteria && !isSelectedCriteriaInFilterItems) {\n                defaultSelectedFilterItem.selected = true;\n                this.unselectAllCriterias(criteriaGroup.criterias);\n                this.updatePage();\n            }\n            filterItems = [defaultSelectedFilterItem ,...mappedFilterItems];\n        }\n        return filterItems;\n    }\n\n    updatePage = ():void => {\n        this.hwCatalogService.updatePage();\n    };\n\n    updateNavigationFlag = (value:string):void => {\n        this.hwCatalogService.setNavigationPageUpdateFlag(value);\n    };\n\n    getNavigationFlagStatus = ():string => {\n        return this.hwCatalogService.getNavigationPageUpdateFlag();\n    };\n\n    removeActiveFilter = (criteria:CriteriaValue):void => {\n        criteria.toggle();\n        this.updatePage();\n    };\n\n    isTariffExplicitlySet = ():boolean => {\n        return this.hwCatalogService.isTariffExplicitlySet();\n    };\n\n\n    private getLastString = (criteria:String): String => criteria.substring(criteria.lastIndexOf('/') + 1);\n\n    private trackSelectedItemSet = (status:string): void => sessionStorage.setItem(\"selectedItem\", status);\n\n    private trackSelectedItemGet = (): string => sessionStorage.getItem(\"selectedItem\");\n\n    private getCriteriaGroupValue = (): CriteriaGroupValue | null => this.state.criteriaGroup;\n\n    private unselectAllCriterias = (criterias: CriteriaValue[]): void => {\n        criterias.forEach(criteria => {\n            criteria.setSelected(false);\n        });\n    }\n\n    private activateCriterias = (criterias: CriteriaValue[]): void => {\n        criterias.forEach(criteria => {\n            criteria.setSelected(true);\n        })\n    }\n\n    private mapCriteriasToFilterItems = (criterias: CriteriaValue[]): FilterItem[] => {\n        const hwList = this.getAllHardwaresOfSelectedTab();\n        return criterias.map(criteria => {\n            const filteredHwList = hwList.filter(hw => hw.criteriaValues.indexOf(criteria.value) > -1);\n\n            return {\n                displayText: criteria.title,\n                amountAfterFilter: filteredHwList.length,\n                value: criteria.value,\n                selected: criteria.selected\n            };\n        }).filter(filterItem => filterItem.amountAfterFilter > 0);\n    }\n\n    private getAllHardwaresOfSelectedTab = () => {\n        const selectedTab = this.state.tabs.filter(tab => tab.selected).pop();\n        return selectedTab.getHardwareList();\n    };\n}\n","import {IHwCatalogService, ServiceState} from '../../service/IHwCatalogService';\nimport {SortingValue} from '../../domain/SortingValue';\nimport {IOnInit} from \"angular\";\n\nexport class SortControlController implements IOnInit {\n\n    // state\n    state: ServiceState;\n\n    /**\n     * always keep this injector, it makes your services safe\n     * against html minification. Keep it near your constructor, as the\n     * array must match the arguments in the constructor.\n     * @type {string[]}\n     */\n    static $inject = ['hwCatalogService'];\n\n    /**\n     * Define your Dependencies in the constructor.\n     * Don´t make any assignments - typescript will handle this for you.\n     * @param hwCatalogService\n     */\n    constructor(public hwCatalogService: IHwCatalogService) {\n        this.state = hwCatalogService.getManagedState();\n    }\n\n    $onInit() {\n        setTimeout(function (){\n            const sortType: String = $(\"#selectSort\").val().toString();\n            const clickedSortType: SortingValue = self.getClickedSortValue(sortType);\n            self.selectSort(clickedSortType);\n        }, 100)\n        const self = this;\n        $(\"#selectSort\").on(\"change\", function () {\n            const sortType: String = $(this).val().toString();\n            const clickedSortType: SortingValue = self.getClickedSortValue(sortType);\n            self.selectSort(clickedSortType);\n        });\n    }\n\n    getClickedSortValue = (sortType: String): SortingValue => {\n        const selectedSort = _.find(this.state.sorts, (sortingValue: SortingValue) => sortingValue.name === sortType.toString());\n        return selectedSort as SortingValue;\n    };\n    public getSortingTitleText():string {\n        return this.hwCatalogService.getTargetGroupSwitcherValue().sortingTitleText;\n    }\n    selectSort = (sortType: SortingValue): void => {\n        this.hwCatalogService.setFilterType('sorting');\n        this.hwCatalogService.selectSort(sortType);\n    };\n}\n    \n","import {HwCompareState, IHwCatalogService, ServiceState} from '../../service/IHwCatalogService';\nimport {TrackingProductLine} from \"@shop/common\";\nimport {HardwareValue} from \"../../domain/HardwareValue\";\nimport {PriceTemplateType} from \"../../domain/PriceTemplateType\";\nimport {HwCatalogTrackingService} from \"../../tracking/HwCatalogTrackingService\";\n\nexport class HardwareTilesContainerController {\n\n    compareState:HwCompareState;\n    state:ServiceState;\n    /**\n     * always keep this injector, it makes your services safe\n     * against html minification. Keep it near your constructor, as the\n     * array must match the arguments in the constructor.\n     * @type {string[]}\n     */\n    static $inject = ['hwCatalogService', '$window'];\n\n    /**\n     * Define your Dependencies in the constructor.\n     * Don´t make any assignments - typescript will handle this for you.\n     * @param hwCatalogService\n     */\n    constructor(public hwCatalogService:IHwCatalogService,\n                private $window:ng.IWindowService) {\n        this.compareState = hwCatalogService.getCompareState();\n        this.state = hwCatalogService.getManagedState();\n\n        // Add event listener to window object for load event\n        this.$window.addEventListener('load', () => {\n            // Call the pushTrackedProductsToDataLayer() function on load\n            this.pushTrackedProductsToDataLayer();\n        });\n\n        // Add event listener to window object for scroll event\n        this.$window.addEventListener('scroll', () => {\n            // Call the pushTrackedProductsToDataLayer() function on scroll\n            this.pushTrackedProductsToDataLayer();\n        });\n    }\n\n    isTariffExplicitlySet():boolean {\n        return this.hwCatalogService.isTariffExplicitlySet();\n    }\n\n    getProductLineFor(hardware: HardwareValue): TrackingProductLine {\n        if (hardware.priceTemplateType === PriceTemplateType.BUNDLE_RECURRING) {\n            return TrackingProductLine.BUNDLE;\n        } else {\n            // if it isn't a bundle-tile, it has to be a hardware-only tile\n            // for determining the product line, it doesn't matter if the hardware has a recurring or non-recurring price\n            return TrackingProductLine.HARDWARE_ONLY\n        }\n    }\n\n    isNewCatalogEnabled():boolean {\n        return this.hwCatalogService.isNewCatalogEnabled();\n    }\n    private pushTrackedProductsToDataLayer() {\n            // Push tracking data to window.tefDataLayer\n            this.hwCatalogService.trackProductImpression(\"hardwareTiles\");\n    }\n    getSchemaData(): any{\n        const schemaData:any = [];\n        const rawData = this.hwCatalogService.getManagedState().rawHardwareRowList.reduce((acc, row) => acc.concat(row), []);\n        let positionCounter = 1;\n        rawData.forEach((data) => {\n            schemaData.push({\n                \"@type\":\"ListItem\",\n                \"position\": positionCounter++,\n                \"item\": {\n                    \"@type\": \"Product\",\n                    \"name\":data.description,\n                    \"image\":data.imageUrl,\n                    \"brand\":{\n                        \"@type\": \"Brand\",\n                        \"name\": data.ecommerceProductValue.attributes.dimension165\n                    },\n                    \"offers\": {\n                        \"@type\": \"Offer\",\n                        \"priceCurrency\": \"EUR\",\n                        \"price\": parseFloat(\n                            String((\n                                    (data.ecommerceProductValue.attributes.metric4 && !isNaN(data.ecommerceProductValue.attributes.metric4))\n                                        ? parseFloat(data.ecommerceProductValue.attributes.metric4)\n                                        : 0\n                                ) +\n                                (\n                                    (data.ecommerceProductValue.attributes.metric5 && !isNaN(data.ecommerceProductValue.attributes.metric5))\n                                        ? parseFloat(data.ecommerceProductValue.attributes.metric5)\n                                        : 0\n                                ))\n                        ).toFixed(2)\n                    },\n                    \"url\":data.detailWwwAbsoluteCall.constantPayload.link.uri\n                }\n            })\n        })\n\n        let headObjectData:any = {\n            \"@context\": \"https:\\/\\/schema.org\",\n            \"@type\": \"ItemList\",\n            \"itemListElement\":schemaData\n        };\n        let finalRawData = JSON.stringify(headObjectData);\n        return \"<script type='application/ld+json'>\" + finalRawData + \"</script>\";\n    }\n}\n","import {IHwCatalogService} from '../../service/IHwCatalogService';\n\nexport class NavigationController {\n\n    /**\n     * always keep this injector, it makes your services safe\n     * against html minification. Keep it near your constructor, as the\n     * array must match the arguments in the constructor.\n     * @type {string[]}\n     */\n    static $inject = ['hwCatalogService'];\n    selectedIndex: number;\n    /**\n     * Define your Dependencies in the constructor.\n     * Don´t make any assignments - typescript will handle this for you.\n     * @param hwCatalogService\n     */\n    constructor(public hwCatalogService:IHwCatalogService) {\n    this.preSelectedTab();\n    }\n\n    $onInit() {\n        setTimeout(() => {\n            const shadowHost = document.querySelector('tef-shop-tabs');\n            if (!shadowHost) {\n                return;\n            }\n            const shadowRoot = shadowHost.shadowRoot;\n            if (!shadowRoot) {\n                return;\n            }\n            const tabItems = shadowRoot.querySelectorAll('.item[tabindex=\"0\"]');\n            if (tabItems.length === 0) {\n                return;\n            }\n            tabItems.forEach(item => {\n                item.addEventListener('keydown', function(event) {\n                    // @ts-ignore\n                    if (event.key === 'Enter' || event.key === ' ' || event.keyCode === 13 || event.keyCode === 32) {\n                        event.preventDefault();  // Prevent default action (e.g., form submission)\n                        // @ts-ignore\n                        console.log(`${item.textContent.trim()} was activated by ${event.key}`);\n                        // @ts-ignore\n                        item.click();\n                    }\n                });\n            });\n        }, 1000);\n\n        window.addEventListener('occl.shop-tabs.open', (event) => {\n            this.hwCatalogService.setFilterType('tab');\n            const tabTitle = (<CustomEvent>event).detail.activeItem;\n            this.hwCatalogService.getTabs().forEach((tabs, index) => {\n                if (tabs.title === tabTitle) {\n                    if (!tabs.selected) {\n                        this.hwCatalogService.getHwCatalogTrackingData(tabs.title);\n                        this.hwCatalogService.executeTabRedirection(tabs);\n                    }\n                }\n            })\n        });\n    }\n\n    preSelectedTab = ():void => {\n        if(this.hwCatalogService.getTabs()) {\n            this.hwCatalogService.getTabs().forEach((tabs, index) => {\n                if (tabs.selected === true) {\n                    this.selectedIndex = index+1;\n                }\n            })\n        }\n    }\n}","import coHardwareTileTemplateHtml from './coHardwareTileTemplate.html';\nexport function coHardwareTile():ng.IDirective {\n    return {\n        scope: {\n            hardware: '=coHardwareTileHardware',\n            hwCompareUrl: '=coHardwareTileHwCompareUrl',\n            tariffExplicitlySet: '=coHardwareTileTariffExplicitlySet',\n            salesHighlight: '=coHardwareTileSalesHighlight',\n            productLine: '=coHardwareTileTrackingProductLine',\n            isHighlight: '=coHardwareTileHighlight',\n            tileIndex: '='\n        },\n        replace: true,\n        template: coHardwareTileTemplateHtml,\n        controller: 'HardwareTileController',\n        controllerAs: 'hardwareTileController'\n    };\n}\n","export default \"<div> <div ng-if=!hardwareTileController.isNewCatalogEnabled() data-ng-class=\\\"{'col-sm-12 col-md-6': hardware.isHero(),\\n                     'col-sm-6 col-md-3': !hardware.isHero()}\\\"> <div data-co-tracking-product-lines=productLine> <div class=co-hardware-tile data-ng-class=\\\"{'co-hardware-tile--hero': hardware.isHero(),\\n                         'co-hardware-tile--sales-highlight': salesHighlight,\\n                         'co-hardware-tile--device-one-time': hardware.isDeviceOneTime()}\\\" data-co-call-action=hardware.detailWwwAbsoluteCall data-co-call-action-stop-propagation=true data-co-uitest-element=hwcatalog-hwtile-panel data-ng-click=hardwareTileController.trackProductClick(hardware.offerName)> <div class=co-hardware-tile__header> <div class=trbo-brush-hwcatalog></div> <span data-ng-if=hardware.marketingHint class=co-hardware-tile__marketing-hint> {{ hardware.marketingHint }} </span> <h2 class=co-hardware-tile__title style=margin-bottom:0 data-co-uitest-element=hwcatalog-hwtile-title-label> <a data-co-call-action=hardware.detailWwwAbsoluteCall data-ng-bind-html=\\\"hardware.description | coUnsafeHtml\\\" data-co-uitest-element=hwcatalog-hwtile-title-link> </a> </h2> <div class=co-hardware-tile__rating-container data-ng-bind-html=\\\"hardware.getRatingStars() | coUnsafeHtml\\\" data-co-tracking-attributes data-co-tracking-attributes-action=link data-co-tracking-attributes-element-id=ratings> </div> </div> <div class=\\\"row co-hardware-tile__content\\\" data-co-uitest-element=hwcatalog-hwtile-content> <div data-ng-class=\\\"{'co-hardware-tile__image-wrapper': true,\\n                                    'col-sm-5 col-xs-4': hardware.isHero(),\\n                                    'col-sm-12 col-xs-4': !hardware.isHero()}\\\" ng-if=hardwareTileController.nativeLazyLoadingAvailable()> <img class=\\\"img-responsive co-hardware-tile__image\\\" src={{hardware.imageUrl}} alt={{hardware.description}} loading=lazy /> </div> <div data-ng-class=\\\"{'co-hardware-tile__image-wrapper': true,\\n                                    'col-sm-5 col-xs-4': hardware.isHero(),\\n                                    'col-sm-12 col-xs-4': !hardware.isHero()}\\\" ng-if=\\\"hardwareTileController.intersectionObserverAvailable() && !hardwareTileController.nativeLazyLoadingAvailable()\\\"> <img class=\\\"img-responsive co-hardware-tile__image\\\" data-src={{hardware.imageUrl}} ng-init=hardwareTileController.observeImages() alt={{hardware.description}} /> </div> <div data-ng-class=\\\"{'col-sm-7 col-xs-8': hardware.isHero(),\\n                                 'col-sm-12 col-xs-8': !hardware.isHero()}\\\" style=margin-left:15px> <div class=hidden-xs data-ng-if=hardware.isHero()> <p class=co-hardware-tile__highlights data-ng-bind-html=\\\"hardware.highlights | coUnsafeHtml\\\"> </p> <div class=hidden-xs> <span>Verfügbare Farben:</span> <div class=\\\"\\\"> <div class=\\\"btn-group btn-group-lg\\\"> <ul class=list-inline> <li data-ng-bind-html=\\\"colorMarkupElement | coUnsafeHtml\\\" data-ng-repeat=\\\"colorMarkupElement in hardware.colors\\\"> </li></ul> </div> </div> </div> </div> <div data-ng-switch=hardware.priceTemplateType.name data-co-uitest-element=hardware-price-list> <div data-ng-switch-when=BUNDLE_RECURRING data-co-price-box-bundle-recurring data-co-price-box-bundle-recurring-hardware=hardware data-co-price-box-bundle-recurring-tariff-explicitly-set=tariffExplicitlySet> </div> <div data-ng-switch-when=DEVICE_RECURRING data-co-price-box-device-recurring data-co-price-box-device-recurring-hardware=hardware> </div> <div data-ng-switch-when=DEVICE_ONE_TIME data-co-price-box-device-one-time data-co-price-box-device-one-time-hardware=hardware> </div> </div> </div> </div> <div class=co-hardware-tile__footer> <a class=\\\"btn btn-alpha btn-block\\\" data-co-uitest-element=button-to-configurator data-co-call-action=hardware.detailWwwAbsoluteCall data-co-tracking-attributes data-co-tracking-attributes-action=button data-co-tracking-attributes-element-id=select>Auswählen</a> <input class=externalId type=hidden value={{hardware.externalId}} /> </div> </div> </div> </div> <div ng-if=hardwareTileController.isNewCatalogEnabled() data-co-tracking-product-lines=productLine id=occlCatalog> <div tabindex=0 class=co-hardware-tile-new data-ng-class=\\\"{'co-hardware-tile--hero': hardware.isHero(),\\n                         'co-hardware-tile--sales-highlight': salesHighlight,\\n                         'co-hardware-tile--device-one-time': hardware.isDeviceOneTime()}\\\" data-co-call-action=hardware.detailWwwAbsoluteCall data-co-call-action-stop-propagation=true data-co-uitest-element=hwcatalog-hwtile-panel data-ng-click=hardwareTileController.trackProductClick(hardware.offerName)> <a tabindex=-1 href=\\\"{{hardware.detailWwwAbsoluteCall['constantPayload'].link.uri}}\\\" id={{hardware.offerName}} title={{hardwareTileController.replaceQuoteFromString(hardware.description)}} data-ng-if=!hardwareTileController.showInfoIcon()> <tef-shop-bundle-teaser cloak article='{\\\"type\\\":\\\"{{hardware.priceTemplateType.name}}\\\",\\n                    \\\"turbo\\\":\\\" \\\",\\n                    \\\"durationtext\\\":\\\"{{hardware.rateDurationText}}\\\",\\n                    \\\"durationvisibility\\\":\\\"DEVICE_RECURRING\\\",\\n                    \\\"duration\\\":\\\"{{hardware.rateDurationValue}}\\\",\\n                    \\\"imageurl\\\":\\\"{{hardware.imageUrl}}\\\",\\n                    \\\"imageloading\\\":\\\"{{isHighlight ? \\\"eager\\\" : \\\"lazy\\\"}}\\\",\\n                    \\\"imagefetchpriority\\\":\\\"{{isHighlight ? \\\"high\\\" : \\\"auto\\\"}}\\\",\\n                    \\\"imagealttext\\\":\\\"{{hardwareTileController.replaceQuoteFromString(hardware.description)}}\\\",\\n                    \\\"title\\\":\\\"{{hardwareTileController.replaceQuoteFromString(hardware.description)}}\\\",\\n                    \\\"data\\\":\\\"{{hardware.bundle.tariffDataVolume}}\\\",\\n                    \\\"datalabel\\\":\\\"Datenvolumen\\\",\\n                    \\\"datavisibility\\\":\\\"BUNDLE_RECURRING\\\",\\n                    \\\"charges\\\":[{\\\"label\\\":\\\"{{hardware.monthlyText.replaceAll(\\\":\\\",\\\"\\\")}}\\\",\\\"promotion\\\":\\\"\\\",\\\"value\\\":\\\"{{ hardwareTileController.priceReplace(hardware.price.monthlyPrice.toFixed(2))}}\\\",\\\"subtype\\\":\\\"Base\\\",\\\"chargevisibility\\\":\\\"BUNDLE_RECURRING/DEVICE_RECURRING\\\"},\\n                                {\\\"label\\\":\\\"{{hardware.oneTimeBundleText.replaceAll(\\\":\\\",\\\"\\\")}}\\\",\\\"promotion\\\":\\\"\\\",\\\"value\\\":\\\"{{ hardwareTileController.priceReplace(hardware.price.oneTimePrice.toFixed(2)) }}\\\",\\\"subtype\\\":\\\"List\\\",\\\"chargevisibility\\\":\\\"BUNDLE_RECURRING\\\"},\\n                                {\\\"label\\\":\\\"{{hardware.oneTimeHwoText.replaceAll(\\\":\\\",\\\"\\\")}}\\\",\\\"promotion\\\":\\\"\\\",\\\"value\\\":\\\"{{hardwareTileController.priceReplace(hardware.price.oneTimePrice.toFixed(2))}}\\\",\\\"subtype\\\":\\\"List\\\",\\\"chargevisibility\\\":\\\"DEVICE_RECURRING\\\"},\\n                                {\\\"label\\\":\\\"{{hardware.fullPriceText.replaceAll(\\\":\\\",\\\"\\\")}}\\\",\\\"promotion\\\":\\\"\\\",\\\"value\\\":\\\"{{ hardwareTileController.priceReplace(hardware.price.totalPrice.toFixed(2))}}\\\",\\\"subtype\\\":\\\"List\\\",\\\"chargevisibility\\\":\\\"DEVICE_RECURRING\\\"},\\n                                {\\\"label\\\":\\\"{{hardware.fullPriceText.replaceAll(\\\":\\\",\\\"\\\")}}\\\",\\\"promotion\\\":\\\"\\\",\\\"value\\\":\\\"{{hardwareTileController.priceReplace(hardware.price.oneTimePrice.toFixed(2))}}\\\",\\\"subtype\\\":\\\"Base\\\",\\\"chargevisibility\\\":\\\"DEVICE_ONE_TIME\\\"}\\n                                {{hardwareTileController.activationpricevisiblity(hardware.price.promotionActivationFee, hardware.price.activationFee)}}]}' color-option={{hardwareTileController.mapHardwareOptionColors(hardware)}} tile-style=\\\"{{hardware.price.promotionMonthlyPrice || hardware.price.promotionOneTimePrice != null ? 'border:2px solid red' : ''}}\\\"> <span ng-if=\\\"hardware.energyEfficiency.productDataSheet || hardware.energyEfficiency.energyEfficiencyLabel\\\" slot=energy-level class=energy-level data-ng-bind-html=\\\"hardwareTileController.getEnergyEfficencyLabel(hardware.energyEfficiency.energyEfficiencyLabel,hardware.energyEfficiency.productDataSheet)  | coUnsafeHtml\\\"> </span> <tef-price ng-if=\\\"hardware.price.promotionMonthlyPrice != null\\\" slot=trbo-monatlich cloak=\\\"\\\" align=left display=inline size=small theme=inherit slashed=true slash-color=#ff0000 style=padding-left:10px> <span slot=price>{{hardwareTileController.priceReplace(hardware.price.promotionMonthlyPrice.toFixed(2))}} €</span> </tef-price> <div ng-if=\\\"hardware.price.promotionOneTimePrice != null\\\" slot=trbo-einmalig class=einmaligPriceOuter> <span class=\\\"price-slash price-slash--signal\\\">{{hardwareTileController.priceReplace(hardware.price.promotionOneTimePrice.toFixed(2))}} €</span> </div> <div ng-if=\\\"hardware.price.promotionActivationFee != null\\\" slot=trbo-extra>+Anschlusspreis: <span style=float:right> <span class=\\\"price-slash price-slash--signal\\\">{{hardwareTileController.priceReplace(hardware.price.promotionActivationFee.toFixed(2))}} €</span> </span> </div> </tef-shop-bundle-teaser> </a> <tef-bundle-teaser cloak data-ng-if=hardwareTileController.showInfoIcon() data-ng-attr-hasoutline=\\\"{{(hardware.price.promotionMonthlyPrice || hardware.price.promotionOneTimePrice) ? '' : undefined}}\\\"> <div slot=flag> <div class=\\\"flag flag--default\\\"> <span>Flag Text</span> <a class=occl-modal-link href=#modal-test rel=nofollow occl-modal-fetch=/feature-env/master/assets/storybook/modal/fetched.html> <tef-icon cloak icon=information size=1.0 type=functional aria-label=\\\"Weitere Informationen\\\"></tef-icon> </a> </div> </div> <div slot=visual> <picture> <img alt={{hardwareTileController.replaceQuoteFromString(hardware.description)}} loading=\\\"{{hardware.isHero() ? 'eager' : 'lazy'}}\\\" src={{hardware.imageUrl}} /> </picture> </div> <div slot=energy-labels data-ng-if=\\\"hardware.energyEfficiency.energyEfficiencyLabel || hardware.energyEfficiency.productDataSheet\\\"> <div class=energy-label data-ng-bind-html=\\\"hardwareTileController.getEnergyEfficencyLabel(hardware.energyEfficiency.energyEfficiencyLabel, hardware.energyEfficiency.productDataSheet,'energy-image-bundle') | coUnsafeHtml\\\"> </div> </div> <div slot=color-selection data-ng-if=hardwareTileController.mapHardwareOptionColors(hardware).length> <span data-ng-repeat=\\\"colorMarkupElement in hardwareTileController.mapHardwareOptionColors(hardware)\\\"> <span data-ng-bind-html=\\\"colorMarkupElement | coUnsafeHtml\\\"></span> </span> </div> <div slot=content> <div class=title>{{hardwareTileController.replaceQuoteFromString(hardware.description)}}</div> <span class=subline data-ng-if=hardware.bundle>inkl. Tarif mit {{hardware.bundle.tariffDataVolume}}</span> </div> <div slot=price> <div class=row data-ng-if=\\\"hardware.priceTemplateType.name === 'BUNDLE_RECURRING' || hardware.priceTemplateType.name === 'DEVICE_RECURRING'\\\"> <div class=col>monatlich</div> <div class=col> <tef-price ng-if=\\\"hardware.price.promotionMonthlyPrice != null\\\" cloak align=right display=block size=small theme=inherit slash-color=#ff0000 slashed> <span slot=price></span> </tef-price> <tef-price cloak align=right display=block size=small theme=inherit slash-color=#ff0000> <span slot=price> {{ hardwareTileController.priceReplace( (hardware.price.promotionMonthlyPrice || hardware.price.monthlyPrice).toFixed(2)) }} € </span> </tef-price> </div> </div> <div class=row data-ng-if=\\\"hardware.priceTemplateType.name === 'BUNDLE_RECURRING'\\n                             || hardware.priceTemplateType.name === 'DEVICE_RECURRING' || hardware.priceTemplateType.name === 'DEVICE_ONE_TIME'\\\"> <div class=col>einmalig</div> <div class=col> <span slot=price> {{hardwareTileController.priceReplace(hardware.price.oneTimePrice.toFixed(2))}} € </span> </div> </div> <div class=row data-ng-if=\\\"hardware.priceTemplateType.name === 'BUNDLE_RECURRING' \\\"> <div class=col>Anschlusspreis</div> <div class=col> <tef-price cloak align=right display=block size=small theme=inherit slash-color=#ff0000 slashed> <span slot=price> {{ hardwareTileController.getActivationFeeDisplay(hardware) }} € </span> </tef-price> </div> </div> </div> <div slot=link> <a href=\\\"{{hardware.detailWwwAbsoluteCall['constantPayload'].link.uri}}\\\"> Weiter mit dem Angebot </a> </div> <div slot=footnotes> bei {{hardwareTileController.getHardwareRateDuration(hardware)}} Monatsraten zu 0% <a class=occl-modal-link rel=nofollow data-ng-attr-occl-modal=infoModal{{hardware.externalId}} aria-label=info-modal role=button data-ng-click=$event.stopPropagation(); data-ng-keydown=\\\"($event.key === 'Enter' || $event.key === ' ') && ($event.preventDefault(), $event.stopPropagation(), $event.stopImmediatePropagation && $event.stopImmediatePropagation())\\\"> <tef-icon cloak icon=information size=1.0 type=functional aria-label=\\\"Weitere Informationen\\\"></tef-icon> </a> <br/> (Finanzierungsbeispiel) <br/> <strong>Gerätepreis: {{hardwareTileController.getHardwareTotalPrice(hardware)}}</strong> </div> </tef-bundle-teaser> <input class=externalId type=hidden value={{hardware.externalId}} /> <input class=hardwareLink type=hidden value=\\\"{{hardware.detailWwwAbsoluteCall['constantPayload'].link.uri}}\\\"/> </div> <tef-modal cloak id=infoModal{{hardware.externalId}} close-icon color-close-icon aria-label=\\\"Monatliche Kosten\\\"> <div slot=title>Monatliche Kosten </div> <div slot=body> <div ng-if=hardwareTileController.isBundleProduct(hardware)> <div> Für Neukunden und besteht aus einem o2 Mein Handyvertrag mit dem {{hardwareTileController.getHardwareDescription(hardware)}} mit Ratenzahlung à {{hardwareTileController.getHardwareMonthlyPrice(hardware)}} monatlich über {{hardwareTileController.getHardwareRateDuration(hardware)}} (Gesamtpreis: {{hardwareTileController.getHardwareTotalPrice(hardware)}} ) sowie die <span data-ng-bind-html=\\\"hardwareTileController.getTariffName(hardware) | coUnsafeHtml\\\"></span> Mindestlaufzeit für monatlich {{hardwareTileController.getHardwareMonthlyPrice(hardware)}} Plus {{hardwareTileController.getConnectionFee(hardware)}} Anschlusspreis. Sofern nicht gekündigt. <span data-ng-bind-html=\\\"hardwareTileController.getTariffName(hardware) | coUnsafeHtml\\\"></span> wird abgerechnet {{hardwareTileController.getHardwareRateDurationforTariff(hardware)}} Monate. {{hardwareTileController.getMonthlyAfterBenefit(hardware)}} Pro Monat pro Abrechnungsmonat sind Folgendes enthalten: nationale Anrufe (ausgenommen Sondernummern, Rufumleitung) und SMS in alle deutschen Netze sowie {{hardwareTileController.getTariffDataVolume(hardware)}} Datenvolumen für mobiles Surfen in Deutschland <span data-ng-bind-html=\\\"hardwareTileController.getNetworkHint() | coUnsafeHtml\\\"></span> <span data-ng-bind-html=\\\"hardwareTileController.getGrowHint() | coUnsafeHtml\\\"></span> <span data-ng-bind-html=\\\"hardwareTileController.getPackList() | coUnsafeHtml\\\"></span> </div> </div> <div ng-if=!hardwareTileController.isBundleProduct(hardware)> <div> Das Angebot besteht aus a o2 MyHandy-Kaufvertrag mit Ratenzahlung à {{hardwareTileController.getHardwareMonthlyPrice(hardware)}} monatlich über {{hardwareTileController.getHardwareRateDuration(hardware)}} (Gesamtpreis: {{hardwareTileController.getHardwareTotalPrice(hardware)}}) </div> </div> </div> </tef-modal> </div> </div> \";","import coPriceLabelTemplateHtml from './coPriceLabelTemplate.html';\nimport {PriceLabelController} from './coPriceLabelController';\nexport function coPriceLabel():ng.IDirective {\n    return {\n        scope: {\n            amount: '=coPriceLabelAmount',\n            name: '=coPriceLabelName',\n            description: '=coPriceLabelDescription',\n            textAfter: '=coPriceLabelTextAfter',\n            focus: '=coPriceLabelFocus',\n            hint: '=coPriceLabelHint',\n            text: '=coPriceLabelText',\n            value: '=coPriceLabelValue',\n        },\n        replace: true,\n        template: coPriceLabelTemplateHtml,\n        controller: <any>PriceLabelController,\n        controllerAs: '$ctrl',\n        bindToController: true\n    };\n}\n","export default \"<li class=\\\"\\\"> <div class=\\\"\\\"> <span data-ng-bind-html=\\\"$ctrl.description | coUnsafeHtml\\\"></span> <span data-ng-if=$ctrl.text class=co-price-label__description__sub-description>{{$ctrl.text}} <strong>{{$ctrl.value}}</strong></span> </div> <div class=co-price-box> <strong>{{$ctrl.name || ''}}</strong> <div class=\\\"price price-right co-price-label__price\\\" data-ng-class=\\\"{'price-small': $ctrl.shouldShowSmallPrice()}\\\" data-co-uitest-element=hwcatalog-hwtile-price> <span class=sum>{{$ctrl.amount | coEuro}}</span> <span class=suffix>{{$ctrl.amount | coCents}}</span> <span class=currency>€</span> <span class=\\\"condAfter text-right\\\" data-ng-bind-html=\\\"$ctrl.textAfter | coUnsafeHtml\\\"></span> </div> </div> </li> \";","import {IHwCatalogService} from '../../service/IHwCatalogService';\nimport {IAdaptiveService} from '@shop/common';\n\nexport class PriceLabelController {\n\n    static $inject = ['hwCatalogService', 'adaptiveService'];\n\n    private focus: boolean;\n\n    constructor(public hwCatalogService: IHwCatalogService, public adaptiveService: IAdaptiveService) {\n    }\n\n    public shouldShowSmallPrice(): boolean {\n        // display a small price if the price is not focused (usually one-time prices)\n        // always display a small price in xs-viewports\n        return !this.focus || this.adaptiveService.checkBreakpoints(['xs']);\n    }\n}\n","import coNavigationTemplateHtml from './coNavigationTemplate.html';\nexport function coNavigation():ng.IDirective {\n    return {\n        scope: {\n            tabs: '=coNavigationTabs',\n            selectTab: '=coNavigationSelectTab'\n        },\n        replace: false,\n        template: coNavigationTemplateHtml,\n        controller: 'NavigationController',\n        controllerAs: 'navigationController'\n    };\n}\n","export default \"<div class=co-navigation> <div class=container-fluid> <div class=nav-tabs-wrapper> <div class=occl-scope-v3> <tef-shop-tabs active-item={{navigationController.selectedIndex}} cloak> <tef-shop-tab-item ng-repeat=\\\"tab in tabs\\\"> <div slot=title title={{tab.title}}> <tef-icon type=shop icon={{tab.glyphiconIconValue}}></tef-icon> {{tab.title | coUnsafeHtml}} </div> </tef-shop-tab-item> </tef-shop-tabs> </div> </div> </div> </div>\";","export default \"<ul class=list-unstyled> <li data-co-price-label data-co-price-label-amount=hardware.price.monthlyPrice data-co-price-label-name=hardware.monthlyText data-co-uitest-element=hwcatalog-hwtile-price-label-monthly data-co-price-label-description=priceBoxController.getTariffDescription() data-co-price-label-focus=true data-co-price-label-text-after=priceBoxController.getJoinedMonthlyPrices()> </li> <li data-co-price-label data-co-price-label-amount=hardware.price.oneTimePrice data-co-price-label-name=hardware.oneTimeBundleText data-co-uitest-element=hwcatalog-hwtile-price-label-onetime> </li> <li class=co-price-label__connection-price ng-if=priceBoxController.hasActivationFee()> {{priceBoxController.activationFeeText}} </li> </ul>\";","export default \"<ul class=list-unstyled> <li data-co-price-label data-co-price-label-amount=hardware.price.monthlyPrice data-co-price-label-name=hardware.monthlyText data-co-price-label-text=hardware.rateDurationText data-co-price-label-value=hardware.rateDurationValue data-co-uitest-element=hwcatalog-hwtile-price-label-monthly data-co-price-label-focus=true> </li> <li data-co-price-label data-co-price-label-amount=hardware.price.oneTimePrice data-co-price-label-name=hardware.oneTimeHwoText data-co-uitest-element=hwcatalog-hwtile-price-label-onetime> </li> <li data-co-price-label data-co-price-label-amount=hardware.price.totalPrice data-co-price-label-name=hardware.fullPriceText data-co-uitest-element=hwcatalog-hwtile-price-label-total> </li> </ul> \";","export default \"<ul class=list-unstyled> <li data-co-price-label data-co-price-label-amount=hardware.price.oneTimePrice data-co-price-label-name=hardware.fullPriceText data-co-uitest-element=hwcatalog-hwtile-price-label-total data-co-price-label-focus=true> </li> </ul> \";","import { PriceBoxController } from './PriceBoxController';\nexport function createPriceBoxDirective(directiveName:string, htmlTemplate:string) {\n    return function PriceBox():ng.IDirective {\n        return {\n            scope: {\n                hardware: '=' + directiveName + 'Hardware',\n                tariffExplicitlySet: '=' + directiveName + 'TariffExplicitlySet'\n            },\n            replace: true,\n            template: htmlTemplate,\n            controller: <any>PriceBoxController,\n            controllerAs: 'priceBoxController'\n        };\n    }\n}\n","export class PriceBoxController {\n\n    static $inject = ['$scope'];\n\n    constructor(private $scope: ng.IScope) {\n    }\n\n    public getTariffDescription(): string {\n        if (this.$scope['hardware'].fox36Active) {\n            return this.$scope['tariffExplicitlySet'] ? ' ' + this.$scope['hardware'].bundle.tariffDataVolume :  this.$scope['hardware'].bundle.tariffDataVolume;\n        } else {\n            return this.$scope['tariffExplicitlySet'] ? ' ' + this.$scope['hardware'].bundle.tariffName : 'z. B. ' + this.$scope['hardware'].bundle.tariffName;\n        }\n    }\n\n    get activationFeeText() {\n        let activationFee = this.$scope['hardware'].price.activationFee;\n\n        let activationFeeFormatted = new Intl.NumberFormat('de-DE', {\n            style: 'currency',\n            currency: 'EUR'\n        }).format(activationFee);\n        return '+ Anschlusspreis ' + activationFeeFormatted;\n\n    }\n\n    public hasActivationFee() {\n        let activationFee = this.$scope['hardware'].price.activationFee;\n        return activationFee && activationFee > 0;\n\n    }\n\n    public getJoinedMonthlyPrices(): string {\n        if (!this.$scope['hardware'].fox36Active) {\n            return this.$scope['hardware'].price ? this.$scope['hardware'].price.nextMonthlyPrices.join('<br/>') : \"\";\n        }\n    }\n}\n","import coFilterTemplateHtml from './coFilterTemplate.html';\nexport function coFilter():ng.IDirective {\n    return {\n        template: coFilterTemplateHtml,\n        controller: 'FilterController',\n        controllerAs: 'filterController'\n    };\n}\n","export default \"<div class=container-fluid> <div class=co-filter> <div class=occl-scope-v3> <tef-shop-filter role=region area-label=filters mode=inline componet-id=\\\"\\\" filter-items={{filterController.getFilterItems()}}> </tef-shop-filter> </div> </div> </div> \";","import coSortControlTemplateHtml from './coSortControlTemplate.html';\nexport function coSortControl():ng.IDirective {\n    return {\n        template: coSortControlTemplateHtml,\n        controller: 'SortControlController',\n        controllerAs: 'sortControlController'\n    };\n}\n","export default \"<div data-co-uitest-element=sortings class=\\\"u-st--tight col-12 col-l-auto\\\"> <section class=\\\"row align-items-center\\\"> <label class=col-auto for=selectSort><strong><span data-ng-bind-html=\\\"sortControlController.getSortingTitleText() | coUnsafeHtml\\\"></span></strong></label> <div class=\\\"col-auto form-group-select form-group-select--size-small u-inner-sl--flat\\\"> <select name=select1 id=selectSort> <option data-ng-repeat=\\\"sort in sortControlController.state.sorts\\\" value={{sort.name}} data-co-tracking-attributes data-co-tracking-attributes-action=link data-co-tracking-attributes-element-id=sort-{{sort.title}}> {{sort.title}} </option> </select> </div> </section> </div>\";","import coHardwareTilesContainerTemplateHtml from './coHardwareTilesContainerTemplate.html';\nexport function coHardwareTilesContainer():ng.IDirective {\n    return {\n        template: coHardwareTilesContainerTemplateHtml,\n        controller: 'HardwareTilesContainerController',\n        controllerAs: 'hardwareTilesContainerController'\n    };\n}\n","export default \"<div id=hw-tiles-container class=container-fluid> <div data-ng-bind-html=\\\"hardwareTilesContainerController.getSchemaData() | coUnsafeHtml\\\"></div> <div> <div class=hardware-scroll ng-if=!hardwareTilesContainerController.isNewCatalogEnabled() ng-repeat=\\\"hardwareRow in hardwareTilesContainerController.state.hardwareRowList track by $index \\\"> <div class=row> <div data-ng-repeat=\\\"hardware in hardwareRow\\\"> <div data-co-hardware-tile data-co-hardware-tile-hardware=hardware data-co-hardware-tile-hw-compare-url=hardwareTilesContainerController.compareState.postUrlLink data-co-hardware-tile-tariff-explicitly-set=hardwareTilesContainerController.isTariffExplicitlySet() data-co-hardware-tile-sales-highlight=hardwareTilesContainerController.state.salesHighlight data-co-hardware-tile-tracking-product-line=hardwareTilesContainerController.getProductLineFor(hardware) data-is-highlight=\\\"($index < 6)\\\" id={{hardware.offerName}}> </div> </div> </div> <div ng-if=$first class=occl-device-tradein-catalog> <div co-occl-device-trade-in></div> <div data-ng-bind-html=\\\"$ctrl.getHwTeaserTextContent() | coUnsafeHtml\\\"></div> </div> </div> </div> <div ng-if=hardwareTilesContainerController.isNewCatalogEnabled() class=grid-container ng-repeat=\\\"hardwareRow in hardwareTilesContainerController.state.hardwareRowList track by $index \\\"> <div class=grid-item data-ng-repeat=\\\"hardware in hardwareRow\\\"> <div data-co-hardware-tile class=hardware-item data-co-hardware-tile-hardware=hardware data-co-hardware-tile-hw-compare-url=hardwareTilesContainerController.compareState.postUrlLink data-co-hardware-tile-tariff-explicitly-set=hardwareTilesContainerController.isTariffExplicitlySet() data-co-hardware-tile-sales-highlight=hardwareTilesContainerController.state.salesHighlight data-co-hardware-tile-tracking-product-line=hardwareTilesContainerController.getProductLineFor(hardware) data-co-hardware-tile-highlight=\\\"($index < 4)\\\" id={{hardware.offerName}}> </div> </div> <div ng-if=$first class=occl-device-tradein-catalog> <div co-occl-device-trade-in></div> <div data-ng-bind-html=\\\"$ctrl.getHwTeaserTextContent() | coUnsafeHtml\\\"></div> </div> </div> </div> <div data-ng-if=\\\"hardwareTilesContainerController.state.hardwareRowList === null\\\" style=height:400px> <div style=margin-top:180px> <div class=occl-scope> <tef-loader type=default cloak display=block size=m></tef-loader> </div> </div> </div> \";","import {valueMetaInfo} from '@shop/common';\n\nexport class BundleValue {\n\n    static META_INFO = valueMetaInfo('hwCatalog:BundleValue', {\n        tariffName: 'string',\n        tariffOfferName: 'string | null',\n        tariffDataVolume: 'string | null'\n    });\n\n    tariffName:string;\n    tariffOfferName:string;\n    tariffDataVolume:string;\n\n}\n    \n","import { CriteriaValue } from './CriteriaValue';\nimport { LogicType } from './LogicType';\nimport { valueMetaInfo } from '@shop/common';\nexport class CriteriaGroupValue {\n\n    static META_INFO = valueMetaInfo('hwCatalog:CriteriaGroupValue', {\n        name: 'string',\n        title: 'string',\n        criterias: '[CriteriaValue]',\n        logicType: 'LogicType | undefined'\n    });\n\n    name:string;\n    title:string;\n    criterias:CriteriaValue[];\n    logicType:LogicType;\n\n    getSelectedValues():string[] {\n        var selected = _.filter(this.criterias,\n            (criteria) => criteria.selected\n        );\n\n        return _.map(\n            selected,\n            (criteria) => criteria.value\n        );\n    }\n}\n","import { valueMetaInfo } from '@shop/common';\nexport class CriteriaValue {\n\n    static META_INFO = valueMetaInfo('hwCatalog:CriteriaValue', {\n        name: 'string',\n        title: 'string',\n        value: 'string',\n        selected: 'boolean'\n    });\n\n    name:string;\n    title:string;\n    value:string;\n    selected:boolean;\n\n    toggle():void {\n        this.selected = !this.selected;\n    }\n\n    setSelected(newValue: boolean): void {\n        this.selected = newValue;\n    }\n}\n","import {valueMetaInfo} from '@shop/common';\n\nexport class HwCatalogSelectedTabUrl {\n\n    static META_INFO = valueMetaInfo('hwCatalog:HwCatalogSelectedTabUrl', {\n        bundleHwCatalogUrl: 'string',\n        hardwareOnlyHwCatalogUrl: 'string'\n    });\n\n    bundleHwCatalogUrl: string;\n    hardwareOnlyHwCatalogUrl: string;\n}","import {Call, Link, PostCall, valueMetaInfo} from '@shop/common';\nimport {HwCatalogTabValue} from './HwCatalogTabValue';\nimport {SortingValue} from './SortingValue';\nimport {CriteriaValue} from './CriteriaValue';\nimport {CriteriaGroupValue} from './CriteriaGroupValue';\nimport {HardwareValue} from './HardwareValue';\nimport {DeviceTradeInPageValue} from \"./DeviceTradeInPageValue\";\nimport _ = require('underscore');\nimport {HwCatalogSelectedTabUrl} from './HwCatalogSelectedTabUrl';\nimport {LoginStatusTrackingValue} from \"./LoginStatusTrackingValue\";\n\nexport class HwCatalogPageValue {\n\n    static META_INFO = valueMetaInfo('hwCatalog:HwCatalogPageValue', {\n        tabs: '[HwCatalogTabValue]',\n        hardwareCompareCall: '{} | null',\n        hwFirstFlowCall: '{} | null',\n        tariffExplicitlySet: 'boolean',\n        hwCatalogTopAdspaceUrl: 'string | null',\n        unifiedTrackingEnabled: 'boolean',\n        occlDeviceTradeInEnabled: 'boolean',\n        deviceTradeInPageValue: 'DeviceTradeInPageValue | null',\n        deviceTradeInResultLink: 'Link',\n        hwCatalogSelectedTabUrl: 'HwCatalogSelectedTabUrl | null',\n        newCatalogEnabled: 'boolean',\n        loginStatusTrackingValue: 'LoginStatusTrackingValue | null',\n        hardwarePlpTeaser: 'string | null',\n    });\n\n    tabs:HwCatalogTabValue[];\n    hardwareCompareCall:PostCall<void>;\n    hwFirstFlowCall:Call<any>;\n    tariffExplicitlySet:boolean;\n    hwCatalogTopAdspaceUrl: string;\n    unifiedTrackingEnabled:boolean;\n    occlDeviceTradeInEnabled:boolean;\n    deviceTradeInPageValue: DeviceTradeInPageValue;\n    deviceTradeInResultLink: Link;\n    hwCatalogSelectedTabUrl: HwCatalogSelectedTabUrl;\n    newCatalogEnabled:boolean;\n    loginStatusTrackingValue: LoginStatusTrackingValue;\n    hardwarePlpTeaser: string;\n\n    selectTab(selectedTab:HwCatalogTabValue) {\n        argsContract(arguments, \"HwCatalogTabValue\");\n        _.forEach(this.tabs, (tab:HwCatalogTabValue) => {\n            tab.selected = (tab === selectedTab);\n        })\n    }\n\n    selectSort(selectedSort:SortingValue) {\n        argsContract(arguments, \"SortingValue\");\n        _.forEach(this.getCurrentSorts(), (sort:SortingValue) => {\n            sort.selected = (sort === selectedSort);\n        });\n    }\n\n    getCurrentTab():HwCatalogTabValue {\n        return _.find(this.tabs, (tab:HwCatalogTabValue) => tab.selected);\n    }\n\n    getCurrentCriteriaGroup():CriteriaGroupValue | null {\n        const currentTab = this.getCurrentTab();\n        return !!currentTab.criteriaGroup ? currentTab.criteriaGroup : null;\n    }\n\n    getSelectedSort():SortingValue {\n        return _.find(this.getCurrentSorts(), (sort) => sort.selected);\n    }\n\n    getCurrentSorts():SortingValue[] {\n        return this.getCurrentTab().sortingValues;\n    }\n\n    toggleCriteria(selectedCriteria:CriteriaValue) {\n        const currentGroup: CriteriaGroupValue | null  = this.getCurrentCriteriaGroup();\n        if (currentGroup){\n            this.getCurrentCriteriaGroup().criterias\n                .filter(criteria => criteria.value == selectedCriteria.value)\n                .forEach(criteria => criteria.setSelected(!criteria.selected))\n        }\n    }\n\n    getSelectedCriteriaList():CriteriaValue[] {\n        const currentGroup = this.getCurrentCriteriaGroup();\n        return !!currentGroup ? currentGroup.criterias.filter(criteria => criteria.selected) : [];\n    }\n\n    getHardware():HardwareValue[] {\n        var tab = this.getCurrentTab();\n        return tab.getHardwareList();\n    }\n}\n","import { valueMetaInfo, Call, NavigationEvent } from '@shop/common';\nimport { HwCatalogValue } from './HwCatalogValue';\nimport { CriteriaGroupValue } from './CriteriaGroupValue';\nimport { SortingValue } from './SortingValue';\nimport { HardwareValue } from './HardwareValue';\nimport {TargetGroupSwitcherValue} from \"./TargetGroupSwitcherValue\";\nimport {ActionTargetState} from \"./ActionTargetState\";\nimport {HwCatalogSwitcherStateValue} from \"./HwCatalogSwitcherStateValue\";\nexport class HwCatalogTabValue {\n\n    static META_INFO = valueMetaInfo('hwCatalog:HwCatalogTabValue', {\n        tabName: 'string',\n        title: 'string',\n        headerContent: 'string',\n        footerContent: 'string',\n        glyphiconIconValue: 'string',\n        salesHighlight: 'boolean',\n        selected: 'boolean',\n\n        hwCatalogValue: 'HwCatalogValue | null',\n        criteriaGroup: 'CriteriaGroupValue | null',\n        sortingValues: '[SortingValue]',\n\n        pageWwwCall: '{} | null',\n\n        targetGroupSwitcherValue: 'TargetGroupSwitcherValue',\n\n        catalogRestCalls: '[ActionTargetState]'\n    });\n\n    tabName:string;\n    title:string;\n    headerContent: string;\n    footerContent: string;\n    glyphiconIconValue:string;\n    salesHighlight:boolean;\n    selected:boolean;\n\n    hwCatalogValue:HwCatalogValue;\n    criteriaGroup:CriteriaGroupValue | null;\n    sortingValues:SortingValue[];\n\n    pageWwwCall:Call<NavigationEvent>;\n\n    targetGroupSwitcherValue:TargetGroupSwitcherValue;\n\n    /*\n    We only need this state because we do not want to manipulate the data we get from the server and still have to\n    switch states directly when the user clicks for a fluent UI experience.\n     */\n    hwCatalogSwitcherStateValue:HwCatalogSwitcherStateValue = null;\n\n    catalogRestCalls: ActionTargetState[];\n\n    setCatalogValue(hwCatalogValue:HwCatalogValue) {\n        this.hwCatalogValue = hwCatalogValue;\n    }\n\n    getHardwareList():HardwareValue[] {\n        return this.hwCatalogValue.hardware;\n    }\n\n    isHardwareLoaded():boolean {\n        return this.hwCatalogValue !== null;\n    }\n}\n","import { Trackable, valueMetaInfo, Call, TrackingInfoValue } from '@shop/common';\nimport { HardwareValue } from './HardwareValue';\nimport {HwCatalogSwitcherStateValue} from \"./HwCatalogSwitcherStateValue\";\nexport class HwCatalogValue implements Trackable {\n\n    static META_INFO = valueMetaInfo('hwCatalog:HwCatalogValue', {\n        hardware: '[HardwareValue]',\n        beginIndex: 'number',\n        resultCount: 'number',\n        maxValue: 'number',\n        loadNextRestLink: 'string | null',\n        trackingInfoCall: 'Call | null',\n        hwCatalogSwitcherStateValue: 'HwCatalogSwitcherStateValue'\n    });\n\n    hardware:HardwareValue[];\n    beginIndex:number;\n    resultCount:number;\n    maxValue:number;\n    loadNextRestLink:string;\n    trackingInfoCall:Call<TrackingInfoValue>;\n    hwCatalogSwitcherStateValue:HwCatalogSwitcherStateValue;\n\n    isLastPage():boolean {\n        return !this.loadNextRestLink;\n    }\n}\n","import {valueMetaInfo, Html, Url, ConstantCall, NavigationEvent} from '@shop/common';\nimport {PriceValue} from './PriceValue';\nimport {MarketingClassificationType} from './MarketingClassificationType';\nimport {BundleValue} from './BundleValue';\nimport {PriceTemplateType} from './PriceTemplateType';\nimport {EcommerceProductValue} from \"./EcommerceProductValue\";\nimport {EnergyEfficiency} from \"./EnergyEfficiency\";\n\nexport class HardwareValue {\n\n    static META_INFO = valueMetaInfo('hwCatalog:HardwareValue', {\n        externalId: 'string',\n        description: 'Html | string',\n        urlName: 'string',\n        offerName: 'string',\n        price: 'PriceValue',\n        marketingClassification: 'MarketingClassificationType',\n        colors: '[string]',\n        imageColorWithAltUrl: '[string]',\n        colorImageUrl: '[string]',\n        imageUrl: 'Url | string',\n        highlights: '{} | string',\n        marketingHint: '{} | string',\n        bundle: 'BundleValue | null',\n        fox36Active: 'boolean',\n        criteriaValues: '[string]',\n        indexBySortingName: '{*: number}',\n        imageUrlSmall: 'Url | string',\n        detailWwwAbsoluteCall: '{}',\n        stockHint: 'string | null',\n        contractDurationHint: 'string | null',\n        priceTemplateType: 'PriceTemplateType',\n        ratingStars: 'string | null',\n        rateDurationText: 'string',\n        rateDurationValue: 'string',\n        monthlyText: 'string',\n        oneTimeHwoText: 'string',\n        oneTimeBundleText: 'string',\n        fullPriceText: 'string',\n        ecommerceProductValue: 'EcommerceProductValue | null',\n        promotionActive: 'boolean',\n        energyEfficiency: 'EnergyEfficiency | null'\n    });\n\n    externalId: string;\n    description: Html;\n    urlName: string;\n    offerName: string;\n    price: PriceValue;\n    marketingClassification: MarketingClassificationType;\n    colors: string[];\n    imageColorWithAltUrl: string[];\n    colorImageUrl: string[];\n    imageUrl: Url;\n    highlights: Html;\n    marketingHint: Html;\n    bundle: BundleValue;\n    fox36Active: boolean;\n    criteriaValues: string[];\n    indexBySortingName: { [s: string]: number; };\n    imageUrlSmall: Url;\n    detailWwwAbsoluteCall: ConstantCall<NavigationEvent>;\n    stockHint: string;\n    contractDurationHint: string;\n    priceTemplateType: PriceTemplateType;\n    ratingStars: string;\n    rateDurationText: string;\n    rateDurationValue: string;\n    monthlyText: string;\n    oneTimeHwoText: string;\n    oneTimeBundleText: string;\n    fullPriceText: string;\n    ecommerceProductValue: EcommerceProductValue;\n    promotionActive: 'boolean';\n    energyEfficiency: EnergyEfficiency;\n\n    public selectedForDeviceCompare: boolean;\n    public enabledForDeviceCompare: boolean;\n\n    isHero(): boolean {\n        return this.marketingClassification == MarketingClassificationType.HERO_DEVICE;\n    }\n\n    isSelectedForDeviceCompare(): boolean {\n        if (this.selectedForDeviceCompare === undefined) {\n            return false; // default value\n        }\n        return this.selectedForDeviceCompare;\n    }\n\n    setSelectedForDeviceCompare(isSelected): void {\n        this.selectedForDeviceCompare = isSelected;\n    }\n\n    isEnabledForDeviceCompare(): boolean {\n        if (this.enabledForDeviceCompare === undefined) {\n            return true; // default value\n        }\n        return this.enabledForDeviceCompare;\n    }\n\n    setEnabledForDeviceCompare(isEnabled): void {\n        this.enabledForDeviceCompare = isEnabled;\n    }\n\n    getRatingStars(): string {\n        return this.ratingStars;\n    }\n\n    isDeviceOneTime(): boolean {\n        return this.priceTemplateType === PriceTemplateType.DEVICE_ONE_TIME;\n    }\n}\n    \n","import { valueMetaInfo } from '@shop/common';\nexport class PriceValue {\n\n    static META_INFO = valueMetaInfo('hwCatalog:PriceValue', {\n        oneTimePrice: 'number',\n        monthlyPrice: 'number',\n        totalPrice: 'number | null',\n        activationFee: 'number | null',\n        nextMonthlyPrices: 'string[]',\n        promotionOneTimePrice: 'number | null',\n        promotionMonthlyPrice: 'number | null',\n        promotionTotalPrice: 'number | null',\n        promotionActivationFee: 'number | null',\n        promotionNextMonthlyPrices: 'string[]'\n\n    });\n\n    oneTimePrice:number;\n    monthlyPrice:number;\n    totalPrice:number;\n    activationFee:number;\n    nextMonthlyPrices:string[];\n    promotionOneTimePrice:number;\n    promotionMonthlyPrice:number;\n    promotionTotalPrice: number;\n    promotionActivationFee:number;\n    promotionNextMonthlyPrices:string[];\n\n}\n    \n","import { valueMetaInfo } from '@shop/common';\nexport class SortingValue {\n\n    static META_INFO = valueMetaInfo('hwCatalog:SortingValue', {\n        name: 'string',\n        title: 'string',\n        selected: 'boolean'\n    });\n\n    name:string;\n    title:string;\n    selected:boolean;\n\n}\n","import { valueMetaInfo } from '@shop/common';\nexport class HwCatalogSelectedConfigurationValue {\n\n    static META_INFO = valueMetaInfo('hwCatalog:HwCatalogSelectedConfigurationValue', {\n        shopContext: 'string',\n        targetGroup: 'string',\n        tariffOfferName: 'string | null',\n        hardwareOfferName: 'string',\n        tariffPackNames: '[string] | null'\n    });\n\n    shopContext:string;\n    targetGroup:string;\n    tariffOfferName:string;\n    hardwareOfferName:string;\n    tariffPackNames:string[];\n}\n    \n","import {IHwCatalogService} from \"../../service/IHwCatalogService\";\nimport {HwOnlyOrBundleState} from \"../../domain/HwOnlyOrBundleState\";\n\nexport class HwOnlyBundleSwitcherController {\n\n    /**\n     * always keep this injector, it makes your services safe\n     * against html minification. Keep it near your constructor, as the\n     * array must match the arguments in the constructor.\n     * @type {string[]}\n     */\n    static $inject = ['hwCatalogService'];\n\n    /**\n     * Define your Dependencies in the constructor.\n     * Don´t make any assignments - typescript will handle this for you.\n     * @param hwCatalogService\n     */\n    constructor(public hwCatalogService:IHwCatalogService) {\n\n    }\n\n    $onInit() {\n        let element = document.querySelector('tef-shop-toggle-switcher')\n        if(element){\n            element.addEventListener('occl.shop-toggle-switcher.changed', ($event: any) => {\n                this.hwCatalogService.setFilterType('hardware');\n                if($event.detail.selected){\n                    this.hwCatalogService.selectHwOnlyMode();\n                } else {\n                    this.hwCatalogService.selectBundleMode();\n                }\n            });\n        }\n    }\n\n    selectHwOnly = ($event):void => {\n        $event.preventDefault();\n        this.hwCatalogService.selectHwOnlyMode();\n    };\n\n    selectBundle = ($event):void => {\n        $event.preventDefault();\n        this.hwCatalogService.selectBundleMode();\n    };\n\n    isHwOnlySelected = ():boolean => {\n        let switcherState:HwOnlyOrBundleState = this.hwCatalogService.getCurrentHwOnlyOrBundleSwitcherState();\n        return switcherState == HwOnlyOrBundleState.HW_ONLY;\n    };\n\n\n    showSwitcher = ():boolean => {\n        return this.hwCatalogService.getShowSwitcher();\n    }\n\n}\n","import coHwOnlyBundleSwitcherTemplateHtml from './coHwOnlyBundleSwitcherTemplate.html';\nexport function coHwOnlyBundleSwitcher():ng.IDirective {\n    return {\n        replace: false,\n        template: coHwOnlyBundleSwitcherTemplateHtml,\n        controller: 'HwOnlyBundleSwitcherController',\n        controllerAs: 'hwOnlyBundleSwitcherController'\n    };\n}\n","export default \"<div id=hw-only-bundle-switcher> <div ng-show=hwOnlyBundleSwitcherController.showSwitcher()> <div class=occl-scope-v3> <tef-shop-toggle-switcher selected-label=\\\"ohne Tarif kaufen\\\" not-selected-label=\\\"ohne Tarif kaufen\\\" ng-attr-selected=\\\"{{hwOnlyBundleSwitcherController.isHwOnlySelected() === true ? true : undefined}}\\\" ng-on-changed=hwOnlyBundleSwitcherController.event($event) component-id=Tariff-Bundle-Switcher name=hw-only-or-bundle-bundle data-co-uitest-element=\\\"{{hwOnlyBundleSwitcherController.isHwOnlySelected() ? 'hwOnlyBundleSwitcher_bundle' : 'hwOnlyBundleSwitcher_hw-only'}}\\\" id=\\\"{{hwOnlyBundleSwitcherController.isHwOnlySelected() ? 'bundle' : 'hw-only'}}\\\"/> </div> </div> </div>\";","import coAdspaceTopContainerTemplateHtml from './coAdspaceTopContainerTemplate.html'\nexport function coAdspaceTopContainer():ng.IDirective {\n    return {\n        template: coAdspaceTopContainerTemplateHtml,\n        controller: 'AdspaceTopContainerController',\n        controllerAs: 'adspaceTopContainerController'\n    };\n}","export default \"\";","import {IHwCatalogService} from \"../../service/IHwCatalogService\";\nexport class AdspaceTopContainerController {\n    static  $inject = ['hwCatalogService', '$window'];\n\n    constructor(public hwCatalogService:IHwCatalogService, private $window:ng.IWindowService){\n    }\n\n    getHwCatalogTopAdspaceUrl():string {\n        return this.hwCatalogService.getHwCatalogTopAdspaceUrl();\n    }\n}","import {valueMetaInfo} from '@shop/common';\nexport class TargetGroupValue {\n\n    static META_INFO = valueMetaInfo('hwCatalog:TargetGroupValue', {\n        id: 'string',\n        label: 'string',\n        tooltip: 'string',\n    });\n\n    id:string;\n    label:string;\n    tooltip:string;\n}\n","import {valueMetaInfo} from '@shop/common';\nimport {TargetGroupValue} from \"./TargetGroupValue\";\nexport class TargetGroupSwitcherValue {\n\n    static META_INFO = valueMetaInfo('hwCatalog:TargetGroupSwitcherValue', {\n        defaultTargetGroup: 'TargetGroupValue',\n        visibleTargetGroups: '[TargetGroupValue]',\n        switcherLabelText: 'string',\n        switcherToolTip: 'string',\n        switcherTitleText: 'string',\n        sortingTitleText: 'string',\n        manufacturerTitleText: 'string',\n        vatPriceInfo: 'string',\n        growHint: 'string',\n        networkHint: 'string',\n        packList: 'string',\n        infoIconToggle: 'boolean',\n    });\n\n    defaultTargetGroup: TargetGroupValue;\n    visibleTargetGroups: TargetGroupValue[];\n    switcherLabelText: string;\n    switcherToolTip: string;\n    switcherTitleText: string;\n    sortingTitleText: string;\n    manufacturerTitleText: string;\n    vatPriceInfo: string;\n    growHint: string;\n    networkHint: string;\n    packList: string;\n    infoIconToggle: boolean;\n}\n","import coTargetGroupSwitcherHtml from './coTargetGroupSwitcher.html';\nexport function coTargetGroupSwitcher():ng.IDirective {\n    return {\n        template: coTargetGroupSwitcherHtml,\n        controller: 'TargetGroupSwitcherController',\n        controllerAs: 'targetGroupSwitcherController'\n    };\n}\n","export default \"<div class=\\\"row co-target-group-switcher\\\" data-co-initialize-external-content> <div class=col-12> <tef-choice-group cloak=\\\"\\\" mobile-column-count=none hide-selected=\\\"\\\"> <span slot=title><strong><span data-ng-bind-html=\\\"targetGroupSwitcherController.getSwitcherTitleText() | coUnsafeHtml\\\"></span><tef-tooltip cloak=\\\"\\\" trigger=click placement=auto positioning=fixed> <tef-icon cloak=\\\"\\\" icon=information size=1 type=functional></tef-icon> <div slot=content> <div part=tooltip-div data-ng-bind-html=\\\"targetGroupSwitcherController.getSwitcherToolTip() | coUnsafeHtml\\\"> </div> </div> </tef-tooltip></strong></span> <ul slot=items> <li data-ng-repeat=\\\"targetGroup in targetGroupSwitcherController.getTargetGroupSwitcherValue().visibleTargetGroups\\\"> <div class=form-group-checkbox> <input type=checkbox data-ng-checked=targetGroupSwitcherController.isSelected(targetGroup) ng-click=targetGroupSwitcherController.select(targetGroup) data-co-uitest-element={{targetGroup.id}} id=customer-segment-{{targetGroup.id}} class=co-target-group-checkbox> <label for=customer-segment-{{targetGroup.id}} data-co-tracking-attributes data-co-tracking-attributes-action=checkbox data-co-tracking-attributes-element-id={{targetGroup.id}}> <span data-ng-bind-html=\\\"targetGroup.label | coUnsafeHtml\\\"></span> </label> </div> </li> </ul> </tef-choice-group> </div> </div> \";","import {IHwCatalogService, ServiceState} from '../../service/IHwCatalogService';\nimport {TargetGroupSwitcherValue} from \"../../domain/TargetGroupSwitcherValue\";\nimport {TargetGroupValue} from \"../../domain/TargetGroupValue\";\n\nexport class TargetGroupSwitcherController {\n\n    // state\n    state:ServiceState;\n\n    /**\n     * always keep this injector, it makes your services safe\n     * against html minification. Keep it near your constructor, as the\n     * array must match the arguments in the constructor.\n     * @type {string[]}\n     */\n    static $inject = ['hwCatalogService'];\n\n    /**\n     * Define your Dependencies in the constructor.\n     * Don´t make any assignments - typescript will handle this for you.\n     * @param hwCatalogService\n     */\n    constructor(public hwCatalogService:IHwCatalogService) {\n        this.state = hwCatalogService.getManagedState();\n    }\n    $onInit() {\n        setTimeout(() => {\n            const checkBoxes = document.querySelectorAll('.co-target-group-checkbox');\n            checkBoxes.forEach(checkBox => {\n                checkBox.addEventListener('keydown', function(event) {\n                    // @ts-ignore\n                    if (event.key === 'Enter' || event.key === ' ') {\n                        event.preventDefault();\n                        event.stopPropagation();\n                        this.click();\n                    }\n                });\n            });\n        }, 1000);\n    }\n\n    public getTargetGroupSwitcherValue():TargetGroupSwitcherValue {\n        return this.hwCatalogService.getTargetGroupSwitcherValue();\n    }\n    public getSwitcherToolTip():string {\n        return this.hwCatalogService.getTargetGroupSwitcherValue().switcherToolTip;\n    }\n    public getSwitcherTitleText():string {\n        return this.hwCatalogService.getTargetGroupSwitcherValue().switcherTitleText;\n    }\n\n    public isSelected(targetGroup:TargetGroupValue):boolean {\n        return this.hwCatalogService.getSelectedTargetGroupName() === targetGroup.id;\n    }\n\n    public select(targetGroup:TargetGroupValue):void {\n        this.hwCatalogService.setFilterType('customer segment');\n        let targetGroupToSelect:string = this.isSelected(targetGroup) ? this.getTargetGroupSwitcherValue().defaultTargetGroup.id : targetGroup.id;\n        this.hwCatalogService.selectTargetGroup(targetGroupToSelect);\n    }\n}\n\n","import {HwOnlyOrBundleState} from \"./HwOnlyOrBundleState\";\nimport {Call, valueMetaInfo} from \"@shop/common\";\nimport {HwCatalogValue} from \"./HwCatalogValue\";\n\nexport class ActionTargetState {\n\n    static META_INFO = valueMetaInfo('hwCatalog:ActionTargetState', {\n        hwOnlyOrBundleState: 'HwOnlyOrBundleState',\n        targetGroup: 'string',\n        call: '{}'\n    });\n\n    hwOnlyOrBundleState: HwOnlyOrBundleState;\n    targetGroup: string;\n    call: Call<HwCatalogValue>;\n\n    // to be set in the client once loaded\n    cachedHwCatalogValue: HwCatalogValue;\n}","import {valueMetaInfo} from '@shop/common';\nimport {HwOnlyOrBundleSwitcherValue} from \"./HwOnlyOrBundleSwitcherValue\";\n\nexport class HwCatalogSwitcherStateValue {\n\n    static META_INFO = valueMetaInfo('hwCatalog:HwCatalogSwitcherStateValue', {\n        selectedTargetGroupSwitcher: 'string',\n        hwOnlyOrBundleSwitcherValue: 'HwOnlyOrBundleSwitcherValue'\n    });\n\n    selectedTargetGroupSwitcher:string;\n    hwOnlyOrBundleSwitcherValue:HwOnlyOrBundleSwitcherValue;\n\n    public copy():HwCatalogSwitcherStateValue{\n        let clone = new HwCatalogSwitcherStateValue();\n        let hwOnlyOrBundleSwitcherValueClone = new HwOnlyOrBundleSwitcherValue();\n\n        clone.selectedTargetGroupSwitcher = this.selectedTargetGroupSwitcher;\n\n        hwOnlyOrBundleSwitcherValueClone.hwOnlyOrBundleState = this.hwOnlyOrBundleSwitcherValue.hwOnlyOrBundleState;\n        hwOnlyOrBundleSwitcherValueClone.showSwitcher = this.hwOnlyOrBundleSwitcherValue.showSwitcher;\n\n        clone.hwOnlyOrBundleSwitcherValue = hwOnlyOrBundleSwitcherValueClone;\n\n        return clone;\n    }\n}","import {IHwCatalogService} from \"../../service/IHwCatalogService\";\nimport { HwOnlyOrBundleState } from \"../../domain/HwOnlyOrBundleState\";\n\nexport class HardwareTileController {\n\n    static $inject = ['hwCatalogService'];\n\n    constructor(public hwCatalogService:IHwCatalogService) {\n    }\n    $onInit() {\n        setTimeout(() => {\n            const tileParts = document.querySelectorAll('.co-hardware-tile-new');\n            tileParts.forEach(tilePart => {\n                tilePart.addEventListener('keydown', function(event) {\n                    // @ts-ignore\n                    if (event.key === 'Enter' || event.key === ' ') {\n                        const target = event.target as HTMLElement;\n                        if (target && target.closest && target.closest('.occl-modal-link')) {\n                            return;\n                        }\n                        event.preventDefault();\n                        event.stopPropagation();\n                        const link = tilePart.querySelector('a');\n                        if (link) {\n                            link.click();\n                        }\n                    }\n                });\n            });\n        }, 1000);\n    }\n    isNewCatalogEnabled():boolean {\n        return this.hwCatalogService.isNewCatalogEnabled();\n    }\n\n    nativeLazyLoadingAvailable(): boolean {\n        return 'loading' in document.createElement('img');\n    }\n   public mapHardwareOptionColors(hardware): string[] {\n        const colorOptions = hardware.imageColorWithAltUrl.map((colorImg, index) => {\n            if(colorImg.includes('<img')) {\n                return colorImg;\n            }else {\n                return `<img src=${hardware.colorImageUrl[index]} alt=\"\" class=\"option-style\" loading=\"eager\" fetchpriority=\"high\"`\n            }\n\n        })\n        return colorOptions\n    }\n    intersectionObserverAvailable(): boolean {\n        return 'IntersectionObserver' in window;\n    }\n\n    public priceReplace(value: string): string{\n        return value.toString().replace(/[.]/gi, \",\");\n    }\n    public activationpricevisiblity(activationFee: number, promotionActivation: number): string{\n        if(activationFee === 0){\n            return '';\n        }else if (promotionActivation === null){\n            return ',{\"label\":\"Anschlusspreis\",\"promotion\":\"\",\"value\":\"'+this.priceReplace(activationFee.toFixed(2))+'\",\"subtype\":\"Extra\",\"chargevisibility\":\"BUNDLE_RECURRING\"}';\n        }\n        else {\n            return '';\n        }\n    }\n    public getEnergyEfficencyLabel(energyEfficiencyLabel: string, productDataSheet: string, imageClass: string = 'energy-image') {\n        let temp = document.createElement('div');\n        temp.innerHTML = energyEfficiencyLabel;\n        let anchors = temp.querySelectorAll('a');\n        if (anchors) {\n            anchors.forEach(anchor => {\n                anchor.setAttribute('onclick', `event.stopPropagation(); event.preventDefault();`);\n            });\n        }\n        let tempDataSheet = document.createElement('div');\n        tempDataSheet.innerHTML = productDataSheet;\n\n        // Select all anchor tags within the product data sheet content\n        let dataSheetAnchors = tempDataSheet.querySelectorAll('a');\n        dataSheetAnchors.forEach(anchor => {\n            anchor.setAttribute('onclick', `event.stopPropagation(); event.preventDefault();`);\n        });\n        let dataSheetPara = tempDataSheet.querySelectorAll(\"p\");\n        dataSheetPara.forEach(para => {\n            para.setAttribute('style', 'margin-bottom:5px;');\n        })\n        return `<div class=\"energy-cover\"><div class=\"dataSheet\">${tempDataSheet.innerHTML}</div>\n        <div class=\"${imageClass}\">${temp.innerHTML}</div></div>`;\n    }\n\n    public marketingText(value: string): string{\n        return \"<span style='font-size: 13.5px;color: #5f6264;'>\"+value+\"</span>\";\n    }\n\n    public replaceQuoteFromString(value: string): string{\n        return value.replace(/\"/g, \"''\");\n    }\n\n    observeImages() {\n        const images = [].slice.call(document.querySelectorAll('img.co-hardware-tile__image'));\n\n        if (this.intersectionObserverAvailable()) {\n            const lazyImageObserver = new IntersectionObserver(entries => {\n                entries.forEach(entry => {\n                    if (entry.isIntersecting) {\n                        let lazyImage = entry.target as HTMLImageElement;\n                        lazyImage.src = lazyImage.dataset.src;\n                        lazyImageObserver.unobserve(lazyImage);\n                    }\n                });\n            });\n\n            images.forEach(lazyImage => {\n                lazyImageObserver.observe(lazyImage);\n            });\n        }\n    }\n    trackProductClick(offerName : string): void  {\n        const allHwProducts = this.hwCatalogService.getManagedState().hardwareRowList.reduce((acc, row) => acc.concat(row), []);\n        const clickedProduct = allHwProducts.filter(hw => hw.offerName === offerName);\n        this.hwCatalogService.trackProductClick(clickedProduct[0].ecommerceProductValue, allHwProducts.indexOf(clickedProduct[0])+1);\n    }\n    public getSchemaData(data: any) {\n        let rawData = {\n            \"@context\":\"https://schema.org/\",\n            \"@type\":\"Product\",\n            \"name\":data.description,\n            \"image\":data.imageUrl,\n            \"brand\":data.ecommerceProductValue.attributes.dimension165,\n            \"offers\":{\"@type\":\"Offer\",\"priceCurrency\":\"EUR\",\"price\":data.price.totalPrice},\n            \"url\":data.detailWwwAbsoluteCall.constantPayload.link.uri}\n        let finalRawData = JSON.stringify(rawData);\n        return \"<script type='application/ld+json'>\" + finalRawData + \"</script>\";\n    }\n    public getActivationFeeDisplay(hardware): string {\n        if (!hardware || !hardware.price) {\n            return '0,00';\n        }\n        const promo = hardware.price.promotionActivationFee;\n        const normal = hardware.price.activationFee;\n        if (promo != null) {\n            return this.priceReplace(Number(promo).toFixed(2));\n        }\n        if (normal != null) {\n            return this.priceReplace(Number(normal).toFixed(2));\n        }\n        return '0,00';\n    }\n    public isBundleProduct(hardware): boolean {\n        return hardware &&\n            hardware.priceTemplateType &&\n            hardware.priceTemplateType.name === 'BUNDLE_RECURRING';\n    }\n\n    handleModalKeydown(event: KeyboardEvent): void {\n        if (event.key === 'Enter' || event.key === ' ') {\n            event.preventDefault();\n            event.stopPropagation();\n            const target = event.target as HTMLElement;\n\n            if (target && target.closest('[data-modal-close]')) {\n                (target as HTMLElement).click();\n            }\n        }\n    }\n\n    getGrowHint(): string{\n        return this.hwCatalogService.getTargetGroupSwitcherValue().growHint;\n    }\n    getNetworkHint(): string{\n        return this.hwCatalogService.getTargetGroupSwitcherValue().networkHint;\n    }\n\n    getPackList(): string{\n        return this.hwCatalogService.getTargetGroupSwitcherValue().packList;\n    }\n\n    public getHardwareDescription(hardware): string {\n        if (!hardware) return '';\n        if (hardware.description) return hardware.description;\n        if (hardware.hardwareValue && hardware.hardwareValue.description) return hardware.hardwareValue.description;\n        return '';\n    }\n\n    public getHardwareShopBrand(hardware): string {\n        if (hardware && hardware.ecommerceProductValue && hardware.ecommerceProductValue.attributes && hardware.ecommerceProductValue.attributes.brand) {\n            return hardware.ecommerceProductValue.attributes.brand;\n        }\n        return 'Brand not available';\n    }\n\n    public getHardwareMonthlyPrice(hardware): string {\n        if (hardware && hardware.price && hardware.price.monthlyPrice != null) {\n            return hardware.price.monthlyPrice.toFixed(2) + ' €';\n        }\n        return 'N/A';\n    }\n\n    public getHardwareTotalPrice(hardware): string {\n        if (hardware && hardware.price && hardware.price.totalPrice != null) {\n            return hardware.price.totalPrice.toFixed(2) + ' €';\n        }\n        return 'N/A';\n    }\n\n    public getHardwareRateDuration(hardware): string {\n        if (hardware && hardware.rateDurationValue) return hardware.rateDurationValue;\n        return 'N/A';\n    }\n\n    public getHardwareRateDurationforTariff(hardware): string {\n        if (hardware && hardware.rateDurationValue) {\n            const match = hardware.rateDurationValue.match(/\\d+/);\n            if (!match) return 'N/A';\n            const duration = parseInt(match[0], 10);\n            return `${duration + 1}`;\n        }\n        return 'N/A';\n    }\n\n    public getTariffName(hardware): string {\n        return hardware && hardware.bundle && hardware.bundle.tariffName\n            ? hardware.bundle.tariffName\n            : 'N/A';\n    }\n\n    public getTariffDataVolume(hardware): string {\n        return hardware && hardware.bundle && hardware.bundle.tariffDataVolume\n            ? hardware.bundle.tariffDataVolume\n            : 'N/A';\n    }\n\n    public getConnectionFee(hardware): string {\n        if (\n            hardware &&\n            hardware.price &&\n            hardware.price.activationFee != null\n        ) {\n            return hardware.price.activationFee.toFixed(2) + ' €';\n        }\n        return 'N/A';\n    }\n\n    public getMonthlyAfterBenefit(hardware): string {\n        if (\n            hardware &&\n            hardware.ecommerceProductValue &&\n            hardware.ecommerceProductValue.attributes &&\n            hardware.ecommerceProductValue.attributes.aep_monthly_price_final\n        ) {\n            return hardware.ecommerceProductValue.attributes.aep_monthly_price_final + ' €';\n        }\n        return 'N/A';\n    }\n\n    public showInfoIcon(): boolean {\n        return this.hwCatalogService.getTargetGroupSwitcherValue().infoIconToggle;\n    }\n\n}\n","import {IHwCatalogService} from \"../../service/IHwCatalogService\";\nimport {HwCatalogService} from \"../../service/HwCatalogService\";\n\nexport class LoadMoreButtonController {\n\n    static $inject = ['hwCatalogService'];\n\n    constructor(public hwCatalogService:IHwCatalogService) {\n    }\n\n    $onInit() {\n        window.addEventListener('occl.load-more-button.onClick', (event) => {\n            this.hwCatalogService.showMoreRows();\n            this.hwCatalogService.trackProductImpression(\"loadMoreButton\");\n            this.hwCatalogService.updateWindowRegardingPagination(window.location.href);\n        })\n    }\n\n    public getMaxCountOfItems() {\n        return this.hwCatalogService.getManagedState().hardwareListSize;\n    }\n\n    public getListedProductsLength() {\n        return this.hwCatalogService.getListedProductsLength() / this.getPage()\n    }\n    public getLoadMoreValue(){\n        return this.hwCatalogService.getLoadMoreValue()\n    }\n\n    public getCountOfItems() {\n        return this.hwCatalogService.getPageSize();\n    }\n    public getParameterName() {\n        return HwCatalogService.URL_PARAMETER_NAME_PAGE;\n    }\n\n    public getPage() {\n        return this.hwCatalogService.getPaginationStep();\n    }\n\n}\n\n\n","import coLoadMoreButtonTemplateHtml from './coLoadMoreButtonTemplate.html';\nexport function coLoadMoreButton():ng.IDirective {\n    return {\n        template: coLoadMoreButtonTemplateHtml,\n        controller: 'LoadMoreButtonController',\n        controllerAs: '$ctrl'\n    };\n}\n","export default \"<tef-load-more-button button-style=button-border items-per-page={{$ctrl.getListedProductsLength()}} total-items={{$ctrl.getMaxCountOfItems()}} page={{$ctrl.getPage()}} page-url-parameter-name={{$ctrl.getParameterName()}} text-button=\\\"MEHR LADEN (+{{$ctrl.getLoadMoreValue()}})\\\" prevent-default=true href=\\\"\\\" text-info=\\\"$displayedItemCount von $totalItemCount angezeigt\\\"> </tef-load-more-button>\";","import {ConstantCall, IEventService, IPageValueProvider, ITrackingService, TrackingInfoValue} from \"@shop/common\";\nimport {HwCatalogPageValue} from \"../domain/HwCatalogPageValue\";\nimport {Events} from \"./EventListenerRegistry\";\nimport {EcommerceProductValue} from \"../domain/EcommerceProductValue\";\n\nexport class HwCatalogTrackingService {\n\n    static $inject: string[] = ['trackingService', 'pageValueProvider', 'eventService'];\n\n    private readonly isUnifiedTrackingEnabled: boolean;\n\n    constructor(private readonly trackingService: ITrackingService,\n                private readonly pageValueProvider: IPageValueProvider<HwCatalogPageValue>,\n                private readonly eventService: IEventService) {\n        this.isUnifiedTrackingEnabled = this.pageValueProvider.getPageValue().unifiedTrackingEnabled;\n    }\n\n    $onInit() {\n        this.eventService.subscribe(Events.HW_CATALOG_INITIALIZED, () => {\n            this.trackPage();\n        })\n    }\n\n    public trackPage() {\n        const data = this.isUnifiedTrackingEnabled ?\n            {\n                event : \"init\",\n                page : {\n                    content : undefined,\n                    category : \"hardware-catalog\",\n                    productCategory : undefined,\n                    application : \"e-shop\",\n                    template: \"whitelabel-hardware-catalog-dev\"\n                }\n            }\n            :\n            {\n                pageCategory : \"whitelabel-catalog-dev\",\n                page : {}\n            };\n\n        this.track(data)\n    }\n\n    private track(data: any) {\n        this.trackingService.track(new ConstantCall<TrackingInfoValue>({rawContent: JSON.stringify(data)}))\n    }\n\n    public trackHwCatalogSelectionOnInitialLoad(currentTab, stateValue, selectedCriteriaValue, hardwareListSize, targetGroupValue, sortValue, isFilterParamsInUrl): void {\n            const data =\n                {\n                    event: \"eShopFilter_view\",\n                    event_name: \"filter\",\n                    eCat: \"filter\",\n                    eAct: `display filter - ${isFilterParamsInUrl ? 'url' : 'default'}`,\n                    eLab: `${currentTab}/${stateValue}/${selectedCriteriaValue}_${hardwareListSize}/${targetGroupValue}/${sortValue}/${!isFilterParamsInUrl ? 'no_url_params': selectedCriteriaValue}`,\n                    eVal: 0,\n                    nonInteraction: true\n                };\n            this.track(data);\n    }\n\n    public trackHwCatalogSelectionOnChange(currentTab, stateValue, selectedCriteriaValue, hardwareListSize, targetGroupValue, sortValue, isFilterParamsInUrl, attempt, filterType, prevStateValue): number {\n        const currentStateValue = `${currentTab}/${stateValue}/${selectedCriteriaValue}_${hardwareListSize}/${targetGroupValue}/${sortValue}/${!isFilterParamsInUrl ? 'no_url_params' : selectedCriteriaValue}`;\n        if(currentStateValue != prevStateValue){\n        const data =\n                {\n                    event: `eShopFilter_click_${attempt}`,\n                    event_name: \"filter\",\n                    eCat: \"filter\",\n                    eAct: `click filter - ${filterType}`,\n                    eLab: `${currentStateValue}`,\n                    previousEventState: `${prevStateValue}`,\n                    eVal: 0,\n                    nonInteraction: false\n                };\n            this.track(data);\n            return 1;\n        }\n        return 0;\n    }\n\n    public buildTrackingObjectForDeviceTradeInLoaded(hardwareName: string) {\n        const data =\n            {\n            event: 'deviceTradeIn',\n            event_name: 'device_trade_in_view',\n            eCat: 'Device Trade In',\n            eAct: 'view – device trade in module available',\n            eLab: hardwareName.length == 0 ? 'hardware not available' : hardwareName,\n            eVal: 0,\n            nonInteraction: true\n        };\n        this.track(data);\n\n    }\n\n    public buildTrackingObjectForDeviceTradeInStarted(buttonLabel: string) {\n        const data =\n            {\n            event: 'deviceTradeIn',\n            event_name: 'device_trade_in_click_cta',\n            eCat: 'Device Trade In',\n            eAct: 'click – start device trade in',\n            eLab: buttonLabel,\n            eVal: 0,\n            nonInteraction: false\n        };\n        this.track(data);\n\n    }\n\n    public buildTrackingObjectForDeviceTradeInSuccessful(evalValue: number , elabValue: string) {\n        const data =\n            {\n            event: 'deviceTradeIn',\n            event_name: 'device_trade_in_view',\n            eCat: 'Device Trade In',\n            eAct: 'view – end device trade',\n            eLab: elabValue,\n            eVal: evalValue,\n            nonInteraction: true\n        };\n        this.track(data);\n    }\n\n    public buildTrackingObjectForDeviceTradeInModuleButtonClick(elabValue: string, evalValue: number, eActValue: string) {\n        const data =\n            {\n            event: 'deviceTradeIn',\n            event_name: 'device_trade_in_click_cta',\n            eCat: 'Device Trade In',\n            eAct: \"click - \" + eActValue,\n            eLab: elabValue,\n            eVal: evalValue,\n            nonInteraction: false\n        };\n        this.track(data);\n\n    }\n\n    public buildTrackingObjectForDeviceTradeInDropDownClick(elabValue: string, evalValue: number) {\n        const data =\n            {\n            event: 'deviceTradeIn',\n            event_name: 'device_trade_in_click_cta',\n            eCat: 'Device Trade In',\n            eAct: 'click – dropdown arrow',\n            eLab: elabValue,\n            eVal: evalValue,\n            nonInteraction: false\n        };\n        this.track(data);\n\n    }\n\n    public buildTrackingObjectForDeviceTradeInWarning(warningMessage: string) {\n        const data =\n            {\n            event: 'deviceTradeIn',\n            event_name: 'device_trade_in_view',\n            eCat: 'Device Trade In',\n            eAct: 'view – warning',\n            eLab: warningMessage,\n            eVal: 0,\n            nonInteraction: true\n        };\n        this.track(data);\n    }\n    public buildTrackingObjectForProductImpression(currentStateValue: string, ecommerceProductValues: EcommerceProductValue[], hwIndex: number) {\n        const map = ecommerceProductValues.map((ecommerceProductValue, index) => ({\n            name: ecommerceProductValue.name,\n            quantity: ecommerceProductValue.quantity,\n            list: currentStateValue,\n            ...ecommerceProductValue.attributes,\n            position: (hwIndex + index + 1).toString(),\n        }));\n\n        const data =\n            {\n                event: 'productImpression',\n                eCat: 'EEC',\n                eAct: 'productImpression',\n                eLab: '',\n                nonInteraction: true,\n                eshop_login_status: { ...this.pageValueProvider.getPageValue().loginStatusTrackingValue},\n                ecommerce: {\n                    impressions: [...map]\n                }\n            };\n        this.track(data);\n    }\n    public trackProductClick(ecommerceProductValue: EcommerceProductValue, currentStateValue: string, hwIndex: number) {\n        const data = {\n            event: 'productClick',\n            eCat: 'EEC',\n            eAct: 'productClick',\n            eLab: '',\n            nonInteraction: false,\n            eshop_login_status: { ...this.pageValueProvider.getPageValue().loginStatusTrackingValue },\n            ecommerce: {\n                click: {\n                    actionField: {'list': currentStateValue},\n                    products: [{\n                        name: ecommerceProductValue.name,\n                        quantity: ecommerceProductValue.quantity,\n                        ...ecommerceProductValue.attributes,\n                        position: hwIndex.toString()\n                    }]\n                }\n            },\n        };\n        this.track(data)\n    }\n}","module.exports = __WEBPACK_EXTERNAL_MODULE__65__;","import coOcclDeviceTradeInTemplateHtml from \"./coOcclDeviceTradeInTemplate.html\";\n\nexport function coOcclDeviceTradeIn(): ng.IDirective {\n  return {\n      template: coOcclDeviceTradeInTemplateHtml,\n      controller: 'OcclDeviceTradeInController',\n      controllerAs:'$ctrl'\n  }\n}","export default \"<div ng-show=$ctrl.isOcclDeviceTradeInEnabled()> <tef-app-device-trade id=occlDeviceTradeIn layout=handyCatalog external-id={{$ctrl.getDeviceTradeInExternalId()}} channel={{$ctrl.getDeviceTradeInChannel()}} token={{$ctrl.getDeviceTradeInAuthToken()}} cms-url={{$ctrl.getDeviceTradeInCmsUrl()}} css-url={{$ctrl.getDeviceTradeInCssUrl()}} scs-host={{$ctrl.getDeviceTradeInBaseUrl()}} trade-in-data={{$ctrl.getDeviceTradeInResult()}}> </tef-app-device-trade> </div>\";","import {IHwCatalogService, ServiceState} from \"../../service/IHwCatalogService\";\nimport {DeviceTradeInResult} from \"../../domain/DeviceTradeInResult\";\nimport {HwCatalogTrackingService} from '../../tracking/HwCatalogTrackingService';\nimport {TrackingFormatting} from '../../utilitys/TrackingFormatting';\n\nexport class OcclDeviceTradeInController {\n\n    state: ServiceState;\n    static $inject = ['hwCatalogService', 'hwCatalogTrackingService'];\n\n  constructor(public hwCatalogService:IHwCatalogService, private hwCatalogTrackingService: HwCatalogTrackingService) {\n      const remove: string = \"remove\";\n      const edit: string = \"edit\";\n      const info: string = \"info\";\n      const warningMessage: string = \"Leider kann das Angebot momentan nicht erstellt werden. Bitte versuche es später erneut.\";\n      const buttonLabel: string = \"Preis erfahren\";\n\n    this.state = hwCatalogService.getManagedState();\n      document.getElementById(\"occlDeviceTradeIn\").addEventListener(\"occl.app-device-trade.ready\", (ev: CustomEvent) => {\n          let hardwareName = \"\";\n          if (!!this.state.deviceTradeInResult) {\n              hardwareName = this.state.deviceTradeInResult.deviceName\n          }\n          this.hwCatalogTrackingService.buildTrackingObjectForDeviceTradeInLoaded(hardwareName);\n      });\n      document.getElementById(\"occlDeviceTradeIn\").addEventListener(\"occl.app-device-trade.deleteTradeIn\", (ev: CustomEvent) => {\n          const deviceTradeInResult =  this.getDeviceTradeInResult();\n          this.hwCatalogTrackingService.buildTrackingObjectForDeviceTradeInModuleButtonClick(\n              TrackingFormatting.formatDeviceTradeInTrackingDataElab(deviceTradeInResult),\n              TrackingFormatting.formatDeviceTradeInTrackingDataEval(deviceTradeInResult.price),\n              remove)\n\n          this.handleDeleteEvent();\n\n      });\n      document.getElementById(\"occlDeviceTradeIn\").addEventListener(\"occl.app-device-trade.editTradeIn\", (ev: CustomEvent) => {\n          const deviceTradeInResult =  this.getDeviceTradeInResult();\n          this.hwCatalogTrackingService.buildTrackingObjectForDeviceTradeInModuleButtonClick(\n              TrackingFormatting.formatDeviceTradeInTrackingDataElab(deviceTradeInResult),\n              TrackingFormatting.formatDeviceTradeInTrackingDataEval(deviceTradeInResult.price),\n              edit)\n      });\n      document.getElementById(\"occlDeviceTradeIn\").addEventListener(\"occl.app-device-trade.startTradeIn\", (ev: CustomEvent) => {\n          this.hwCatalogTrackingService.buildTrackingObjectForDeviceTradeInStarted(buttonLabel);\n      });\n      document.getElementById(\"occlDeviceTradeIn\").addEventListener(\"occl.app-device-trade.toggleOffer\", (ev: CustomEvent) => {\n          const deviceTradeInResult = this.getDeviceTradeInResult();\n          this.hwCatalogTrackingService.buildTrackingObjectForDeviceTradeInDropDownClick(\n              TrackingFormatting.formatDeviceTradeInTrackingDataElab(deviceTradeInResult),\n              TrackingFormatting.formatDeviceTradeInTrackingDataEval(deviceTradeInResult.price)\n          );\n      });\n      document.getElementById(\"occlDeviceTradeIn\").addEventListener(\"occl.app-device-trade.infoLink\", (ev: CustomEvent) => {\n          const deviceTradeInResult =  this.getDeviceTradeInResult();\n          this.hwCatalogTrackingService.buildTrackingObjectForDeviceTradeInModuleButtonClick(\n              TrackingFormatting.formatDeviceTradeInTrackingDataElab(deviceTradeInResult),\n              TrackingFormatting.formatDeviceTradeInTrackingDataEval(deviceTradeInResult.price),\n              info)\n      });\n      document.getElementById(\"occlDeviceTradeIn\").addEventListener(\"occl.app-device-trade.scs.onError\", (ev: CustomEvent) => {\n          this.hwCatalogTrackingService.buildTrackingObjectForDeviceTradeInWarning(warningMessage);\n      });\n      document.getElementById(\"occlDeviceTradeIn\").addEventListener(\"occl.app-device-trade.scs.onSuccess\", (ev: CustomEvent) => {\n          this.handleSuccessEvent(ev.detail);\n      });\n  }\n\n    private handleSuccessEvent(internalId: string) {\n        this.hwCatalogService.updateDeviceTradeInResult(internalId);\n    }\n\n    public getDeviceTradeInResult(): DeviceTradeInResult{\n        if(!!this.state.deviceTradeInResult){\n            return this.state.deviceTradeInResult;\n        }\n        return undefined;\n    }\n\n    private handleDeleteEvent() {\n        this.hwCatalogService.deleteDeviceTradeInResult();\n    }\n\n  public getDeviceTradeInExternalId(): string {\n      return !!this.hwCatalogService.getDeviceTradeInPageValue() ? this.hwCatalogService.getDeviceTradeInPageValue().externalID : \"\";\n  }\n\n  public getDeviceTradeInAuthToken(): string {\n      return !!this.hwCatalogService.getDeviceTradeInPageValue() ? this.hwCatalogService.getDeviceTradeInPageValue().deviceTradeInToken : \"\";\n  }\n\n  public getDeviceTradeInChannel(): string {\n      return !!this.hwCatalogService.getDeviceTradeInPageValue() ? this.hwCatalogService.getDeviceTradeInPageValue().tradeInChannel.name : \"\";\n  }\n\n  public getDeviceTradeInCmsUrl(): string {\n      return !!this.hwCatalogService.getDeviceTradeInPageValue() ? this.hwCatalogService.getDeviceTradeInPageValue().cmsUrl : \"\";\n  }\n\n  public getDeviceTradeInCssUrl(): string {\n      return !!this.hwCatalogService.getDeviceTradeInPageValue() ? this.hwCatalogService.getDeviceTradeInPageValue().cssUrl : \"\";\n  }\n\n  public getDeviceTradeInBaseUrl(): string {\n      return !!this.hwCatalogService.getDeviceTradeInPageValue() ? this.hwCatalogService.getDeviceTradeInPageValue().baseUrl : \"\";\n  }\n\n  public isOcclDeviceTradeInEnabled(): string {\n      return !!this.hwCatalogService.getDeviceTradeInPageValue() ? this.hwCatalogService.isOcclDeviceTradeInEnabled() : \"\";\n  }\n    getHwTeaserTextContent(): string {\n        return this.hwCatalogService.getHwTeaserTextContent();\n    }\n}","import {Call, DeleteCall, Link, PostCall, valueMetaInfo} from \"@shop/common\";\nimport {DeviceTradeInChannel} from \"./DeviceTradeInChannel\";\nimport {DeviceTradeInResult} from \"./DeviceTradeInResult\";\n\n\nexport class DeviceTradeInPageValue{\n\n    static META_INFO = valueMetaInfo('hwCatalog:DeviceTradeInPageValue', {\n        externalID: 'string',\n        deviceTradeInResult: 'DeviceTradeInResult | null',\n        deviceTradeInToken: 'string',\n        tradeInChannel: 'DeviceTradeInChannel',\n        cmsUrl: 'string',\n        cssUrl: 'string',\n        baseUrl: 'string',\n        deviceTradeInDeleteResultLink: 'Link'\n    });\n\n    externalID: string;\n    deviceTradeInResult: DeviceTradeInResult;\n    deviceTradeInToken: string;\n    tradeInChannel: DeviceTradeInChannel;\n    cmsUrl: string;\n    cssUrl: string;\n    baseUrl: string;\n    deviceTradeInDeleteResultLink:Link;\n\n}","import { enumMetaInfo } from \"@shop/common\";\nexport class DeviceTradeInChannel {\n\n    static META_INFO = enumMetaInfo('hwCatalog:DeviceTradeInChannel');\n\n    static FACE_TO_FACE = new DeviceTradeInChannel(\"FACE_TO_FACE\");\n    static REMOTE = new DeviceTradeInChannel(\"REMOTE\");\n\n    constructor(public name:string) {\n        argsContract(arguments, 'str');\n    }\n}","import { enumMetaInfo } from \"@shop/common\";\n\nexport class DeviceTradeInResultType {\n    static META_INFO = enumMetaInfo('hwCatalog:DeviceTradeInResultType');\n\n    static UNKNOWN = new DeviceTradeInResultType(\"UNKNOWN\");\n    static PURCHASE_PORTAL = new DeviceTradeInResultType(\"PURCHASE_PORTAL\");\n    static OFFER_PRICE = new DeviceTradeInResultType(\"OFFER_PRICE\");\n    static RECYCLING = new DeviceTradeInResultType(\"RECYCLING\");\n    static REQUEST_PRICE = new DeviceTradeInResultType(\"REQUEST_PRICE\");\n    static ERROR = new DeviceTradeInResultType(\"ERROR\");\n\n    constructor(public name:string) {\n        argsContract(arguments, 'str');\n    }\n}","import {DeviceTradeInResultType} from \"./DeviceTradeInResultType\";\nimport {valueMetaInfo} from \"@shop/common\";\n\nexport class DeviceTradeInResult {\n\n    static META_INFO = valueMetaInfo('hwCatalog:DeviceTradeInResult', {\n        id: 'string',\n        deviceName: 'string',\n        deviceBootable: 'boolean',\n        displayDamaged: 'boolean',\n        price: 'number',\n        caseId: 'string',\n        imei: 'string',\n        checkTradeInResult: 'DeviceTradeInResultType'\n    });\n\n    id: string;\n    deviceName: string;\n    deviceBootable: boolean;\n    displayDamaged: boolean;\n    price: number;\n    caseId: string;\n    imei: string;\n    checkTradeInResult: DeviceTradeInResultType;\n}","import {valueMetaInfo} from \"@shop/common\";\n\nexport class EcommerceProductValue {\n\n    static META_INFO = valueMetaInfo('hwCatalog:EcommerceProductValue', {\n        attributes: 'any',\n        name: 'string',\n        quantity: 'number',\n    });\n\n    attributes: any;\n    name: string;\n    quantity: number;\n}","import {valueMetaInfo} from \"@shop/common\";\n\nexport class EnergyEfficiency {\n\n    static META_INFO = valueMetaInfo('EnergyEfficiency', {\n        productDataSheet: 'string',\n        energyEfficiencyLabel: 'string',\n    });\n\n    productDataSheet: string;\n    energyEfficiencyLabel: string;\n}","import {MetaInfo, valueMetaInfo} from \"@shop/common\";\n\nexport class LoginStatusTrackingValue {\n\n    static META_INFO: MetaInfo = valueMetaInfo('hwCatalog:LoginStatusTrackingValue', {\n        cust_cookie_value: 'string',\n        logged_in: 'boolean',\n        user_type: 'string',\n    });\n\n    cust_cookie_value: string;\n    logged_in: boolean;\n    user_type: string;\n}"],"sourceRoot":""}