{"version":3,"sources":["filter.js","string.js","auth.js","basket.js","dictionaries.js","navigation.js","languagemodal.js","index.js","agent.js","print.js","dealers.js","tracking.js","selfService.js","wishlist.js","01-atoms/loader/loader.js","02-molecules/article-tile/article-tile.js","02-molecules/blog-post-tile/blog-post-tile.js","02-molecules/basketline/basketline.js","02-molecules/dropdown-element/dropdown-element.js","02-molecules/dealer-modal/dealer-modal.js","02-molecules/dealer-tile/dealer-tile.js","02-molecules/dropdown-selector/dropdownselector.js","02-molecules/google-maps/google-maps.js","02-molecules/google-maps-autocomplete/google-maps-autocomplete.js","02-molecules/language-modal/language-modal.js","02-molecules/measurement-input/measurement-input.js","02-molecules/multi-filter/multi-filter.js","03-organisms/article-list/article-list.js","03-organisms/basket-page/basket-page.js","03-organisms/article-slider/article-slider.js","03-organisms/camera-page/camera-page.js","03-organisms/checkout-page/checkout-page.js","03-organisms/collection-product/collection-product.js","03-organisms/dealer-list-page/dealer-list-page.js","03-organisms/dealer-list-page/dealers-list.js","03-organisms/drop-down-filter/drop-down-filter.js","03-organisms/filter-checkbox/filter-checkbox.js","03-organisms/footer/footer.js","03-organisms/hero/video-player.js","03-organisms/login-page/login-page.js","03-organisms/list-filters/list-filters.js","03-organisms/mobile-filter/toggle-mobile-filter.js","03-organisms/modal/modal.js","03-organisms/order-page/order-page.js","03-organisms/navigation/navigation-message.js","03-organisms/navigation/navigation.js","03-organisms/product-list/product-list.js","03-organisms/product-list-highlight/product-list-highlight.js","03-organisms/product-page/product-page.js","03-organisms/product-page-slider/product-page-slider.js","03-organisms/receipt-page/receipt-page.js","03-organisms/product-recommendation/product-recommendation.js","03-organisms/product-tile/product-tile.js","03-organisms/search-results/search-results.js","03-organisms/self-service-customer-info/self-service-customer-info.js","03-organisms/search-page/search-page.js","03-organisms/specification-navigation/specification-navigation.js","03-organisms/toiletseat-filters/toiletseat-filters.js","03-organisms/testimonial-list/testimonial-list.js","03-organisms/video-grid/video-grid.js","03-organisms/wishlist/wishlist.js","cookieService.js","navigationService.js","app.js"],"names":["pressalit","filterHelpers","mergeFilters","newFilter","currentFilter","map","filter","current","find","x","filterId","filterType","selected","fromValue","stringHelpers","b64DecodeUnicode","str","decodeURIComponent","Array","prototype","call","atob","c","charCodeAt","toString","slice","join","getCookieValue","name","regex","RegExp","document","cookie","replace","axios","clientId","clientSecret","baseUrl","window","location","origin","storeAuth","this","store","_mutations","setAccessToken","s","token","accessToken","cookieService","setCookie","setRefreshToken","refreshToken","_actions","init","_ref","commit","getCookie","login","_ref2","loginCredentials","payload","username","password","grant_type","client_id","client_secret","req","post","then","_ref3","data","access_token","refresh_token","createUser","_ref4","userData","market","country","company","email","terms","_ref5","console","log","logout","_ref6","removeCookie","href","refresh","_ref7","state","_ref8","namespaced","actions","getters","isLoggedIn","mutations","storeBasket","_getters","getLines","lines","getLineById","id","isLoading","isSubmitting","getTotals","totals","getQuantity","quantity","isAddedToBasket","productIds","indexOf","getCulture","culture","getSiteNodeId","siteNodeId","getErrors","errors","isNewCustomer","disabledInvoiceFields","properties","hasERPInvoiceAddress","invoiceAddress","deliveryAddress","deliveryDetails","isDeliveryToInvoiceAddress","reference","poNumber","shippingDateRequested","customerDeliveryState","requestadeliverydate","contactUponDelivery","phoneNumberUponDelivery","deliveryInstructions","comment","hasError","Object","keys","some","key","value","isArray","length","_typeof","getSummaryFromCookie","result","cookieBase64","json","JSON","parse","summary","lineCount","e","error","getBasket","get","basket","orderTotals","getCheckout","checkout","updateQuantity","params","basketLineId","put","removeBasketLine","basketlineId","delete","_ref9","submit","_ref10","Promise","resolve","reject","_ref11","isSuccess","operationCompleted","paymentResponse","response","api","addToBasket","_ref12","_ref13","productId","_ref14","addReplicatedBasketLine","_ref15","_ref16","forceNewBasketLine","_ref17","addPoNumber","_ref18","_ref19","_ref20","deletePoNumber","_ref21","_ref22","firstName","lastName","addressLine1","addressLine2","postalCode","city","countryCode","setQuantity","setErrors","setLines","setProductsInBasket","setTotals","setLoading","setSubmitting","unsetLoading","unsetSubmitting","setCulture","setSiteNodeId","updateBasketLineQuantity","index","findIndex","line","setIsNewCustomer","setProperties","setEmail","setInvoiceAddress","address","setDeliveryAddress","setShippingDetails","shippingDetails","setDeliveryToInvoiceAddress","status","setComment","storeDictionaries","getAll","promise","dictionaries","getByKey","item","cultureVariant","translations","setAll","setPromise","storeNavigation","toggleSidebar","isOpen","arguments","undefined","isSidebarOpen","showOverlay","scrollTo","getElementsByTagName","classList","add","remove","setTimeout","isFullWidth","component","toggleOverlay","show","isSearchOpen","toggleSearch","setIsFullWidth","setComponent","setData","setNavigationProps","props","navigationProps","setListeners","listeners","storeLanguageModal","toggle","setCurrent","storeFilter","setFilterProductName","filterProductName","setFilterManufacturerName","filterManufacturerName","setFilterToiletShape","filterToiletShape","setFilterToiletMounting","filterToiletMounting","setFilterToiletMeasurement1","filterToiletMeasurement1","setFilterToiletMeasurement2","filterToiletMeasurement2","setFilterToiletMeasurement3","filterToiletMeasurement3","setIsManufacturerSearch","newState","isManufacturerSearch","setProductEndpoint","endpoint","productEndpoint","setFilters","total","page","pageSize","pagesize","filters","categoryId","initialCount","products","filterToken","resetFilters","setProducts","concat","_toConsumableArray","toggleSearching","searching","hideServersideRendered","setMappings","mappings","filterMappings","search","filterPayload","dispatch","isFilterReset","resetAllFilters","sorting","replaceFilters","filterOptions","options","results","router","query","searchInFilters","updateQuery","assign","currentRoute","sort","getProductEndpoint","getFilterManufacturerName","getFilterProductName","getFilterToiletShape","getFilterToiletMounting","getFilterToiletMeasurement1","getFilterToiletMeasurement2","getFilterToiletMeasurement3","getFilters","perfionName","perfionFieldName","mapping","f","title","label","Vuex","vuex","Vue","use","_this","Store","registerModule","storeAgent","storePrint","storeDealers","tracking","storeSelfService","storeWishlist","getElementById","interceptors","request","config","auth","headers","Authorization","isAlreadyFetchingAccessToken","subscribers","handle401","__isRetryRequest","retryOriginalRequest","callback","push","newToken","forEach","err","isAgentIe","documentMode","isWishlistPrinting","wishlistPrinting","printWishlist","stopWishlistPrint","fetch","language","rootState","latitude","longitude","radius","languageCode","term","isWebshop","isPrivate","bottomRight","topLeft","cancelToken","cancelSource","uudi","dt","Date","getTime","r","Math","random","floor","toGoogleMoney","val","Number","toFixed","mapBasketLine","item_id","erpId","item_name","productTitle","item_category","item_category2","discount","productPrice","price","currency","item_variant","variantTitle","taxable","requiresShipping","_actions2","_defineProperty","trackEcommerce","_objectDestructuringEmpty","dataLayer","totalPrice","p","event","transactionId","transactionAffiliation","affiliation","transactionTotal","transactionTax","transactionProducts","trackToiletSeatManufacturerSearch","action","manufacturerTitle","modelTitle","trackViewBasket","ecommerce","unitPrice","items","basketLine","trackViewWishList","trackToiletSeatOverlay","overlayChoice","overlayTitle","trackToiletSeatShapeSearch","toiletShape","toiletMounting","toiletMeasurement1","toiletMeasurement2","toiletMeasurement3","customerid","itemView","productNumber","productName","item_url","productUrl","item_status","lineStatus","item_price","lineAmount","lineQuantity","addToCart","productCategory","parentProductId","productQuantity","addToWishList","removeFromWishList","changedQuantityTo","transaction_id","VueRouter","mode","_state","customerInfo","customerOrders","fetchingData","showLoadmore","loadMore","getCustomerInfo","catch","getCustomerOrders","firstCall","newPage","orders","finally","url","URL","pathname","setCustomerInfo","setCustomerOrders","setFetchingData","setPage","setTerm","setShowLoadmore","setLoadMore","setFilter","getWishlist","bulkAdd","productIdQuantityDictionary","apply","k","redirectUrl","removeSubline","subLineId","_ref23","setProductsInWishlist","updateWishlistLineQuantity","novicell","loader","template","active","type","Boolean","default","theme","String","computed","color","articleTile","article","contentType","charAt","toUpperCase","dataQueryObj","center","image","focalPoint","top","left","stringify","quality","articleTileType","primaryFilter","blogPostTile","blogPost","basketline","sublinesIsVisible","methods","toggleSublines","deleteItem","$store","deleteSubline","decreaseQuantity","increaseQuantity","changeQuantity","target","parseInt","watch","isPrinting","handler","quantityDecreaseDisabled","productImage","hasSubLines","subLines","print","dropdownElement","els","querySelectorAll","i","addEventListener","currentTarget","dropdown","dealerModal","selectedType","types","selectedFilters","editType","showDealerTypeSelection","selectedTypeLabel","aliasKey","select","close","$emit","onFilter","getActiveClass","toggleBodyLock","elements","scrollClass","newVal","dealerTile","dealer","tempFilter","dropdownselector","toggleList","countries","getElementsByClassName","VueGoogleMaps","GmapCluster","googleMaps","load","libraries","Cluster","markers","currentPosition","zoom","infoWindowOpen","currentSelectedMarker","changingPlace","currentMidx","infoOptions","pixelOffset","width","height","isMapDragged","zoomLevel","gmapOptions","streetViewControl","fullscreenControl","mapTypeControl","icon","getBoundsCoordinates","$refs","$mapObject","getBounds","getStyles","styles","featureType","elementType","stylers","visibility","saturation","lightness","getBoundMarkers","bounds","google","maps","LatLngBounds","extend","position","phoneTranslation","infoWindowPos","getSelectedMarkerState","info","oldVal","panTo","fitBounds","click","marker","mapIsDragged","mapHasLoaded","mounted","$mapPromise","setCenter","setZoom","addListener","setOptions","googleMapsAutocomplete","inheritAttrs","clearInput","input","blur","focus","_this2","$gmapApiPromiseLazy","places","Autocomplete","Error","$autocomplete","$watch","v","setComponentRestrictions","getPlace","languageModal","el","languagemodal","vm","overlay","create","selector","class","onLoaded","links","_loop","link","preventDefault","parts","split","languagePart","lang","dataset","langName","alias","langAlias","onDestroy","immediate","languageModalElement","createElement","innerHTML","languageLinks","defaultLanguage","defaultName","languageSegment","match","currentLanguage","languageFromSegment","footerModalEl","open","measurementInput","number","measurement","onMeasurementChange","toValue","multiFilter","applyDictionaryKey","singleFilter","showReset","isDealerView","selectedValues","o","isSingle","customLabel","casedValue","substring","toLowerCase","dictionary","targetFilter","deep","validate","last","setTemp","reset","update","articleList","articles","parentId","$route.query","created","initialState","currentQuery","$route","sortingMethod","onQueryChange","$router","loadmore","updateSorting","paginationText","dict","includes","visibleLinksAmount","basketPage","pageEl","showAdditionalPoNumberSections","additionalPoNumbers","showError","basketLines","basketTotals","toggleShowAdditionalPoNumberSection","$set","replicateOrderLine","addAdditionalPoNumber","removeAdditionalPoNumber","Flickity","articleSlider","pageDots","groupCells","contain","draggable","cellAlign","imagesLoaded","arrowShape","x0","x1","y1","x2","y2","x3","cameraPage","getVerification","sender","phone","success","sending","send","senderName","senderEmail","senderPhone","checkoutPage","additionalAddressLine","additionalAddressLineDelivery","commentSection","showDeliverydate","receiptPage","$validator","validateAll","receiptPageUrl","encodeURIComponent","newRedirectUrl","set","collectionProduct","contentOverlayTriggers","overlayInnerContent","querySelector","stopPropagation","content","getAttribute","onCreate","injectContent","loadedContent","clearContent","collectionGrids","addToWishlist","tpl","wrapper","activeCampaignForm","changeAddress","dealerListPage","lastPosition","lat","lng","currentBounds","pagination","activeTab","showWebshops","isSearching","searchTimeout","initialCountryIsoFilter","userType","totalResults","currentCountry","place","showMap","activeDealer","inputChanged","initialZoom","goToPhysicalDealers","clearPlace","switchTab","tabs","tab","goToDealer","mapElement","innerWidth","scroll","offsetTop","clientHeight","behavior","openMarker","onDealerOpen","changePlace","place_id","updateRouteQuery","webshop","geoLocations","getGeoLocations","nw","nwLat","nwLng","se","seLat","seLng","isWebshops","updateZoom","updateBounds","getCenter","setType","userTypeFilter","identifier","getLatLng","newPosition","visibleMap","temporaryDomNode","style","clientWidth","body","append","fakeMap","Map","isoFilterIndex","getIsoFilterIndex","clearTimeout","cancel","CancelToken","source","isPrivateUser","getSegmentFilters","setSelectedFilterBasedOnCategory","currentCategoryId","category","productGroupFilters","categoryOption","option","onInputChange","referenceElement","rect","getBoundingClientRect","pacContainer","adjustedBottom","parseFloat","bottom","scrollY","styleSheets","insertRule","geometry","visibleFilters","northEast","getNorthEast","southWest","getSouthWest","showingForType","_this3","mappedFilter","isFixed","nullable","sortOrder","isActive","_this4","_tags","website","websiteUrl","tags","isProffessional","categories","jsonValue","initialValues","filterMapping","dealersList","dealers","isClickableHeadline","newDealerId","list","child","dealerClick","openAccordion","closeAccordion","getDealerState","dropDownFilter","allowNullable","selectedAlias","filterCheckbox","localValue","selectedValue","initialLoad","setLocalValue","isSelected","filter.selected","_newValue","prevValue","footer","videoPlayer","loginPage","createAccountToggle","showCreateAccount","submitting","errorMessage","loginSubmitting","loginError","loginSuccess","countryUrl","languageAbsoluteUrl","jwtDecode","t","raw","header","showCreateUser","clearData","trackinghash","Cookies","languageName","memberId","message","validateBeforeSubmit","listFilters","visibleFilterIds","isInOverlay","count","update:filters","hideModal","showTags","initialFilters","openFilters","showBackdrop","reduce","arr","closeModal","showResults","_this5","closeAll","updateFilter","removeAllFilters","removeFilterValue","updateCategory","splice","mobileTagsList","toggleMobileFilters","modal","createOverlay","element","modalClosers","destroy","modalTriggers","triggerElement","orderPage","order","loading","getOrder","orderId","orderid","goToProduct","product","navigationMessage","isIe","searchTrigger","quickLinks","searchUrl","searchTerm","searchOpen","navigation","setResults","searchInput","goToSearch","setSearchTerm","navigationState","currentNav","prevNav","secondNavigation","findDealer","currentList","children","nav","mainNavigation","selectNode","nodeId","goBack","selectedItem","pop","navigationEl","navigationContentEl","navigationComponent","navigationListeners","wishlistUrl","wishlistQuantity","openSidebar","prevScrollpos","pageYOffset","onscroll","currentScrollPos","searchPageIsActive","specificationNavigation","contains","toggleNavTop","burgerIcon","navigationWhite","navigationBlack","bannerMarket","main","productList","initialCategoryState","eventData","showToiletFilterButtons","hasBestFit","fit","hasSecondBestFit","hasThirdBestFit","showContentBoxes","hideLoadmore","productListJson","manufacturerFilters","manufacturerFilter","categoryJson","filterIds","scrollToProductList","productListRect","y","objectIsEmpty","obj","prop","hasOwnProperty","insertManufacturerInformation","fitDescription","comp","heroHeading","description","heroText","headingElement","descriptionElement","textContent","newURL","test","getFiltervalue","filterName","filterArray","filterMatch","filterEntry","selectorMatch","trim","beforeDestroy","productListHighlight","triggers","currentTrigger","productPage","productLine","activeBasketLine","activeWishlistLine","punchoutShops","showButtonLoading","isLoadingPunchouts","loadingData","isLoadingAddToBasket","addToBasketState","showSuccess","addedToBasketError","addedToBasket","updateActiveBasketLine","wishlistLines","updateActiveWishlistLine","basketPageUrl","openPowerStep","trackingData","powerStepInstance","$destroy","activeLines","isAddedToFavorites","openPunchoutOverlay","productData","loadingTimer","catalogId","ean","res","shopsInstance","hasPunchoutShops","shops","showPunchoutShops","channel","showFindDealer","getDataQueryObject","focalPoints","handleShopClick","shop","sku","getTrackingClassName","openOverlay","openImage","hAglbFile","jsonFile","productPageSlider","getPrice","_this6","imageToOpen","pageEls","a","sliders","controlFunctions","controlMeasurements","activeControlMeasurements","setActiveTab","tabName","destroySlider","initImageSlider","initVideoSlider","init3603D","isCheckboxChecked","checked","invertState","customScript","setAttribute","head","appendChild","ProductViewerSettings","server","staticAssetsServer","units","initialEffect","initialEffectImageURL","enableCameraPresetControls","enableFunctionControls","enableFullscreenControl","enableMeasurementControls","enableLighting","enablePartsControls","enableCameraControl","background","debugMode","PressalitModelViewer","modelData","functions","measurements","activateFunction","activateMeasurements","localBool","setMeasurementVisibility","slideIndex","sliderRef","overlaySlider","slider","thumbnailRef","overlayThumbnails","thumbs","prevNextButtons","asNavFor","overlayVideoSlider","overlayVideoThumbnails","indexSlider","trackPurchase","productRecommendation","percentPosition","on","ready","productTileTemplate","bestFitDictionary","secondBestFitDictionary","thirdBestFitDictionary","getTrackingClass","productFitId","getProductFitClass","getFitText","searchResults","showSearchTerm","totalResultCount","totalResultsString","getTotalResultsCount","temp","getQueryParameterByName","exec","$nextTick","iOS","navigator","userAgent","MSStream","displayImageUrl","showNormalPage","contents","hasResults","countProducts","countArticles","references","hideLoadMore","productsTotal","Cookiebot","selfService","setQuery","getCustomer","getOrders","loadMoreOrder","clearSearch","searchPage","mainNavLinks","productPageHeight","offsetHeight","fromTop","section","hash","ev","linkRect","toiletseatFilters","showWebAppButton","levelTwoFilter","setLevelTwoFilter","className","protocol","hostname","subText","iconAlias","stepNumber","filterImages","shapeFilterEndpoint","filter2Disabled","filter3Disabled","filterMeasurementDisabled","valid","getMeasurementImage","shapeFilter","selectedShape","getImageWithMeasurementsByName","images","shapeFilters","getImageByName","names","imageWithMeasurements","isFilterSelected","selectFilter","filterIndex","blacklistedFilters","AndReplacer","output","initialEndpoint","channelFilter","testimonialList","freeScroll","lazyLoad","videoGrid","showVideo","cookiesAccepted","checkCookies","playVideo","toggleVideo","renew","loadVideo","consent","marketing","preferences","statistics","wishlist","initComponents","wishlistJson","goToPreviousPage","history","back","sendToRecipient","sendToPressalit","senderCompany","senderPostalCode","recipient","recipientName","recipientEmail","ca","days","expires","date","setTime","toUTCString","navigationService","toggleBackdrop","sidebarId","menuOverlay","_listener","removeEventListener","lazySizes","VeeValidate","classes","locale","documentElement","svg4everybody","VTooltip","anchors","targetNode","pushState","scrollIntoView"],"mappings":"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","file":"app.min.js","sourcesContent":["/**\r\n * @name Navigation\r\n * @desc Store for navigation\r\n */\r\n\r\n\r\nvar pressalit = pressalit || {}; // eslint-disable-line\r\nvar axios = axios; // eslint-disable-line\r\n\r\npressalit.storeFilter = pressalit.storeFilter || new function () {\r\n this.store = null;\r\n\r\n const _state = {\r\n filterManufacturerName: null,\r\n filterProductName: null,\r\n isManufacturerSearch: false,\r\n filters: [],\r\n page: 1,\r\n pageSize: 20,\r\n sorting: 'NameAscending',\r\n total: null,\r\n categoryId: null,\r\n initialCount: null,\r\n products: [],\r\n searching: false,\r\n filterToken: null,\r\n hideServersideRendered: false,\r\n filterMappings: [],\r\n productEndpoint: '/api/catalog/search/SearchProducts',\r\n };\r\n\r\n const _mutations = {\r\n setFilterProductName(s, name) {\r\n s.filterProductName = name;\r\n },\r\n setFilterManufacturerName(s, name) {\r\n s.filterManufacturerName = name;\r\n },\r\n setFilterToiletShape(s, name) {\r\n s.filterToiletShape = name;\r\n },\r\n setFilterToiletMounting(s, name) {\r\n s.filterToiletMounting = name;\r\n },\r\n setFilterToiletMeasurement1(s, name) {\r\n s.filterToiletMeasurement1 = name;\r\n },\r\n setFilterToiletMeasurement2(s, name) {\r\n s.filterToiletMeasurement2 = name;\r\n },\r\n setFilterToiletMeasurement3(s, name) {\r\n s.filterToiletMeasurement3 = name;\r\n },\r\n setIsManufacturerSearch(s, newState) {\r\n s.isManufacturerSearch = newState;\r\n },\r\n setProductEndpoint(s, endpoint) {\r\n s.productEndpoint = endpoint;\r\n },\r\n setFilters(s, filter) {\r\n const { total } = filter;\r\n s.total = (typeof total !== 'undefined') ? total : s.total;\r\n s.page = filter.page || s.page;\r\n s.pageSize = filter.pagesize || s.pageSize;\r\n s.filters = filter.filters || s.filters;\r\n s.categoryId = filter.categoryId || s.categoryId;\r\n s.initialCount = filter.initialCount || s.initialCount;\r\n s.products = filter.products || s.products;\r\n s.filterToken = filter.filterToken || s.filterToken;\r\n\r\n return null;\r\n },\r\n resetFilters(s) {\r\n s.total = 0;\r\n s.pageSize = 20;\r\n s.filters = [];\r\n s.page = 1;\r\n s.categoryId = null;\r\n s.initialCount = 0;\r\n s.products = [];\r\n s.filterToken = null;\r\n },\r\n setProducts(s, products) {\r\n s.products = [\r\n ...s.products,\r\n ...products,\r\n ];\r\n },\r\n toggleSearching(s, value) {\r\n s.searching = value;\r\n },\r\n hideServersideRendered(s) {\r\n s.hideServersideRendered = true;\r\n },\r\n setMappings(s, mappings) {\r\n s.filterMappings = mappings;\r\n },\r\n };\r\n\r\n const _getters = {\r\n getProductEndpoint(s) {\r\n return s.productEndpoint;\r\n },\r\n getFilterManufacturerName(s) {\r\n return s.filterManufacturerName;\r\n },\r\n getFilterProductName(s) {\r\n return s.filterProductName;\r\n },\r\n getFilterToiletShape(s) {\r\n return s.filterToiletShape;\r\n },\r\n getFilterToiletMounting(s) {\r\n return s.filterToiletMounting;\r\n },\r\n getFilterToiletMeasurement1(s) {\r\n return s.filterToiletMeasurement1;\r\n },\r\n getFilterToiletMeasurement2(s) {\r\n return s.filterToiletMeasurement2;\r\n },\r\n getFilterToiletMeasurement3(s) {\r\n return s.filterToiletMeasurement3;\r\n },\r\n getFilters: s => s.filters.map((x) => {\r\n const perfionName = x.properties.perfionFieldName;\r\n if (!perfionName) {\r\n return x;\r\n }\r\n const mapping = s.filterMappings ? s.filterMappings.find(f => f.perfionName === perfionName) : null;\r\n if (mapping != null) {\r\n x.title = mapping.label;\r\n }\r\n return x;\r\n }),\r\n };\r\n\r\n const _actions = {\r\n search({\r\n commit,\r\n state,\r\n dispatch,\r\n }, filterPayload) {\r\n if (!filterPayload.endpoint || state.searching) {\r\n return false;\r\n }\r\n\r\n commit('toggleSearching', true);\r\n const isFilterReset = filterPayload.filters && filterPayload.filters.resetAllFilters;\r\n\r\n if (filterPayload.hideServersideRendered) {\r\n commit('hideServersideRendered');\r\n }\r\n\r\n const payload = {\r\n categoryId: state.categoryId,\r\n page: state.page,\r\n pageSize: state.pageSize,\r\n sorting: state.sorting,\r\n filter: {\r\n filters: filterPayload.filters,\r\n },\r\n };\r\n\r\n let endpoint = filterPayload.endpoint;\r\n if (state.isManufacturerSearch) {\r\n endpoint = '/api/catalog/search/SearchProductsByManufacturer';\r\n }\r\n\r\n return axios.post(endpoint, payload)\r\n .then(({\r\n data,\r\n }) => {\r\n commit('setFilters', {\r\n filters: filterPayload.replaceFilters ? data.filterOptions.options.filters : null,\r\n total: data.total,\r\n filterToken: data.filterOptions.filterToken,\r\n });\r\n\r\n commit('setProducts', data.results);\r\n\r\n if (isFilterReset) {\r\n // Remove the existing query when filters are reset\r\n filterPayload.router.replace({\r\n query: '',\r\n });\r\n } else {\r\n dispatch('updateQuery', filterPayload.router);\r\n }\r\n\r\n commit('toggleSearching', false);\r\n return data;\r\n }, () => {\r\n commit('toggleSearching', false);\r\n });\r\n },\r\n searchInFilters({\r\n state,\r\n }, filterPayload) {\r\n if (!filterPayload.endpoint) {\r\n return false;\r\n }\r\n\r\n const payload = {\r\n categoryId: state.categoryId,\r\n page: state.page,\r\n pageSize: state.pageSize,\r\n sorting: state.sorting,\r\n filter: {\r\n filters: filterPayload.filters,\r\n },\r\n };\r\n return axios.post(filterPayload.endpoint, payload)\r\n .then(({\r\n data,\r\n }) => data);\r\n },\r\n updateQuery({\r\n state,\r\n }, router) {\r\n const query = Object.assign({}, router.currentRoute.query);\r\n query.page = state.page;\r\n query.sort = state.sorting;\r\n query.filter = state.filterToken;\r\n router.replace({\r\n query,\r\n });\r\n },\r\n setMappings({\r\n commit,\r\n }, {\r\n filterMappings,\r\n }) {\r\n commit('setMappings', filterMappings);\r\n },\r\n };\r\n\r\n this.store = {\r\n namespaced: true,\r\n actions: _actions,\r\n getters: _getters,\r\n state: _state,\r\n mutations: _mutations,\r\n };\r\n}();\r\n","\r\n/**\r\n * @name String Helpers\r\n */\r\n\r\n\r\nvar pressalit = pressalit || {}; // eslint-disable-line\r\n\r\npressalit.stringHelpers = pressalit.stringHelpers || new function () {\r\n return {\r\n b64DecodeUnicode(str) {\r\n return decodeURIComponent(Array.prototype.map.call(atob(str), c => `%${(`00${c.charCodeAt(0).toString(16)}`).slice(-2)}`).join(''));\r\n },\r\n getCookieValue(name) {\r\n const regex = new RegExp(`(?:(?:^|.*;\\\\s*)${name}\\\\s*\\\\=\\\\s*([^;]*).*$)|^.*$`);\r\n return document.cookie.replace(regex, '$1');\r\n },\r\n\r\n };\r\n}();\r\n","/**\r\n * @name Auth\r\n * @desc Store for Auth\r\n */\r\n\r\n\r\nvar pressalit = pressalit || {}; // eslint-disable-line\r\nvar axios = axios; // eslint-disable-line\r\nconst clientId = 'pressalit-oauth-website';\r\nconst clientSecret = '1e9K4FEuAR48jeYuGm10TSPotv8OKaV435';\r\n\r\nconst baseUrl = window.location.origin.replace('pressalit.', 'admin.pressalit.');\r\n\r\npressalit.storeAuth = pressalit.storeAuth || new function () {\r\n this.store = null;\r\n const _state = {\r\n accessToken: '',\r\n refreshToken: '',\r\n };\r\n\r\n const _mutations = {\r\n setAccessToken(s, token) {\r\n s.accessToken = token;\r\n pressalit.cookieService.setCookie(\r\n 'pressalit_access_token',\r\n token,\r\n 60, // TODO Set the lifetime based on Access Token lifetime\r\n );\r\n },\r\n setRefreshToken(s, token) {\r\n s.refreshToken = token;\r\n pressalit.cookieService.setCookie(\r\n 'pressalit_refresh_token',\r\n token,\r\n 60, // TODO Set the lifetime based on Refresh Token lifetime\r\n );\r\n },\r\n };\r\n\r\n const _getters = {\r\n isLoggedIn: s => !!s.accessToken,\r\n };\r\n\r\n const _actions = {\r\n init({ commit }) {\r\n const accessToken = pressalit.cookieService.getCookie('pressalit_access_token');\r\n commit('setAccessToken', accessToken);\r\n const refreshToken = pressalit.cookieService.getCookie('pressalit_refresh_token');\r\n commit('setRefreshToken', refreshToken);\r\n },\r\n login({\r\n commit,\r\n }, loginCredentials) {\r\n const payload = {\r\n username: loginCredentials.username,\r\n password: loginCredentials.password,\r\n grant_type: 'password',\r\n client_id: clientId,\r\n client_secret: clientSecret,\r\n\r\n };\r\n const req = axios.post(`${baseUrl}/oauth/token`, payload);\r\n req.then(\r\n ({ data }) => {\r\n commit('setAccessToken', data.access_token);\r\n commit('setRefreshToken', data.refresh_token);\r\n },\r\n );\r\n return req;\r\n },\r\n createUser({\r\n commit,\r\n }, userData) {\r\n const payload = {\r\n market: userData.country,\r\n company: userData.company,\r\n email: userData.email,\r\n password: userData.password,\r\n terms: userData.terms,\r\n\r\n };\r\n const req = axios.post(`${baseUrl}/api/member/create`, payload);\r\n req.then(\r\n ({ data }) => {\r\n // TODO handle this later\r\n console.log(commit);\r\n console.log(data);\r\n },\r\n );\r\n return req;\r\n },\r\n logout({\r\n commit,\r\n }) {\r\n commit('setAccessToken', '');\r\n commit('setRefreshToken', '');\r\n pressalit.cookieService.removeCookie(\r\n 'B2B-Basket',\r\n );\r\n window.location.href = '/';\r\n },\r\n refresh({\r\n commit,\r\n state,\r\n }) {\r\n const payload = {\r\n refresh_token: state.refreshToken,\r\n grant_type: 'refresh_token',\r\n client_id: clientId,\r\n client_secret: clientSecret,\r\n\r\n };\r\n const req = axios.post(`${baseUrl}/oauth/token`, payload);\r\n req.then(\r\n ({ data }) => {\r\n commit('setAccessToken', data.access_token);\r\n commit('setRefreshToken', data.refresh_token);\r\n },\r\n () => {\r\n commit('setAccessToken', '');\r\n commit('setRefreshToken', '');\r\n },\r\n );\r\n return req;\r\n },\r\n };\r\n\r\n this.store = {\r\n namespaced: true,\r\n actions: _actions,\r\n getters: _getters,\r\n state: _state,\r\n mutations: _mutations,\r\n };\r\n}();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar axios = axios; // eslint-disable-line\r\npressalit.storeBasket = pressalit.storeBasket\r\n || new (function () {\r\n this.store = null;\r\n const state = {\r\n quantity: 0,\r\n lines: [],\r\n productIds: [],\r\n isLoading: true,\r\n isSubmitting: false,\r\n totals: [],\r\n errors: {},\r\n culture: null,\r\n siteNodeId: null,\r\n email: '',\r\n deliveryAddress: {\r\n firstName: null,\r\n lastName: null,\r\n addressLine1: null,\r\n addressLine2: null,\r\n company: null,\r\n postalCode: null,\r\n city: null,\r\n country: '',\r\n countryCode: '',\r\n email: null,\r\n },\r\n invoiceAddress: {\r\n firstName: null,\r\n lastName: null,\r\n addressLine1: null,\r\n addressLine2: null,\r\n company: null,\r\n postalCode: null,\r\n city: null,\r\n country: '',\r\n countryCode: '',\r\n email: null,\r\n },\r\n isDeliveryToInvoiceAddress: true,\r\n properties: {\r\n reference: '',\r\n poNumber: '',\r\n requestadeliverydate: 'false',\r\n contactUponDelivery: '',\r\n phoneNumberUponDelivery: '',\r\n deliveryInstructions: '',\r\n comment: '',\r\n customerDeliveryState: '',\r\n shippingDateRequested: '',\r\n },\r\n };\r\n\r\n const mutations = {\r\n setQuantity(s, quantity) {\r\n s.quantity = quantity;\r\n },\r\n setErrors(s, errors) {\r\n s.errors = errors;\r\n },\r\n setLines(s, lines) {\r\n s.lines = lines;\r\n },\r\n setProductsInBasket(s, productIds) {\r\n s.productIds = productIds;\r\n },\r\n\r\n setTotals(s, totals) {\r\n s.totals = totals;\r\n },\r\n setLoading(s) {\r\n s.isLoading = true;\r\n },\r\n setSubmitting(s) {\r\n s.isSubmitting = true;\r\n },\r\n unsetLoading(s) {\r\n s.isLoading = false;\r\n },\r\n unsetSubmitting(s) {\r\n s.isSubmitting = false;\r\n },\r\n setCulture(s, culture) {\r\n s.culture = culture;\r\n },\r\n setSiteNodeId(s, id) {\r\n s.siteNodeId = id;\r\n },\r\n updateBasketLineQuantity(s, payload) {\r\n const index = s.lines.findIndex(\r\n line => line.id === payload.basketLineId,\r\n );\r\n if (index >= 0) {\r\n s.lines[index].quantity = payload.quantity;\r\n }\r\n },\r\n setIsNewCustomer(s, isNewCustomer) {\r\n s.isNewCustomer = !(isNewCustomer === 'False');\r\n },\r\n setProperties(s, properties) {\r\n s.properties = properties;\r\n },\r\n setEmail(s, email) {\r\n s.email = email;\r\n },\r\n setInvoiceAddress(s, address) {\r\n s.invoiceAddress = address || s.invoiceAddress;\r\n },\r\n setDeliveryAddress(s, address) {\r\n s.deliveryAddress = address || s.deliveryAddress;\r\n },\r\n setShippingDetails(s, address) {\r\n s.shippingDetails = address || s.shippingDetails;\r\n },\r\n setDeliveryToInvoiceAddress(s, status) {\r\n s.isDeliveryToInvoiceAddress = status;\r\n },\r\n setComment(s, comment) {\r\n s.properties.comment = comment;\r\n },\r\n };\r\n\r\n const _getters = {\r\n getLines: s => s.lines,\r\n getLineById: s => id => s.lines.find(x => x.id === id),\r\n isLoading: s => s.isLoading,\r\n isSubmitting: s => s.isSubmitting,\r\n getTotals: s => s.totals,\r\n getQuantity: s => s.quantity,\r\n isAddedToBasket: s => id => s.productIds.indexOf(id) > -1,\r\n getCulture: s => s.culture,\r\n getSiteNodeId: s => s.siteNodeId,\r\n getErrors: s => s.errors,\r\n isNewCustomer: s => s.isNewCustomer,\r\n disabledInvoiceFields: s => s.properties.hasERPInvoiceAddress === 'true',\r\n email: s => s.email,\r\n invoiceAddress: s => s.invoiceAddress || {},\r\n deliveryAddress: s => s.deliveryAddress || {},\r\n deliveryDetails: s => s.deliveryDetails,\r\n isDeliveryToInvoiceAddress: s => s.isDeliveryToInvoiceAddress,\r\n reference: s => s.properties.reference,\r\n poNumber: s => s.properties.poNumber,\r\n shippingDateRequested: s => s.properties.shippingDateRequested,\r\n customerDeliveryState: s => s.properties.customerDeliveryState,\r\n requestadeliverydate: s => s.properties.requestadeliverydate === 'true',\r\n contactUponDelivery: s => s.properties.contactUponDelivery,\r\n phoneNumberUponDelivery: s => s.properties.phoneNumberUponDelivery,\r\n deliveryInstructions: s => s.properties.deliveryInstructions,\r\n comment: s => s.properties.comment,\r\n properties: s => s.properties,\r\n hasError: s => Object.keys(s.errors).some((key) => {\r\n const value = s.errors[key];\r\n if (value && Array.isArray(value) && value.length) {\r\n return true;\r\n }\r\n if ((typeof value === 'object' || typeof value === 'function') && (value !== null) && Object.keys(value).length) {\r\n return true;\r\n }\r\n return false;\r\n }),\r\n };\r\n\r\n const actions = {\r\n getSummaryFromCookie({\r\n commit,\r\n }) {\r\n // Grabs cookie and parse it to json\r\n try {\r\n const result = pressalit.stringHelpers.getCookieValue('B2B-Basket');\r\n if (!result) {\r\n return;\r\n }\r\n let cookieBase64 = '{}';\r\n cookieBase64 = pressalit.stringHelpers.b64DecodeUnicode(\r\n result,\r\n );\r\n\r\n const json = cookieBase64 ? JSON.parse(cookieBase64) : '{}';\r\n if (!json.summary.lineCount) {\r\n return;\r\n }\r\n\r\n commit('setQuantity', json.summary.quantity);\r\n commit('setProductsInBasket', json.summary.productIds);\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n },\r\n\r\n getBasket({\r\n commit,\r\n }) {\r\n const req = axios.get('/api/b2b/webshop/basket/getBasket');\r\n req.then(\r\n ({\r\n data,\r\n }) => {\r\n commit('unsetLoading');\r\n commit('setErrors', data.result.errors);\r\n commit('setLines', data.basket.lines);\r\n commit('setQuantity', data.summary.quantity);\r\n commit('setTotals', data.basket.orderTotals);\r\n commit('setIsNewCustomer', data.basket.properties.isNewCustomer);\r\n return data;\r\n },\r\n () => {\r\n // TODO Error handling\r\n commit('unsetLoading');\r\n },\r\n );\r\n return req;\r\n },\r\n\r\n getCheckout({\r\n commit,\r\n }) {\r\n commit('setLoading');\r\n const req = axios.get('/api/b2b/webshop/checkout/getCheckout');\r\n req.then(\r\n ({\r\n data,\r\n }) => {\r\n commit('unsetLoading');\r\n commit('setErrors', data.result.errors);\r\n commit('setEmail', data.checkout.email);\r\n commit('setDeliveryToInvoiceAddress', data.checkout.isDeliveryToInvoiceAddress);\r\n commit('setInvoiceAddress', data.checkout.invoiceAddress);\r\n commit('setDeliveryAddress', data.checkout.deliveryAddress);\r\n commit('setLines', data.checkout.basket.lines);\r\n commit('setTotals', data.checkout.basket.orderTotals);\r\n commit('setProperties', data.checkout.properties);\r\n commit('setIsNewCustomer', data.checkout.properties.isNewCustomer);\r\n\r\n return data;\r\n },\r\n () => {\r\n commit('unsetLoading');\r\n // TODO Error handling\r\n },\r\n );\r\n return req;\r\n },\r\n\r\n updateQuantity({\r\n commit,\r\n }, payload) {\r\n if (payload.quantity > 999) {\r\n payload.quantity = 999;\r\n }\r\n const params = {\r\n basketLineId: payload.basketLineId,\r\n quantity: payload.quantity,\r\n };\r\n const req = axios.put(\r\n `/api/b2b/webshop/basket/UpdateBasketLine?basketlineid=${\r\n params.basketLineId\r\n }&quantity=${params.quantity}`,\r\n );\r\n commit('setErrors', {});\r\n req.then(({ data }) => {\r\n commit('setErrors', data.result.errors);\r\n commit('updateBasketLineQuantity', params);\r\n commit('setLines', data.basket.lines);\r\n commit('setTotals', data.basket.orderTotals);\r\n if (data.summary && data.summary.quantity) {\r\n commit('setQuantity', data.summary.quantity);\r\n }\r\n });\r\n },\r\n\r\n removeBasketLine({\r\n commit,\r\n }, basketlineId) {\r\n // eslint-disable-line\r\n const params = {\r\n basketlineId,\r\n };\r\n const req = axios.delete(\r\n '/api/b2b/webshop/basket/RemoveBasketLine', {\r\n params,\r\n },\r\n );\r\n req.then(\r\n ({\r\n data,\r\n }) => {\r\n // Update values\r\n commit('setLines', data.basket.lines);\r\n commit('setTotals', data.basket.orderTotals);\r\n commit('setQuantity', data.summary.quantity);\r\n },\r\n () => {\r\n // TODO Error handling\r\n },\r\n );\r\n },\r\n\r\n submit({\r\n commit,\r\n getters,\r\n }) {\r\n const payload = {\r\n invoiceAddress: getters.invoiceAddress,\r\n deliveryAddress: getters.deliveryAddress,\r\n isDeliveryToInvoiceAddress: getters.isDeliveryToInvoiceAddress,\r\n email: getters.email,\r\n };\r\n\r\n // Update the user details\r\n commit('setErrors', {});\r\n commit('setSubmitting');\r\n return new Promise((resolve, reject) => {\r\n axios.post(\r\n '/api/b2b/webshop/checkout/setCheckoutProperties',\r\n getters.properties,\r\n ).then(() => {\r\n axios.put(\r\n '/api/b2b/webshop/checkout/UpdateDetails',\r\n payload,\r\n ).then(\r\n ({ data }) => {\r\n if (!data.result.isSuccess || !data.result.operationCompleted) {\r\n commit('unsetSubmitting');\r\n commit('setErrors', data.result.errors);\r\n throw data.result.errors;\r\n }\r\n // Submit order\r\n // eslint-disable-next-line consistent-return\r\n return axios\r\n .post('/api/b2b/webshop/checkout/GotoPayment')\r\n .then(\r\n (paymentResponse) => {\r\n const result = paymentResponse.data.result;\r\n if (!result.operationCompleted || !result.isSuccess\r\n ) {\r\n commit('unsetSubmitting');\r\n commit('setErrors', result.errors);\r\n reject();\r\n }\r\n resolve(paymentResponse.data.response);\r\n },\r\n () => {\r\n commit('unsetSubmitting');\r\n commit('setErrors', {\r\n api: ['500'],\r\n });\r\n reject();\r\n // TODO Error handling\r\n },\r\n );\r\n },\r\n () => {\r\n commit('unsetSubmitting');\r\n commit('setErrors', {\r\n api: ['500'],\r\n });\r\n reject();\r\n },\r\n );\r\n }, () => {\r\n commit('unsetSubmitting');\r\n commit('setErrors', {\r\n api: ['500'],\r\n });\r\n reject();\r\n });\r\n });\r\n },\r\n\r\n addToBasket({\r\n commit,\r\n }, {\r\n productId,\r\n quantity,\r\n }) {\r\n const params = {\r\n productId,\r\n quantity,\r\n };\r\n\r\n const req = axios.post(\r\n '/api/b2b/webshop/basket/AddToBasket',\r\n null, {\r\n params,\r\n },\r\n );\r\n req.then(\r\n ({\r\n data,\r\n }) => {\r\n if (\r\n !data.result.operationCompleted\r\n ) {\r\n // TODO Error handling\r\n return;\r\n }\r\n // Set basket lines here, so we don't need to call getBasket API\r\n commit('setLines', data.basket.lines);\r\n commit('setTotals', data.basket.orderTotals);\r\n commit('setQuantity', data.summary.quantity);\r\n commit('setProductsInBasket', data.summary.productIds);\r\n },\r\n () => {\r\n // TODO Error handling\r\n },\r\n );\r\n return req;\r\n },\r\n\r\n addReplicatedBasketLine({\r\n commit,\r\n }, {\r\n productId,\r\n }) {\r\n const params = {\r\n productId: productId.productId,\r\n quantity: 1,\r\n forceNewBasketLine: true,\r\n };\r\n\r\n const req = axios.post(\r\n '/api/b2b/webshop/basket/AddToBasket',\r\n null, {\r\n params,\r\n },\r\n );\r\n req.then(\r\n ({\r\n data,\r\n }) => {\r\n if (\r\n !data.result.operationCompleted\r\n ) {\r\n // TODO Error handling\r\n return;\r\n }\r\n // Set basket lines here, so we don't need to call getBasket API\r\n commit('setLines', data.basket.lines);\r\n commit('setTotals', data.basket.orderTotals);\r\n commit('setQuantity', data.summary.quantity);\r\n commit('setProductsInBasket', data.summary.productIds);\r\n },\r\n () => {\r\n // TODO Error handling\r\n },\r\n );\r\n return req;\r\n },\r\n\r\n addPoNumber({\r\n commit,\r\n }, { basketLineId, poNumber }) {\r\n const req = axios.post(\r\n `/api/b2b/webshop/basket/SetPoOnBasketLine?basketlineid=${basketLineId}&poNumber=${poNumber}`,\r\n );\r\n req.then(\r\n ({\r\n data,\r\n }) => {\r\n // Update values\r\n commit('setLines', data.basket.lines);\r\n },\r\n () => {\r\n // TODO Error handling\r\n },\r\n );\r\n },\r\n\r\n deletePoNumber({\r\n commit,\r\n }, basketLineId) {\r\n const req = axios.delete(\r\n `/api/b2b/webshop/basket/RemovePOOnBasketLine?basketlineid=${basketLineId}`,\r\n );\r\n req.then(\r\n ({\r\n data,\r\n }) => {\r\n // Update values\r\n commit('setLines', data.basket.lines);\r\n },\r\n () => {\r\n // TODO Error handling\r\n },\r\n );\r\n },\r\n };\r\n\r\n this.store = {\r\n namespaced: true,\r\n state,\r\n getters: _getters,\r\n mutations,\r\n actions,\r\n };\r\n })();\r\n","/**\r\n * @name Dictionaries\r\n * @desc Store for dictionaries\r\n */\r\n\r\n\r\nvar pressalit = pressalit || {}; // eslint-disable-line\r\nvar axios = axios; // eslint-disable-line\r\npressalit.storeDictionaries = pressalit.storeDictionaries || new function () {\r\n this.store = null;\r\n const _state = {\r\n culture: 'da', // Hardcoded, but could come from api\r\n promise: null,\r\n dictionaries: [],\r\n };\r\n\r\n const _mutations = {\r\n setAll(s, dictionaries) {\r\n s.dictionaries = dictionaries;\r\n },\r\n setPromise(s, promise) {\r\n s.promise = promise;\r\n },\r\n setCulture(s, culture) {\r\n s.culture = culture;\r\n },\r\n };\r\n\r\n const _getters = {\r\n getByKey: s => (key) => {\r\n const item = s.dictionaries.find(x => x.key === key);\r\n if (!item) {\r\n return '';\r\n }\r\n const cultureVariant = item.translations.find(x => x.culture === s.culture);\r\n if (!cultureVariant) {\r\n return '';\r\n }\r\n\r\n return cultureVariant.value;\r\n },\r\n };\r\n\r\n const _actions = {\r\n setCulture({\r\n commit,\r\n }, culture) {\r\n commit('setCulture', culture);\r\n },\r\n getAll({\r\n commit,\r\n state,\r\n }) {\r\n if (state.promise) {\r\n return state.promise;\r\n }\r\n\r\n if (state.dictionaries.length) {\r\n return Promise.resolve();\r\n }\r\n\r\n const req = axios.get('/api/headless/dictionary/FetchAll').then(({\r\n data,\r\n }) => {\r\n commit('setAll', data);\r\n commit('setPromise', null);\r\n });\r\n commit('setPromise', req);\r\n\r\n return req;\r\n },\r\n };\r\n\r\n this.store = {\r\n namespaced: true,\r\n actions: _actions,\r\n getters: _getters,\r\n state: _state,\r\n mutations: _mutations,\r\n };\r\n}();\r\n","/**\r\n * @name Navigation\r\n * @desc Store for navigation\r\n */\r\n\r\nvar pressalit = pressalit || {}; // eslint-disable-line\r\nvar axios = axios; // eslint-disable-line\r\npressalit.storeNavigation = pressalit.storeNavigation\r\n || new (function () {\r\n this.store = null;\r\n const _state = {\r\n isSidebarOpen: false,\r\n isFullWidth: false,\r\n isSearchOpen: false,\r\n showOverlay: false,\r\n component: null,\r\n data: null,\r\n navigationProps: {},\r\n listeners: {},\r\n };\r\n\r\n const _mutations = {\r\n toggleSidebar(s, isOpen = null) {\r\n s.isSidebarOpen = isOpen || !s.isSidebarOpen;\r\n s.showOverlay = isOpen || !s.showOverlay;\r\n\r\n if (s.showOverlay) {\r\n window.scrollTo(0, 0);\r\n document\r\n .getElementsByTagName('html')[0]\r\n .classList.add('search-results__lock-body-scroll');\r\n } else {\r\n document\r\n .getElementsByTagName('html')[0]\r\n .classList.remove('search-results__lock-body-scroll');\r\n\r\n setTimeout(() => {\r\n s.isFullWidth = false;\r\n s.component = null;\r\n }, 300);\r\n }\r\n },\r\n toggleOverlay(s, show = null) {\r\n s.showOverlay = show || !s.showOverlay;\r\n if (!s.showOverlay) {\r\n s.isSidebarOpen = false;\r\n s.isSearchOpen = false;\r\n }\r\n\r\n if (s.showOverlay) {\r\n window.scrollTo(0, 0);\r\n document\r\n .getElementsByTagName('html')[0]\r\n .classList.add('search-results__lock-body-scroll');\r\n } else {\r\n document\r\n .getElementsByTagName('html')[0]\r\n .classList.remove('search-results__lock-body-scroll');\r\n setTimeout(() => {\r\n s.isFullWidth = false;\r\n s.component = null;\r\n }, 300);\r\n }\r\n },\r\n toggleSearch(s, isOpen = null) {\r\n s.isSearchOpen = isOpen || !s.isSearchOpen;\r\n },\r\n setIsFullWidth(s, isFullWidth) {\r\n s.isFullWidth = isFullWidth;\r\n },\r\n setComponent(s, component) {\r\n s.component = component;\r\n },\r\n setData(s, data) {\r\n s.data = data;\r\n },\r\n setNavigationProps(s, props) {\r\n s.navigationProps = props;\r\n },\r\n setListeners(s, listeners) {\r\n s.listeners = listeners;\r\n },\r\n };\r\n\r\n const _getters = {};\r\n\r\n const _actions = {};\r\n\r\n this.store = {\r\n namespaced: true,\r\n actions: _actions,\r\n getters: _getters,\r\n state: _state,\r\n mutations: _mutations,\r\n };\r\n })();\r\n","/**\r\n * @name Navigation\r\n * @desc Store for navigation\r\n */\r\n\r\nvar pressalit = pressalit || {}; // eslint-disable-line\r\nvar axios = axios; // eslint-disable-line\r\npressalit.storeLanguageModal = pressalit.storeLanguageModal\r\n || new (function () {\r\n this.store = null;\r\n const _state = {\r\n isOpen: false,\r\n current: null,\r\n };\r\n\r\n const _mutations = {\r\n toggle(s) {\r\n s.isOpen = !s.isOpen;\r\n },\r\n setCurrent(s, payload) {\r\n s.current = payload;\r\n },\r\n };\r\n\r\n const _getters = {};\r\n\r\n const _actions = {};\r\n\r\n this.store = {\r\n namespaced: true,\r\n actions: _actions,\r\n getters: _getters,\r\n state: _state,\r\n mutations: _mutations,\r\n };\r\n })();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar Vuex = Vuex; // eslint-disable-line\r\n\r\npressalit.vuex = pressalit.vuex || new function () {\r\n this.store = null;\r\n Vue.use(Vuex);\r\n\r\n this.init = function () {\r\n this.store = new Vuex.Store();\r\n this.store.registerModule('auth', pressalit.storeAuth.store);\r\n this.store.registerModule('dictionaries', pressalit.storeDictionaries.store);\r\n this.store.registerModule('basket', pressalit.storeBasket.store);\r\n this.store.registerModule('navigation', pressalit.storeNavigation.store);\r\n this.store.registerModule('filter', pressalit.storeFilter.store);\r\n this.store.registerModule('agent', pressalit.storeAgent.store);\r\n this.store.registerModule('print', pressalit.storePrint.store);\r\n this.store.registerModule('languagemodal', pressalit.storeLanguageModal.store);\r\n this.store.registerModule('dealers', pressalit.storeDealers.store);\r\n this.store.registerModule('tracking', pressalit.tracking.store);\r\n this.store.registerModule('selfService', pressalit.storeSelfService.store);\r\n this.store.registerModule('wishlist', pressalit.storeWishlist.store);\r\n\r\n this.store.dispatch('auth/init');\r\n const culture = document.getElementById('js-site-culture').value;\r\n if (culture) {\r\n this.store.dispatch('dictionaries/setCulture', culture);\r\n }\r\n\r\n\r\n // Connect Axios and Vuex\r\n axios.interceptors.request.use(\r\n (config) => {\r\n // Add header if user is signed in\r\n const token = this.store.state.auth.accessToken;\r\n if (token) {\r\n config.headers.Authorization = `Bearer ${token}`;\r\n }\r\n return config;\r\n },\r\n error => Promise.reject(error),\r\n );\r\n\r\n // Handle refresh token setup\r\n let isAlreadyFetchingAccessToken = false;\r\n let subscribers = [];\r\n\r\n const onAccessTokenFetched = (accessToken) => {\r\n // When the refresh is successful, we start retrying the requests one by one and empty the queue\r\n subscribers.forEach(callback => callback(accessToken));\r\n subscribers = [];\r\n };\r\n\r\n const addSubscriber = (callback) => {\r\n subscribers.push(callback);\r\n };\r\n const handle403 = () => {\r\n subscribers = []; // Clean the queue of requests\r\n this.store.dispatch('auth/logout');\r\n };\r\n\r\n const handle401 = (response) => {\r\n const request = response.config;\r\n if (request.__isRetryRequest) {\r\n Promise.reject(request);\r\n }\r\n const retryOriginalRequest = new Promise((resolve) => {\r\n /* We need to add the request retry to the queue\r\n since there another request that already attempt to\r\n refresh the token */\r\n addSubscriber((accessToken) => {\r\n request.headers.Authorization = `Bearer ${accessToken}`;\r\n request.__isRetryRequest = true;\r\n resolve(axios(request));\r\n });\r\n });\r\n\r\n if (!isAlreadyFetchingAccessToken) {\r\n isAlreadyFetchingAccessToken = true;\r\n this.store.dispatch('auth/refresh').then(() => {\r\n const newToken = this.store.state.auth.accessToken;\r\n onAccessTokenFetched(newToken);\r\n isAlreadyFetchingAccessToken = false;\r\n }, () => {\r\n isAlreadyFetchingAccessToken = false;\r\n handle403();\r\n return Promise.reject(request);\r\n });\r\n }\r\n return retryOriginalRequest;\r\n };\r\n\r\n axios.interceptors.response.use(\r\n response => response,\r\n (error) => {\r\n const { response } = error;\r\n if (!response) {\r\n return Promise.reject(error);\r\n }\r\n try {\r\n if (response.status !== 401 || response.config.__isRetryRequest) {\r\n return Promise.reject(error);\r\n }\r\n return handle401(response);\r\n } catch (err) {\r\n return Promise.reject(err);\r\n }\r\n },\r\n );\r\n };\r\n}();\r\n","/**\r\n * @name Dictionaries\r\n * @desc Store for dictionaries\r\n */\r\n\r\n\r\nvar pressalit = pressalit || {}; // eslint-disable-line\r\nvar axios = axios; // eslint-disable-line\r\npressalit.storeAgent = pressalit.storeAgent || new function () {\r\n this.store = null;\r\n const _state = {\r\n };\r\n\r\n const _mutations = {\r\n };\r\n\r\n const _getters = {\r\n isAgentIe: () => typeof document.documentMode !== 'undefined',\r\n };\r\n\r\n const _actions = {\r\n };\r\n\r\n this.store = {\r\n namespaced: true,\r\n actions: _actions,\r\n getters: _getters,\r\n state: _state,\r\n mutations: _mutations,\r\n };\r\n}();\r\n","/**\r\n * @name Print\r\n * @desc Store for print\r\n */\r\n\r\n\r\nvar pressalit = pressalit || {}; // eslint-disable-line\r\nvar axios = axios; // eslint-disable-line\r\npressalit.storePrint = pressalit.storePrint || new function () {\r\n this.store = null;\r\n const _state = {\r\n wishlistPrinting: false,\r\n };\r\n\r\n const _mutations = {\r\n printWishlist(s) {\r\n s.wishlistPrinting = true;\r\n },\r\n stopWishlistPrint(s) {\r\n s.wishlistPrinting = false;\r\n },\r\n };\r\n\r\n const _getters = {\r\n isWishlistPrinting: s => s.wishlistPrinting,\r\n };\r\n\r\n const _actions = {\r\n };\r\n\r\n this.store = {\r\n namespaced: true,\r\n actions: _actions,\r\n getters: _getters,\r\n state: _state,\r\n mutations: _mutations,\r\n };\r\n}();\r\n","/**\r\n * @name Dealers\r\n * @desc Store for Dealers\r\n */\r\n\r\n\r\nvar pressalit = pressalit || {}; // eslint-disable-line\r\nvar axios = axios; // eslint-disable-line\r\npressalit.storeDealers = pressalit.storeDealers || new function () {\r\n this.store = null;\r\n const _state = {\r\n wishlistPrinting: false,\r\n };\r\n\r\n const _mutations = {};\r\n\r\n const _getters = {};\r\n\r\n const _actions = {\r\n fetch({\r\n rootState,\r\n }, payload) {\r\n const language = rootState.dictionaries.culture;\r\n const request = {\r\n page: payload.page || 0,\r\n pageSize: payload.pageSize || 0,\r\n latitude: payload.latitude,\r\n longitude: payload.longitude,\r\n radius: payload.radius || null,\r\n languageCode: language,\r\n filter: payload.filters || {},\r\n term: payload.term || '',\r\n isWebshop: payload.isWebshop,\r\n isPrivate: payload.isPrivate,\r\n bottomRight: payload.bottomRight,\r\n topLeft: payload.topLeft,\r\n };\r\n const config = {\r\n cancelToken: payload.cancelSource ? payload.cancelSource.token : null,\r\n };\r\n\r\n return axios.post('/api/content/search/SearchDealersGeospatial', request, config).then(result => result.data);\r\n },\r\n };\r\n\r\n this.store = {\r\n namespaced: true,\r\n actions: _actions,\r\n getters: _getters,\r\n state: _state,\r\n mutations: _mutations,\r\n };\r\n}();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar axios = axios; // eslint-disable-line\r\n\r\nfunction uudi() {\r\n let dt = new Date().getTime();\r\n const uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\r\n const r = (dt + Math.random() * 16) % 16 | 0; // eslint-disable-line\r\n dt = Math.floor(dt / 16);\r\n return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16); // eslint-disable-line\r\n });\r\n return uuid;\r\n}\r\nfunction toGoogleMoney(val) {\r\n return val ? Number(val.toFixed(2)) : 0;\r\n}\r\nfunction mapBasketLine(line) {\r\n return {\r\n item_id: line.erpId || '',\r\n item_name: line.productTitle || '',\r\n item_category: line.properties['product.categoryId'] || null,\r\n item_category2: line.properties['product.rootCategoryId'] || line.properties['product.masterProductId'] || null,\r\n discount: toGoogleMoney(line.productPrice.discount.value) || 0,\r\n price: toGoogleMoney(line.productPrice.total.value) || 0,\r\n currency: line.productPrice.total.currency || '',\r\n item_variant: line.variantTitle,\r\n quantity: line.quantity,\r\n taxable: line.taxable || '',\r\n requiresShipping: line.requiresShipping || false,\r\n };\r\n}\r\npressalit.tracking = pressalit.tracking || new function () {\r\n this.store = null;\r\n const _state = {\r\n };\r\n\r\n const _mutations = {\r\n };\r\n\r\n const _getters = {\r\n };\r\n\r\n const _actions = {\r\n trackEcommerce({ }, payload) { // eslint-disable-line\r\n window.dataLayer = window.dataLayer || [];\r\n let totalPrice = 0;\r\n payload.products.forEach((p) => { totalPrice += p.price; });\r\n\r\n const data = {\r\n event: 'purchase',\r\n transactionId: uudi(),\r\n transactionAffiliation: payload.affiliation,\r\n transactionTotal: totalPrice,\r\n transactionTax: 25,\r\n transactionProducts: payload.products,\r\n };\r\n\r\n window.dataLayer.push(data);\r\n },\r\n trackToiletSeatManufacturerSearch({ }, payload) { // eslint-disable-line\r\n const data = {\r\n event: 'toiletSeatManufacturerSearch',\r\n action: 'click',\r\n manufacturerTitle: payload.manufacturerTitle,\r\n modelTitle: payload.modelTitle,\r\n };\r\n window.dataLayer.push(data);\r\n },\r\n trackViewBasket({ }, lines) { // eslint-disable-line\r\n if (lines && lines.length) {\r\n const data = {\r\n event: 'view_cart',\r\n ecommerce: {\r\n currency: lines.length ? lines[0].productPrice.unitPrice.currency : null,\r\n items: lines.map((line, index) => {\r\n const basketLine = mapBasketLine(line);\r\n basketLine.index = index + 1;\r\n return basketLine;\r\n }),\r\n },\r\n };\r\n window.dataLayer.push(data);\r\n }\r\n },\r\n trackViewWishList({ }, lines) { // eslint-disable-line\r\n if (lines && lines.length) {\r\n const data = {\r\n event: 'view_wishlist',\r\n ecommerce: {\r\n currency: lines.length ? lines[0].productPrice.unitPrice.currency : null,\r\n items: lines.map((line, index) => {\r\n const basketLine = mapBasketLine(line);\r\n basketLine.index = index + 1;\r\n return basketLine;\r\n }),\r\n },\r\n };\r\n window.dataLayer.push(data);\r\n }\r\n },\r\n trackToiletSeatOverlay({ }, payload) { // eslint-disable-line\r\n const data = {\r\n event: 'overlayClick',\r\n action: 'click',\r\n overlayChoice: payload.overlayChoice,\r\n overlayTitle: payload.overlayTitle,\r\n };\r\n window.dataLayer.push(data);\r\n },\r\n trackToiletSeatShapeSearch({ }, payload) { // eslint-disable-line\r\n const data = {\r\n event: 'toiletSeatShapeSearch',\r\n action: 'click',\r\n toiletShape: payload.toiletShape,\r\n toiletMounting: payload.toiletMounting,\r\n toiletMeasurement1: payload.toiletMeasurement1,\r\n toiletMeasurement2: payload.toiletMeasurement2,\r\n toiletMeasurement3: payload.toiletMeasurement3,\r\n };\r\n window.dataLayer.push(data);\r\n },\r\n createUser({ }, customerid) { // eslint-disable-line\r\n const data = {\r\n event: 'create_user',\r\n customerid,\r\n };\r\n window.dataLayer.push(data);\r\n },\r\n login({ }, customerid) { // eslint-disable-line\r\n const data = {\r\n event: 'login',\r\n customerid,\r\n };\r\n window.dataLayer.push(data);\r\n },\r\n itemView({ }, payload) { // eslint-disable-line\r\n const data = {\r\n event: 'select_item',\r\n action: 'click',\r\n ecommerce: {\r\n items: [\r\n {\r\n item_id: payload.productNumber || '',\r\n item_name: payload.productName || '',\r\n item_url: payload.productUrl || '',\r\n item_status: payload.lineStatus,\r\n item_price: toGoogleMoney(payload.lineAmount.value),\r\n quantity: payload.lineQuantity,\r\n },\r\n ],\r\n },\r\n };\r\n window.dataLayer.push(data);\r\n },\r\n addToCart({ }, payload) { // eslint-disable-line\r\n const data = {\r\n event: 'add_to_cart',\r\n action: 'click',\r\n ecommerce: {\r\n items: [\r\n {\r\n item_id: payload.productId || '',\r\n item_name: payload.productName || '',\r\n item_category: payload.productCategory,\r\n item_category2: payload.parentProductId,\r\n quantity: payload.productQuantity,\r\n },\r\n ],\r\n },\r\n };\r\n window.dataLayer.push(data);\r\n },\r\n addToWishList({ }, payload) { // eslint-disable-line\r\n const data = {\r\n event: 'add_to_wishlist',\r\n action: 'click',\r\n ecommerce: {\r\n items: [\r\n {\r\n item_id: payload.productId || '',\r\n item_name: payload.productName || '',\r\n item_category: payload.productCategory,\r\n item_category2: payload.parentProductId,\r\n quantity: payload.productQuantity,\r\n },\r\n ],\r\n },\r\n };\r\n window.dataLayer.push(data);\r\n },\r\n removeFromWishList({ }, payload) { // eslint-disable-line\r\n const data = {\r\n event: 'remove_from_wishlist',\r\n action: 'click',\r\n ecommerce: {\r\n items: [\r\n {\r\n item_id: payload.productId || '',\r\n item_name: payload.productName || '',\r\n item_category: payload.productCategory,\r\n item_category2: payload.parentProductId,\r\n quantity: payload.productQuantity,\r\n },\r\n ],\r\n },\r\n };\r\n window.dataLayer.push(data);\r\n },\r\n trackToiletSeatOverlay({ }, payload) { // eslint-disable-line\r\n const data = {\r\n event: 'overlayClick',\r\n action: 'click',\r\n overlayChoice: payload.overlayChoice,\r\n overlayTitle: payload.overlayTitle,\r\n };\r\n window.dataLayer.push(data);\r\n },\r\n trackAddOrRemoveToBasket({ }, payload) { // eslint-disable-line\r\n const eventName = payload.event ? payload.event : 'add_to_cart';\r\n const quantity = () => {\r\n let value = null;\r\n\r\n switch (payload.action) {\r\n case 'increase':\r\n value = 1;\r\n break;\r\n case 'decrease':\r\n value = -1;\r\n break;\r\n case 'remove':\r\n value = payload.basketLine.quantity;\r\n break;\r\n case 'changeQuantity':\r\n if (payload.changedQuantityTo) {\r\n value = payload.changedQuantityTo;\r\n }\r\n break;\r\n default:\r\n value = payload.basketLine.quantity;\r\n }\r\n return value;\r\n };\r\n\r\n const data = {\r\n event: eventName,\r\n ecommerce: {\r\n items: [\r\n {\r\n item_id: payload.basketLine.erpId || '',\r\n item_name: payload.basketLine.productTitle || '',\r\n item_category: payload.basketLine.properties['product.categoryId'] || null,\r\n item_category2: payload.basketLine.properties['product.rootCategoryId'] || null,\r\n quantity: quantity(),\r\n },\r\n ],\r\n },\r\n };\r\n window.dataLayer.push({ ecommerce: null });\r\n window.dataLayer.push(data);\r\n },\r\n trackBeginCheckout({ }, lines) { // eslint-disable-line\r\n if (lines && lines.length) {\r\n const data = {\r\n event: 'begin_checkout',\r\n ecommerce: {\r\n currency: lines.length ? lines[0].productPrice.unitPrice.currency : null,\r\n items: lines.map((line, index) => {\r\n const basketLine = mapBasketLine(line);\r\n basketLine.index = index + 1;\r\n return basketLine;\r\n }),\r\n },\r\n };\r\n window.dataLayer.push({ ecommerce: null });\r\n window.dataLayer.push(data);\r\n }\r\n },\r\n trackSubmitPurchase({ }, lines) { // eslint-disable-line\r\n if (!lines.lines.length) {\r\n return;\r\n }\r\n if (lines && lines.lines && lines.lines.length) {\r\n const data = {\r\n event: 'purchase',\r\n ecommerce: {\r\n transaction_id: lines.transactionId,\r\n items: lines.lines.map((line, index) => {\r\n const basketLine = mapBasketLine(line);\r\n basketLine.index = index + 1;\r\n return basketLine;\r\n }),\r\n },\r\n };\r\n window.dataLayer.push({ ecommerce: null });\r\n window.dataLayer.push(data);\r\n }\r\n },\r\n };\r\n\r\n this.store = {\r\n namespaced: true,\r\n actions: _actions,\r\n getters: _getters,\r\n state: _state,\r\n mutations: _mutations,\r\n };\r\n}();\r\n","/**\r\n * @name SelfService\r\n * @desc Store for SelfService\r\n */\r\n\r\n\r\nvar pressalit = pressalit || {}; // eslint-disable-line\r\nvar axios = axios; // eslint-disable-line\r\nvar VueRouter = VueRouter; // eslint-disable-line\r\n\r\npressalit.storeSelfService = pressalit.storeSelfService || new function () {\r\n this.store = null;\r\n Vue.use(VueRouter);\r\n const router = new VueRouter({\r\n mode: 'history',\r\n });\r\n const _state = {\r\n customerInfo: {},\r\n customerOrders: [],\r\n fetchingData: undefined,\r\n showLoadmore: false,\r\n loadMore: false,\r\n page: 1,\r\n term: '',\r\n filter: '',\r\n };\r\n\r\n const _mutations = {\r\n setCustomerInfo(s, customerInfo) {\r\n s.customerInfo = customerInfo;\r\n },\r\n setCustomerOrders(s, customerOrders) {\r\n s.customerOrders = customerOrders;\r\n },\r\n setFetchingData(s, fetchingData) {\r\n s.fetchingData = fetchingData;\r\n },\r\n setPage(s, page) {\r\n s.page = page;\r\n },\r\n setTerm(s, term) {\r\n s.term = term;\r\n },\r\n setShowLoadmore(s, showLoadmore) {\r\n s.showLoadmore = showLoadmore;\r\n },\r\n setLoadMore(s, loadMore) {\r\n s.loadMore = loadMore;\r\n },\r\n setFilter(s, filter) {\r\n s.filter = filter;\r\n },\r\n };\r\n\r\n const _getters = {\r\n };\r\n\r\n const _actions = {\r\n getCustomerInfo({\r\n commit,\r\n }) {\r\n const req = axios.get('/api/frontend/selfservice/GetCustomer');\r\n req.then(\r\n ({ data }) => {\r\n if (!data.isSuccess) {\r\n commit('setCustomerInfo', null);\r\n }\r\n commit('setCustomerInfo', data.data);\r\n },\r\n ).catch((error) => {\r\n // eslint-disable-next-line no-console\r\n console.log('An error ocurred', error);\r\n });\r\n return req;\r\n },\r\n getCustomerOrders({\r\n state,\r\n commit,\r\n dispatch,\r\n }, firstCall) {\r\n let req = {};\r\n if (!firstCall) {\r\n const newPage = state.page + 1;\r\n commit('setPage', newPage);\r\n }\r\n\r\n req = axios.get(`/api/frontend/selfservice/getpagedcustomerorders?pageSize=10¤tPage=${state.page}&term=${state.term}&filter=${state.filter}`);\r\n\r\n req.then(\r\n ({ data }) => {\r\n if (!data.isSuccess || data.error) {\r\n commit('setCustomerOrders', []);\r\n }\r\n\r\n if (firstCall) {\r\n commit('setCustomerOrders', data.data.orders);\r\n } else {\r\n commit('setCustomerOrders', state.customerOrders.concat(data.data.orders));\r\n }\r\n commit('setShowLoadmore', data.data.orders.length === 10);\r\n },\r\n ).catch((error) => {\r\n // eslint-disable-next-line no-console\r\n console.log('An error ocurred', error);\r\n }).finally(() => {\r\n dispatch('updateQuery');\r\n if (firstCall) {\r\n commit('setFetchingData', false);\r\n } else {\r\n commit('setLoadMore', false);\r\n }\r\n });\r\n },\r\n updateQuery({ state }) {\r\n const query = new URL(window.location).pathname;\r\n const url = `${query}?page=${state.page}&term=${state.term}&filter=${state.filter}`;\r\n\r\n router.replace(url);\r\n },\r\n };\r\n\r\n this.store = {\r\n namespaced: true,\r\n actions: _actions,\r\n getters: _getters,\r\n state: _state,\r\n mutations: _mutations,\r\n };\r\n}();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar axios = axios; // eslint-disable-line\r\npressalit.storeWishlist = pressalit.storeWishlist\r\n || new (function () {\r\n this.store = null;\r\n\r\n const state = {\r\n quantity: 0,\r\n lines: [],\r\n productIds: [],\r\n isLoading: false,\r\n isSubmitting: false,\r\n totals: [],\r\n errors: [],\r\n culture: null,\r\n siteNodeId: null,\r\n };\r\n\r\n const mutations = {\r\n setQuantity(s, quantity) {\r\n s.quantity = quantity;\r\n },\r\n setErrors(s, errors) {\r\n s.errors = errors;\r\n },\r\n setLines(s, lines) {\r\n s.lines = lines;\r\n },\r\n setProductsInWishlist(s, productIds) {\r\n s.productIds = productIds;\r\n },\r\n setTotals(s, totals) {\r\n s.totals = totals;\r\n },\r\n setLoading(s) {\r\n s.isLoading = true;\r\n },\r\n setSubmitting(s) {\r\n s.isSubmitting = true;\r\n },\r\n unsetLoading(s) {\r\n s.isLoading = false;\r\n },\r\n unsetSubmitting(s) {\r\n s.isSubmitting = false;\r\n },\r\n setCulture(s, culture) {\r\n s.culture = culture;\r\n },\r\n setSiteNodeId(s, id) {\r\n s.siteNodeId = id;\r\n },\r\n updateWishlistLineQuantity(s, payload) {\r\n const index = s.lines.findIndex(\r\n line => line.id === payload.basketLineId,\r\n );\r\n if (index >= 0) {\r\n s.lines[index].quantity = payload.quantity;\r\n }\r\n },\r\n };\r\n\r\n const _getters = {\r\n getLines: s => s.lines,\r\n getLineById: s => id => s.lines.find(x => x.id === id),\r\n isLoading: s => s.isLoading,\r\n isSubmitting: s => s.isSubmitting,\r\n getTotals: s => s.totals,\r\n getQuantity: s => s.quantity,\r\n getCulture: s => s.culture,\r\n getSiteNodeId: s => s.siteNodeId,\r\n getErrors: s => s.errors,\r\n };\r\n\r\n const actions = {\r\n getSummaryFromCookie({\r\n commit,\r\n }) {\r\n // Grabs cookie and parse it to json\r\n try {\r\n const result = pressalit.stringHelpers.getCookieValue('Basket');\r\n\r\n if (!result) {\r\n return;\r\n }\r\n let cookieBase64 = '{}';\r\n cookieBase64 = pressalit.stringHelpers.b64DecodeUnicode(\r\n result,\r\n );\r\n const json = cookieBase64 ? JSON.parse(cookieBase64) : '{}';\r\n if (!json.summary.lineCount) {\r\n return;\r\n }\r\n commit('setQuantity', json.summary.quantity);\r\n commit('setProductsInWishlist', json.summary.productIds);\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n },\r\n\r\n getWishlist({\r\n commit,\r\n }) {\r\n commit('setLoading');\r\n const req = axios.get('/api/webshop/basket/getBasket');\r\n req.then(\r\n ({\r\n data,\r\n }) => {\r\n commit('unsetLoading');\r\n commit('setLines', data.basket.lines);\r\n return data;\r\n },\r\n () => {\r\n commit('unsetLoading');\r\n // TODO Error handling\r\n },\r\n );\r\n return req;\r\n },\r\n\r\n // getCheckout({\r\n // commit,\r\n // }) {\r\n // commit('setLoading');\r\n // const req = axios.get('/api/webshop/checkout/getCheckout');\r\n // req.then(\r\n // ({\r\n // data,\r\n // }) => {\r\n // commit('unsetLoading');\r\n // commit('setLines', data.checkout.basket.lines);\r\n // return data;\r\n // },\r\n // () => {\r\n // commit('unsetLoading');\r\n // // TODO Error handling\r\n // },\r\n // );\r\n // return req;\r\n // },\r\n\r\n updateQuantity({\r\n commit,\r\n }, payload) {\r\n let quantity = 1;\r\n if (payload.quantity > 0) {\r\n quantity = payload.quantity;\r\n }\r\n const params = {\r\n basketLineId: payload.basketLineId,\r\n quantity,\r\n };\r\n const req = axios.put(\r\n `/api/webshop/basket/UpdateBasketLine?basketlineid=${\r\n params.basketLineId\r\n }&quantity=${params.quantity}`,\r\n );\r\n req.then(({ data }) => {\r\n commit('updateWishlistLineQuantity', params);\r\n if (data.summary && data.summary.quantity) {\r\n commit('setQuantity', data.summary.quantity);\r\n }\r\n });\r\n },\r\n\r\n remove({\r\n commit,\r\n }, basketlineId) {\r\n // eslint-disable-line\r\n const params = {\r\n basketlineId,\r\n };\r\n const req = axios.delete(\r\n '/api/webshop/basket/RemoveBasketLine', {\r\n params,\r\n },\r\n );\r\n req.then(\r\n ({\r\n data,\r\n }) => {\r\n // Update values\r\n commit('setLines', data.basket.lines);\r\n commit('setQuantity', data.summary.quantity);\r\n },\r\n () => {\r\n // TODO Error handling\r\n },\r\n );\r\n },\r\n\r\n bulkAdd({\r\n commit,\r\n }, {\r\n productIds,\r\n }) {\r\n // eslint-disable-line\r\n const payload = {\r\n productIdQuantityDictionary: {},\r\n };\r\n payload.productIdQuantityDictionary = Object.assign(\r\n ...productIds.map(k => ({\r\n [k]: 1,\r\n })),\r\n );\r\n const req = axios.post(\r\n '/api/webshop/basket/AddLinesToBasket',\r\n payload,\r\n );\r\n req.then(\r\n ({\r\n data,\r\n }) => {\r\n if (\r\n !data.result.isSuccess\r\n || !data.result.operationCompleted\r\n ) {\r\n // console.error('Something went wrong'); // TODO\r\n return;\r\n }\r\n commit('setQuantity', data.summary.quantity);\r\n commit('setProductsInWishlist', data.summary.productIds);\r\n },\r\n () => {\r\n // TODO Error handling\r\n },\r\n );\r\n },\r\n\r\n submit({\r\n commit,\r\n }, {\r\n name,\r\n }) {\r\n const payload = {\r\n name,\r\n };\r\n\r\n // Update the user details\r\n const req = axios.put(\r\n '/api/webshop/waoocheckout/UpdateDetails',\r\n payload,\r\n );\r\n return req.then(\r\n ({\r\n data,\r\n }) => {\r\n if (!data.isSuccess || !data.operationCompleted) {\r\n commit('unsetSubmitting');\r\n // TODO Error handling\r\n return data;\r\n }\r\n // Submit order\r\n // eslint-disable-next-line consistent-return\r\n return axios\r\n .post('/api/webshop/checkout/GotoPayment')\r\n .then(\r\n (paymentResponse) => {\r\n const result = paymentResponse.data.result;\r\n const redirectUrl = paymentResponse.data.response;\r\n if (\r\n !result.isSuccess\r\n || !result.operationCompleted\r\n || !redirectUrl\r\n ) {\r\n commit('unsetSubmitting');\r\n return paymentResponse.data;\r\n }\r\n window.location.href = redirectUrl;\r\n return paymentResponse.data;\r\n },\r\n () => {\r\n commit('unsetSubmitting');\r\n // TODO Error handling\r\n },\r\n );\r\n },\r\n () => {\r\n commit('unsetSubmitting');\r\n },\r\n );\r\n },\r\n\r\n add({\r\n commit,\r\n dispatch,\r\n }, {\r\n productId,\r\n }) {\r\n const params = {\r\n productId,\r\n quantity: 1,\r\n };\r\n\r\n const req = axios.post(\r\n '/api/webshop/basket/AddToBasket',\r\n null, {\r\n params,\r\n },\r\n );\r\n req.then(\r\n ({\r\n data,\r\n }) => {\r\n if (\r\n !data.result.isSuccess\r\n || !data.result.operationCompleted\r\n ) {\r\n // TODO Error handling\r\n return;\r\n }\r\n dispatch('getWishlist');\r\n commit('setQuantity', data.summary.quantity);\r\n commit('setProductsInWishlist', data.summary.productIds);\r\n },\r\n () => {\r\n // TODO Error handling\r\n },\r\n );\r\n },\r\n\r\n addToBasket({\r\n commit,\r\n dispatch,\r\n }, {\r\n productId,\r\n quantity,\r\n }) {\r\n const params = {\r\n productId,\r\n quantity,\r\n };\r\n\r\n const req = axios.post(\r\n '/api/webshop/basket/AddToBasket',\r\n null, {\r\n params,\r\n },\r\n );\r\n req.then(\r\n ({\r\n data,\r\n }) => {\r\n if (\r\n !data.result.isSuccess\r\n || !data.result.operationCompleted\r\n ) {\r\n // TODO Error handling\r\n return;\r\n }\r\n dispatch('getWishlist');\r\n commit('setQuantity', data.summary.quantity);\r\n commit('setProductsInWishlist', data.summary.productIds);\r\n },\r\n () => {\r\n // TODO Error handling\r\n },\r\n );\r\n return req;\r\n },\r\n\r\n removeSubline({\r\n commit,\r\n }, {\r\n basketLineId,\r\n subLineId,\r\n }) {\r\n const params = {\r\n basketLineId,\r\n subLineId,\r\n };\r\n const req = axios.delete(\r\n '/api/webshop/custombasket/RemoveLineFromCollection', {\r\n params,\r\n },\r\n );\r\n req.then(\r\n ({\r\n data,\r\n }) => {\r\n // Update values\r\n commit('setLines', data.basket.lines);\r\n },\r\n () => {\r\n // TODO Error handling\r\n },\r\n );\r\n },\r\n };\r\n\r\n this.store = {\r\n namespaced: true,\r\n state,\r\n getters: _getters,\r\n mutations,\r\n actions,\r\n };\r\n })();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar novicell = novicell || {}; // eslint-disable-line\r\nvar cookie = cookie || {}; // eslint-disable-line\r\n\r\npressalit.loader = pressalit.loader || new function () {\r\n this.init = function () {\r\n Vue.component('loader', {\r\n template: '#js-loader',\r\n props: {\r\n active: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n theme: {\r\n type: String,\r\n default: 'white',\r\n },\r\n },\r\n computed: {\r\n color() {\r\n return `loader--${this.theme}`;\r\n },\r\n },\r\n });\r\n };\r\n}();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\npressalit.articleTile = pressalit.articleTile || new function () {\r\n this.init = function () {\r\n Vue.component('article-tile', {\r\n template: '#js-article-tile',\r\n store: pressalit.vuex.store,\r\n props: {\r\n article: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n },\r\n computed: {\r\n contentType() {\r\n return this.article.contentType.charAt(0).toUpperCase() + this.article.contentType.slice(1);\r\n },\r\n dataQueryObj() {\r\n const center = `${this.article.image.focalPoint.top},${this.article.image.focalPoint.left}`;\r\n return JSON.stringify({\r\n mode: 'crop',\r\n quality: '70',\r\n center,\r\n });\r\n },\r\n articleTileType() {\r\n if (this.article && this.article.primaryFilter && this.article.primaryFilter.value) {\r\n return this.article.primaryFilter.value;\r\n }\r\n return '';\r\n },\r\n },\r\n });\r\n };\r\n}();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\npressalit.blogPostTile = pressalit.blogPostTile || new function () {\r\n this.init = function () {\r\n Vue.component('blog-post-tile', {\r\n template: '#js-blog-post-tile',\r\n store: pressalit.vuex.store,\r\n props: {\r\n blogPost: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n },\r\n computed: {\r\n contentType() {\r\n return this.blogPost.contentType.charAt(0).toUpperCase() + this.blogPost.contentType.slice(1);\r\n },\r\n dataQueryObj() {\r\n const center = `${this.blogPost.image.focalPoint.top},${this.blogPost.image.focalPoint.left}`;\r\n return JSON.stringify({\r\n mode: 'crop',\r\n quality: '70',\r\n center,\r\n });\r\n },\r\n },\r\n });\r\n };\r\n}();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\n\r\npressalit.basketline = pressalit.basketline || (new function () {\r\n this.init = function () {\r\n Vue.component('basketline', {\r\n template: '#js-basketline-template',\r\n store: pressalit.vuex.store,\r\n data: () => ({\r\n sublinesIsVisible: false,\r\n quantity: 1,\r\n }),\r\n props: {\r\n line: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n },\r\n methods: {\r\n toggleSublines() {\r\n this.sublinesIsVisible = !this.sublinesIsVisible;\r\n },\r\n deleteItem(basketlineId) {\r\n this.$store.dispatch('wishlist/remove', basketlineId);\r\n },\r\n deleteSubline(basketLineId, subLineId) {\r\n this.$store.dispatch('wishlist/removeSubline', {\r\n basketLineId,\r\n subLineId,\r\n });\r\n },\r\n decreaseQuantity() {\r\n this.$store.dispatch('wishlist/updateQuantity', {\r\n basketLineId: this.line.id,\r\n quantity: this.line.quantity -= 1,\r\n });\r\n },\r\n increaseQuantity() {\r\n this.$store.dispatch('wishlist/updateQuantity', {\r\n basketLineId: this.line.id,\r\n quantity: this.line.quantity += 1,\r\n });\r\n },\r\n changeQuantity(event) {\r\n const value = event.target.value;\r\n this.$store.dispatch('wishlist/updateQuantity', {\r\n basketLineId: this.line.id,\r\n quantity: parseInt(value, 10),\r\n });\r\n },\r\n },\r\n watch: {\r\n isPrinting: {\r\n handler() {\r\n this.toggleSublines();\r\n },\r\n },\r\n },\r\n computed: {\r\n quantityDecreaseDisabled() {\r\n return this.line.quantity <= 1;\r\n },\r\n image() {\r\n if (!this.line.productImage) {\r\n return null;\r\n }\r\n return `${this.line.productImage}?width=100&height=100&mode=crop`;\r\n },\r\n hasSubLines() {\r\n return !!this.line.subLines.length;\r\n },\r\n type() {\r\n if (!this.line.properties) {\r\n return null;\r\n }\r\n return this.line.properties['product.type'];\r\n },\r\n isPrinting() {\r\n return this.$store.state.print.wishlistPrinting;\r\n },\r\n },\r\n });\r\n };\r\n}());\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\npressalit.dropdownElement = pressalit.dropdownElement || new function () {\r\n this.init = function () {\r\n const els = document.querySelectorAll('.js-dropdown-list');\r\n if (!els) {\r\n return;\r\n }\r\n for (let i = 0; i < els.length; ++i) {\r\n const el = els[i];\r\n\r\n el.addEventListener('click', (event) => {\r\n const currentTarget = event.currentTarget;\r\n [...els].map((dropdown) => {\r\n if (dropdown !== currentTarget) {\r\n dropdown.classList.remove('show');\r\n }\r\n return dropdown;\r\n });\r\n currentTarget.classList.toggle('show');\r\n });\r\n }\r\n };\r\n}();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar novicell = novicell || {}; // eslint-disable-line\r\nvar cookie = cookie || {}; // eslint-disable-line\r\npressalit.dealerModal = pressalit.dealerModal\r\n || new (function () {\r\n this.init = function () {\r\n Vue.component('dealer-modal', {\r\n template: '#js-dealer-modal',\r\n props: {\r\n isOpen: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n filters: {\r\n type: Array,\r\n default: () => [],\r\n },\r\n selectedType: {\r\n type: String,\r\n default: null,\r\n },\r\n types: {\r\n type: Array,\r\n default: () => [],\r\n },\r\n },\r\n data() {\r\n return {\r\n type: null,\r\n selectedFilters: [],\r\n editType: false,\r\n };\r\n },\r\n computed: {\r\n showDealerTypeSelection() {\r\n return this.type == null || this.editType;\r\n },\r\n selectedTypeLabel() {\r\n if (!this.type) {\r\n return '';\r\n }\r\n\r\n const aliasKey = this.type.charAt(0).toUpperCase() + this.type.slice(1);\r\n\r\n return this.$store.getters[\r\n 'dictionaries/getByKey'\r\n ](\r\n `ViewElements.DealerPage.UserTypes.${aliasKey}`,\r\n );\r\n },\r\n },\r\n methods: {\r\n select(type) {\r\n this.editType = false;\r\n this.type = type;\r\n },\r\n close() {\r\n this.$emit('close');\r\n },\r\n onFilter(filters) {\r\n this.filters = filters;\r\n },\r\n getActiveClass(type) {\r\n if (this.type === type) {\r\n return 'dealer-modal__content-buttons-button--selected';\r\n }\r\n\r\n return 'dealer-modal__content-buttons-button';\r\n },\r\n submit() {\r\n this.$emit('done', {\r\n filters: this.selectedFilters,\r\n type: this.type ? this.type : 'private',\r\n });\r\n },\r\n toggleBodyLock() {\r\n const elements = document.getElementsByTagName(\r\n 'body',\r\n );\r\n if (elements) {\r\n const scrollClass = 'scroll-lock';\r\n if (this.isOpen) {\r\n elements[0].classList.add(scrollClass);\r\n } else {\r\n elements[0].classList.remove(scrollClass);\r\n }\r\n }\r\n },\r\n },\r\n watch: {\r\n selectedType: {\r\n handler(newVal) {\r\n this.type = newVal;\r\n },\r\n },\r\n filters: {\r\n handler(newVal) {\r\n this.selectedFilters = newVal;\r\n },\r\n },\r\n isOpen: {\r\n handler() {\r\n this.toggleBodyLock();\r\n },\r\n },\r\n },\r\n });\r\n };\r\n })();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\n\r\npressalit.dealerTile = pressalit.dealerTile || (new function () {\r\n this.init = function () {\r\n Vue.component('dealer-tile', {\r\n template: '#js-dealer-tile-template',\r\n props: {\r\n dealer: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n },\r\n data() {\r\n return {\r\n tempFilter: {},\r\n };\r\n },\r\n computed: {\r\n isWebshop() {\r\n return this.dealer.isWebshop;\r\n },\r\n },\r\n });\r\n };\r\n}());\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\n\r\npressalit.dropdownselector = pressalit.dropdownselector || (new function () {\r\n this.init = function () {\r\n function toggleList() {\r\n document.getElementById('dropdown-selector__selector-list').classList.toggle('dropdown-selector__selector-list');\r\n document.getElementById('dropdown-selector__selector-list').classList.toggle('dropdown-selector__selector-list--active');\r\n document.getElementById('dropdown-selector-arrow').classList.toggle('dropdown-selector__selector-arrow');\r\n document.getElementById('dropdown-selector-arrow').classList.toggle('dropdown-selector__selector-arrow--active');\r\n }\r\n document.getElementById('dropdown-selector__selector').addEventListener('click', toggleList);\r\n\r\n const countries = document.getElementsByClassName('js-dropdown-selector-country');\r\n for (let i = 0; i < countries.length; i++) {\r\n countries[i].addEventListener('click', () => {\r\n toggleList();\r\n });\r\n }\r\n };\r\n}());\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar novicell = novicell || {}; // eslint-disable-line\r\nvar cookie = cookie || {}; // eslint-disable-line\r\n\r\nvar VueRouter = VueRouter; // eslint-disable-line\r\nvar VueGoogleMaps = VueGoogleMaps; // eslint-disable-line\r\nvar GmapCluster = GmapCluster; // eslint-disable-line\r\npressalit.googleMaps = pressalit.googleMaps || new function () {\r\n Vue.use(VueRouter);\r\n\r\n function initGoogleMaps() {\r\n // eslint-disable-next-line no-undef\r\n Vue.use(VueGoogleMaps, {\r\n load: {\r\n key: 'AIzaSyAcQxAjnmC7YVX1M3-6iBMNGxLCz6Jt4-o',\r\n libraries: 'places',\r\n },\r\n });\r\n\r\n Vue.component('GmapCluster', VueGoogleMaps.Cluster);\r\n }\r\n\r\n this.init = function () {\r\n initGoogleMaps();\r\n\r\n Vue.component('google-maps', {\r\n template: '#js-google-maps',\r\n props: {\r\n markers: {\r\n type: Array,\r\n default: () => [],\r\n },\r\n currentPosition: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n zoom: {\r\n type: Number,\r\n default: 10,\r\n },\r\n infoWindowOpen: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n currentSelectedMarker: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n changingPlace: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n data() {\r\n return {\r\n map: null,\r\n currentMidx: null,\r\n infoOptions: {\r\n // optional: offset infowindow so it visually sits nicely on top of our marker\r\n pixelOffset: {\r\n width: 0,\r\n height: -35,\r\n },\r\n },\r\n isMapDragged: false,\r\n };\r\n },\r\n computed: {\r\n zoomLevel() {\r\n return this.zoom;\r\n },\r\n gmapOptions() {\r\n return {\r\n streetViewControl: false,\r\n fullscreenControl: false,\r\n mapTypeControl: false,\r\n };\r\n },\r\n icon() {\r\n return {\r\n url: '/dist/images/icon-map-pin.png',\r\n };\r\n },\r\n getBoundsCoordinates() {\r\n return this.$refs.map.$mapObject.getBounds();\r\n },\r\n getStyles() {\r\n return {\r\n styles: [{\r\n featureType: 'administrative',\r\n elementType: 'labels.text.fill',\r\n stylers: [{\r\n color: '#444444',\r\n }],\r\n },\r\n {\r\n featureType: 'administrative.land_parcel',\r\n elementType: 'labels.text.stroke',\r\n stylers: [{\r\n color: '#d7caca',\r\n }],\r\n },\r\n {\r\n featureType: 'landscape',\r\n elementType: 'all',\r\n stylers: [{\r\n color: '#f2f2f2',\r\n }],\r\n },\r\n {\r\n featureType: 'poi',\r\n elementType: 'all',\r\n stylers: [{\r\n visibility: 'off',\r\n }],\r\n },\r\n {\r\n featureType: 'road',\r\n elementType: 'all',\r\n stylers: [{\r\n saturation: -100,\r\n },\r\n {\r\n lightness: 45,\r\n },\r\n ],\r\n },\r\n {\r\n featureType: 'road.highway',\r\n elementType: 'all',\r\n stylers: [{\r\n visibility: 'simplified',\r\n }],\r\n },\r\n {\r\n featureType: 'road.arterial',\r\n elementType: 'labels.icon',\r\n stylers: [{\r\n visibility: 'off',\r\n }],\r\n },\r\n {\r\n featureType: 'transit',\r\n elementType: 'all',\r\n stylers: [{\r\n visibility: 'off',\r\n }],\r\n },\r\n {\r\n featureType: 'water',\r\n elementType: 'all',\r\n stylers: [{\r\n color: '#d7d2d2',\r\n },\r\n {\r\n visibility: 'on',\r\n },\r\n ],\r\n },\r\n ],\r\n\r\n };\r\n },\r\n getBoundMarkers() {\r\n // eslint-disable-next-line no-undef\r\n const bounds = new google.maps.LatLngBounds();\r\n const markers = this.markers; // some array\r\n for (let i = 0; i < markers.length; i++) {\r\n bounds.extend(markers[i].position);\r\n }\r\n return bounds;\r\n },\r\n phoneTranslation() {\r\n return this.$store.getters['dictionaries/getByKey']('ViewElements.DealerPage.Phone');\r\n },\r\n infoWindowPos() {\r\n return this.currentSelectedMarker.position;\r\n },\r\n getSelectedMarkerState() {\r\n if (this.currentSelectedMarker && this.currentSelectedMarker.info.state) {\r\n return `, ${this.currentSelectedMarker.info.state}`;\r\n }\r\n\r\n return '';\r\n },\r\n },\r\n watch: {\r\n currentSelectedMarker: {\r\n handler(newVal, oldVal) {\r\n if (JSON.stringify(oldVal) === JSON.stringify(newVal)) {\r\n return;\r\n }\r\n\r\n this.map.panTo(newVal.position);\r\n },\r\n },\r\n changingPlace: {\r\n handler() {\r\n if (this.changingPlace) {\r\n this.map.fitBounds(this.getBoundMarkers);\r\n }\r\n },\r\n },\r\n },\r\n methods: {\r\n click(marker) {\r\n this.$emit('marker-click', marker);\r\n },\r\n mapIsDragged() {\r\n this.$emit('zoom', { zoomLevel: this.map.zoom, bounds: this.getBoundsCoordinates });\r\n },\r\n mapHasLoaded() {\r\n this.$emit('loaded', { zoomLevel: this.map.zoom, bounds: this.getBoundsCoordinates });\r\n },\r\n },\r\n mounted() {\r\n const map = this.$refs.map;\r\n if (!map) {\r\n return;\r\n }\r\n map.$mapPromise.then(() => {\r\n map.$mapObject.setCenter(this.currentPosition);\r\n map.$mapObject.setZoom(this.zoom);\r\n map.$mapObject.addListener('zoom_changed', this.mapIsDragged);\r\n map.$mapObject.addListener('dragend', this.mapIsDragged);\r\n map.$mapObject.addListener('tilesloaded', this.mapHasLoaded);\r\n\r\n this.map = map.$mapObject;\r\n this.map.setOptions(this.getStyles);\r\n });\r\n },\r\n });\r\n };\r\n}();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar novicell = novicell || {}; // eslint-disable-line\r\nvar cookie = cookie || {}; // eslint-disable-line\r\n\r\npressalit.googleMapsAutocomplete = pressalit.googleMapsAutocomplete || new function () {\r\n this.init = function () {\r\n Vue.component('google-maps-autocomplete', {\r\n template: '#js-google-maps-autocomplete',\r\n inheritAttrs: false,\r\n data() {\r\n return {\r\n term: '',\r\n };\r\n },\r\n methods: {\r\n clearInput() {\r\n this.$refs.input.blur();\r\n setTimeout(() => {\r\n this.$refs.input.value = '';\r\n this.$refs.input.focus();\r\n }, 10);\r\n },\r\n },\r\n mounted() {\r\n this.$gmapApiPromiseLazy().then(() => {\r\n // eslint-disable-next-line no-undef\r\n if (typeof (google.maps.places.Autocomplete) !== 'function') {\r\n throw new Error('google.maps.places.Autocomplete is undefined. Did you add \\'places\\' to libraries when loading Google Maps?');\r\n }\r\n\r\n // eslint-disable-next-line no-undef\r\n this.$autocomplete = new google.maps.places.Autocomplete(this.$refs.input, {\r\n types: ['(cities)'],\r\n });\r\n\r\n this.$watch('componentRestrictions', (v) => {\r\n if (v !== undefined) {\r\n this.$autocomplete.setComponentRestrictions(v);\r\n }\r\n });\r\n\r\n this.$autocomplete.addListener('place_changed', () => {\r\n this.$emit('place-changed', this.$autocomplete.getPlace());\r\n });\r\n });\r\n },\r\n });\r\n };\r\n}();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar novicell = novicell || {}; // eslint-disable-line\r\nvar cookie = cookie || {}; // eslint-disable-line\r\n\r\npressalit.languageModal = pressalit.languageModal\r\n || new (function () {\r\n this.init = function () {\r\n const el = document.getElementById('js-modal-placeholder');\r\n new Vue({\r\n el,\r\n store: pressalit.vuex.store,\r\n computed: {\r\n isOpen() {\r\n return this.$store.state.languagemodal.isOpen;\r\n },\r\n },\r\n watch: {\r\n isOpen: {\r\n handler(val) {\r\n const vm = this;\r\n if (val) {\r\n novicell.overlay.create({\r\n selector: '#js-language-modal',\r\n class: 'modal',\r\n onLoaded() {\r\n const links = document.getElementsByClassName(\r\n 'language-modal__link',\r\n );\r\n for (let i = 0; i < links.length; i++) {\r\n const link = links[i];\r\n link.addEventListener('click', (e) => {\r\n e.preventDefault();\r\n let language = '';\r\n const url = link.href;\r\n const parts = url.split('/');\r\n if (parts[parts.length - 1].length === 0) {\r\n const languagePart = parts[parts.length - 2];\r\n if (languagePart.length <= 5) {\r\n language = languagePart;\r\n }\r\n }\r\n const lang = {\r\n language: language === '' || language === null\r\n ? 'int' : language,\r\n link: link.href,\r\n name: link.dataset.langName,\r\n alias: link.dataset.langAlias,\r\n };\r\n\r\n pressalit.cookieService.setCookie(\r\n 'language',\r\n JSON.stringify(lang),\r\n 60,\r\n );\r\n window.location.href = link.href;\r\n });\r\n }\r\n },\r\n onDestroy() {\r\n vm.$store.commit('languagemodal/toggle');\r\n },\r\n });\r\n }\r\n },\r\n immediate: true,\r\n },\r\n },\r\n mounted() {\r\n const languageCookie = pressalit.cookieService.getCookie(\r\n 'language',\r\n );\r\n\r\n if (!languageCookie && window.location.pathname === '/') {\r\n this.$store.commit('languagemodal/toggle');\r\n }\r\n\r\n const languageModal = document.getElementById('js-language-modal');\r\n const languageModalElement = document.createElement('div');\r\n languageModalElement.innerHTML = languageModal.innerHTML;\r\n const languageLinks = Array.prototype.slice.call(\r\n languageModalElement.getElementsByClassName(\r\n 'language-modal__link',\r\n ),\r\n );\r\n\r\n const defaultLanguage = languageLinks.find(\r\n link => link.pathname === '/',\r\n ); // default is the root\r\n\r\n let defaultName = '';\r\n\r\n if (defaultLanguage) {\r\n defaultName = defaultLanguage.dataset.langName;\r\n }\r\n const languageSegment = window.location.pathname.match('/..-../');\r\n\r\n const currentLanguage = {\r\n name: defaultName,\r\n };\r\n\r\n if (languageSegment) {\r\n const languageFromSegment = languageLinks.find(\r\n link => link.pathname.indexOf(\r\n languageSegment[0].replace(/\\//g, ''),\r\n ) > -1,\r\n );\r\n currentLanguage.name = languageFromSegment.dataset.langName;\r\n }\r\n\r\n this.$store.commit('languagemodal/setCurrent', currentLanguage);\r\n },\r\n });\r\n\r\n const footerModalEl = document.getElementById('footer__selector-modal');\r\n new Vue({\r\n el: footerModalEl,\r\n store: pressalit.vuex.store,\r\n computed: {\r\n current() {\r\n return this.$store.state.languagemodal.current;\r\n },\r\n },\r\n methods: {\r\n open() {\r\n this.$store.commit('languagemodal/toggle');\r\n },\r\n },\r\n });\r\n };\r\n })();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\n\r\npressalit.measurementInput = pressalit.measurementInput || (new function () {\r\n this.init = function () {\r\n Vue.component('measurement-input', {\r\n template: '#js-measurement-input-template',\r\n props: {\r\n input: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n number: {\r\n type: String,\r\n default: () => '',\r\n },\r\n },\r\n data() {\r\n return {\r\n measurement: Number(this.input.fromValue) || null,\r\n };\r\n },\r\n watch: {\r\n measurement: {\r\n handler() {\r\n this.onMeasurementChange();\r\n },\r\n },\r\n },\r\n // computed: {\r\n // selectedValues() {\r\n // return this.tempFilter.selected.map((x) => {\r\n // const current = this.tempFilter.options.find(o => o.selector === x);\r\n // if (!current) {\r\n // return null;\r\n // }\r\n // return current.value;\r\n // }).filter(x => x != null).join(', ');\r\n // },\r\n // isSingle() {\r\n // if (!this.filter.properties || !this.filter.properties.type) {\r\n // return false;\r\n // }\r\n // return this.filter.properties.type === 'category';\r\n // },\r\n // options() {\r\n // return this.tempFilter.options.map((filter) => {\r\n // if (filter.properties && filter.properties.customLabel) {\r\n // filter.value = filter.properties.customLabel;\r\n // }\r\n // return filter;\r\n // });\r\n // },\r\n // },\r\n methods: {\r\n onMeasurementChange() {\r\n // Format measurement\r\n this.measurement = this.measurement.replace(/\\./g, '');\r\n this.input.fromValue = this.measurement;\r\n this.input.toValue = this.measurement;\r\n },\r\n },\r\n });\r\n };\r\n}());\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\n\r\npressalit.multiFilter = pressalit.multiFilter || (new function () {\r\n this.init = function () {\r\n Vue.component('multi-filter', {\r\n template: '#js-multi-filter-template',\r\n props: {\r\n filter: {\r\n type: Object,\r\n default: () => { },\r\n },\r\n applyDictionaryKey: {\r\n type: String,\r\n default: '',\r\n },\r\n singleFilter: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n showReset: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n isDealerView: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n data() {\r\n return {\r\n tempFilter: {},\r\n };\r\n },\r\n\r\n computed: {\r\n apply() {\r\n return this.$store.getters[\r\n 'dictionaries/getByKey'\r\n ](this.applyDictionaryKey);\r\n },\r\n selectedValues() {\r\n if (!this.tempFilter.selected) {\r\n return null;\r\n }\r\n\r\n return this.tempFilter.selected.map((x) => {\r\n const current = this.tempFilter.options.find(o => o.selector === x);\r\n if (!current) {\r\n return null;\r\n }\r\n return current.value;\r\n }).filter(x => x != null).join(', ');\r\n },\r\n isSingle() {\r\n if (this.singleFilter) {\r\n return true;\r\n }\r\n if (!this.filter.properties || !this.filter.properties.type) {\r\n return false;\r\n }\r\n return this.filter.properties.type === 'category';\r\n },\r\n options() {\r\n if (!this.tempFilter.options) {\r\n return [];\r\n }\r\n\r\n return this.tempFilter.options.map((filter) => {\r\n if (filter.properties && filter.properties.customLabel) {\r\n filter.value = filter.properties.customLabel;\r\n }\r\n\r\n const casedValue = filter.value.substring(0, 1).toUpperCase().concat(filter.value.substring(1, filter.value.length).toLowerCase());\r\n const dictionary = 'ViewElements.ProductList.Filter.'.concat(casedValue);\r\n\r\n const targetFilter = this.$store.getters[\r\n 'dictionaries/getByKey'\r\n ](dictionary);\r\n\r\n if (targetFilter !== null && targetFilter !== '') {\r\n filter.value = targetFilter;\r\n }\r\n return filter;\r\n });\r\n },\r\n },\r\n watch: {\r\n filter: {\r\n immediate: true,\r\n deep: true,\r\n handler: 'setTemp',\r\n },\r\n },\r\n methods: {\r\n\r\n validate() {\r\n if (this.isSingle && this.tempFilter.selected && this.tempFilter.selected.length > 1) {\r\n const last = this.tempFilter.selected[this.tempFilter.selected.length - 1];\r\n this.tempFilter.selected = [];\r\n this.tempFilter.selected.push(last);\r\n }\r\n },\r\n setTemp() {\r\n this.tempFilter = JSON.parse(JSON.stringify(this.filter));\r\n },\r\n reset() {\r\n this.tempFilter.selected = [];\r\n this.update();\r\n },\r\n update() {\r\n this.$emit('update:filter', this.tempFilter);\r\n },\r\n },\r\n });\r\n };\r\n}());\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar axios = axios; // eslint-disable-line\r\nvar VueRouter = VueRouter; // eslint-disable-line\r\npressalit.articleList = pressalit.articleList || new function () {\r\n Vue.use(VueRouter);\r\n this.init = function () {\r\n const els = document.querySelectorAll('.js-article-list');\r\n let i;\r\n if (!els) {\r\n return;\r\n }\r\n for (i = 0; i < els.length; ++i) {\r\n const el = els[i];\r\n const router = new VueRouter({\r\n mode: 'history',\r\n });\r\n new Vue({\r\n el,\r\n router,\r\n data: {\r\n articles: [],\r\n filters: [],\r\n total: null,\r\n parentId: null,\r\n page: 1,\r\n pageSize: 9,\r\n sorting: 'NameAscending',\r\n hideServersideRendered: false, // boolean used for hiding the server-side rendered products. Happends on filtering or sorting\r\n },\r\n store: pressalit.vuex.store,\r\n watch: {\r\n '$route.query': {\r\n immediate: false,\r\n handler: 'onQueryChange',\r\n },\r\n },\r\n created() {\r\n const initialState = JSON.parse(\r\n document.getElementById('js-article-list-json')\r\n .innerHTML,\r\n );\r\n\r\n const parentId = JSON.parse(\r\n document.getElementById('js-article-list-parent-json').innerHTML,\r\n );\r\n\r\n this.filters = initialState.filters || [];\r\n this.parentId = parentId || 0;\r\n this.total = initialState.total || 0;\r\n this.articles = initialState.results || [];\r\n\r\n const currentQuery = this.$route.query;\r\n this.page = currentQuery.page * 1 || 1;\r\n this.sorting = currentQuery.sort || initialState.sortingMethod;\r\n },\r\n methods: {\r\n onQueryChange(newVal, oldVal) {\r\n // If there wasnt any filter before, or the filter wasnt the same dont search\r\n // Since the filter has been changed after an search\r\n if (\r\n (newVal.filter && !oldVal.filter)\r\n || oldVal.filter !== newVal.filter\r\n ) {\r\n return;\r\n }\r\n this.search();\r\n },\r\n updateQuery() {\r\n const query = Object.assign({}, this.$route.query);\r\n query.page = this.page;\r\n query.sort = this.sorting;\r\n query.filter = this.filterToken;\r\n this.$router.replace({\r\n query,\r\n });\r\n },\r\n loadmore() {\r\n this.page += 1;\r\n this.updateQuery();\r\n },\r\n updateSorting() {\r\n this.page = 1;\r\n this.articles = [];\r\n this.hideServersideRendered = true;\r\n this.updateQuery();\r\n },\r\n onFilter(filters) {\r\n this.filters = filters;\r\n this.page = 1;\r\n this.articles = [];\r\n this.hideServersideRendered = true;\r\n this.search();\r\n },\r\n search() {\r\n this.searching = true;\r\n const payload = {\r\n page: this.page,\r\n pageSize: this.pageSize,\r\n sorting: this.sorting,\r\n id: this.parentId,\r\n filter: {\r\n filters: this.filters,\r\n },\r\n };\r\n axios.post('/api/catalog/search/SearchArticles', payload)\r\n .then(({\r\n data,\r\n }) => {\r\n this.articles = [\r\n ...this.articles,\r\n ...data.results,\r\n ];\r\n\r\n this.filters = data.filterOptions.options.filters;\r\n\r\n this.total = data.total;\r\n this.filterToken = data.filterOptions.filterToken;\r\n this.updateQuery();\r\n });\r\n },\r\n },\r\n computed: {\r\n paginationText() {\r\n const dict = this.$store.getters['dictionaries/getByKey']('ViewElements.ArticleListPage.PaginationText');\r\n if (dict && dict.includes('[visible]') && dict.includes('[total]')) {\r\n return dict.replace('[visible]', this.visibleLinksAmount).replace('[total]', this.total);\r\n }\r\n return '';\r\n },\r\n visibleLinksAmount() {\r\n if (this.page * this.pageSize < this.total) {\r\n return this.page * this.pageSize;\r\n }\r\n return this.total;\r\n },\r\n },\r\n });\r\n }\r\n };\r\n}();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar novicell = novicell || {}; // eslint-disable-line\r\nvar axios = axios; // eslint-disable-line\r\n\r\nvar VueRouter = VueRouter; // eslint-disable-line\r\n\r\npressalit.basketPage = pressalit.basketPage || new function () {\r\n Vue.use(VueRouter);\r\n this.init = function () {\r\n const router = new VueRouter({\r\n mode: 'history',\r\n });\r\n const pageEl = document.getElementById('js-basket-page');\r\n if (!pageEl) {\r\n return;\r\n }\r\n const store = pressalit.vuex.store;\r\n\r\n new Vue({\r\n el: pageEl,\r\n store,\r\n router,\r\n data: () => ({\r\n showAdditionalPoNumberSections: {},\r\n additionalPoNumbers: {},\r\n }),\r\n created() {\r\n this.$store.dispatch('basket/getBasket');\r\n },\r\n computed: {\r\n showError() {\r\n return this.$store.getters['basket/hasError'];\r\n },\r\n isLoading() {\r\n return this.$store.getters['basket/isLoading'];\r\n },\r\n basketLines() {\r\n const lines = this.$store.getters['basket/getLines'];\r\n this.$store.dispatch('tracking/trackViewBasket', lines);\r\n return lines;\r\n },\r\n basketTotals() {\r\n return this.$store.getters['basket/getTotals'];\r\n },\r\n isNewCustomer() {\r\n return this.$store.getters['basket/isNewCustomer'];\r\n },\r\n },\r\n methods: {\r\n toggleShowAdditionalPoNumberSection(basketLine) {\r\n this.$set(this.showAdditionalPoNumberSections, basketLine.id, !this.showAdditionalPoNumberSections[basketLine.id]);\r\n },\r\n decreaseQuantity(basketLine) {\r\n if (basketLine.quantity === 1) {\r\n this.$store.dispatch('basket/removeBasketLine', basketLine.id);\r\n this.$store.dispatch('tracking/trackAddOrRemoveToBasket', { basketLine, action: 'remove', event: 'remove_from_basket' });\r\n } else {\r\n this.$store.dispatch('basket/updateQuantity', {\r\n basketLineId: basketLine.id,\r\n quantity: basketLine.quantity -= 1,\r\n });\r\n this.$store.dispatch('tracking/trackAddOrRemoveToBasket', { basketLine, action: 'decrease', event: 'remove_from_basket' });\r\n }\r\n },\r\n increaseQuantity(basketLine) {\r\n this.$store.dispatch('basket/updateQuantity', {\r\n basketLineId: basketLine.id,\r\n quantity: basketLine.quantity += 1,\r\n });\r\n this.$store.dispatch('tracking/trackAddOrRemoveToBasket', { basketLine, action: 'increase', event: 'add_to_basket' });\r\n },\r\n changeQuantity(event, basketLine) {\r\n const value = event.target.value;\r\n const basketLineId = basketLine.id;\r\n this.$store.dispatch('basket/updateQuantity', {\r\n basketLineId,\r\n quantity: parseInt(value, 10),\r\n });\r\n\r\n if (Number(value) === 0) {\r\n this.$store.dispatch('tracking/trackAddOrRemoveToBasket', { basketLine, action: 'remove', event: 'remove_from_basket' });\r\n } else {\r\n this.$store.dispatch('tracking/trackAddOrRemoveToBasket', {\r\n basketLine, action: 'changeQuantity', changedQuantityTo: parseInt(value, 10), event: 'add_to_basket',\r\n });\r\n }\r\n },\r\n removeBasketLine(basketLine) {\r\n this.$store.dispatch('basket/removeBasketLine', basketLine.id);\r\n this.$store.dispatch('tracking/trackAddOrRemoveToBasket', { basketLine, action: 'remove', event: 'remove_from_basket' });\r\n },\r\n replicateOrderLine(productId) {\r\n this.$store.dispatch('basket/addReplicatedBasketLine', {\r\n productId,\r\n });\r\n },\r\n addAdditionalPoNumber(basketLine) {\r\n const basketLineId = basketLine.id;\r\n this.$store.dispatch('basket/addPoNumber', {\r\n basketLineId,\r\n poNumber: this.additionalPoNumbers[basketLine.id],\r\n });\r\n this.additionalPoNumbers[basketLine.id] = '';\r\n },\r\n removeAdditionalPoNumber(basketLine) {\r\n const basketLineId = basketLine.id;\r\n this.$store.dispatch('basket/deletePoNumber', basketLineId);\r\n this.toggleShowAdditionalPoNumberSection(basketLine);\r\n },\r\n },\r\n });\r\n };\r\n}();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar Flickity = Flickity; // eslint-disable-line\r\npressalit.articleSlider = pressalit.articleSlider || (new function () {\r\n this.init = function () {\r\n const els = document.querySelectorAll('.js-article-slider');\r\n if (!els.length) {\r\n return;\r\n }\r\n setTimeout(() => {\r\n for (let i = 0; i < els.length; i++) {\r\n new Flickity(els[i], {\r\n pageDots: false,\r\n groupCells: true,\r\n contain: true,\r\n draggable: true,\r\n cellAlign: 'left',\r\n imagesLoaded: true,\r\n arrowShape: {\r\n x0: 10,\r\n x1: 60,\r\n y1: 50,\r\n x2: 70,\r\n y2: 45,\r\n x3: 25,\r\n },\r\n });\r\n }\r\n }, 0);\r\n };\r\n}());\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar VueRouter = VueRouter || {}; // eslint-disable-line\r\n\r\npressalit.cameraPage = pressalit.cameraPage\r\n || new function () {\r\n this.init = function () {\r\n const el = document.getElementById('js-camera-page');\r\n if (!el) {\r\n return;\r\n }\r\n\r\n const router = new VueRouter({\r\n mode: 'history',\r\n });\r\n new Vue({\r\n el,\r\n router,\r\n store: pressalit.vuex.store,\r\n methods: {\r\n getVerification() {\r\n this.$store.commit('navigation/setComponent', 'get-verification');\r\n this.$store.commit('navigation/toggleSidebar');\r\n },\r\n },\r\n mounted() {\r\n const currentQuery = this.$route.query;\r\n if (currentQuery.validate && currentQuery.validate === 'true') {\r\n this.getVerification();\r\n const query = Object.assign({}, this.$route.query);\r\n delete query.validate;\r\n this.$router.replace({\r\n query,\r\n });\r\n }\r\n },\r\n });\r\n\r\n\r\n Vue.component('get-verification', {\r\n template: '#js-get-verification',\r\n data() {\r\n return {\r\n sender: {\r\n name: '',\r\n email: '',\r\n phone: '',\r\n },\r\n comment: '',\r\n error: false,\r\n success: false,\r\n sending: false,\r\n };\r\n },\r\n computed: {\r\n culture() {\r\n return this.$store.getters['basket/getCulture'];\r\n },\r\n siteNodeId() {\r\n return this.$store.getters['basket/getSiteNodeId'];\r\n },\r\n },\r\n methods: {\r\n send() {\r\n this.sending = true;\r\n const req = axios.post('/api/frontend/webapp/Verify', {\r\n senderName: this.sender.name,\r\n senderEmail: this.sender.email,\r\n senderPhone: this.sender.phone,\r\n comment: this.comment,\r\n });\r\n\r\n req.then(\r\n ({\r\n data,\r\n }) => {\r\n this.sending = false;\r\n if (data.isSuccess) {\r\n this.success = true;\r\n this.error = false;\r\n return;\r\n }\r\n this.success = false;\r\n this.error = true;\r\n },\r\n () => {\r\n this.success = false;\r\n this.sending = false;\r\n this.error = true;\r\n },\r\n );\r\n },\r\n },\r\n });\r\n };\r\n }();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar novicell = novicell || {}; // eslint-disable-line\r\nvar axios = axios; // eslint-disable-line\r\n\r\nvar VueRouter = VueRouter; // eslint-disable-line\r\n\r\npressalit.checkoutPage = pressalit.checkoutPage || new function () {\r\n Vue.use(VueRouter);\r\n this.init = function () {\r\n const router = new VueRouter({\r\n mode: 'history',\r\n });\r\n const pageEl = document.getElementById('js-checkout-page');\r\n if (!pageEl) {\r\n return;\r\n }\r\n const store = pressalit.vuex.store;\r\n new Vue({\r\n el: pageEl,\r\n store,\r\n router,\r\n data: {\r\n additionalAddressLine: false,\r\n additionalAddressLineDelivery: false,\r\n commentSection: false,\r\n showDeliverydate: false,\r\n },\r\n created() {\r\n this.$store.dispatch('basket/getCheckout').then(() => {\r\n this.additionalAddressLine = !!this.invoiceAddress.addressLine2;\r\n this.additionalAddressLineDelivery = !!this.deliveryAddress.addressLine2;\r\n }).then(() => {\r\n this.$store.dispatch('tracking/trackBeginCheckout', this.basketLines);\r\n });\r\n },\r\n methods: {\r\n submit(receiptPage) {\r\n this.$validator.validateAll().then((result) => {\r\n if (result) {\r\n this.$store.dispatch('basket/submit').then((redirectUrl) => {\r\n const receiptPageUrl = encodeURIComponent(receiptPage);\r\n const newRedirectUrl = `${redirectUrl}?successUrl=${receiptPageUrl}&errorUrl=${receiptPageUrl}`;\r\n window.location.href = newRedirectUrl;\r\n }, (errors) => {\r\n console.error('Error', errors);\r\n });\r\n }\r\n });\r\n },\r\n },\r\n computed: {\r\n disabledInvoiceFields() {\r\n return this.$store.getters['basket/disabledInvoiceFields'];\r\n },\r\n showError() {\r\n return this.$store.getters['basket/hasError'];\r\n },\r\n isLoading() {\r\n return this.$store.getters['basket/isLoading'];\r\n },\r\n isSubmitting() {\r\n return this.$store.getters['basket/isSubmitting'];\r\n },\r\n invoiceAddress: {\r\n get() {\r\n return this.$store.getters['basket/invoiceAddress'];\r\n },\r\n set(value) {\r\n return this.$store.commit('basket/setInvoiceAddress', value);\r\n },\r\n },\r\n deliveryAddress: {\r\n get() {\r\n return this.$store.getters['basket/deliveryAddress'];\r\n },\r\n set(value) {\r\n return this.$store.commit('basket/setDeliveryAddress', value);\r\n },\r\n },\r\n email: {\r\n get() {\r\n return this.$store.getters['basket/email'];\r\n },\r\n set(value) {\r\n return this.$store.commit('basket/setEmail', value);\r\n },\r\n },\r\n isDeliveryToInvoiceAddress: {\r\n get() {\r\n return this.$store.getters['basket/isDeliveryToInvoiceAddress'];\r\n },\r\n set(value) {\r\n return this.$store.commit('basket/setDeliveryToInvoiceAddress', value);\r\n },\r\n },\r\n reference: {\r\n get() {\r\n return this.$store.getters['basket/reference'];\r\n },\r\n set(value) {\r\n const properties = this.$store.getters['basket/properties'];\r\n Vue.set(properties, 'reference', value);\r\n return this.$store.commit('basket/setProperties', properties);\r\n },\r\n },\r\n customerDeliveryState: {\r\n get() {\r\n return this.$store.getters['basket/customerDeliveryState'];\r\n },\r\n set(value) {\r\n const properties = this.$store.getters['basket/properties'];\r\n Vue.set(properties, 'customerDeliveryState', value);\r\n return this.$store.commit('basket/setProperties', properties);\r\n },\r\n },\r\n shippingDateRequested: {\r\n get() {\r\n return this.$store.getters['basket/shippingDateRequested'];\r\n },\r\n set(value) {\r\n const properties = this.$store.getters['basket/properties'];\r\n Vue.set(properties, 'shippingDateRequested', value);\r\n return this.$store.commit('basket/setProperties', properties);\r\n },\r\n },\r\n poNumber: {\r\n get() {\r\n return this.$store.getters['basket/poNumber'];\r\n },\r\n set(value) {\r\n const properties = this.$store.getters['basket/properties'];\r\n Vue.set(properties, 'poNumber', value);\r\n return this.$store.commit('basket/setProperties', properties);\r\n },\r\n },\r\n contactUponDelivery: {\r\n get() {\r\n return this.$store.getters['basket/contactUponDelivery'];\r\n },\r\n set(value) {\r\n const properties = this.$store.getters['basket/properties'];\r\n Vue.set(properties, 'contactUponDelivery', value);\r\n return this.$store.commit('basket/setProperties', properties);\r\n },\r\n },\r\n phoneNumberUponDelivery: {\r\n get() {\r\n return this.$store.getters['basket/phoneNumberUponDelivery'];\r\n },\r\n set(value) {\r\n const properties = this.$store.getters['basket/properties'];\r\n Vue.set(properties, 'phoneNumberUponDelivery', value);\r\n return this.$store.commit('basket/setProperties', properties);\r\n },\r\n },\r\n deliveryInstructions: {\r\n get() {\r\n return this.$store.getters['basket/deliveryInstructions'];\r\n },\r\n set(value) {\r\n const properties = this.$store.getters['basket/properties'];\r\n Vue.set(properties, 'deliveryInstructions', value);\r\n return this.$store.commit('basket/setProperties', properties);\r\n },\r\n },\r\n comment: {\r\n get() {\r\n return this.$store.getters['basket/comment'];\r\n },\r\n set(value) {\r\n const properties = this.$store.getters['basket/properties'];\r\n Vue.set(properties, 'comment', value);\r\n return this.$store.commit('basket/setProperties', properties);\r\n },\r\n },\r\n basketLines() {\r\n return this.$store.getters['basket/getLines'];\r\n },\r\n basketTotals() {\r\n return this.$store.getters['basket/getTotals'];\r\n },\r\n isNewCustomer() {\r\n return this.$store.getters['basket/isNewCustomer'];\r\n },\r\n },\r\n });\r\n };\r\n}();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar novicell = novicell || {}; // eslint-disable-line\r\n\r\npressalit.collectionProduct = pressalit.collectionProduct || new function () {\r\n this.contentOverlayTriggers = null;\r\n this.overlayInnerContent = null;\r\n this.init = function () {\r\n this.overlayInnerContent = document.querySelector(\r\n '#js-content-overlay-content',\r\n );\r\n // Select your overlay trigger\r\n const contentOverlayTriggers = document.querySelectorAll(\r\n '.js-content-overlay-trigger',\r\n );\r\n const _this = this;\r\n if (contentOverlayTriggers) {\r\n for (let i = 0; i < contentOverlayTriggers.length; i++) {\r\n contentOverlayTriggers[i].addEventListener('click', (e) => {\r\n e.stopPropagation();\r\n const currentTrigger = contentOverlayTriggers[i];\r\n const content = currentTrigger.getAttribute(\r\n 'data-template-id',\r\n );\r\n novicell.overlay.create({\r\n selector: '#js-content-overlay-content',\r\n class: 'content-overlay',\r\n onCreate() {\r\n _this.injectContent(content);\r\n },\r\n onLoaded() {\r\n _this.loadedContent(content);\r\n },\r\n onDestroy() {\r\n _this.clearContent();\r\n },\r\n });\r\n }, false);\r\n }\r\n }\r\n\r\n const collectionGrids = document.getElementsByClassName('js-collection-grid');\r\n if (!collectionGrids) {\r\n return;\r\n }\r\n for (let index = 0; index < collectionGrids.length; index++) {\r\n const el = collectionGrids[index];\r\n new Vue({\r\n el,\r\n store: pressalit.vuex.store,\r\n methods: {\r\n addToWishlist(productId) {\r\n this.$store.dispatch('wishlist/add', {\r\n productId,\r\n });\r\n },\r\n },\r\n });\r\n }\r\n };\r\n\r\n this.clearContent = function () {\r\n this.overlayInnerContent.innerHTML = '';\r\n };\r\n\r\n this.injectContent = function (content) {\r\n const tpl = document.querySelector(content);\r\n this.overlayInnerContent.innerHTML = tpl.innerHTML;\r\n };\r\n\r\n this.loadedContent = function (content) {\r\n // Initialize vues when popup loads\r\n if (content === '#active-campaign-popup') {\r\n const wrapper = document.getElementById('js-novi-backdrop');\r\n pressalit.activeCampaignForm.init(wrapper);\r\n }\r\n if (content === '#edit-address-popup') {\r\n pressalit.changeAddress.init();\r\n }\r\n };\r\n}();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar novicell = novicell || {}; // eslint-disable-line\r\nvar cookie = cookie || {}; // eslint-disable-line\r\n\r\nvar VueRouter = VueRouter; // eslint-disable-line\r\npressalit.dealerListPage = pressalit.dealerListPage\r\n || new (function () {\r\n Vue.use(VueRouter);\r\n this.init = function () {\r\n const el = document.getElementById('js-dealer-list-page');\r\n if (!el) {\r\n return;\r\n }\r\n const router = new VueRouter({\r\n mode: 'history',\r\n });\r\n\r\n new Vue({\r\n el,\r\n router,\r\n store: pressalit.vuex.store,\r\n data() {\r\n return {\r\n results: [],\r\n currentPosition: {},\r\n lastPosition: {\r\n lat: 0,\r\n lng: 0,\r\n },\r\n currentBounds: null,\r\n changingPlace: false,\r\n filters: [],\r\n token: '',\r\n pagination: {\r\n page: 1,\r\n pageSize: 100,\r\n },\r\n activeTab: 0,\r\n showWebshops: false,\r\n isSearching: true,\r\n searchTimeout: null,\r\n cancelSource: null,\r\n initialCountryIsoFilter: null,\r\n userType: '',\r\n totalResults: null,\r\n zoom: 12,\r\n currentCountry: {},\r\n place: null,\r\n filterMappings: [],\r\n infoWindowOpen: false,\r\n currentSelectedMarker: {},\r\n showMap: true,\r\n market: '',\r\n activeDealer: -1,\r\n inputChanged: false,\r\n initialZoom: 12,\r\n };\r\n },\r\n methods: {\r\n goToPhysicalDealers() {\r\n this.clearPlace();\r\n this.switchTab(this.tabs.find(tab => tab.key === 'tab-1'), 0);\r\n },\r\n goToDealer(dealer) {\r\n this.clearPlace();\r\n this.currentSelectedMarker = dealer;\r\n this.infoWindowOpen = true;\r\n\r\n const mapElement = document.getElementById('js-dealer-list-page-map');\r\n if (mapElement) {\r\n if (window.innerWidth < 992) {\r\n window.scroll({\r\n top: mapElement.offsetTop + mapElement.clientHeight,\r\n behavior: 'smooth',\r\n });\r\n }\r\n }\r\n },\r\n openMarker(marker) {\r\n this.infoWindowOpen = true;\r\n this.currentSelectedMarker = marker;\r\n this.activeDealer = marker.info.id;\r\n },\r\n onDealerOpen(dealer) {\r\n this.activeDealer = dealer.id;\r\n },\r\n changePlace(place) {\r\n if (!place.place_id) {\r\n this.place = null;\r\n return;\r\n }\r\n this.place = place;\r\n },\r\n clearPlace() {\r\n this.place = null;\r\n },\r\n updateRouteQuery() {\r\n const query = Object.assign({}, this.$route.query);\r\n if (this.userType) {\r\n query.type = this.userType;\r\n }\r\n if ((typeof this.currentPosition.lat !== 'undefined' && this.currentPosition.lat > 0) && (typeof this.currentPosition.lng !== 'undefined' && this.currentPosition.lng > 0)) {\r\n query.location = `${this.currentPosition.lat},${this.currentPosition.lng}`;\r\n }\r\n query.zoom = this.zoom;\r\n query.webshop = this.showWebshops;\r\n\r\n const geoLocations = this.getGeoLocations;\r\n\r\n if (geoLocations) {\r\n query.nw = `${geoLocations.nwLat},${geoLocations.nwLng}`;\r\n query.se = `${geoLocations.seLat},${geoLocations.seLng}`;\r\n }\r\n\r\n\r\n this.$router.replace({\r\n query,\r\n });\r\n },\r\n switchTab(tab, index) {\r\n if (index === this.activeTab) {\r\n return;\r\n }\r\n this.clearPlace();\r\n\r\n this.activeTab = index;\r\n this.showWebshops = tab.isWebshops;\r\n this.isSearching = true;\r\n setTimeout(() => {\r\n this.search(this.filters);\r\n }, 50);\r\n },\r\n updateZoom(payload) {\r\n this.zoom = payload.zoomLevel;\r\n this.updateBounds(payload.bounds);\r\n },\r\n updateBounds(bounds) {\r\n if (!bounds) {\r\n return;\r\n }\r\n\r\n this.clearPlace();\r\n this.currentBounds = bounds;\r\n this.currentPosition.lat = bounds.getCenter().lat();\r\n this.currentPosition.lng = bounds.getCenter().lng();\r\n this.search(this.filters);\r\n },\r\n setType(type) {\r\n this.userType = type;\r\n },\r\n onFilter(input) {\r\n // Filter out the UserType, and set the type based on that;\r\n const userTypeFilter = input.filter(x => x.identifier === 'UserType');\r\n if (userTypeFilter && userTypeFilter.length) {\r\n const userType = userTypeFilter[0].selected[0];\r\n if (userType) {\r\n this.setType(userType);\r\n } else {\r\n this.setType(null);\r\n }\r\n }\r\n\r\n this.search({\r\n filters: input,\r\n });\r\n },\r\n getLatLng(location) {\r\n if (typeof location !== 'undefined') {\r\n return location;\r\n }\r\n\r\n return {\r\n lat: this.currentBounds ? this.currentBounds.getCenter().lat() : null,\r\n lng: this.currentBounds ? this.currentBounds.getCenter().lng() : null,\r\n };\r\n },\r\n search(filters, newPosition) {\r\n const geoLocations = this.getGeoLocations;\r\n\r\n if (newPosition) {\r\n this.zoom = this.initialZoom;\r\n this.isSearching = true;\r\n\r\n const visibleMap = document.querySelector('.vue-map');\r\n\r\n // eslint-disable-next-line no-undef\r\n const temporaryDomNode = document.createElement('div');\r\n temporaryDomNode.style.height = visibleMap ? `${visibleMap.clientHeight}px` : '500px';\r\n temporaryDomNode.style.width = visibleMap ? `${visibleMap.clientWidth}px` : '500px';\r\n temporaryDomNode.style.visibility = 'hidden';\r\n\r\n document.body.append(temporaryDomNode);\r\n\r\n // eslint-disable-next-line no-undef\r\n const fakeMap = new google.maps.Map(temporaryDomNode, {\r\n zoom: this.initialZoom,\r\n center: { lat: newPosition.lat, lng: newPosition.lng },\r\n });\r\n\r\n\r\n // eslint-disable-next-line no-undef\r\n google.maps.event.addListener(fakeMap, 'bounds_changed', () => {\r\n const bounds = fakeMap.getBounds();\r\n\r\n this.updateBounds(bounds);\r\n temporaryDomNode.remove();\r\n });\r\n\r\n return;\r\n }\r\n\r\n if (this.changingPlace && !newPosition) {\r\n return;\r\n }\r\n\r\n if (this.showWebshops) {\r\n // Remove the segment filter\r\n // const segmentFilterIndex = this.getSegmentFilters(filters);\r\n // if (segmentFilterIndex !== -1) {\r\n // filters.filters[segmentFilterIndex].selected = [];\r\n // }\r\n } else {\r\n const isoFilterIndex = this.getIsoFilterIndex(filters);\r\n if (isoFilterIndex !== -1) {\r\n filters.filters[isoFilterIndex].selected = [];\r\n }\r\n }\r\n\r\n clearTimeout(this.searchTimeout);\r\n\r\n if (this.cancelSource) {\r\n this.cancelSource.cancel();\r\n }\r\n\r\n this.cancelSource = axios.CancelToken.source();\r\n\r\n // Remove the UserType filter\r\n filters.filters = filters.filters.filter(x => x.identifier !== 'UserType');\r\n\r\n const payload = {\r\n page: 0,\r\n pageSize: newPosition ? 999 : 0,\r\n filters,\r\n latitude: newPosition ? newPosition.lat : this.currentPosition.lat,\r\n longitude: newPosition ? newPosition.lng : this.currentPosition.lng,\r\n bottomRight: this.showWebshops || !geoLocations || newPosition ? null : {\r\n lat: geoLocations.seLat,\r\n lng: geoLocations.seLng,\r\n },\r\n topLeft: this.showWebshops || !geoLocations || newPosition ? null : {\r\n lat: geoLocations.nwLat,\r\n lng: geoLocations.nwLng,\r\n },\r\n isWebshop: this.showWebshops,\r\n isPrivate: this.isPrivateUser,\r\n cancelSource: this.cancelSource,\r\n };\r\n\r\n this.updateRouteQuery();\r\n\r\n this.isSearching = true;\r\n this.$store\r\n .dispatch('dealers/fetch', payload)\r\n .then((result) => {\r\n this.filters = result.filterOptions.options;\r\n this.results = result.results;\r\n this.totalResults = result.total;\r\n this.token = result.filterOptions.filterToken;\r\n this.isSearching = false;\r\n this.cancelSource = null;\r\n\r\n if (newPosition) {\r\n this.changingPlace = true;\r\n this.currentPosition = newPosition;\r\n }\r\n this.searchTimeout = setTimeout(() => {\r\n this.changingPlace = false;\r\n }, 1000);\r\n\r\n this.updateRouteQuery();\r\n }, (error) => {\r\n console.log(error);\r\n });\r\n },\r\n getSegmentFilters(filters) {\r\n return filters.filters.findIndex(filter => filter.identifier === 'NCSegmentKey');\r\n },\r\n getIsoFilterIndex(filters) {\r\n return filters.filters.findIndex(filter => filter.identifier === 'NCDealerCountryIso');\r\n },\r\n setSelectedFilterBasedOnCategory() {\r\n const currentCategoryId = this.$route.query.category;\r\n if (!currentCategoryId) {\r\n return;\r\n }\r\n const filters = this.filters;\r\n\r\n const productGroupFilters = filters.filters.find(filter => filter.identifier === 'NCDealerCategory');\r\n if (!productGroupFilters) {\r\n return;\r\n }\r\n\r\n const categoryOption = productGroupFilters.options.find(option => option.properties.categoryId === currentCategoryId);\r\n if (!categoryOption) {\r\n return;\r\n }\r\n if (productGroupFilters.selected.includes(categoryOption.selector)) {\r\n return;\r\n }\r\n productGroupFilters.selected.push(categoryOption.selector);\r\n },\r\n onInputChange() {\r\n const referenceElement = document.querySelector('.dealer-list-page__form-group.input-field');\r\n if (referenceElement) {\r\n const rect = referenceElement.getBoundingClientRect();\r\n const pacContainer = document.querySelector('.pac-container');\r\n\r\n if (pacContainer) {\r\n const adjustedBottom = (parseFloat(rect.bottom) + window.scrollY - 72);\r\n pacContainer.classList.add('custom-placement');\r\n document.styleSheets[0].insertRule(`\r\n .custom-placement {\r\n top: ${adjustedBottom}px !important;\r\n }\r\n `, 0);\r\n }\r\n }\r\n\r\n this.inputChanged = false;\r\n },\r\n },\r\n watch: {\r\n place: {\r\n handler(val) {\r\n if (!val || !val.geometry) {\r\n return;\r\n }\r\n this.currentPosition = {\r\n lat: val.geometry.location.lat(),\r\n lng: val.geometry.location.lng(),\r\n };\r\n this.search(this.filters, this.currentPosition);\r\n },\r\n immediate: false,\r\n },\r\n token: {\r\n handler(newVal) {\r\n if (!newVal) {\r\n return;\r\n }\r\n const query = Object.assign({}, this.$route.query);\r\n query.token = newVal;\r\n this.$router.replace({\r\n query,\r\n });\r\n },\r\n immediate: true,\r\n },\r\n },\r\n computed: {\r\n visibleFilters() {\r\n const privateMarkets = ['da-dk', 'da-no'];\r\n const filters = [];\r\n filters.push('UserType');\r\n filters.push('NCDealerCategory');\r\n if (this.market && privateMarkets.includes(this.market)) {\r\n filters.push('NCSegmentKey');\r\n }\r\n return filters;\r\n },\r\n types() {\r\n return [{\r\n alias: 'private',\r\n label: this.$store.getters[\r\n 'dictionaries/getByKey'\r\n ]('ViewElements.DealerPage.UserTypes.Private'),\r\n },\r\n {\r\n alias: 'professional',\r\n label: this.$store.getters[\r\n 'dictionaries/getByKey'\r\n ](\r\n 'ViewElements.DealerPage.UserTypes.Professional',\r\n ),\r\n },\r\n ];\r\n },\r\n getGeoLocations() {\r\n if (!this.currentBounds) {\r\n return null;\r\n }\r\n\r\n const northEast = this.currentBounds.getNorthEast();\r\n const southWest = this.currentBounds.getSouthWest();\r\n\r\n const northWestLat = northEast.lat();\r\n const northWestLng = southWest.lng();\r\n const southEastLat = southWest.lat();\r\n const southEastLng = northEast.lng();\r\n\r\n return {\r\n nwLat: northWestLat,\r\n nwLng: northWestLng,\r\n seLat: southEastLat,\r\n seLng: southEastLng,\r\n };\r\n },\r\n tabs() {\r\n return [{\r\n key: 'tab-1',\r\n name: this.$store.getters['dictionaries/getByKey']('ViewElements.DealerPage.Tabs.Physical'),\r\n icon: 'icon-map-pin',\r\n isWebshops: false,\r\n },\r\n {\r\n key: 'tab-2',\r\n name: this.$store.getters['dictionaries/getByKey']('ViewElements.DealerPage.Tabs.Webshops'),\r\n icon: 'icon-cart',\r\n isWebshops: true,\r\n },\r\n ];\r\n },\r\n icon() {\r\n if (this.activeTab === 0) {\r\n return 'icon-map-pin';\r\n }\r\n return 'shopping-cart';\r\n },\r\n showingForType() {\r\n if (!this.userType) {\r\n return '';\r\n }\r\n const key = this.showWebshops ? 'ViewElements.DealerPage.ShowingWebshopResults' : 'ViewElements.DealerPage.ShowingDealersResults';\r\n const label = this.$store.getters['dictionaries/getByKey'](key);\r\n return label.replace('{0}', this.totalResults).replace('{1}', this.userType);\r\n },\r\n filterOptions() {\r\n const mappedFilter = [{\r\n options: this.types.map(type => ({\r\n selector: type.alias,\r\n value: type.label,\r\n })),\r\n selected: [this.userType],\r\n filterType: 2,\r\n title: this.$store.getters['dictionaries/getByKey']('ViewElements.DealerPage.Select'),\r\n identifier: 'UserType',\r\n isFixed: false,\r\n properties: {\r\n type: 'category', perfionFieldName: 'UserType', nullable: true,\r\n },\r\n sortOrder: 0,\r\n isActive: true,\r\n }];\r\n if (this.filters && this.filters.filters) {\r\n this.filters.filters.forEach((x) => {\r\n const perfionName = x.properties.perfionFieldName;\r\n if (!perfionName) {\r\n mappedFilter.push(x);\r\n }\r\n\r\n const mapping = this.filterMappings ? this.filterMappings.find(f => f.perfionName === perfionName) : null;\r\n\r\n if (mapping != null) {\r\n x.title = mapping.label;\r\n }\r\n\r\n mappedFilter.push(x);\r\n });\r\n }\r\n\r\n return mappedFilter;\r\n },\r\n markers() {\r\n return this.results.map(result => ({\r\n position: {\r\n lat: result.latitude,\r\n lng: result.longitude,\r\n },\r\n title: result.name,\r\n info: {\r\n country: result.country,\r\n city: result.city,\r\n state: result.state,\r\n postalCode: result.postalCode,\r\n address: result.address,\r\n phone: result.phone,\r\n website: result.websiteUrl,\r\n id: result.id,\r\n tags: {\r\n [this.$store.getters['dictionaries/getByKey']('ViewElements.DealerPage.Tags.Private')]: result.isPrivate,\r\n [this.$store.getters['dictionaries/getByKey']('ViewElements.DealerPage.Tags.Store')]: result.isProffessional,\r\n },\r\n categories: result.categories,\r\n },\r\n\r\n }));\r\n },\r\n isPrivateUser() {\r\n if (!this.userType) {\r\n return null;\r\n }\r\n return this.userType === 'private';\r\n },\r\n },\r\n mounted() {\r\n // eslint-disable-next-line no-undef\r\n const jsonValue = document.getElementById('js-dealer-page-json');\r\n // eslint-disable-next-line no-undef\r\n const initialValues = JSON.parse(\r\n jsonValue.innerHTML,\r\n );\r\n\r\n if (!initialValues) {\r\n return;\r\n }\r\n\r\n if (initialValues.zoom) {\r\n this.initialZoom = initialValues.zoom ? Number(initialValues.zoom) : this.initialZoom;\r\n }\r\n\r\n if (initialValues.currentPosition) {\r\n this.currentPosition = {\r\n lat: Number(initialValues.currentPosition.lat),\r\n lng: Number(initialValues.currentPosition.lng),\r\n };\r\n }\r\n // this.results = initialValues.markers;\r\n this.filters = initialValues.filters;\r\n // this.totalResults = initialValues.total;\r\n this.token = this.$route.query.token || '';\r\n this.filterMappings = JSON.parse(initialValues.filterMapping);\r\n this.showWebshops = initialValues.showWebshops || false;\r\n this.zoom = initialValues.zoom ? Number(initialValues.zoom) : this.zoom;\r\n this.market = initialValues.market || this.market;\r\n\r\n this.setSelectedFilterBasedOnCategory();\r\n\r\n // Set the active tab\r\n if (this.showWebshops) {\r\n this.activeTab = 1;\r\n }\r\n\r\n if (window.innerWidth < 992) {\r\n this.showMap = false;\r\n }\r\n this.search(this.filters);\r\n },\r\n });\r\n };\r\n })();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar novicell = novicell || {}; // eslint-disable-line\r\nvar cookie = cookie || {}; // eslint-disable-line\r\n\r\nvar VueRouter = VueRouter; // eslint-disable-line\r\nvar VueGoogleMaps = VueGoogleMaps; // eslint-disable-line\r\npressalit.dealersList = pressalit.dealersList\r\n || new (function () {\r\n Vue.use(VueRouter);\r\n this.init = function () {\r\n Vue.component('dealers-list', {\r\n template: '#js-dealers-list',\r\n props: {\r\n dealers: {\r\n type: Array,\r\n default: () => [],\r\n },\r\n icon: {\r\n type: String,\r\n default: '',\r\n },\r\n isClickableHeadline: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n activeDealer: {\r\n type: Number,\r\n default: -1,\r\n },\r\n },\r\n watch: {\r\n activeDealer: {\r\n handler(newDealerId) {\r\n const list = document.getElementById('dealer-list');\r\n const child = document.getElementById(`dealer-${newDealerId}`);\r\n if (list && child) {\r\n setTimeout(() => {\r\n list.scrollTo({\r\n top: child.offsetTop,\r\n behavior: 'smooth',\r\n });\r\n }, 0);\r\n }\r\n },\r\n },\r\n },\r\n methods: {\r\n dealerClick(dealer) {\r\n if (!this.isClickableHeadline) {\r\n return;\r\n }\r\n\r\n this.$emit('dealer-click', dealer);\r\n },\r\n openAccordion(dealer) {\r\n this.$emit('update:dealer', dealer);\r\n },\r\n closeAccordion() {\r\n this.$emit('update:dealer', -1);\r\n },\r\n getDealerState(dealer) {\r\n if (dealer.info.state) {\r\n return `, ${dealer.info.state}`;\r\n }\r\n\r\n return '';\r\n },\r\n },\r\n });\r\n };\r\n })();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\npressalit.dropDownFilter = pressalit.dropDownFilter || new function () {\r\n this.init = function () {\r\n Vue.component('drop-down-filter', {\r\n template: '#js-drop-down-filter-template',\r\n store: pressalit.vuex.store,\r\n props: {\r\n filter: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n },\r\n data() {\r\n return {\r\n selected: null,\r\n };\r\n },\r\n computed: {\r\n options() {\r\n const options = [];\r\n if (this.filter.properties && this.filter.properties.allowNullable === 'true') {\r\n const dictionary = this.$store.getters['dictionaries/getByKey']('DealerList.Select');\r\n options.push({\r\n selector: null,\r\n value: dictionary.replace('{0}', this.filter.title.toLowerCase()),\r\n });\r\n }\r\n return [...options, ...this.filter.options];\r\n },\r\n },\r\n methods: {\r\n setFilter(event) {\r\n const value = event.target.value;\r\n const filter = JSON.parse(JSON.stringify(this.filter));\r\n filter.selected = [];\r\n if (value) {\r\n filter.selected.push(value);\r\n }\r\n this.$emit('update:filter', filter);\r\n },\r\n },\r\n mounted() {\r\n this.selected = this.filter.selected.length ? this.filter.selected[0] : null;\r\n },\r\n });\r\n };\r\n}();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nconst selectedAlias = 'TRADE'; // Should be changed when this is used for anything else than TRADE/DIY filter\r\npressalit.filterCheckbox = pressalit.filterCheckbox || new function () {\r\n this.init = function () {\r\n Vue.component('filter-checkbox', {\r\n props: ['filter'],\r\n template: '#js-filter-checkbox-template',\r\n data() {\r\n return {\r\n localValue: null,\r\n selectedValue: '',\r\n initialLoad: true,\r\n };\r\n },\r\n mounted() {\r\n this.selectedValue = this.filter.options.find(x => x.value === selectedAlias).selector;\r\n this.setLocalValue();\r\n this.initialLoad = false;\r\n },\r\n methods: {\r\n setLocalValue() {\r\n if (this.filter && this.filter.selected && !this.filter.selected.length) {\r\n this.localValue = false;\r\n } else if (this.filter && this.filter.options && this.filter.options.length === 2) {\r\n const isSelected = this.filter.selected.filter(selector => selector === this.selectedValue);\r\n this.localValue = !!isSelected;\r\n }\r\n },\r\n },\r\n watch: {\r\n 'filter.selected': {\r\n handler() {\r\n this.setLocalValue();\r\n },\r\n },\r\n localValue: {\r\n handler(_newValue, prevValue) {\r\n if (prevValue === null || this.initialLoad) {\r\n return;\r\n }\r\n\r\n if (this.localValue && this.filter && this.filter.options && this.filter.options.length) {\r\n this.filter.selected = [this.selectedValue];\r\n } else if (this.filter) {\r\n this.filter.selected = [];\r\n }\r\n\r\n this.$emit('update:filter', this.filter);\r\n },\r\n },\r\n },\r\n });\r\n };\r\n}();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\n\r\npressalit.footer = pressalit.footer || (new function () {\r\n this.init = function () {\r\n\r\n };\r\n}());\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\n\r\npressalit.videoPlayer = pressalit.videoPlayer || (new function () {\r\n this.init = function () {\r\n };\r\n}());\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar cookie = cookie || {}; // eslint-disable-line\r\npressalit.loginPage = pressalit.loginPage || new function () {\r\n this.init = function () {\r\n const els = document.querySelectorAll('.js-login-page');\r\n let i;\r\n if (!els) {\r\n return;\r\n }\r\n for (i = 0; i < els.length; ++i) {\r\n const el = els[i];\r\n new Vue({\r\n el,\r\n store: pressalit.vuex.store,\r\n data: {\r\n createAccountToggle: false,\r\n showCreateAccount: false,\r\n country: '',\r\n company: '',\r\n email: '',\r\n password: '',\r\n username: '',\r\n terms: false,\r\n submitting: false,\r\n error: false,\r\n errorMessage: '',\r\n success: false,\r\n loginSubmitting: false,\r\n loginError: false,\r\n loginSuccess: false,\r\n countries: [],\r\n currentCountry: {},\r\n },\r\n created() {\r\n const initialState = JSON.parse(\r\n document.getElementById('js-login-page-json')\r\n .innerHTML,\r\n );\r\n this.countries = initialState;\r\n },\r\n mounted() {\r\n const languageSegment = window.location.pathname.match('/..-../');\r\n\r\n if (languageSegment) {\r\n if (!this.countries.length) {\r\n return;\r\n }\r\n const languageFromSegment = this.countries.find(\r\n countryUrl => countryUrl.languageAbsoluteUrl.indexOf(\r\n languageSegment[0].replace(/\\//g, ''),\r\n ) > -1,\r\n );\r\n this.currentCountry = languageFromSegment || this.countries[0];\r\n }\r\n },\r\n methods: {\r\n jwtDecode(t) {\r\n const token = {};\r\n token.raw = t;\r\n token.header = JSON.parse(window.atob(t.split('.')[0]));\r\n token.payload = JSON.parse(window.atob(t.split('.')[1]));\r\n return (token);\r\n },\r\n createUser() {\r\n this.createAccountToggle = !this.createAccountToggle;\r\n this.showCreateAccount = false;\r\n },\r\n showCreateUser() {\r\n this.showCreateAccount = true;\r\n },\r\n clearData() {\r\n this.country = '';\r\n this.company = '';\r\n this.username = '';\r\n this.email = '';\r\n this.password = '';\r\n this.terms = false;\r\n },\r\n login(redirectUrl) {\r\n this.$validator.validateAll().then((result) => {\r\n if (result) {\r\n this.loginSubmitting = true;\r\n this.loginError = false;\r\n this.loginSuccess = false;\r\n const req = this.$store.dispatch('auth/login', {\r\n username: this.username,\r\n password: this.password,\r\n });\r\n req.then(() => {\r\n const trackinghash = this.jwtDecode(Cookies.get('pressalit_access_token')).payload.trackinghash;\r\n this.$store.dispatch('tracking/login', trackinghash);\r\n this.loginSuccess = true;\r\n this.loginSubmitting = false;\r\n if (redirectUrl) {\r\n window.location.href = redirectUrl;\r\n }\r\n }, () => {\r\n this.loginError = true;\r\n this.loginSubmitting = false;\r\n }, () => {\r\n this.loginSubmitting = false;\r\n });\r\n }\r\n });\r\n },\r\n submit() {\r\n this.submitting = true;\r\n this.error = false;\r\n this.errorMessage = '';\r\n this.success = false;\r\n const req = this.$store.dispatch('auth/createUser', {\r\n country: this.currentCountry.languageName,\r\n company: this.company,\r\n email: this.email,\r\n password: this.password,\r\n terms: this.terms,\r\n });\r\n req.then((data) => {\r\n this.success = true;\r\n this.submitting = false;\r\n this.$store.dispatch('tracking/createUser', data.data.memberId);\r\n setTimeout(() => {\r\n this.showCreateAccount = false;\r\n this.createAccountToggle = false;\r\n this.clearData();\r\n window.scrollTo({ top: 0, left: 0, behavior: 'smooth' });\r\n }, 5000);\r\n }, (err) => {\r\n this.error = true;\r\n this.errorMessage = err.response.data.message ? this.$store.getters[\r\n 'dictionaries/getByKey'\r\n ](err.response.data.message) : err;\r\n this.submitting = false;\r\n }, () => {\r\n this.submitting = false;\r\n });\r\n },\r\n validateBeforeSubmit() {\r\n this.$validator.validateAll().then((result) => {\r\n if (result) {\r\n this.submit();\r\n }\r\n });\r\n },\r\n },\r\n });\r\n }\r\n };\r\n}();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar VueRouter = VueRouter || {}; // eslint-disable-line\r\npressalit.listFilters = pressalit.listFilters\r\n || new (function () {\r\n this.init = function () {\r\n Vue.use(VueRouter);\r\n\r\n const router = new VueRouter({\r\n mode: 'history',\r\n });\r\n\r\n Vue.component('mobile-filter-toggle', {\r\n template: '#js-mobile-filter-toggle',\r\n store: pressalit.vuex.store,\r\n props: ['filters', 'visibleFilterIds', 'products', 'isDealerView', 'applyDictionaryKey'],\r\n router,\r\n watch: {\r\n products: {\r\n handler() {\r\n this.$store.commit('navigation/setNavigationProps', {\r\n filters: this.filters,\r\n visibleFilterIds: this.visibleFilterIds,\r\n isInOverlay: true,\r\n products: this.count,\r\n });\r\n },\r\n },\r\n },\r\n computed: {\r\n count() {\r\n return this.products !== 0 ? this.products : '';\r\n },\r\n },\r\n methods: {\r\n toggleSidebar() {\r\n this.$store.commit('navigation/setIsFullWidth', true);\r\n this.$store.commit('navigation/setComponent', 'list-filters');\r\n this.$store.commit('navigation/setNavigationProps', {\r\n filters: this.filters,\r\n visibleFilterIds: this.visibleFilterIds,\r\n isInOverlay: true,\r\n products: this.products,\r\n isDealerView: this.isDealerView,\r\n applyDictionaryKey: this.applyDictionaryKey,\r\n });\r\n this.$store.commit('navigation/setListeners', {\r\n 'update:filters': (filters) => {\r\n this.$emit('update:filters', filters);\r\n },\r\n hideModal: () => {\r\n this.$store.commit('navigation/setComponent', '');\r\n this.$store.commit('navigation/setListeners', {});\r\n this.$store.commit('navigation/setNavigationProps', {});\r\n this.$store.commit('navigation/toggleSidebar');\r\n },\r\n });\r\n this.$store.commit('navigation/toggleSidebar');\r\n },\r\n },\r\n });\r\n\r\n Vue.component('list-filters', {\r\n template: '#js-list-filters-template',\r\n props: {\r\n products: {\r\n type: String,\r\n default: '',\r\n },\r\n isInOverlay: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n filters: {\r\n type: Array,\r\n default: () => [],\r\n },\r\n visibleFilterIds: {\r\n type: Array,\r\n default: () => null,\r\n },\r\n showTags: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n applyDictionaryKey: {\r\n type: String,\r\n default: 'ViewElements.ProductList.Apply',\r\n },\r\n isDealerView: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n mounted() {\r\n this.initialFilters = [...this.filters];\r\n },\r\n data() {\r\n return {\r\n openFilters: {},\r\n initialFilters: [],\r\n };\r\n },\r\n computed: {\r\n showBackdrop() {\r\n return Object.keys(this.openFilters).some(\r\n x => !!this.openFilters[x],\r\n );\r\n },\r\n visibleFilters() {\r\n if (!this.visibleFilterIds) {\r\n return this.filters;\r\n }\r\n return this.filters.filter(x => x.properties\r\n && x.properties.perfionFieldName\r\n && this.visibleFilterIds.indexOf(x.properties.perfionFieldName) > -1);\r\n },\r\n tags() {\r\n if (!this.filters.length || !this.visibleFilterIds || this.isDealerView) {\r\n return [];\r\n }\r\n\r\n let filters = this.filters;\r\n if (this.visibleFilterIds) {\r\n filters = this.filters.filter(filter => this.visibleFilterIds.includes(filter.identifier));\r\n }\r\n\r\n // Construct the tag list based of selected filters\r\n return filters.reduce((arr, filter) => {\r\n switch (filter.filterType) {\r\n case 2:\r\n if (\r\n filter.selected\r\n && filter.selected.length\r\n ) {\r\n const tags = filter.selected\r\n .map((x) => {\r\n const option = filter.options.find(\r\n f => f.selector === x,\r\n );\r\n if (!option) {\r\n return null;\r\n }\r\n // Construct the tag entity;\r\n return {\r\n filterId: filter.filterId,\r\n label: option.properties\r\n && option.properties\r\n .customLabel\r\n ? option.properties\r\n .customLabel : option.value,\r\n selector: x,\r\n };\r\n })\r\n .filter(x => x != null)\r\n .filter((x) => {\r\n if (x.label === 'TRADE') {\r\n x.label = this.$store.getters[\r\n 'dictionaries/getByKey'\r\n ]('ViewElements.ProductList.AssortmentForInstallers');\r\n }\r\n return x;\r\n });\r\n arr = arr.concat(tags);\r\n }\r\n break;\r\n case 3:\r\n if (filter.fromValue) {\r\n arr.push({\r\n filterId: filter.filterId,\r\n label: `${filter.fromValue} mm`,\r\n selector: filter.fromValue,\r\n });\r\n }\r\n // if (filter.selected && filter.selected.length && filter.filterId !== 2) {\r\n // const tags = filter.selected.map((x) => {\r\n // const option = filter.options.find(f => f.selector === x);\r\n // if (!option) {\r\n // return null;\r\n // }\r\n // // Construct the tag entity;\r\n // return {\r\n // filterId: filter.filterId,\r\n // label: option.properties && option.properties.customLabel ? option.properties.customLabel : option.value,\r\n // selector: x,\r\n // };\r\n // }).filter(x => x != null);\r\n // arr = arr.concat(tags);\r\n // }\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n return arr;\r\n }, []);\r\n },\r\n },\r\n methods: {\r\n closeModal() {\r\n if (this.isInOverlay) {\r\n this.$emit('update:filters', this.initialFilters);\r\n this.$emit('hideModal');\r\n }\r\n },\r\n showResults() {\r\n if (this.isInOverlay) {\r\n this.$emit('hideModal');\r\n }\r\n },\r\n toggle(identifier) {\r\n this.$set(\r\n this.openFilters,\r\n identifier,\r\n !this.openFilters[identifier],\r\n );\r\n // Close all others\r\n Object.keys(this.openFilters).forEach((x) => {\r\n if (x === identifier) {\r\n return;\r\n }\r\n // Set all filters to closed\r\n this.$set(this.openFilters, x, false);\r\n });\r\n },\r\n closeAll() {\r\n this.openFilters = {};\r\n },\r\n updateFilter(newFilter, filter) {\r\n const filters = this.filters.map((x) => {\r\n if (x.filterId === filter.filterId) {\r\n x = newFilter;\r\n }\r\n return x;\r\n });\r\n this.closeAll();\r\n this.$emit('update:filters', filters);\r\n\r\n // Update the category\r\n if (\r\n newFilter\r\n && newFilter.properties\r\n && newFilter.properties.type === 'category'\r\n ) {\r\n const selected = newFilter.selected[0];\r\n if (selected != null) {\r\n const option = newFilter.options.find(\r\n x => x.selector === selected,\r\n );\r\n this.$emit('update:category', option);\r\n return;\r\n }\r\n this.$emit('update:category', null);\r\n }\r\n },\r\n removeAllFilters() {\r\n const filters = this.filters.map((x) => {\r\n switch (x.filterType) {\r\n case 2:\r\n x.selected = [];\r\n break;\r\n case 3:\r\n x.fromValue = null;\r\n x.toValue = null;\r\n\r\n break;\r\n default:\r\n break;\r\n }\r\n return x;\r\n });\r\n filters.resetAllFilters = true;\r\n this.$emit('update:filters', filters);\r\n this.$emit('update:category', null);\r\n },\r\n removeFilterValue(filterId, selector) {\r\n let updateCategory = false;\r\n const filters = this.filters.map((x) => {\r\n if (x.filterId === filterId) {\r\n switch (x.filterType) {\r\n case 2:\r\n updateCategory = x.properties\r\n && x.properties.type === 'category';\r\n // eslint-disable-next-line no-case-declarations\r\n const index = x.selected.indexOf(\r\n selector,\r\n );\r\n if (index > -1) {\r\n x.selected.splice(index, 1);\r\n }\r\n break;\r\n case 3:\r\n x.fromValue = null;\r\n x.toValue = null;\r\n\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n return x;\r\n });\r\n this.$emit('update:filters', filters);\r\n\r\n if (updateCategory) {\r\n this.$emit('update:category', null);\r\n }\r\n },\r\n mobileTagsList(filter) {\r\n return filter.options\r\n .filter(item => filter.selected && filter.selected.includes(item.selector))\r\n .map(item => item.value)\r\n .join(', ');\r\n },\r\n },\r\n });\r\n };\r\n })();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar VueRouter = VueRouter || {}; // eslint-disable-line\r\npressalit.toggleMobileFilters = pressalit.toggleMobileFilters\r\n || new function () {\r\n this.init = function () {\r\n const el = document.getElementById('js-toggle-mobile-filter');\r\n if (!el) {\r\n return;\r\n }\r\n Vue.use(VueRouter);\r\n\r\n const router = new VueRouter({\r\n mode: 'history',\r\n });\r\n\r\n new Vue({\r\n el,\r\n store: pressalit.vuex.store,\r\n router,\r\n methods: {\r\n toggleSidebar() {\r\n this.$store.commit('navigation/setIsFullWidth', true);\r\n this.$store.commit('navigation/setComponent', 'mobile-filter');\r\n this.$store.commit('navigation/toggleSidebar');\r\n },\r\n },\r\n });\r\n };\r\n }();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar novicell = novicell || {}; // eslint-disable-line\r\n\r\npressalit.modal = pressalit.modal || new function () {\r\n this.createOverlay = function (element) {\r\n novicell.overlay.create({\r\n selector: element,\r\n class: 'modal',\r\n onLoaded() {\r\n const modalClosers = document.getElementsByClassName(\r\n 'js-modal-close',\r\n );\r\n for (let i = 0; i < modalClosers.length; i++) {\r\n modalClosers[i].addEventListener('click', () => {\r\n novicell.overlay.destroy();\r\n });\r\n }\r\n },\r\n });\r\n };\r\n\r\n this.init = function () {\r\n const modalTriggers = document.getElementsByClassName(\r\n 'js-modal-trigger',\r\n );\r\n\r\n for (let i = 0; i < modalTriggers.length; i++) {\r\n modalTriggers[i].addEventListener('click', (e) => {\r\n e.preventDefault();\r\n\r\n const currentTrigger = e.target;\r\n const triggerElement = currentTrigger.getAttribute(\r\n 'data-element',\r\n );\r\n pressalit.modal.createOverlay(triggerElement);\r\n });\r\n }\r\n };\r\n}();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar novicell = novicell || {}; // eslint-disable-line\r\nvar axios = axios; // eslint-disable-line\r\n\r\nvar VueRouter = VueRouter; // eslint-disable-line\r\n\r\npressalit.orderPage = pressalit.orderPage || new function () {\r\n Vue.use(VueRouter);\r\n this.init = function () {\r\n const router = new VueRouter({\r\n mode: 'history',\r\n });\r\n const pageEl = document.getElementById('js-order-page');\r\n if (!pageEl) {\r\n return;\r\n }\r\n const store = pressalit.vuex.store;\r\n new Vue({\r\n el: pageEl,\r\n store,\r\n router,\r\n data: {\r\n order: null,\r\n loading: false,\r\n },\r\n created() {\r\n this.getOrder();\r\n },\r\n computed: {\r\n orderId() {\r\n return this.$route.query.orderid;\r\n },\r\n },\r\n methods: {\r\n getOrder() {\r\n this.loading = true;\r\n\r\n if (!this.orderId) {\r\n // eslint-disable-next-line no-console\r\n console.log('No order id');\r\n return;\r\n }\r\n axios.get(`/api/frontend/selfservice/getcustomerorder?orderNumber=${this.orderId}`)\r\n .then(({ data }) => {\r\n if (!data.isSuccess || data.error) {\r\n // eslint-disable-next-line no-console\r\n console.log('An error ocurred');\r\n }\r\n this.order = data.data;\r\n }).catch((error) => {\r\n // eslint-disable-next-line no-console\r\n console.log('An error ocurred', error);\r\n }).finally(() => {\r\n this.loading = false;\r\n });\r\n },\r\n goToProduct(url, product) {\r\n this.$store.dispatch('tracking/itemView', product);\r\n if (url) {\r\n window.location = url;\r\n }\r\n },\r\n },\r\n });\r\n };\r\n}();\r\n","\r\nvar pressalit = pressalit || {}; // eslint-disable-line\r\n\r\npressalit.navigationMessage = pressalit.navigationMessage || new function () {\r\n this.init = function () {\r\n const el = document.getElementById('js-navigation-message');\r\n if (!el) {\r\n return;\r\n }\r\n\r\n new Vue({\r\n el,\r\n store: pressalit.vuex.store,\r\n computed: {\r\n isIe() {\r\n return this.$store.getters['agent/isAgentIe'];\r\n },\r\n },\r\n });\r\n };\r\n}();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar axios = axios; // eslint-disable-line\r\n\r\npressalit.searchTrigger = pressalit.searchTrigger || (new function () {\r\n this.init = function () {\r\n Vue.component('navigation-search', {\r\n template: '#js-navigation-search',\r\n props: {\r\n quickLinks: {\r\n type: Array,\r\n default: () => [],\r\n },\r\n searchUrl: {\r\n type: String,\r\n default: '',\r\n },\r\n },\r\n data() {\r\n return {\r\n results: {},\r\n searchTerm: '',\r\n page: 1,\r\n };\r\n },\r\n computed: {\r\n searchOpen: {\r\n get() {\r\n return this.$store.state.navigation.isSearchOpen;\r\n },\r\n set(open) {\r\n this.$store.commit('navigation/toggleSearch', open);\r\n this.$store.commit('navigation/toggleOverlay', open);\r\n },\r\n },\r\n },\r\n methods: {\r\n setResults(results) {\r\n this.results = results;\r\n },\r\n submit() {\r\n this.$refs.searchInput.goToSearch();\r\n },\r\n setSearchTerm(searchTerm) {\r\n this.searchTerm = searchTerm;\r\n },\r\n setPage(page) {\r\n this.page = page;\r\n },\r\n },\r\n watch: {\r\n searchOpen: {\r\n handler(value) {\r\n if (!value) {\r\n this.searchTerm = '';\r\n }\r\n if (value) {\r\n document.getElementsByTagName('html')[0].classList.add('search-results__lock-body-scroll');\r\n } else {\r\n document.getElementsByTagName('html')[0].classList.remove('search-results__lock-body-scroll');\r\n }\r\n },\r\n },\r\n },\r\n });\r\n };\r\n}());\r\n\r\npressalit.navigation = pressalit.navigation || new function () {\r\n // Component for main navigation\r\n Vue.component('main-navigation', {\r\n template: '#js-main-navigation',\r\n store: pressalit.vuex.store,\r\n data() {\r\n return {\r\n navigationState: [],\r\n currentNav: null,\r\n prevNav: null,\r\n navigation: [],\r\n secondNavigation: [],\r\n findDealer: {},\r\n };\r\n },\r\n // options\r\n computed: {\r\n currentList() {\r\n const currentLevel = this.navigationState.length;\r\n\r\n if (!currentLevel) {\r\n return this.navigation;\r\n }\r\n return this.currentNav ? this.currentNav.children : [];\r\n },\r\n current() {\r\n return this.$store.state.languagemodal.current;\r\n },\r\n },\r\n mounted() {\r\n const nav = JSON.parse(document.getElementById('js-main-navigation-json').innerHTML);\r\n this.navigation = nav.mainNavigation;\r\n this.secondNavigation = nav.secondNavigation;\r\n this.findDealer = nav.findDealer;\r\n },\r\n methods: {\r\n selectNode(item) {\r\n this.navigationState.push(item.nodeId);\r\n this.prevNav = this.currentNav;\r\n this.currentNav = item;\r\n },\r\n goBack() {\r\n this.selectedItem = null;\r\n this.navigationState.pop();\r\n this.currentNav = this.prevNav;\r\n },\r\n open() {\r\n this.$store.commit('languagemodal/toggle');\r\n },\r\n },\r\n });\r\n this.init = function () {\r\n const navigationEl = document.getElementById('navigation');\r\n if (!navigationEl) {\r\n return;\r\n }\r\n\r\n const navigationContentEl = document.getElementById('navigation-menu-content');\r\n if (navigationContentEl) {\r\n new Vue({\r\n el: navigationContentEl,\r\n store: pressalit.vuex.store,\r\n computed: {\r\n isSidebarOpen: {\r\n get() {\r\n return this.$store.state.navigation.isSidebarOpen;\r\n },\r\n set(isOpen) {\r\n this.$store.commit('navigation/toggleSidebar', isOpen);\r\n },\r\n },\r\n isFullWidth() {\r\n return this.$store.state.navigation.isFullWidth;\r\n },\r\n navigationComponent() {\r\n return this.$store.state.navigation.component || 'main-navigation';\r\n },\r\n navigationProps() {\r\n return this.$store.state.navigation.navigationProps || {};\r\n },\r\n navigationListeners() {\r\n return this.$store.state.navigation.listeners || {};\r\n },\r\n },\r\n });\r\n }\r\n\r\n\r\n new Vue({\r\n el: navigationEl,\r\n store: pressalit.vuex.store,\r\n data: {\r\n wishlistUrl: '',\r\n },\r\n computed: {\r\n wishlistQuantity() {\r\n const quantity = this.$store.getters['wishlist/getQuantity'];\r\n return quantity;\r\n },\r\n quantity() {\r\n const quantity = this.$store.getters['basket/getQuantity'];\r\n if (quantity > 99) {\r\n return '+99';\r\n }\r\n return quantity;\r\n },\r\n isIe() {\r\n return this.$store.getters['agent/isAgentIe'];\r\n },\r\n currentList() {\r\n return [];\r\n },\r\n isSidebarOpen: {\r\n get() {\r\n return this.$store.state.navigation.isSidebarOpen;\r\n },\r\n set(isOpen) {\r\n this.$store.commit('navigation/toggleSidebar', isOpen);\r\n },\r\n },\r\n showOverlay: {\r\n get() {\r\n return this.$store.state.navigation.showOverlay;\r\n },\r\n set(show) {\r\n this.$store.commit('navigation/toggleOverlay', show);\r\n },\r\n },\r\n isLoggedIn() {\r\n return this.$store.getters['auth/isLoggedIn'];\r\n },\r\n },\r\n methods: {\r\n logout() {\r\n this.$store.dispatch('auth/logout');\r\n },\r\n openSidebar() {\r\n this.isSidebarOpen = true;\r\n this.$store.commit('navigation/setComponent', 'main-navigation');\r\n },\r\n },\r\n created() {\r\n this.$store.dispatch('wishlist/getSummaryFromCookie');\r\n this.$store.dispatch('basket/getSummaryFromCookie');\r\n\r\n const nav = JSON.parse(document.getElementById('js-main-navigation-json').innerHTML);\r\n this.wishlistUrl = nav.wishlistUrl;\r\n },\r\n });\r\n\r\n\r\n function toggleNavTop() {\r\n const navigation = document.getElementById('navigation');\r\n if (!navigation) {\r\n return;\r\n }\r\n const burgerIcon = document.getElementById('js-navigation-burger');\r\n const navigationWhite = document.getElementById('js-navigation-log-white');\r\n const navigationBlack = document.getElementById('js-navigation-log-black');\r\n const bannerMarket = document.getElementById('js-banner-market');\r\n if (window.pageYOffset <= 60 && navigation.classList.contains('transparent')) {\r\n navigation.classList.remove('navigation--solid');\r\n burgerIcon.classList.remove('burger-inner--solid');\r\n navigationWhite.classList.remove('navigation__logo--hidden');\r\n navigationBlack.classList.add('navigation__logo--hidden');\r\n } else if (window.pageYOffset >= 61 && navigation.classList.contains('transparent')) {\r\n navigation.classList.add('navigation--solid');\r\n burgerIcon.classList.add('burger-inner--solid');\r\n navigationBlack.classList.remove('navigation__logo--hidden');\r\n navigationWhite.classList.add('navigation__logo--hidden');\r\n }\r\n if (navigation && bannerMarket) {\r\n const main = document.getElementById('js-main');\r\n if (main) {\r\n main.classList.add('main--has-banner');\r\n }\r\n navigation.classList.add('navigation--banner');\r\n }\r\n }\r\n\r\n\r\n /* When the user scrolls down, hide the navbar. When the user scrolls up, show the navbar */\r\n\r\n let prevScrollpos = window.pageYOffset;\r\n window.onscroll = function () {\r\n const currentScrollPos = window.pageYOffset;\r\n const navigation = document.getElementById('navigation');\r\n const searchPageIsActive = document.getElementById('js-navigation-search');\r\n const specificationNavigation = document.querySelector('.js-specification-navigation');\r\n if (!navigation) {\r\n return;\r\n }\r\n if (currentScrollPos > 50) {\r\n if (searchPageIsActive && !searchPageIsActive.classList.contains('search-page-is-active')) {\r\n if (prevScrollpos > currentScrollPos) {\r\n navigation.classList.remove('navigation--solid--hidden');\r\n if (specificationNavigation) {\r\n specificationNavigation.classList.add('specification-navigation--push');\r\n }\r\n } else {\r\n navigation.classList.add('navigation--solid--hidden');\r\n if (specificationNavigation) {\r\n specificationNavigation.classList.remove('specification-navigation--push');\r\n }\r\n }\r\n }\r\n }\r\n toggleNavTop();\r\n prevScrollpos = currentScrollPos;\r\n };\r\n\r\n toggleNavTop();\r\n };\r\n}();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar axios = axios; // eslint-disable-line\r\nvar VueRouter = VueRouter; // eslint-disable-line\r\npressalit.productList = pressalit.productList\r\n || new function () {\r\n Vue.use(VueRouter);\r\n this.init = function () {\r\n const els = document.querySelectorAll('.js-product-list');\r\n let i;\r\n if (!els) {\r\n return;\r\n }\r\n for (i = 0; i < els.length; ++i) {\r\n const el = els[i];\r\n const router = new VueRouter({\r\n mode: 'history',\r\n });\r\n new Vue({\r\n el,\r\n router,\r\n store: pressalit.vuex.store,\r\n data: {\r\n initialCategoryState: {},\r\n visibleFilters: [],\r\n initialFilters: [],\r\n },\r\n watch: {\r\n '$route.query': {\r\n immediate: false,\r\n handler: 'onQueryChange',\r\n },\r\n filterManufacturerName: {\r\n handler() {\r\n if (this.filterManufacturerName && this.filterProductName) {\r\n const eventData = {\r\n manufacturerTitle: this.filterManufacturerName,\r\n modelTitle: this.filterProductName,\r\n };\r\n this.$store.dispatch('tracking/trackToiletSeatManufacturerSearch', eventData);\r\n }\r\n },\r\n },\r\n },\r\n computed: {\r\n showToiletFilterButtons() {\r\n return this.filters.some(filter => filter.title === 'NCPasModel' && filter.selected.length);\r\n },\r\n hasBestFit() {\r\n return this.products.some(product => product.fit === '3');\r\n },\r\n hasSecondBestFit() {\r\n return this.products.some(product => product.fit === '0');\r\n },\r\n hasThirdBestFit() {\r\n return this.products.some(product => product.fit === '1');\r\n },\r\n hideServersideRendered() {\r\n return this.$store.state.filter.hideServersideRendered;\r\n },\r\n showContentBoxes() {\r\n return !this.hideServersideRendered && this.total > 20;\r\n },\r\n count() {\r\n let count = 0;\r\n if (!this.hideServersideRendered) {\r\n count += this.initialCount;\r\n }\r\n count += this.products.length;\r\n return count;\r\n },\r\n hideLoadmore() {\r\n if (!this.count) {\r\n return true;\r\n }\r\n return this.count >= this.total;\r\n },\r\n products() {\r\n return this.$store.state.filter.products;\r\n },\r\n filters() {\r\n return this.$store.getters['filter/getFilters'];\r\n },\r\n total() {\r\n return this.$store.state.filter.total;\r\n },\r\n filterManufacturerName() {\r\n return this.$store.getters['filter/getFilterManufacturerName'];\r\n },\r\n filterProductName() {\r\n return this.$store.getters['filter/getFilterProductName'];\r\n },\r\n endpoint() {\r\n return this.$store.getters['filter/getProductEndpoint'];\r\n },\r\n page: {\r\n get() {\r\n return this.$store.state.filter.page;\r\n },\r\n set(page) {\r\n this.$store.commit('filter/setFilters', {\r\n page,\r\n });\r\n },\r\n },\r\n sorting() {\r\n return this.$store.state.filter.sorting;\r\n },\r\n initialCount() {\r\n return this.$store.state.filter.initialCount;\r\n },\r\n searching() {\r\n return this.$store.state.filter.searching;\r\n },\r\n },\r\n created() {\r\n const productListJson = document.getElementById(\r\n 'js-product-list-json',\r\n );\r\n\r\n if (productListJson) {\r\n const initialState = JSON.parse(\r\n productListJson.innerHTML,\r\n );\r\n\r\n const manufacturerFilters = initialState.manufacturerFilters || null;\r\n\r\n if (manufacturerFilters !== null) {\r\n // Check if any manufacturer filters have selected values\r\n const selectedManufacturerFilters = manufacturerFilters.filter(manufacturerFilter => manufacturerFilter.selected && manufacturerFilter.selected.length);\r\n\r\n // If they do, use the endpoint for manufacturer searches\r\n if (selectedManufacturerFilters.length) {\r\n this.$store.commit('filter/setIsManufacturerSearch', true);\r\n }\r\n }\r\n\r\n this.$store.commit('filter/setFilters', {\r\n manufacturerFilters,\r\n total: initialState.total,\r\n pageSize: initialState.pagesize,\r\n filters: initialState.filters,\r\n categoryId: initialState.categoryId,\r\n initialCount: initialState.initialCount * 1,\r\n });\r\n }\r\n\r\n const categoryJson = document.getElementById(\r\n 'js-category-json',\r\n );\r\n if (categoryJson) {\r\n const initialCategoryState = JSON.parse(\r\n categoryJson.innerHTML,\r\n );\r\n this.visibleFilters = initialCategoryState.filterIds;\r\n this.initialCategoryState = initialCategoryState;\r\n\r\n if (initialCategoryState.filterMapping) {\r\n const filterMappings = JSON.parse(initialCategoryState.filterMapping);\r\n this.$store.dispatch('filter/setMappings', {\r\n filterMappings,\r\n });\r\n }\r\n }\r\n\r\n const currentQuery = this.$route.query;\r\n\r\n this.$store.commit('filter/setFilters', {\r\n page: currentQuery.page * 1 || 1,\r\n sorting: currentQuery.sort || 'NameAscending',\r\n filterToken: currentQuery.token || null,\r\n });\r\n },\r\n methods: {\r\n scrollToProductList() {\r\n const productList = document.querySelector('.js-product-list');\r\n const productListRect = productList.getBoundingClientRect();\r\n window.scrollTo(0, (productListRect.y + window.scrollY) - 50);\r\n },\r\n objectIsEmpty(obj) {\r\n for (const prop in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, prop)) {\r\n return false;\r\n }\r\n }\r\n\r\n return JSON.stringify(obj) === JSON.stringify({});\r\n },\r\n insertManufacturerInformation(fitDescription) {\r\n return fitDescription\r\n .replace('[manufacturer]', this.filterProductName)\r\n .replace('[product]', this.filterManufacturerName);\r\n },\r\n toggleSidebar(comp) {\r\n this.$store.commit('navigation/setComponent', comp);\r\n this.$store.commit('navigation/toggleSidebar');\r\n },\r\n updateQuery() {\r\n this.$store.dispatch('filter/updateQuery', this.$router);\r\n },\r\n onQueryChange(newVal, oldVal) {\r\n // If there wasnt any filter before, or the filter wasnt the same dont search\r\n // Since the filter has been changed after an search\r\n if (this.objectIsEmpty(newVal) || (newVal.filter && !oldVal.filter) || oldVal.filter !== newVal.filter) {\r\n return;\r\n }\r\n this.search(this.filters);\r\n },\r\n loadmore() {\r\n this.page += 1;\r\n this.search(this.filters);\r\n this.updateQuery();\r\n },\r\n removeAllFilters() {\r\n const filters = this.filters.map((x) => {\r\n switch (x.filterType) {\r\n case 2:\r\n x.selected = [];\r\n break;\r\n case 3:\r\n x.fromValue = null;\r\n x.toValue = null;\r\n\r\n break;\r\n default:\r\n break;\r\n }\r\n return x;\r\n });\r\n\r\n this.$store.commit('filter/setFilterProductName', '');\r\n this.$store.commit('filter/setFilterManufacturerName', '');\r\n this.$store.commit('filter/setIsManufacturerSearch', false);\r\n\r\n filters.resetAllFilters = true;\r\n this.onFilter(filters);\r\n this.updateCategory(null);\r\n },\r\n reset() {\r\n this.$store.commit('filter/setFilters', {\r\n page: 1,\r\n initialCount: 0,\r\n products: [],\r\n });\r\n },\r\n updateSorting() {\r\n this.$store.commit('filter/hideServersideRendered');\r\n this.reset();\r\n this.updateQuery();\r\n },\r\n onFilter(filters) {\r\n if (this.removeAllFilters) {\r\n this.scrollToProductList();\r\n }\r\n if (filters.resetAllFilters && this.filterProductName) {\r\n this.removeAllFilters();\r\n return;\r\n }\r\n this.$store.commit('filter/hideServersideRendered');\r\n this.reset();\r\n this.search(filters);\r\n },\r\n updateCategory(option) {\r\n let category = {\r\n title: this.initialCategoryState.heroHeading,\r\n description: this.initialCategoryState.heroText,\r\n url: this.initialCategoryState.url,\r\n };\r\n if (option) {\r\n category = {\r\n title: option.value,\r\n description: '',\r\n url: option.properties.url,\r\n };\r\n }\r\n\r\n // Update the state\r\n const headingElement = document.querySelector(\r\n '.js-hero-heading',\r\n );\r\n const descriptionElement = document.querySelector(\r\n '.js-hero-description',\r\n );\r\n document.title = category.title || document.title;\r\n if (headingElement && category.title) {\r\n headingElement.textContent = category.title;\r\n }\r\n if (descriptionElement && category.description) {\r\n descriptionElement.textContent = category.description;\r\n }\r\n\r\n const isRelativeCategoryUrl = /^https?:\\/\\//i.test(category.url);\r\n\r\n // Strip the URL to fit into being relative\r\n const newURL = !isRelativeCategoryUrl ? category.url : new URL(category.url).pathname;\r\n\r\n if (newURL) {\r\n this.$router.replace(newURL);\r\n }\r\n },\r\n getFiltervalue(filterName, filterArray) {\r\n if (!filterArray) {\r\n return null;\r\n }\r\n\r\n const filterMatch = filterArray.filter(filterEntry => filterEntry.identifier === filterName);\r\n if (filterMatch.length < 1 || !filterMatch[0].options.length) {\r\n return null;\r\n }\r\n\r\n const selectorMatch = filterMatch[0].options.filter(option => option.selector === filterMatch[0].selected[0]);\r\n if (selectorMatch.length > 0) {\r\n return selectorMatch[0].value;\r\n }\r\n\r\n return null;\r\n },\r\n search(filters) {\r\n this.$store.dispatch('filter/search', {\r\n filters,\r\n replaceFilters: true,\r\n endpoint: this.endpoint,\r\n router: this.$router,\r\n }).then(() => {\r\n const filterProductName = this.getFiltervalue('NCPasManufacturer', filters);\r\n const filterManufacturerName = this.getFiltervalue('NCPasModel', filters);\r\n if (filterProductName && filterManufacturerName) {\r\n this.$store.commit('filter/setFilterProductName', filterProductName.trim());\r\n this.$store.commit('filter/setFilterManufacturerName', filterManufacturerName.trim());\r\n this.$store.commit('filter/setIsManufacturerSearch', true);\r\n }\r\n });\r\n },\r\n },\r\n beforeDestroy() {\r\n this.$store.commit('filter/resetFilters');\r\n this.$store.commit('filter/setProductEndpoint', '/api/catalog/search/SearchProducts');\r\n },\r\n });\r\n }\r\n };\r\n }();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar novicell = novicell || {}; // eslint-disable-line\r\n\r\npressalit.productListHighlight = pressalit.productListHighlight || (new function () {\r\n this.init = function () {\r\n const triggers = document.querySelectorAll('.js-highlight-trigger');\r\n\r\n if (!triggers) {\r\n return;\r\n }\r\n for (let i = 0; i < triggers.length; i++) {\r\n const currentTrigger = triggers[i];\r\n currentTrigger.addEventListener('click', (e) => {\r\n e.preventDefault();\r\n novicell.overlay.create({\r\n selector: currentTrigger.getAttribute('data-element'),\r\n class: 'selector-overlay',\r\n onCreate() {},\r\n onLoaded() {},\r\n onDestroy() {},\r\n });\r\n });\r\n }\r\n };\r\n}());\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar novicell = novicell || {}; // eslint-disable-line\r\nvar axios = axios; // eslint-disable-line\r\n\r\npressalit.productPage = pressalit.productPage || new function () {\r\n this.init = function () {\r\n const pageEl = document.getElementById('js-product-page');\r\n if (!pageEl) {\r\n return;\r\n }\r\n const store = pressalit.vuex.store;\r\n new Vue({\r\n el: pageEl,\r\n store,\r\n data() {\r\n return {\r\n productId: '',\r\n productLine: '',\r\n activeBasketLine: null,\r\n activeWishlistLine: null,\r\n wishlistUrl: '',\r\n punchoutShops: [],\r\n showButtonLoading: false,\r\n isLoadingPunchouts: false,\r\n erpId: '',\r\n productPrice: [],\r\n loadingData: undefined,\r\n productQuantity: 1,\r\n isLoadingAddToBasket: false,\r\n addToBasketState: 'initial',\r\n showSuccess: false,\r\n addedToBasketError: false,\r\n addedToBasket: false,\r\n };\r\n },\r\n watch: {\r\n basketLines() {\r\n this.updateActiveBasketLine();\r\n },\r\n wishlistLines() {\r\n this.updateActiveWishlistLine();\r\n },\r\n },\r\n methods: {\r\n addToBasket(productId, basketPageUrl, productCategory, productName, parentProductId) {\r\n if (this.showButtonLoading) {\r\n return;\r\n }\r\n this.addedToBasket = false;\r\n this.addedToBasketError = false;\r\n if (this.productQuantity > 999) {\r\n this.productQuantity = 999;\r\n }\r\n if (this.productQuantity < 1) {\r\n this.productQuantity = 1;\r\n }\r\n this.showButtonLoading = true;\r\n this.addToBasketState = 'loading';\r\n this.$store.dispatch('basket/addToBasket', {\r\n productId,\r\n quantity: this.productQuantity,\r\n }).then((result) => {\r\n setTimeout(() => {\r\n this.addToBasketState = 'initial';\r\n this.showButtonLoading = false;\r\n if (!result.data.result.operationCompleted) {\r\n this.addedToBasketError = true;\r\n } else {\r\n this.addedToBasket = true;\r\n this.openPowerStep(this.productQuantity, this.productPrice, basketPageUrl);\r\n const trackingData = {\r\n productId,\r\n productName,\r\n productCategory,\r\n productQuantity: this.productQuantity,\r\n parentProductId,\r\n };\r\n this.$store.dispatch('tracking/addToCart', trackingData);\r\n }\r\n }, 2000);\r\n }, () => {\r\n this.addedToBasketError = true;\r\n this.addedToBasket = false;\r\n this.addToBasketState = 'initial';\r\n this.showButtonLoading = false;\r\n }).finally(() => {\r\n setTimeout(() => {\r\n this.addedToBasket = false;\r\n }, 8000);\r\n });\r\n },\r\n openPowerStep(quantity, price, basketPageUrl) {\r\n let powerStepInstance = null;\r\n novicell.overlay.create({\r\n selector: '#js-overlay-power-step',\r\n class: 'power-step-overlay',\r\n onCreate() {\r\n },\r\n onLoaded() {\r\n powerStepInstance = new Vue({\r\n el: '#power-step',\r\n data() {\r\n return {\r\n quantity,\r\n price,\r\n basketPageUrl,\r\n };\r\n },\r\n methods: {\r\n close() {\r\n novicell.overlay.destroy();\r\n },\r\n },\r\n });\r\n },\r\n onDestroy() {\r\n if (powerStepInstance) {\r\n powerStepInstance.$destroy();\r\n }\r\n },\r\n });\r\n },\r\n updateActiveBasketLine() {\r\n if (this.basketLines.length > 0 && this.productId) {\r\n const activeLines = this.basketLines.filter(line => line.productId === this.productId);\r\n this.activeBasketLine = activeLines[0];\r\n }\r\n },\r\n updateActiveWishlistLine() {\r\n if (this.wishlistLines.length > 0 && this.productId) {\r\n const activeLines = this.wishlistLines.filter(line => line.productId === this.productId);\r\n this.activeWishlistLine = activeLines[0];\r\n }\r\n },\r\n addToWishlist(productId, productCategory, productName, parentProductId) {\r\n const trackingData = {\r\n productId,\r\n productCategory,\r\n parentProductId,\r\n productName,\r\n productQuantity: this.productQuantity,\r\n };\r\n if (this.isAddedToFavorites) {\r\n this.$store.dispatch('tracking/removeFromWishList', trackingData);\r\n this.$store.dispatch('wishlist/remove', this.productLine.id);\r\n return;\r\n }\r\n this.$store.dispatch('wishlist/add', {\r\n productId,\r\n });\r\n this.productId = productId;\r\n this.$store.dispatch('tracking/addToWishList', trackingData);\r\n },\r\n increaseQuantity() {\r\n this.$store.dispatch('wishlist/updateQuantity', {\r\n basketLineId: this.activeWishlistLine.id,\r\n quantity: this.activeWishlistLine.quantity + 1,\r\n });\r\n this.updateActiveWishlistLine();\r\n },\r\n decreaseQuantity() {\r\n if (!this.quantityDecreaseDisabled) {\r\n this.$store.dispatch('wishlist/updateQuantity', {\r\n basketLineId: this.activeWishlistLine.id,\r\n quantity: this.activeWishlistLine.quantity - 1,\r\n });\r\n this.updateActiveWishlistLine();\r\n }\r\n },\r\n changeQuantity(e) {\r\n const value = e.target.value;\r\n if (value) {\r\n this.$store.dispatch('wishlist/updateQuantity', {\r\n basketLineId: this.activeWishlistLine.id,\r\n quantity: parseInt(value, 10),\r\n });\r\n this.updateActiveWishlistLine();\r\n }\r\n },\r\n openPunchoutOverlay(selector, productData) {\r\n const loadingTimer = setTimeout(() => {\r\n this.showButtonLoading = true;\r\n }, 300);\r\n if (this.isLoadingPunchouts) {\r\n return;\r\n }\r\n this.isLoadingPunchouts = true;\r\n axios.get(`/api/frontend/webapp/GetPunchoutWebshops?productId=${productData.productId}&catalogId=${productData.catalogId}&ean=${productData.ean}`)\r\n .then((res) => {\r\n let shopsInstance = null;\r\n novicell.overlay.create({\r\n selector,\r\n class: 'selector-overlay',\r\n onLoaded() {\r\n const data = res.data.data;\r\n if (!data.hasPunchoutShops || !data.shops.length) {\r\n return;\r\n }\r\n\r\n shopsInstance = new Vue({\r\n el: '#punchout-shops',\r\n data() {\r\n return {\r\n punchoutShops: data.shops,\r\n showPunchoutShops: productData.channel === 'DIY' && data.hasPunchoutShops,\r\n showFindDealer: (productData.channel !== 'DIY') || (productData.channel === 'DIY' && !data.hasPunchoutShops),\r\n };\r\n },\r\n methods: {\r\n getDataQueryObject(image) {\r\n const query = { mode: 'crop', quality: '70', center: image.focalPoints };\r\n return JSON.stringify(query);\r\n },\r\n handleShopClick(shop, product) {\r\n store.dispatch('tracking/trackEcommerce', {\r\n affiliation: shop.name,\r\n products: [\r\n {\r\n sku: product.sku,\r\n name: product.name,\r\n category: product.category,\r\n price: 100,\r\n quantity: 1,\r\n },\r\n ],\r\n });\r\n\r\n window.open(shop.link, '_blank');\r\n },\r\n getTrackingClassName(shop) {\r\n return `ga-pp-webshop-punchout--${shop.name.toLowerCase().replace(' ', '')}`;\r\n },\r\n },\r\n });\r\n },\r\n onDestroy() {\r\n shopsInstance.$destroy();\r\n },\r\n });\r\n }).catch((error) => {\r\n // eslint-disable-next-line no-console\r\n console.log('An error ocurred', error);\r\n }).finally(() => {\r\n this.isLoadingPunchouts = false;\r\n this.showButtonLoading = false;\r\n clearTimeout(loadingTimer);\r\n });\r\n },\r\n openOverlay(selector, openImage, hAglbFile, jsonFile) {\r\n novicell.overlay.create({\r\n selector,\r\n class: 'selector-overlay__product-page',\r\n onLoaded() {\r\n pressalit.productPageSlider.init(openImage, hAglbFile, jsonFile);\r\n },\r\n });\r\n },\r\n getPrice() {\r\n if (!this.isLoggedIn) {\r\n return;\r\n }\r\n this.loadingData = true;\r\n axios.get(`/api/catalog/price/getbyerpid?erpId=${this.erpId}`)\r\n .then(({ data }) => {\r\n if (!data.isSuccess || data.error) {\r\n // eslint-disable-next-line no-console\r\n console.log('An error ocurred');\r\n }\r\n this.productPrice = data.data;\r\n }).catch((error) => {\r\n // eslint-disable-next-line no-console\r\n console.log('An error ocurred', error);\r\n }).finally(() => {\r\n this.loadingData = false;\r\n });\r\n },\r\n },\r\n computed: {\r\n basketLines() {\r\n return this.$store.getters['basket/getLines'];\r\n },\r\n wishlistLines() {\r\n return this.$store.getters['wishlist/getLines'];\r\n },\r\n isAddedToFavorites() {\r\n const activeLines = this.wishlistLines.filter(line => line.productId === this.productId);\r\n this.productLine = activeLines[0];\r\n return !!activeLines.length;\r\n },\r\n quantityDecreaseDisabled() {\r\n if (this.activeBasketLine && this.activeBasketLine.quantity === 1) {\r\n return true;\r\n }\r\n return false;\r\n },\r\n isLoggedIn() {\r\n return this.$store.getters['auth/isLoggedIn'];\r\n },\r\n },\r\n created() {\r\n this.erpId = JSON.parse(\r\n document.getElementById('js-product-page-json')\r\n .innerHTML,\r\n );\r\n this.$store.dispatch('wishlist/getWishlist');\r\n this.getPrice();\r\n\r\n const nav = JSON.parse(document.getElementById('js-main-navigation-json').innerHTML);\r\n this.wishlistUrl = nav.wishlistUrl;\r\n\r\n const result = document.getElementById('js-product-id');\r\n if (!result) {\r\n return;\r\n }\r\n this.productId = JSON.parse(result.innerHTML);\r\n },\r\n });\r\n };\r\n}();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar Flickity = Flickity; // eslint-disable-line\r\npressalit.productPageSlider = pressalit.productPageSlider || new function () {\r\n this.init = function (imageToOpen, hAglbFile, jsonFile) {\r\n const pageEls = document.querySelectorAll('#js-product-page-overlay');\r\n let a;\r\n if (!pageEls) {\r\n return;\r\n }\r\n setTimeout(() => {\r\n for (a = 0; a < pageEls.length; ++a) {\r\n const el = pageEls[a];\r\n new Vue({\r\n el,\r\n data: {\r\n activeTab: 'images',\r\n sliders: [],\r\n imageToOpen,\r\n controlFunctions: [],\r\n controlMeasurements: [],\r\n activeControlMeasurements: [],\r\n isLoading: true,\r\n },\r\n methods: {\r\n setActiveTab(tabName) {\r\n this.activeTab = tabName;\r\n this.destroySlider();\r\n if (this.activeTab === 'images') {\r\n this.initImageSlider();\r\n } else if (this.activeTab === 'video') {\r\n this.initVideoSlider();\r\n } else if (this.activeTab === '360') {\r\n this.init3603D();\r\n }\r\n },\r\n isCheckboxChecked(item) {\r\n let checked = false;\r\n if (item.invertState && item.state === 0) {\r\n checked = true;\r\n } else if (!item.invertState && item.state === 1) {\r\n checked = true;\r\n }\r\n return checked;\r\n },\r\n init3603D() {\r\n const customScript = document.createElement('script');\r\n customScript.setAttribute('src', '/dist/scripts/3d.min.js');\r\n document.head.appendChild(customScript);\r\n if (!jsonFile) {\r\n return;\r\n }\r\n window.ProductViewerSettings = {\r\n server: '',\r\n staticAssetsServer: '/3DAssets',\r\n units: 'metric',\r\n initialEffect: 'guidex',\r\n initialEffectImageURL: 'assets/images/guidex-icon.png',\r\n enableCameraPresetControls: false,\r\n enableFunctionControls: false,\r\n enableFullscreenControl: false,\r\n enableMeasurementControls: false,\r\n enableLighting: true,\r\n enablePartsControls: false,\r\n enableCameraControl: true,\r\n background: 'fff',\r\n debugMode: false,\r\n hAglbFile,\r\n jsonFile,\r\n };\r\n setTimeout(() => {\r\n document.querySelector('.productviewer-container')\r\n .addEventListener('metadataloaded', () => {\r\n this.controlFunctions = window.PressalitModelViewer.modelData.functions;\r\n this.controlMeasurements = window.PressalitModelViewer.modelData.measurements;\r\n });\r\n document.querySelector('.productviewer-container')\r\n .addEventListener('ready', () => {\r\n this.isLoading = false;\r\n });\r\n document.querySelector('.productviewer-container')\r\n .addEventListener('functionactivated', () => {\r\n this.controlFunctions = window.PressalitModelViewer.modelData.functions;\r\n });\r\n }, 0);\r\n },\r\n activateFunction(item) {\r\n window.PressalitModelViewer.activateFunction(item.name);\r\n },\r\n activateMeasurements(item) {\r\n let localBool = true;\r\n if (!this.activeControlMeasurements.includes(item.name)) {\r\n this.activeControlMeasurements.push(item.name);\r\n } else {\r\n this.activeControlMeasurements = this.activeControlMeasurements.filter(i => i !== item.name);\r\n localBool = false;\r\n }\r\n window.PressalitModelViewer.setMeasurementVisibility(item.name, localBool);\r\n },\r\n initImageSlider(slideIndex) {\r\n setTimeout(() => {\r\n const sliderRef = this.$refs.overlaySlider;\r\n if (!sliderRef) {\r\n return;\r\n }\r\n const slider = new Flickity(sliderRef, {\r\n pageDots: false,\r\n draggable: false,\r\n groupCells: '100%',\r\n contain: 1,\r\n cellAlign: 'left',\r\n imagesLoaded: true,\r\n arrowShape: {\r\n x0: 10,\r\n x1: 60,\r\n y1: 50,\r\n x2: 70,\r\n y2: 40,\r\n x3: 30,\r\n },\r\n });\r\n this.sliders.push(slider);\r\n const thumbnailRef = this.$refs.overlayThumbnails;\r\n if (!thumbnailRef) {\r\n return;\r\n }\r\n const thumbs = new Flickity(thumbnailRef, {\r\n pageDots: false,\r\n contain: true,\r\n groupCells: '20%',\r\n draggable: true,\r\n cellAlign: 'center',\r\n imagesLoaded: true,\r\n prevNextButtons: false,\r\n asNavFor: sliderRef,\r\n arrowShape: {\r\n x0: 10,\r\n x1: 60,\r\n y1: 50,\r\n x2: 70,\r\n y2: 40,\r\n x3: 30,\r\n },\r\n });\r\n this.sliders.push(thumbs);\r\n if (slideIndex) {\r\n slider.select(slideIndex);\r\n }\r\n }, 0);\r\n },\r\n initVideoSlider() {\r\n setTimeout(() => {\r\n const sliderRef = this.$refs.overlayVideoSlider;\r\n if (!sliderRef) {\r\n return;\r\n }\r\n const slider = new Flickity(sliderRef, {\r\n pageDots: false,\r\n draggable: false,\r\n groupCells: '100%',\r\n contain: 1,\r\n cellAlign: 'left',\r\n imagesLoaded: true,\r\n arrowShape: {\r\n x0: 10,\r\n x1: 60,\r\n y1: 50,\r\n x2: 70,\r\n y2: 40,\r\n x3: 30,\r\n },\r\n });\r\n this.sliders.push(slider);\r\n const thumbnailRef = this.$refs.overlayVideoThumbnails;\r\n if (!thumbnailRef) {\r\n return;\r\n }\r\n const thumbs = new Flickity(thumbnailRef, {\r\n pageDots: false,\r\n contain: true,\r\n groupCells: '20%',\r\n draggable: true,\r\n cellAlign: 'center',\r\n imagesLoaded: true,\r\n prevNextButtons: false,\r\n asNavFor: sliderRef,\r\n arrowShape: {\r\n x0: 10,\r\n x1: 60,\r\n y1: 50,\r\n x2: 70,\r\n y2: 40,\r\n x3: 30,\r\n },\r\n });\r\n this.sliders.push(thumbs);\r\n }, 0);\r\n },\r\n destroySlider() {\r\n if (!this.sliders.length) {\r\n return;\r\n }\r\n for (let i = 0; i < this.sliders.length; ++i) {\r\n const slider = this.sliders[i];\r\n if (slider) {\r\n slider.destroy();\r\n }\r\n }\r\n },\r\n },\r\n created() {\r\n let indexSlider = '';\r\n if (typeof this.imageToOpen === 'number') {\r\n indexSlider = this.imageToOpen;\r\n }\r\n if (this.imageToOpen === 'video') {\r\n this.activeTab = 'video';\r\n this.initVideoSlider();\r\n } else if (this.imageToOpen === '360') {\r\n this.activeTab = '360';\r\n this.init3603D();\r\n } else {\r\n this.initImageSlider(indexSlider);\r\n }\r\n },\r\n });\r\n }\r\n }, 0);\r\n };\r\n}();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar novicell = novicell || {}; // eslint-disable-line\r\nvar axios = axios; // eslint-disable-line\r\n\r\nvar VueRouter = VueRouter; // eslint-disable-line\r\n\r\npressalit.receiptPage = pressalit.receiptPage || new function () {\r\n Vue.use(VueRouter);\r\n this.init = function () {\r\n const router = new VueRouter({\r\n mode: 'history',\r\n });\r\n const pageEl = document.getElementById('js-page-receipt');\r\n if (!pageEl) {\r\n return;\r\n }\r\n const store = pressalit.vuex.store;\r\n new Vue({\r\n el: pageEl,\r\n store,\r\n router,\r\n data() {\r\n return {\r\n lines: [],\r\n };\r\n },\r\n created() {\r\n this.lines = JSON.parse(\r\n document.getElementById('js-reciept-page-json')\r\n .innerHTML,\r\n );\r\n this.trackPurchase();\r\n },\r\n methods: {\r\n trackPurchase() {\r\n this.$store.dispatch('tracking/trackSubmitPurchase', this.lines);\r\n },\r\n },\r\n });\r\n };\r\n}();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar Flickity = Flickity; // eslint-disable-line\r\npressalit.productRecommendation = pressalit.productRecommendation\r\n || new function () {\r\n this.init = function () {\r\n const els = document.querySelectorAll(\r\n '.js-product-recommendation-carousel',\r\n );\r\n let i;\r\n if (!els) {\r\n return;\r\n }\r\n setTimeout(() => {\r\n for (i = 0; i < els.length; ++i) {\r\n const count = els[i].getElementsByClassName('product-tile').length;\r\n\r\n new Flickity(els[i], {\r\n pageDots: false,\r\n contain: true,\r\n percentPosition: false,\r\n draggable: true,\r\n groupCells: true,\r\n cellAlign: 'left',\r\n imagesLoaded: true,\r\n arrowShape: {\r\n x0: 10,\r\n x1: 60,\r\n y1: 50,\r\n x2: 70,\r\n y2: 40,\r\n x3: 30,\r\n },\r\n on: {\r\n ready() {\r\n this.element.classList.remove('flickity-resize');\r\n this.element.classList.add('flickity-resize');\r\n\r\n if (count > 4) {\r\n this.element.classList.add('flickity--show-arrows');\r\n }\r\n },\r\n },\r\n });\r\n }\r\n }, 0);\r\n };\r\n }();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\npressalit.productTileTemplate = pressalit.productTileTemplate || new function () {\r\n this.init = function () {\r\n Vue.component('product-tile', {\r\n template: '#js-product-tile-template',\r\n props: {\r\n product: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n },\r\n computed: {\r\n bestFitDictionary() {\r\n return this.$store.getters['dictionaries/getByKey']('ViewElements.ProductList.Fits.BestFit');\r\n },\r\n secondBestFitDictionary() {\r\n return this.$store.getters['dictionaries/getByKey']('ViewElements.ProductList.Fits.SecondBestFit');\r\n },\r\n thirdBestFitDictionary() {\r\n return this.$store.getters['dictionaries/getByKey']('ViewElements.ProductList.Fits.ThirdBestFit');\r\n },\r\n },\r\n methods: {\r\n getTrackingClass(productFitId) {\r\n if (productFitId === '0') {\r\n return 'ga-pl-manufacturer-filters-result-cat0';\r\n }\r\n\r\n if (productFitId === '1') {\r\n return 'ga-pl-manufacturer-filters-result-cat1';\r\n }\r\n\r\n if (productFitId === '3') {\r\n return 'ga-pl-manufacturer-filters-result-cat3';\r\n }\r\n\r\n return '';\r\n },\r\n getProductFitClass(productFitId) {\r\n if (productFitId === '0') {\r\n return 'product-tile__fit product-tile__fit--info';\r\n }\r\n\r\n if (productFitId === '1') {\r\n return 'product-tile__fit';\r\n }\r\n\r\n if (productFitId === '3') {\r\n return 'product-tile__fit product-tile__fit--warning';\r\n }\r\n\r\n return 'product-tile__fit';\r\n },\r\n getFitText(productFitId) {\r\n if (productFitId === '0') {\r\n return this.secondBestFitDictionary;\r\n }\r\n\r\n if (productFitId === '1') {\r\n return this.thirdBestFitDictionary;\r\n }\r\n\r\n if (productFitId === '3') {\r\n return this.bestFitDictionary;\r\n }\r\n\r\n return '';\r\n },\r\n },\r\n });\r\n };\r\n}();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar axios = axios; // eslint-disable-line\r\nvar VueRouter = VueRouter; // eslint-disable-line\r\npressalit.searchResults = pressalit.searchResults || new function () {\r\n Vue.use(VueRouter);\r\n this.init = function () {\r\n const router = new VueRouter({\r\n mode: 'history',\r\n });\r\n Vue.component('search-input', {\r\n template: '#js-search-input',\r\n store: pressalit.vuex.store,\r\n props: {\r\n searchOpen: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n isFixed: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n showSearchTerm: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n totalResults: {\r\n type: String,\r\n default: '',\r\n },\r\n searchUrl: {\r\n type: String,\r\n default: '',\r\n },\r\n results: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n page: {\r\n type: Number,\r\n default: 1,\r\n },\r\n },\r\n data: () => ({\r\n searchTerm: '',\r\n searchTimeout: null,\r\n cancelSource: null,\r\n init: true,\r\n totalResultCount: 0,\r\n pageSize: 20,\r\n }),\r\n computed: {\r\n totalResultsString() {\r\n const dictionary = this.$store.getters['dictionaries/getByKey']('ViewElements.Search.TotalResults');\r\n const count = this.getTotalResultsCount();\r\n return dictionary.replace('{0}', this.searchTerm).replace('{1}', count);\r\n },\r\n },\r\n methods: {\r\n goToSearch() {\r\n let url = '';\r\n if (!this.searchTerm) {\r\n return;\r\n }\r\n if (this.page > 1) {\r\n url = `${this.searchUrl}?term=${this.searchTerm}&page=${this.page}&pageSize=20`;\r\n } else {\r\n url = `${this.searchUrl}?term=${this.searchTerm}`;\r\n }\r\n window.location.href = url;\r\n },\r\n getTotalResultsCount() {\r\n let temp = 0;\r\n const results = this.results ? this.results : null;\r\n\r\n if (results) {\r\n Object.keys(results).forEach((r) => {\r\n if (r.includes('Total')) {\r\n temp += this.results[r];\r\n }\r\n });\r\n }\r\n\r\n return temp;\r\n },\r\n getQueryParameterByName(name, url) {\r\n if (!url) {\r\n url = window.location.href;\r\n }\r\n name = name.replace(/[[\\]]/g, '\\\\$&');\r\n const regex = new RegExp(`[?&]${name}(=([^&#]*)|&|#|$)`);\r\n const results = regex.exec(url);\r\n\r\n if (!results) {\r\n return null;\r\n }\r\n if (!results[2]) {\r\n return '';\r\n }\r\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\r\n },\r\n },\r\n created() {\r\n this.$store.dispatch('dictionaries/getAll');\r\n this.searchTerm = this.getQueryParameterByName('term');\r\n this.page = this.getQueryParameterByName('page');\r\n this.$nextTick().then(() => {\r\n this.init = false;\r\n this.getTotalResultsCount();\r\n });\r\n },\r\n watch: {\r\n searchOpen: {\r\n handler(isOpen) {\r\n if (isOpen) {\r\n const iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;\r\n if (iOS) {\r\n setTimeout(() => {\r\n this.$refs.searchInput.focus();\r\n }, 50);\r\n return;\r\n }\r\n if (!iOS) {\r\n this.$nextTick(() => {\r\n const input = this.$refs.searchInput;\r\n // Needs to be wrapped inside a timeout to make the autofocus work\r\n setTimeout(() => {\r\n input.focus();\r\n }, 50);\r\n });\r\n this.$refs.searchInput.focus();\r\n return;\r\n }\r\n }\r\n this.searchTerm = '';\r\n },\r\n },\r\n searchTerm: {\r\n handler(value) {\r\n if (this.init) {\r\n return;\r\n }\r\n if (this.$route) {\r\n const query = Object.assign({}, this.$route.query);\r\n query.term = value;\r\n this.$router.replace({\r\n query,\r\n });\r\n }\r\n clearTimeout(this.searchTimeout);\r\n if (value !== '') {\r\n this.searchTimeout = setTimeout(() => {\r\n if (this.cancelSource) {\r\n this.cancelSource.cancel();\r\n }\r\n this.$emit('search', this.searchTerm);\r\n this.cancelSource = axios.CancelToken.source();\r\n axios\r\n .get(`/api/frontend/search/getAutoComplete?term=${this.searchTerm}`, {\r\n cancelToken: this.cancelSource.token,\r\n })\r\n .then((response) => {\r\n this.cancelSource = null;\r\n this.$emit('results', response.data.data);\r\n });\r\n }, 250);\r\n } else {\r\n this.$emit('results', {});\r\n }\r\n },\r\n },\r\n },\r\n });\r\n Vue.component('search-result-product', {\r\n template: '#js-search-result-product-template',\r\n props: {\r\n product: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n },\r\n computed: {\r\n productImage() {\r\n return this.product.image ? `${this.product.image.url}?width=70&height=70&quality=70&bgcolor=fff` : null;\r\n },\r\n },\r\n });\r\n Vue.component('search-result-article', {\r\n template: '#js-search-result-article-template',\r\n props: {\r\n article: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n },\r\n computed: {\r\n image() {\r\n return this.article.displayImageUrl ? `${this.article.displayImageUrl}?width=70&height=70¢er=0.5,0.5&mode=crop&quality=70` : null;\r\n },\r\n },\r\n });\r\n Vue.component('search-results', {\r\n router,\r\n template: '#js-search-results-template',\r\n props: {\r\n results: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n show: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n showNormalPage: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n quickLinks: {\r\n type: Array,\r\n default: () => [],\r\n },\r\n searchTerm: {\r\n type: String,\r\n default: '',\r\n },\r\n },\r\n data: () => ({\r\n page: 1,\r\n }),\r\n methods: {\r\n submit() {\r\n this.$emit('submit');\r\n },\r\n getQueryParameterByName(name, url) {\r\n if (!url) {\r\n url = window.location.href;\r\n }\r\n name = name.replace(/[[\\]]/g, '\\\\$&');\r\n const regex = new RegExp(`[?&]${name}(=([^&#]*)|&|#|$)`);\r\n const results = regex.exec(url);\r\n\r\n if (!results) {\r\n return null;\r\n }\r\n if (!results[2]) {\r\n return '';\r\n }\r\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\r\n },\r\n updateQuery() {\r\n if (this.showNormalPage) {\r\n const query = Object.assign({}, this.$route.query);\r\n query.term = this.searchTerm;\r\n query.page = this.page;\r\n this.$router.replace({\r\n query,\r\n });\r\n }\r\n },\r\n loadMore() {\r\n if (!this.searchTerm || this.searchTerm === '') {\r\n this.searchTerm = this.getQueryParameterByName('term');\r\n }\r\n this.page += 1;\r\n this.$emit('page', this.page);\r\n axios.get(`/api/frontend/search/GetSearchResults?term=${this.searchTerm}&page=${this.page}&pageSize=20`)\r\n .then((response) => {\r\n this.results.products = [\r\n ...this.results.products,\r\n ...response.data.products,\r\n ];\r\n this.results.contents = [\r\n ...this.results.contents,\r\n ...response.data.contents,\r\n ];\r\n });\r\n this.updateQuery();\r\n },\r\n },\r\n computed: {\r\n showResults() {\r\n if (this.showNormalPage) {\r\n return true;\r\n }\r\n if (!this.results || !this.show) {\r\n return false;\r\n }\r\n\r\n const hasResults = Object.keys(this.results).length > 0;\r\n return this.show && hasResults;\r\n },\r\n countProducts() {\r\n if (!this.results.products) {\r\n return 0;\r\n }\r\n\r\n const length = this.results.products.length;\r\n return length;\r\n },\r\n countArticles() {\r\n const contentCount = this.results.contents.length + this.results.categories.length + this.results.references.length;\r\n return contentCount;\r\n },\r\n hideLoadMore() {\r\n if (!this.results || !this.results.products) {\r\n return true;\r\n }\r\n return this.results.products.length >= this.results.productsTotal;\r\n },\r\n },\r\n });\r\n };\r\n}();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar Cookiebot = Cookiebot || {}; // eslint-disable-line\r\nvar VueRouter = VueRouter; // eslint-disable-line\r\n\r\npressalit.selfService = pressalit.selfService || (new function () {\r\n this.init = function () {\r\n Vue.use(VueRouter);\r\n const els = document.querySelectorAll('.js-self-service-customer-info');\r\n let i;\r\n if (!els) {\r\n return;\r\n }\r\n for (i = 0; i < els.length; ++i) {\r\n const el = els[i];\r\n const router = new VueRouter({\r\n mode: 'history',\r\n });\r\n new Vue({\r\n el,\r\n store: pressalit.vuex.store,\r\n router,\r\n created() {\r\n this.$store.commit('selfService/setTerm', (this.$route.query.term || ''));\r\n this.$store.commit('selfService/setFilter', (this.$route.query.filter || ''));\r\n this.setQuery();\r\n this.getCustomer();\r\n this.getOrders();\r\n },\r\n\r\n computed: {\r\n term: {\r\n set(value) {\r\n this.$store.commit('selfService/setTerm', value);\r\n },\r\n get() {\r\n return this.$store.state.selfService.term;\r\n },\r\n },\r\n filter: {\r\n set(value) {\r\n this.$store.commit('selfService/setFilter', value);\r\n },\r\n get() {\r\n return this.$store.state.selfService.filter;\r\n },\r\n },\r\n customerInfo() {\r\n return this.$store.state.selfService.customerInfo;\r\n },\r\n customerOrders() {\r\n return this.$store.state.selfService.customerOrders;\r\n },\r\n fetchingData() {\r\n return this.$store.state.selfService.fetchingData;\r\n },\r\n loadMore() {\r\n return this.$store.state.selfService.loadMore;\r\n },\r\n showLoadmore() {\r\n if (this.customerOrders && !this.customerOrders.length) {\r\n return false;\r\n }\r\n return this.$store.state.selfService.showLoadmore;\r\n },\r\n },\r\n methods: {\r\n logout() {\r\n this.$store.dispatch('auth/logout');\r\n },\r\n getCustomer() {\r\n this.$store.dispatch('selfService/getCustomerInfo');\r\n },\r\n getOrders() {\r\n this.setQuery();\r\n this.$store.commit('selfService/setFetchingData', true);\r\n this.$store.dispatch('selfService/getCustomerOrders', true);\r\n this.$store.dispatch('basket/getBasket');\r\n this.$store.commit('selfService/setPage', 1);\r\n },\r\n loadMoreOrder() {\r\n this.$store.commit('selfService/setLoadMore', true);\r\n this.$store.dispatch('selfService/getCustomerOrders', false);\r\n },\r\n setQuery() {\r\n if (this.$route.query.page) {\r\n this.$store.commit('selfService/setPage', Number(this.$route.query.page));\r\n }\r\n },\r\n clearSearch() {\r\n this.$store.commit('selfService/setTerm', '');\r\n this.$store.commit('selfService/setFilter', '');\r\n this.getOrders();\r\n },\r\n },\r\n\r\n });\r\n }\r\n };\r\n}());\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\npressalit.searchPage = pressalit.searchPage || (new function () {\r\n this.init = function () {\r\n const pageEl = document.getElementById('js-search-page');\r\n if (!pageEl) {\r\n return;\r\n }\r\n new Vue({\r\n el: pageEl,\r\n data: {\r\n results: {},\r\n },\r\n methods: {\r\n setResults(results) {\r\n this.results = results;\r\n },\r\n },\r\n created() {\r\n const result = document.getElementById('js-search-page-results');\r\n if (!result) {\r\n return;\r\n }\r\n this.results = JSON.parse(result.innerHTML);\r\n },\r\n });\r\n };\r\n}());\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\npressalit.specificationNavigation = pressalit.specificationNavigation || new function () {\r\n this.init = function () {\r\n const mainNavLinks = document.querySelectorAll('.specification-navigation__link');\r\n if (mainNavLinks.length === 0) {\r\n return;\r\n }\r\n window.addEventListener('scroll', () => {\r\n const productPageHeight = document.querySelector('#js-product-page').offsetHeight;\r\n const fromTop = (window.scrollY - productPageHeight);\r\n\r\n for (let i = 0; i < mainNavLinks.length; i++) {\r\n const link = mainNavLinks[i];\r\n const section = document.querySelector(link.hash);\r\n if (!section) {\r\n return;\r\n }\r\n if (\r\n section.offsetTop <= fromTop\r\n && section.offsetTop + section.offsetHeight > fromTop\r\n ) {\r\n link.classList.add('specification-navigation__link--active');\r\n } else {\r\n link.classList.remove('specification-navigation__link--active');\r\n }\r\n }\r\n });\r\n for (let i = 0; i < mainNavLinks.length; i++) {\r\n const link = mainNavLinks[i];\r\n link.addEventListener('click', (ev) => {\r\n const isIe = document.documentMode || /Edge/.test(navigator.userAgent);\r\n if (!isIe) {\r\n ev.preventDefault();\r\n const linkRect = document.querySelector(link.hash).getBoundingClientRect();\r\n window.scrollTo(0, (linkRect.y + window.scrollY) - 150);\r\n }\r\n });\r\n }\r\n };\r\n}();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar VueRouter = VueRouter || {}; // eslint-disable-line\r\npressalit.toiletseatFilters = pressalit.toiletseatFilters\r\n || new function () {\r\n this.init = function () {\r\n const el = document.getElementById('js-toiletseat-filter-actions');\r\n if (!el) {\r\n return;\r\n }\r\n Vue.use(VueRouter);\r\n\r\n const router = new VueRouter({\r\n mode: 'history',\r\n });\r\n\r\n new Vue({\r\n mounted() {\r\n this.$store.dispatch('dictionaries/getAll');\r\n },\r\n el,\r\n data() {\r\n return {\r\n showWebAppButton: false,\r\n };\r\n },\r\n store: pressalit.vuex.store,\r\n router,\r\n props: ['ShowWebappButton'],\r\n methods: {\r\n toggleSidebar(comp, showWebAppButton) {\r\n this.$store.commit('navigation/setNavigationProps', {\r\n showWebAppButton,\r\n });\r\n this.$store.commit('navigation/setIsFullWidth', true);\r\n this.$store.commit('navigation/setComponent', comp);\r\n this.$store.commit('navigation/toggleSidebar');\r\n },\r\n },\r\n });\r\n\r\n Vue.component('toilet-filter-options', {\r\n template: '#js-toilet-filter-options',\r\n router,\r\n store: pressalit.vuex.store,\r\n watch: {\r\n isOpen: {\r\n handler() {\r\n this.levelTwoFilter = '';\r\n },\r\n },\r\n },\r\n methods: {\r\n setLevelTwoFilter(val, className, title) {\r\n if (window.innerWidth <= 768 && val === 'findByApp') {\r\n const protocol = window.location.protocol;\r\n const hostname = window.location.hostname;\r\n\r\n window.location.href = `${protocol}//${hostname}/webapp/`;\r\n } else {\r\n this.levelTwoFilter = val;\r\n }\r\n const eventData = {\r\n overlayChoice: className,\r\n overlayTitle: title,\r\n };\r\n this.$store.dispatch('tracking/trackToiletSeatOverlay', eventData);\r\n },\r\n },\r\n computed: {\r\n isOpen() {\r\n return this.$store.state.isSidebarOpen;\r\n },\r\n navigationProps() {\r\n return this.$store.state.navigation.navigationProps || {};\r\n },\r\n options() {\r\n const options = [\r\n {\r\n title: this.$store.getters['dictionaries/getByKey']('ViewElements.ProductList.ToiletFitGuide.Manufacturer'),\r\n subText: this.$store.getters['dictionaries/getByKey']('ViewElements.ProductList.ToiletFitGuide.ManufacturerSubtitle'),\r\n iconAlias: 'toilet',\r\n filterName: 'filterManufacturer',\r\n className: 'ga-pl-manufacturer-filters-open',\r\n },\r\n {\r\n title: this.$store.getters['dictionaries/getByKey']('ViewElements.ProductList.ToiletFitGuide.Measure'),\r\n subText: this.$store.getters['dictionaries/getByKey']('ViewElements.ProductList.ToiletFitGuide.MeasureSubtitle'),\r\n iconAlias: 'toilet-measure',\r\n filterName: 'shapeFilters',\r\n className: 'ga-pl-shape-filters-open',\r\n },\r\n ];\r\n if (this.navigationProps.showWebAppButton) {\r\n options.push({\r\n title: this.$store.getters['dictionaries/getByKey']('ViewElements.ProductList.ToiletFitGuide.ScanToilet'),\r\n subText: this.$store.getters['dictionaries/getByKey']('ViewElements.ProductList.ToiletFitGuide.ScanToiletSubtitle'),\r\n iconAlias: 'qr-scan',\r\n filterName: 'findByApp',\r\n className: 'ga-pl-find-by-app-open',\r\n });\r\n }\r\n return options;\r\n },\r\n },\r\n data() {\r\n return {\r\n levelTwoFilter: '',\r\n stepNumber: 1,\r\n };\r\n },\r\n });\r\n\r\n Vue.component('step-options', {\r\n template: '#js-step-options',\r\n props: ['selectedStep'],\r\n });\r\n\r\n Vue.component('shape-filters', {\r\n template: '#js-shape-filters',\r\n router,\r\n data() {\r\n return {\r\n filterImages: [],\r\n filterOptions: [],\r\n shapeFilterEndpoint: '',\r\n };\r\n },\r\n computed: {\r\n filter2Disabled() {\r\n return !this.filterOptions[0].selected || !this.filterOptions[0].selected.length;\r\n },\r\n filter3Disabled() {\r\n return !this.filterOptions[1].selected || !this.filterOptions[1].selected.length;\r\n },\r\n filterMeasurementDisabled() {\r\n return !this.filterOptions[2].toValue || !this.filterOptions[3].toValue || !this.filterOptions[4].toValue;\r\n },\r\n valid() {\r\n return !this.filter3Disabled && !this.filter2Disabled && !this.filterMeasurementDisabled;\r\n },\r\n getMeasurementImage() {\r\n const shapeFilter = this.filterOptions[0];\r\n if (!shapeFilter || !shapeFilter.options) {\r\n return null;\r\n }\r\n\r\n let selectedShape = shapeFilter.options[0];\r\n if (shapeFilter.selected.length) {\r\n selectedShape = shapeFilter.options.find(x => x.selector === shapeFilter.selected[0]);\r\n }\r\n\r\n if (!selectedShape) {\r\n return null;\r\n }\r\n\r\n return this.getImageWithMeasurementsByName(selectedShape.value);\r\n },\r\n filterToiletShape() {\r\n return this.$store.getters['filter/getFilterToiletShape'];\r\n },\r\n filterToiletMounting() {\r\n return this.$store.getters['filter/getFilterToiletMounting'];\r\n },\r\n filterToiletMeasurement1() {\r\n return this.$store.getters['filter/getFilterToiletMeasurement1'];\r\n },\r\n filterToiletMeasurement2() {\r\n return this.$store.getters['filter/getFilterToiletMeasurement2'];\r\n },\r\n filterToiletMeasurement3() {\r\n return this.$store.getters['filter/getFilterToiletMeasurement3'];\r\n },\r\n },\r\n mounted() {\r\n const images = JSON.parse(\r\n document.getElementById(\r\n 'js-toiletseat-image-filters-json',\r\n ).innerHTML,\r\n );\r\n const options = JSON.parse(document.getElementById('js-product-list-json').innerHTML);\r\n this.filterImages = images;\r\n this.filterOptions = pressalit.filterHelpers.mergeFilters(options.shapeFilters, this.$store.state.filter.filters);\r\n this.shapeFilterEndpoint = options.endpoint;\r\n },\r\n methods: {\r\n getImageByName(name) {\r\n let image = null;\r\n if (this.filterImages && this.filterImages.length) {\r\n image = this.filterImages.find(x => (x.names && x.names.length ? x.names.includes(name) : null));\r\n }\r\n\r\n if (image) {\r\n return image.image;\r\n }\r\n return {\r\n image: null,\r\n names: [],\r\n };\r\n },\r\n getImageWithMeasurementsByName(name) {\r\n const image = this.filterImages.find(x => (x.names && x.names.length ? x.names.includes(name) : null));\r\n if (image) {\r\n return image.imageWithMeasurements;\r\n }\r\n return {\r\n image: null,\r\n names: [],\r\n };\r\n },\r\n isFilterSelected(selected, selector) {\r\n if (!selected || !selected.length) {\r\n return false;\r\n }\r\n return selected.indexOf(selector) > -1;\r\n },\r\n getFiltervalue(filterName, filterArray) {\r\n if (!filterArray) {\r\n return null;\r\n }\r\n const filterMatch = filterArray.filter(filterEntry => filterEntry.identifier === filterName);\r\n if (filterName === 'NCPasEMes') {\r\n return filterMatch[0].fromValue;\r\n }\r\n if (filterName === 'NCPasAMes') {\r\n return filterMatch[0].fromValue;\r\n }\r\n if (filterName === 'NCPasBMes') {\r\n return filterMatch[0].fromValue;\r\n }\r\n if (filterMatch.length < 1 || !filterMatch[0].options.length) {\r\n return null;\r\n }\r\n\r\n const selectorMatch = filterMatch[0].options.filter(option => option.selector === filterMatch[0].selected[0]);\r\n if (selectorMatch.length > 0) {\r\n return selectorMatch[0].value;\r\n }\r\n\r\n return null;\r\n },\r\n selectFilter(selector) {\r\n const filterIndex = this.filterOptions.findIndex(\r\n x => x.options.findIndex(\r\n y => y.selector === selector,\r\n ) !== -1,\r\n );\r\n if (filterIndex !== -1) {\r\n this.filterOptions[filterIndex].selected = [];\r\n this.filterOptions[filterIndex].selected.push(\r\n selector,\r\n );\r\n }\r\n this.$store.dispatch('filter/searchInFilters', {\r\n filters: this.filterOptions,\r\n endpoint: this.shapeFilterEndpoint,\r\n }).then((data) => {\r\n this.filterOptions = data.filterOptions.options.filters;\r\n const filterToiletShape = this.getFiltervalue('ProductPasSeatFormDesc', this.filterOptions);\r\n const filterToiletMounting = this.getFiltervalue('ProductHingeModelMountDesc', this.filterOptions);\r\n if (filterToiletShape) {\r\n this.$store.commit('filter/setFilterToiletShape', filterToiletShape.trim());\r\n }\r\n this.$store.commit('filter/setFilterToiletMounting', filterToiletMounting ? filterToiletMounting.trim() : null);\r\n });\r\n },\r\n cancel() {\r\n this.$store.commit('navigation/toggleSidebar', false);\r\n },\r\n search() {\r\n const toiletMeasurement1 = this.getFiltervalue('NCPasEMes', this.filterOptions);\r\n const toiletMeasurement2 = this.getFiltervalue('NCPasBMes', this.filterOptions);\r\n const toiletMeasurement3 = this.getFiltervalue('NCPasAMes', this.filterOptions);\r\n this.$store.commit('filter/setFilterToiletMeasurement1', toiletMeasurement1);\r\n this.$store.commit('filter/setFilterToiletMeasurement2', toiletMeasurement2);\r\n this.$store.commit('filter/setFilterToiletMeasurement3', toiletMeasurement3);\r\n this.$store.commit('filter/setFilters', {\r\n page: 1,\r\n initialCount: 0,\r\n products: [],\r\n });\r\n\r\n // Get the filters from the product list, since its needed for making the correct request\r\n const listFilters = JSON.parse(JSON.stringify(this.$store.state.filter.filters));\r\n\r\n const blacklistedFilters = ['NCPasManufacturer', 'NCPasModel'];\r\n const filters = listFilters.map((x) => {\r\n // Skip the channel filter\r\n if (x.identifier === 'NCChannel') {\r\n return x;\r\n }\r\n const current = this.filterOptions.filter(f => !blacklistedFilters.includes(f.identifier)).find(f => f.filterId === x.filterId);\r\n switch (x.filterType) {\r\n case 2:\r\n x.selected = current ? current.selected : [];\r\n break;\r\n case 3:\r\n x.fromValue = current ? current.fromValue : null;\r\n x.toValue = current ? current.toValue : null;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n return x;\r\n });\r\n\r\n this.$store.commit('filter/setIsManufacturerSearch', false);\r\n this.$store.commit('filter/setFilterProductName', null);\r\n this.$store.commit('filter/setFilterManufacturerName', null);\r\n\r\n this.$store\r\n .dispatch('filter/search', {\r\n filters,\r\n endpoint: '/api/catalog/search/SearchProducts',\r\n router: this.$router,\r\n replaceFilters: true,\r\n hideServersideRendered: true,\r\n })\r\n .then(() => {\r\n const eventData = {\r\n toiletShape: this.filterToiletShape,\r\n toiletMounting: this.filterToiletMounting,\r\n toiletMeasurement1: this.filterToiletMeasurement1,\r\n toiletMeasurement2: this.filterToiletMeasurement2,\r\n toiletMeasurement3: this.filterToiletMeasurement3,\r\n };\r\n this.$store.dispatch('tracking/trackToiletSeatShapeSearch', eventData);\r\n this.$store.commit(\r\n 'navigation/toggleSidebar',\r\n false,\r\n );\r\n });\r\n },\r\n },\r\n filters: {\r\n AndReplacer(value) {\r\n let output = value;\r\n if (value.includes(';')) {\r\n output = value.replace(';', ' & ');\r\n }\r\n\r\n return output;\r\n },\r\n },\r\n });\r\n\r\n Vue.component('manufacturer-filters', {\r\n template: '#js-filter-manufacturer',\r\n router,\r\n data() {\r\n return {\r\n filterOptions: [],\r\n };\r\n },\r\n computed: {\r\n filter2Disabled() {\r\n return !this.filterOptions[0].selected.length;\r\n },\r\n filter3Disabled() {\r\n return !this.filterOptions[1].selected.length;\r\n },\r\n valid() {\r\n return !this.filter3Disabled;\r\n },\r\n endpoint() {\r\n return this.$store.getters['filter/getProductEndpoint'];\r\n },\r\n },\r\n mounted() {\r\n const options = JSON.parse(\r\n document.getElementById('js-product-list-json')\r\n .innerHTML,\r\n );\r\n this.filterOptions = options.manufacturerFilters;\r\n this.initialEndpoint = '/api/catalog/search/SearchProducts';\r\n },\r\n methods: {\r\n scrollToProductList() {\r\n const productList = document.querySelector('.js-product-list');\r\n const productListRect = productList.getBoundingClientRect();\r\n window.scrollTo(0, (productListRect.y + window.scrollY) - 50);\r\n },\r\n getFiltervalue(filterName, filterArray) {\r\n if (!filterArray) {\r\n return null;\r\n }\r\n\r\n const filterMatch = filterArray.filter(filterEntry => filterEntry.identifier === filterName);\r\n if (filterMatch.length < 1 || !filterMatch[0].options.length) {\r\n return null;\r\n }\r\n\r\n const selectorMatch = filterMatch[0].options.filter(option => option.selector === filterMatch[0].selected[0]);\r\n if (selectorMatch.length > 0) {\r\n return selectorMatch[0].value;\r\n }\r\n\r\n return null;\r\n },\r\n selectFilter(event) {\r\n const selector = event.target.value;\r\n\r\n const filterIndex = this.filterOptions.findIndex(\r\n x => x.options.findIndex(\r\n y => y.selector === selector,\r\n ) !== -1,\r\n );\r\n if (filterIndex !== -1) {\r\n this.filterOptions[filterIndex].selected = [];\r\n this.filterOptions[filterIndex].selected.push(\r\n selector,\r\n );\r\n }\r\n\r\n // Add the channel filter to the search\r\n const listFilters = JSON.parse(JSON.stringify(this.$store.state.filter.filters));\r\n const channelFilter = listFilters.find(f => f.identifier === 'NCChannel');\r\n\r\n const filters = channelFilter ? [...this.filterOptions, channelFilter] : this.filterOptions;\r\n\r\n this.$store.dispatch('filter/searchInFilters', {\r\n filters,\r\n endpoint: this.initialEndpoint,\r\n }).then((data) => {\r\n this.filterOptions = data.filterOptions.options.filters.filter(f => f.identifier !== 'NCChannel');\r\n });\r\n },\r\n isFilterSelected(filter, name) {\r\n if (this[name]) {\r\n return this[name].value === filter.value;\r\n }\r\n\r\n return false;\r\n },\r\n cancel() {\r\n this.$store.commit('navigation/toggleSidebar', false);\r\n },\r\n search() {\r\n this.$store.commit('filter/setFilters', {\r\n page: 1,\r\n initialCount: 0,\r\n products: [],\r\n });\r\n\r\n // Get the filters from the product list, since its needed for making the correct request\r\n const listFilters = JSON.parse(JSON.stringify(this.$store.state.filter.filters));\r\n const blacklistedFilters = ['NCPasAMes', 'NCPasBMes', 'NCPasEMes', 'ProductPasSeatFormDesc', 'ProductHingeModelMountDesc'];\r\n const filters = listFilters.map((x) => {\r\n // Skip the channel filter\r\n if (x.identifier === 'NCChannel') {\r\n return x;\r\n }\r\n const current = this.filterOptions.find(f => f.filterId === x.filterId);\r\n switch (x.filterType) {\r\n case 2:\r\n x.selected = current && !blacklistedFilters.includes(current.identifier) ? current.selected : [];\r\n break;\r\n case 3:\r\n x.fromValue = current && !blacklistedFilters.includes(current.identifier) ? current.fromValue : null;\r\n x.toValue = current && !blacklistedFilters.includes(current.identifier) ? current.toValue : null;\r\n break;\r\n default:\r\n break;\r\n }\r\n return x;\r\n });\r\n\r\n this.$store\r\n .dispatch('filter/search', {\r\n filters,\r\n endpoint: '/api/catalog/search/SearchProductsByManufacturer',\r\n router: this.$router,\r\n replaceFilters: true,\r\n hideServersideRendered: true,\r\n })\r\n .then(() => {\r\n const filterProductName = this.getFiltervalue('NCPasManufacturer', this.filterOptions);\r\n const filterManufacturerName = this.getFiltervalue('NCPasModel', this.filterOptions);\r\n if (filterProductName && filterManufacturerName) {\r\n this.$store.commit('filter/setFilterProductName', filterProductName.trim());\r\n this.$store.commit('filter/setFilterManufacturerName', filterManufacturerName.trim());\r\n this.$store.commit('filter/setIsManufacturerSearch', true);\r\n }\r\n this.$store.commit(\r\n 'navigation/toggleSidebar',\r\n false,\r\n );\r\n this.scrollToProductList();\r\n });\r\n },\r\n },\r\n filters: {\r\n AndReplacer(value) {\r\n let output = value;\r\n if (value.includes(';')) {\r\n output = value.replace(';', ' & ');\r\n }\r\n\r\n return output;\r\n },\r\n },\r\n });\r\n\r\n Vue.component('find-by-app', {\r\n template: '#js-find-by-app',\r\n });\r\n };\r\n }();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar Flickity = Flickity; // eslint-disable-line\r\npressalit.testimonialList = pressalit.testimonialList || (new function () {\r\n this.init = function () {\r\n const els = document.querySelectorAll('.js-testimonial-list-carousel');\r\n if (!els || !els.length) {\r\n return;\r\n }\r\n setTimeout(() => {\r\n for (let i = 0; i < els.length; i++) {\r\n new Flickity(els[i], {\r\n pageDots: false,\r\n freeScroll: false,\r\n draggable: false,\r\n lazyLoad: true,\r\n imagesLoaded: true,\r\n arrowShape: {\r\n x0: 10,\r\n x1: 60,\r\n y1: 50,\r\n x2: 70,\r\n y2: 45,\r\n x3: 25,\r\n },\r\n });\r\n }\r\n }, 0);\r\n };\r\n}());\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\nvar Cookiebot = Cookiebot || {}; // eslint-disable-line\r\npressalit.videoGrid = pressalit.videoGrid || (new function () {\r\n this.init = function () {\r\n const els = document.querySelectorAll('.js-video-grid');\r\n let i;\r\n if (!els) {\r\n return;\r\n }\r\n for (i = 0; i < els.length; ++i) {\r\n const el = els[i];\r\n new Vue({\r\n el,\r\n props: {\r\n showVideo: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n cookiesAccepted: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n data: {},\r\n created() {\r\n this.checkCookies();\r\n },\r\n methods: {\r\n playVideo() {\r\n if (this.cookiesAccepted) {\r\n this.toggleVideo();\r\n } else {\r\n Cookiebot.renew();\r\n this.checkCookies(true);\r\n }\r\n },\r\n toggleVideo() {\r\n this.showVideo = !this.showVideo;\r\n },\r\n checkCookies(loadVideo) {\r\n window.addEventListener('CookiebotOnAccept', () => {\r\n if (Cookiebot.consent.marketing && Cookiebot.consent.preferences && Cookiebot.consent.statistics) {\r\n this.cookiesAccepted = true;\r\n if (loadVideo) {\r\n this.toggleVideo();\r\n }\r\n }\r\n }, false);\r\n },\r\n },\r\n });\r\n }\r\n };\r\n}());\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\n\r\npressalit.wishlist = pressalit.wishlist || new function () {\r\n this.init = function () {\r\n this.initComponents();\r\n\r\n\r\n const el = document.getElementById('js-wishlist-page');\r\n if (!el) {\r\n return;\r\n }\r\n new Vue({\r\n el,\r\n store: pressalit.vuex.store,\r\n computed: {\r\n isLoading() {\r\n return this.$store.getters['wishlist/isLoading'];\r\n },\r\n lines() {\r\n const lines = this.$store.getters['wishlist/getLines'];\r\n this.$store.dispatch('tracking/trackViewWishList', lines);\r\n return lines;\r\n },\r\n },\r\n created() {\r\n this.$store.dispatch('wishlist/getWishlist');\r\n const wishlistJson = document.getElementById('js-wishlist-json');\r\n if (wishlistJson) {\r\n const state = JSON.parse(\r\n wishlistJson.innerHTML,\r\n );\r\n this.$store.commit('wishlist/setSiteNodeId', state.siteNodeId);\r\n this.$store.commit('wishlist/setCulture', state.culture);\r\n }\r\n },\r\n methods: {\r\n goToPreviousPage() {\r\n window.history.back();\r\n },\r\n print() {\r\n this.$store.commit('print/printWishlist');\r\n setTimeout(() => {\r\n window.print();\r\n }, 200);\r\n },\r\n sendToRecipient() {\r\n this.$store.commit('navigation/toggleSidebar', true);\r\n this.$store.commit('navigation/setComponent', 'send-wishlist-to-recipient');\r\n },\r\n sendToPressalit() {\r\n this.$store.commit('navigation/toggleSidebar', true);\r\n this.$store.commit('navigation/setComponent', 'send-wishlist-to-pressalit');\r\n },\r\n },\r\n });\r\n };\r\n\r\n // Components only used on the wishlist page\r\n this.initComponents = function () {\r\n Vue.component('send-wishlist-to-pressalit', {\r\n template: '#js-send-wishlist-to-pressalit',\r\n data() {\r\n return {\r\n sender: {\r\n name: '',\r\n postalCode: '',\r\n email: '',\r\n phone: '',\r\n company: '',\r\n },\r\n comment: '',\r\n error: false,\r\n success: false,\r\n sending: false,\r\n };\r\n },\r\n computed: {\r\n culture() {\r\n return this.$store.getters['wishlist/getCulture'];\r\n },\r\n siteNodeId() {\r\n return this.$store.getters['wishlist/getSiteNodeId'];\r\n },\r\n },\r\n methods: {\r\n send() {\r\n this.sending = true;\r\n const req = axios.post('/api/webshop/custombasket/SendBasketToPressalit', {\r\n senderName: this.sender.name,\r\n senderEmail: this.sender.email,\r\n senderPhone: this.sender.phone,\r\n senderCompany: this.sender.company,\r\n senderPostalCode: this.sender.postalCode,\r\n comment: this.comment,\r\n siteNodeId: this.siteNodeId,\r\n culture: this.culture,\r\n });\r\n\r\n req.then(\r\n ({\r\n data,\r\n }) => {\r\n this.sending = false;\r\n if (data.isSuccess && data.operationCompleted) {\r\n this.success = true;\r\n this.error = false;\r\n return;\r\n }\r\n this.success = false;\r\n this.error = true;\r\n },\r\n () => {\r\n this.success = false;\r\n this.sending = false;\r\n this.error = true;\r\n },\r\n );\r\n },\r\n },\r\n });\r\n\r\n Vue.component('send-wishlist-to-recipient', {\r\n template: '#js-send-wishlist-to-recipient',\r\n data() {\r\n return {\r\n sender: {\r\n name: '',\r\n email: '',\r\n },\r\n recipient: {\r\n name: '',\r\n email: '',\r\n },\r\n comment: '',\r\n error: false,\r\n success: false,\r\n sending: false,\r\n };\r\n },\r\n computed: {\r\n culture() {\r\n return this.$store.getters['wishlist/getCulture'];\r\n },\r\n siteNodeId() {\r\n return this.$store.getters['wishlist/getSiteNodeId'];\r\n },\r\n },\r\n methods: {\r\n send() {\r\n const req = axios.post('/api/webshop/custombasket/SendBasketToFriend', {\r\n senderName: this.sender.name,\r\n senderEmail: this.sender.email,\r\n recipientName: this.recipient.name,\r\n recipientEmail: this.recipient.email,\r\n comment: this.comment,\r\n siteNodeId: this.siteNodeId,\r\n culture: this.culture,\r\n });\r\n // Handle the promise\r\n req.then(\r\n ({\r\n data,\r\n }) => {\r\n this.sending = false;\r\n if (data.isSuccess && data.operationCompleted) {\r\n this.success = true;\r\n this.error = false;\r\n return;\r\n }\r\n this.success = false;\r\n this.error = true;\r\n },\r\n () => {\r\n this.success = false;\r\n this.sending = false;\r\n this.error = true;\r\n },\r\n );\r\n },\r\n },\r\n });\r\n };\r\n}();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\npressalit.cookieService = pressalit.cookieService || new function () {\r\n const getCookie = function (key) {\r\n const name = `${key}=`;\r\n const decodedCookie = decodeURIComponent(document.cookie);\r\n const ca = decodedCookie.split(';');\r\n for (let i = 0; i < ca.length; i++) {\r\n let c = ca[i];\r\n while (c.charAt(0) === ' ') {\r\n c = c.substring(1);\r\n }\r\n if (c.indexOf(name) === 0) {\r\n return c.substring(name.length, c.length);\r\n }\r\n }\r\n return '';\r\n };\r\n\r\n const setCookie = function (key, value, days = null) {\r\n let expires = null;\r\n if (days) {\r\n const date = new Date();\r\n date.setTime(date.getTime() + (days * 60 * 60 * 1000 * 24));\r\n expires = `; expires=${date.toUTCString()}`;\r\n }\r\n const path = '/';\r\n document.cookie = `${key} = ${value || ''} ${expires}; path=${path}`;\r\n };\r\n\r\n const removeCookie = function (key) {\r\n document.cookie = `${key}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`;\r\n };\r\n\r\n return {\r\n getCookie,\r\n setCookie,\r\n removeCookie,\r\n };\r\n}();\r\n","var pressalit = pressalit || {}; // eslint-disable-line\r\npressalit.navigationService = pressalit.navigationService || new function () {\r\n let toggleSidebar;\r\n\r\n const toggleBackdrop = function (sidebarId) {\r\n const menuOverlay = document.getElementById('js-menu-overlay');\r\n let toggle;\r\n const _listener = function () {\r\n toggle(sidebarId);\r\n };\r\n\r\n toggle = function () {\r\n toggleSidebar(sidebarId);\r\n if (menuOverlay.classList.contains('active')) {\r\n menuOverlay.classList.remove('active');\r\n menuOverlay.removeEventListener('click', _listener, true);\r\n return;\r\n }\r\n menuOverlay.classList.add('active');\r\n menuOverlay.addEventListener('click', _listener, true);\r\n };\r\n\r\n toggle();\r\n };\r\n\r\n toggleSidebar = function (id) {\r\n const el = document.getElementById(id);\r\n\r\n if (!el) {\r\n return;\r\n }\r\n\r\n if (el.classList && el.classList.contains('active')) {\r\n el.classList.remove('active');\r\n } else if (el.classList) {\r\n el.classList.add('active');\r\n }\r\n };\r\n\r\n return {\r\n toggleBackdrop,\r\n toggleSidebar,\r\n };\r\n}();\r\n","/*\r\n * Novicell master\r\n * Use this file to call functions in other files, on document ready, window.resize etc.\r\n */\r\n\r\nvar novicell = novicell || {}; // eslint-disable-line\r\nvar pressalit = pressalit || {}; // eslint-disable-line\r\nvar lazySizes = lazySizes || {}; // eslint-disable-line\r\n\r\nVue.use(VeeValidate, { classes: true, locale: document.documentElement.lang });\r\n// Init Vuex store\r\npressalit.vuex.init();\r\n// Document ready\r\npressalit.multiFilter.init();\r\npressalit.basketline.init();\r\npressalit.toiletseatFilters.init();\r\npressalit.dealerTile.init();\r\npressalit.measurementInput.init();\r\npressalit.listFilters.init();\r\n\r\ndocument.addEventListener('DOMContentLoaded', () => {\r\n pressalit.navigationMessage.init();\r\n pressalit.loader.init();\r\n pressalit.videoPlayer.init();\r\n pressalit.googleMapsAutocomplete.init();\r\n pressalit.filterCheckbox.init();\r\n pressalit.dealersList.init();\r\n pressalit.googleMaps.init();\r\n pressalit.dealerListPage.init();\r\n pressalit.dropDownFilter.init();\r\n pressalit.searchResults.init();\r\n pressalit.modal.init();\r\n pressalit.articleSlider.init();\r\n pressalit.testimonialList.init();\r\n pressalit.productRecommendation.init();\r\n pressalit.searchTrigger.init();\r\n pressalit.languageModal.init();\r\n pressalit.specificationNavigation.init();\r\n pressalit.articleTile.init();\r\n pressalit.blogPostTile.init();\r\n pressalit.collectionProduct.init();\r\n pressalit.productList.init();\r\n pressalit.searchPage.init();\r\n pressalit.videoGrid.init();\r\n pressalit.productPage.init();\r\n pressalit.dropdownElement.init();\r\n pressalit.productTileTemplate.init();\r\n pressalit.articleList.init();\r\n pressalit.wishlist.init();\r\n pressalit.productListHighlight.init();\r\n pressalit.navigation.init();\r\n pressalit.cameraPage.init();\r\n pressalit.footer.init();\r\n pressalit.selfService.init();\r\n pressalit.loginPage.init();\r\n pressalit.orderPage.init();\r\n pressalit.basketPage.init();\r\n pressalit.checkoutPage.init();\r\n pressalit.receiptPage.init();\r\n lazySizes.init();\r\n // pressalit.cookieService.init();\r\n\r\n setTimeout(() => {\r\n // SetTimeout to fix latency with loaded elements in e.g. Vue components\r\n svg4everybody(); // Fix SVG spritemap in IE/Edge\r\n }, 100);\r\n\r\n // eslint-disable-next-line no-undef\r\n Vue.use(VTooltip);\r\n});\r\n\r\n\r\n(function () {\r\n const anchors = document.querySelectorAll('[data-anchor]');\r\n\r\n for (let i = 0; i < anchors.length; i += 1) {\r\n const item = anchors[i];\r\n\r\n item.addEventListener('click', (event) => {\r\n event.preventDefault();\r\n const target = item.getAttribute('data-anchor');\r\n const targetNode = document.querySelector(target);\r\n\r\n if (targetNode) {\r\n window.history.pushState({}, '', target);\r\n targetNode.scrollIntoView({ behavior: 'smooth' });\r\n }\r\n });\r\n }\r\n\r\n document.addEventListener('DOMContentLoaded', () => {\r\n const identifier = window.location.hash;\r\n\r\n if (identifier) {\r\n const item = document.querySelector(identifier);\r\n\r\n if (item) {\r\n setTimeout(() => {\r\n item.scrollIntoView({ behavior: 'smooth' });\r\n }, 200);\r\n }\r\n }\r\n });\r\n}());\r\n"]}