{"version":3,"sources":["webpack:///./js/react/components/comparison/ComparisonContext.jsx","webpack:///./js/react/components/general/Loader.jsx","webpack:///./js/react/components/icons/IconChevron.jsx","webpack:///./js/react/components/icons/IconCompare.jsx","webpack:///./js/react/components/product-listing/redux/actioncreators/api.js","webpack:///./js/react/components/icons/IconSelected.jsx","webpack:///./js/react/components/product-listing/components/ProductCard.jsx","webpack:///./icons/icon-selected.svg","webpack:///./icons/icon-compare.svg","webpack:///./js/react/hooks/useScroller.js","webpack:///./js/react/components/product-listing/redux/actioncreators/routes.js","webpack:///./js/react/components/product-listing/redux/actioncreators/filters.js","webpack:///./js/react/components/product-listing/components/ProductListWithCategories.jsx","webpack:///./js/react/components/product-listing/enums/filter-types.js","webpack:///./js/react/components/product-listing/components/filters/Dropdown.jsx","webpack:///./js/react/components/product-listing/components/filters/DropdownSingle.jsx","webpack:///./js/react/components/product-listing/components/filters/SplitDropdown.jsx","webpack:///./js/react/components/product-listing/components/mobile/MobileDropdown.jsx","webpack:///./js/react/components/product-listing/components/mobile/MobileNavToggle.jsx","webpack:///./js/react/components/product-listing/components/ProductHeader.jsx","webpack:///./js/react/components/product-listing/components/mobile/MobileLevel.jsx","webpack:///./js/react/components/product-listing/components/mobile/MobileCategory.jsx","webpack:///./js/react/components/product-listing/components/mobile/MobilePopup.jsx","webpack:///./js/react/components/general/Sticky.jsx","webpack:///./js/react/components/product-listing/components/ProductListWithCategoriesNav.jsx","webpack:///./js/react/components/product-listing/components/promo/ListingPromoCard.tsx","webpack:///./js/react/components/product-listing/components/ProductList.jsx","webpack:///./js/react/components/product-listing/redux/actioncreators/products.js","webpack:///./js/services/ComparisonService.js","webpack:///./js/react/hooks/useBodyScrollLock.js","webpack:///./js/react/hooks/useGesture.js","webpack:///./js/react/components/comparison/ComparisonBar.jsx","webpack:///./js/react/components/comparison/ComparisonVariantSelector.jsx","webpack:///./js/react/components/comparison/ComparisonTable.jsx","webpack:///./js/react/components/comparison/ComparisonOverlay.jsx","webpack:///./js/react/components/product-listing/roots/containers/ProductListContainer.jsx","webpack:///./js/react/hooks/useWindowSize.js","webpack:///./js/react/hooks/useMedia.jsx","webpack:///./icons/icon-chevron.svg"],"names":["ComparisonContext","React","createContext","ComparisonProvider","props","_this","_classCallCheck","this","_defineProperty","_assertThisInitialized","_possibleConstructorReturn","_getPrototypeOf","call","setState","selected","setComparisonData","id","newSelected","state","includes","concat","_toConsumableArray","slice","indexOf","getComparisonData","Component","_this$props","children","comparison","enabled","clearSelected","setSelected","react__WEBPACK_IMPORTED_MODULE_0___default","a","createElement","Provider","value","propTypes","PropTypes","bool","isRequired","node","withComparison","WrappedComponent","_class","_temp","_Component2","WithComparison","apply","arguments","_inherits","_createClass","key","_this2","Consumer","_extends","displayName","name","getDisplayName","useComparison","useContext","json","localStorage","getItem","JSON","parse","Array","isArray","err","console","warn","stringify","setItem","react__WEBPACK_IMPORTED_MODULE_0__","__webpack_require__","n","Loader","className","_svg_react_loader_icons_icon_chevron_svg__WEBPACK_IMPORTED_MODULE_0__","_svg_react_loader_icons_icon_chevron_svg__WEBPACK_IMPORTED_MODULE_0___default","IconChevron","_svg_react_loader_icons_icon_compare_svg__WEBPACK_IMPORTED_MODULE_0__","_svg_react_loader_icons_icon_compare_svg__WEBPACK_IMPORTED_MODULE_0___default","IconCompare","get","url","params","type","successType","errorType","dispatch","undefined","querystring","_objectSpread","fetch","getRequestSettings","then","res","ok","Error","statusText","data","payload","catch","error","post","method","length","request","mode","headers","Content-Type","Accept","body","setRequestParams","ACTIONS","API","SET_REQUEST_PARAMS","IconSelected","ProductCard","inView","mod","index","transitionDelay","cta","e","preventDefault","func","productListingSpecs","react_default","map","spec","averageReviewRating","onClick","text","t","isSelected","translate","buttonClassName","classNames","product-card__compare","is-active","buttonText","onCompareChange","isNew","fakeNew","objectType","variantCode","modelCode","baseImageUrl","resizeWidth","match","card","createRef","lazy","Lazy","current","registerNewElement","handleScrollIntoView","productClassNames","product-card","product-card__container","product-card-single","product-card--has-footer","enableComparison","product-card--unpublished","isPublished","active","forceInView","onContextMenu","ref","style","getAnimationDelay","getCta","href","renderTitle","renderNew","src","formatImageUrl","listingImage","alt","title","draggable","renderStars","renderSpecs","renderButton","renderCardFooter","renderCompare","d","defaultProps","viewBox","module","exports","default","ScrollerContext","ScrollerProvider","_ref","cellGap","_useState2","_slicedToArray","useState","maxVisible","setMaxVisible","_useState4","scrollIndex","setScrollIndex","_useState6","scrollPosition","setScrollPosition","scrollerContainer","useRef","scroller","cellRef","useScroller","context","_useState8","containerWidth","setContainerWidth","_useState10","cellWidth","setCellWidth","width","useWindowSize","useLayoutEffect","newCellWidth","getBoundingClientRect","newContainerWidth","newMaxVisible","Math","max","floor","updateRoute","getState","filters","queryParams","mapFilters","queryFilters","pageIndex","push","hash","search","toggleMobileFilters","FILTERS","TOGGLE_MOBILE_FILTERS","ProductListWithCategories","findIndex","x","parentKey","nodeId","parseInt","split","filterChanged","getCurrentPage","ceil","productCount","productsLoading","replace","products","isLoading","react","mobileFiltersOpen","data-scroll-hook","categoryName","product","agilityId","getProductCount","canLoadMore","loadMore","loadAll","FILTER_TYPES","Dropdown","filterKey","filter","Dropdown_objectSpread","stopPropagation","preventPropagatedFunc","filterFunc","showCross","getAnyActive","clearAllFiltersByKey","setAllFiltersByKey","items","dynamicFilterClasses","has-value","handleClick","reverseOnMobile","mobileHeaderClick","renderClearOrAll","getActiveClass","handleOptionClick","count","string","array","object","redirectOnSelect","DropdownSingle","DropdownSingle_classCallCheck","DropdownSingle_getPrototypeOf","DropdownSingle_defineProperty","DropdownSingle_assertThisInitialized","window","location","DropdownSingle_objectSpread","filterMode","open","filterCategory","number","callback","callbackDelay","dependantKeys","SplitDropdown","SplitDropdown_classCallCheck","SplitDropdown_getPrototypeOf","SplitDropdown_defineProperty","SplitDropdown_assertThisInitialized","selectedFilter","find","autoSelectFirst","allFilters","filterModel","filterOptions","SplitDropdown_objectSpread","itemIndex","getSelectedItem","MobileDropdown","MobileDropdown_classCallCheck","MobileDropdown_getPrototypeOf","MobileDropdown_defineProperty","MobileDropdown_assertThisInitialized","MobileDropdown_objectSpread","handleItemClick","MobileNavToggle","connect","ProductHeader","toReturn","toLowerCase","parent","settings","firstLoad","isNil","backUrl","renderFilter","dynamicFilters","filters_SplitDropdown","orderByFilters","dropdownToggled","mobile_MobileNavToggle","mobile_MobileDropdown","resString","filterType","renderFilterLabel","filters_Dropdown","filters_DropdownSingle","MobileLevel","forwardRef","MobileCategory","hasValue","values","option","lookup","filterOption","separator","renderOption","MobilePopup","MobilePopup_classCallCheck","MobilePopup_getPrototypeOf","MobilePopup_defineProperty","MobilePopup_assertThisInitialized","activeFilterKey","mobile_MobileLevel","renderCategory","pageYOffset","mobilePopupRef","mobileLevelRef","prevProps","document","querySelector","classList","add","remove","scrollTo","height","innerHeight","toggleMobileFiltersInternal","renderCategories","renderActiveCategory","mobile_MobileCategory","setActiveFilter","closeActiveFilter","resetFilters","Sticky","Sticky_classCallCheck","Sticky_getPrototypeOf","Sticky_defineProperty","Sticky_assertThisInitialized","contains","originalOffset","sticky","getOffset","element","top","styles","position","zIndex","visible","display","clientHeight","debug","backgroundColor","addEventListener","handleScroll","Fragment","getPlaceholderStyles","getStyles","stickyClass","ProductListWithCategoriesNav","ListCardSize","ListCardTheme","groupedProducts","targetElement","left","behavior","scrollToHookId","renderCard","model","containerClassName","promo-card","promo-card--black","cardTheme","Black","promo-card--white","White","promo-card--red","Red","image","showNewTag","content","hideButton","ListingPromoCard","cardSize","Double","pageSize","productsAll","isMobile","useMedia","shouldShowFakeNew","previousProduct","cards","roundToEven","Number","isNaN","round","initialCardPosition","displayOnEveryPage","i","cardPosition","promo_ListingPromoCard","ProductList_extends","event","fetchProducts","apiUrl","PRODUCTS","FETCH_REQUEST","FETCH_SUCCESS","FETCH_ERROR","fetchProductsInternal","products_objectSpread","services_ComparisonService","ids","query","queryString","cultureCode","response","_context","t0","useBodyScrollLock","trigger","disableBodyScroll","enableBodyScroll","useGesture","options","events","elementRef","instanceRef","useEffect","Hammer","on","off","destroy","ComparisonBar","onToggle","_useComparison","comparison-bar","ComparisonVariantSelector","selectedVariant","variants","onSelectVariant","ComparisonVariantSelector_slicedToArray","isOpen","setIsOpen","variant-selector","variant-selector--no-drop","Name","Image1x","srcSet","Image2x","variant","Id","ComparisonResponseType","shape","Keys","arrayOf","Models","Url","VariantIds","Specifications","Key","Value","Variants","SpecificationIds","ComparisonTable","_useScroller","ComparisonTable_slicedToArray","selectedVariantIds","setSelectedVariantIds","newSelectedVariantIds","forEach","ComparisonTable_ComparisonTableHeader","ComparisonTable_objectSpread","ComparisonTable_ComparisonTableSection","ComparisonTableHeader","_ref2","transform","v","ComparisonTable_ComparisonTableHeaderCell","ComparisonTableHeaderCell","_ref3","comparison_ComparisonVariantSelector","ComparisonTable_ComparisonHeaderCellBorder","ComparisonTableSection","_ref4","specification","s","modelSpecification","ComparisonTable_ComparisonTableSectionCell","label","ComparisonTableSectionCell","_ref5","dangerouslySetInnerHTML","__html","ComparisonHeaderCellBorder","_ref6","size","borderSize","borderWidth","strokeWidth","ComparisonOverlay","gestureRef","log","handlePrev","handleNext","ComparisonOverlay_slicedToArray","isActive","setIsActive","setData","scrollableRef","_x","_loadData","loadData","comparison-overlay","is-peeking","comparison_ComparisonBar","comparison_ComparisonTable","min","regeneratorRuntime","mark","_callee","result","wrap","prev","next","comparisonService","sent","abrupt","stop","ProductListContainer","ProductListContainer_classCallCheck","ProductListContainer_getPrototypeOf","ProductListContainer_defineProperty","ProductListContainer_assertThisInitialized","components_ProductList","requestParams","groupedProductList","components_ProductListWithCategories","ProductListContainer_extends","components_ProductListWithCategoriesNav","stickyFilters","general_Sticky","components_ProductHeader","groupByCategory","fetchInitialFilters","router","showFilters","areAnyProducts","renderNav","renderGroupedProducts","renderProducts","mobile_MobilePopup","useScroller_ScrollerProvider","comparison_ComparisonOverlay","includeAllCategories","culture","filterWhitelist","compose","filters_objectSpread","FETCH","CHANGED","setAllFilters","shouldUpdateRoute","SET_ALL","filterRemoved","REMOVED","toggleDropdown","SET_ALL_BY_KEY","CLEAR_ALL_BY_KEY","LOAD_MODE","isClient","_typeof","getSize","innerWidth","windowSize","setWindowSize","handleResize","debounce","removeEventListener","queries","defaultValue","mediaQueryLists","q","matchMedia","getValue","mql","matches","setValue","handler","addListener","removeListener"],"mappings":"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","file":"default~product-range~product-search-results~promo-product-listing~trades-product-listing~whats-new-~cb7d8f36-c62588ac4fbdb02db7d3.js","sourcesContent":["import React, { Component, useContext } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst ComparisonContext = React.createContext([]);\r\n\r\nclass ComparisonProvider extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n selected: getComparisonData(),\r\n };\r\n }\r\n\r\n clearSelected = () => {\r\n this.setState(\r\n {\r\n selected: [],\r\n },\r\n () => setComparisonData([]),\r\n );\r\n };\r\n\r\n setSelected = id => {\r\n const { selected } = this.state;\r\n\r\n let newSelected;\r\n\r\n if (selected.includes(id)) {\r\n newSelected = [\r\n ...selected.slice(0, selected.indexOf(id)),\r\n ...selected.slice(selected.indexOf(id) + 1),\r\n ];\r\n } else {\r\n newSelected = [...selected, id];\r\n }\r\n\r\n this.setState(\r\n {\r\n selected: newSelected,\r\n },\r\n () => setComparisonData(newSelected),\r\n );\r\n };\r\n\r\n render() {\r\n const { children, enabled } = this.props;\r\n const { selected } = this.state;\r\n\r\n const comparison = {\r\n enabled,\r\n selected,\r\n clearSelected: this.clearSelected,\r\n setSelected: this.setSelected,\r\n };\r\n\r\n return {children};\r\n }\r\n}\r\n\r\nComparisonProvider.propTypes = {\r\n enabled: PropTypes.bool.isRequired,\r\n children: PropTypes.node.isRequired,\r\n};\r\n\r\nconst withComparison = WrappedComponent =>\r\n class WithComparison extends Component {\r\n static displayName = `WithComparison(${getDisplayName(WrappedComponent)})`;\r\n\r\n render() {\r\n return (\r\n \r\n {comparison => }\r\n \r\n );\r\n }\r\n };\r\n\r\nconst useComparison = () => useContext(ComparisonContext);\r\n\r\nfunction getComparisonData() {\r\n try {\r\n const json = localStorage.getItem('comparison');\r\n\r\n if (!json) {\r\n return [];\r\n }\r\n\r\n const value = JSON.parse(json);\r\n\r\n if (!Array.isArray(value)) {\r\n return [value];\r\n }\r\n\r\n return value;\r\n } catch (err) {\r\n // log warning - likely means localstorage is unavailable.\r\n // eslint-disable-next-line no-console\r\n console.warn('COMPARISON:', 'Failed to load data', err);\r\n return [];\r\n }\r\n}\r\n\r\nfunction setComparisonData(value) {\r\n try {\r\n const json = JSON.stringify(value);\r\n localStorage.setItem('comparison', json);\r\n } catch (err) {\r\n // log warning - likely means localstorage is unavailable.\r\n // eslint-disable-next-line no-console\r\n console.warn('COMPARISON:', 'Failed to load data', err);\r\n }\r\n}\r\n\r\nfunction getDisplayName(WrappedComponent) {\r\n return WrappedComponent.displayName || WrappedComponent.name || 'Component';\r\n}\r\n\r\nexport { ComparisonProvider, useComparison, withComparison };\r\n","import React from 'react';\r\n\r\n// eslint-disable-next-line\r\nconst Loader = () => {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Loader;\r\n","// eslint-disable-next-line import/no-webpack-loader-syntax\r\nimport IconChevron from '!svg-react-loader!@icons/icon-chevron.svg';\r\n\r\nexport default IconChevron;\r\n","// eslint-disable-next-line import/no-webpack-loader-syntax\r\nimport IconCompare from '!svg-react-loader!@icons/icon-compare.svg';\r\n\r\nexport default IconCompare;\r\n","import querystring from 'querystring';\r\nimport ACTIONS from '../actions';\r\n\r\nexport function get(url, params, type, successType, errorType) {\r\n return dispatch => {\r\n if (params !== undefined) {\r\n url += '?';\r\n url += querystring.stringify({ ...params });\r\n }\r\n\r\n // Dispatch the initial type (used for ..loading)\r\n dispatch({\r\n type,\r\n });\r\n\r\n return fetch(url, getRequestSettings('GET'))\r\n .then(res => {\r\n if (!res.ok) {\r\n throw Error(res.statusText);\r\n }\r\n\r\n return res.json();\r\n })\r\n .then(data => {\r\n dispatch({\r\n type: successType,\r\n payload: { data, params },\r\n });\r\n })\r\n .catch(error => {\r\n dispatch({\r\n type: errorType,\r\n payload: error,\r\n });\r\n throw Error(error);\r\n });\r\n };\r\n}\r\n\r\nexport function post(url, params, type, successType, errorType) {\r\n return dispatch => {\r\n // Dispatch the initial type (used for ..loading)\r\n dispatch({\r\n type,\r\n });\r\n\r\n return fetch(url, getRequestSettings('POST', params))\r\n .then(res => {\r\n if (!res.ok) {\r\n throw Error(res.statusText);\r\n }\r\n\r\n return res.json();\r\n })\r\n .then(data => {\r\n dispatch({\r\n type: successType,\r\n payload: { data, params },\r\n });\r\n })\r\n .catch(error => {\r\n dispatch({\r\n type: errorType,\r\n payload: error,\r\n });\r\n throw Error(error);\r\n });\r\n };\r\n}\r\n\r\nexport function getRequestSettings(method, params = {}) {\r\n const request = {\r\n method,\r\n mode: 'cors',\r\n headers: {\r\n 'Content-Type': 'application/json; charset=utf-8',\r\n Accept: 'application/json',\r\n },\r\n };\r\n\r\n if (method === 'POST') {\r\n request.body = JSON.stringify(params);\r\n }\r\n\r\n return request;\r\n}\r\n\r\nexport function setRequestParams(params) {\r\n return {\r\n type: ACTIONS.API.SET_REQUEST_PARAMS,\r\n payload: params,\r\n };\r\n}\r\n","// eslint-disable-next-line import/no-webpack-loader-syntax\r\nimport IconSelected from '!svg-react-loader!@icons/icon-selected.svg';\r\n\r\nexport default IconSelected;\r\n","/* eslint-disable no-mixed-operators */\r\nimport React, { Component } from 'react';\r\nimport { Lazy } from '@netc/lazy';\r\nimport classNames from 'classnames';\r\nimport IconSelected from '../../icons/IconSelected';\r\nimport IconCompare from '../../icons/IconCompare';\r\n\r\nclass ProductCard extends Component {\r\n constructor() {\r\n super();\r\n\r\n this.card = React.createRef();\r\n this.lazy = new Lazy();\r\n\r\n this.state = {\r\n inView: false,\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n if (this.card.current !== null) {\r\n this.lazy.registerNewElement(this.card.current, this.handleScrollIntoView, false);\r\n }\r\n }\r\n\r\n handleScrollIntoView = () => {\r\n if (this.state.inView === false) {\r\n this.setState({\r\n inView: true,\r\n });\r\n }\r\n };\r\n\r\n getAnimationDelay = () => {\r\n const base = 0;\r\n const mod = this.props.index % 4;\r\n\r\n return {\r\n transitionDelay: `${base + mod * 80}ms`,\r\n };\r\n };\r\n\r\n getCta = () => {\r\n if (this.props.cta !== undefined) {\r\n return e => {\r\n e.preventDefault();\r\n this.props.cta.func();\r\n };\r\n }\r\n\r\n return () => {};\r\n };\r\n\r\n render() {\r\n const productClassNames = classNames({\r\n 'product-card': true,\r\n 'product-card__container': true,\r\n 'product-card-single': true,\r\n 'product-card--has-footer': this.props.enableComparison,\r\n 'product-card--unpublished': !this.props.isPublished,\r\n active: this.state.inView || this.props.forceInView,\r\n });\r\n\r\n return (\r\n
e.preventDefault()} className={productClassNames} ref={this.card} style={this.getAnimationDelay()}>\r\n
\r\n \r\n
\r\n
{this.renderTitle()}
\r\n {this.renderNew()}\r\n\r\n
\r\n {this.props.title}\r\n\r\n {/* */}\r\n
\r\n\r\n {this.renderStars()}\r\n\r\n

{this.props.title}

\r\n\r\n {this.renderSpecs()}\r\n {this.renderButton()}\r\n
\r\n
\r\n {this.renderCardFooter()}\r\n
\r\n
\r\n );\r\n }\r\n\r\n renderSpecs = () => {\r\n if (this.props.productListingSpecs.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n };\r\n\r\n renderStars = () => {\r\n if (this.props.averageReviewRating === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n renderButton = () => {\r\n if (this.props.cta !== undefined) {\r\n return (\r\n
\r\n {this.props.cta.text}\r\n
\r\n );\r\n }\r\n\r\n return
{this.props.t('custom.products.view')}
;\r\n };\r\n\r\n renderCardFooter() {\r\n if (!this.props.enableComparison) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n {/* This will have the compare, favourite, share and other icons, for now just compare. */}\r\n {this.renderCompare()}\r\n
\r\n );\r\n }\r\n\r\n renderCompare = () => {\r\n const { isSelected, t: translate } = this.props;\r\n\r\n const buttonClassName = classNames({\r\n 'product-card__compare': true,\r\n 'is-active': isSelected,\r\n });\r\n\r\n const buttonText = isSelected ? translate('tti.comparison.added') : translate('tti.comparison.compare');\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n renderNew = () => {\r\n if (this.props.isNew === true) {\r\n return
{this.props.t('custom.new')}
;\r\n }\r\n\r\n if (this.props.fakeNew === true) {\r\n return
;\r\n }\r\n\r\n return null;\r\n };\r\n\r\n renderTitle = () => {\r\n switch (this.props.objectType) {\r\n case 'NetC.Product':\r\n return this.props.variantCode;\r\n\r\n case 'NetC.ProductModel':\r\n default:\r\n return this.props.modelCode;\r\n }\r\n };\r\n\r\n formatImageUrl = (baseImageUrl, resizeWidth) => {\r\n if (baseImageUrl === undefined || baseImageUrl === null) {\r\n return baseImageUrl;\r\n }\r\n\r\n if (resizeWidth) {\r\n const questionMarks = (baseImageUrl.match(/\\?/g) || []).length;\r\n\r\n if (questionMarks === 0) {\r\n return `${baseImageUrl}?width=${resizeWidth}`;\r\n }\r\n\r\n return `${baseImageUrl}&width=${resizeWidth}`;\r\n }\r\n\r\n return baseImageUrl;\r\n };\r\n}\r\nexport default ProductCard;\r\n","var React = require('react');\n\nfunction IconSelected (props) {\n return React.createElement(\"svg\",props,React.createElement(\"path\",{\"id\":\"icon-selected\",\"d\":\"M4.922,7.078l3.094,3.094,8.578-8.578L18,3,8.016,12.984l-4.5-4.5Zm11.063,8.906V8.016H18v7.969A2.084,2.084,0,0,1,15.984,18H2.016a1.932,1.932,0,0,1-1.406-.609A1.932,1.932,0,0,1,0,15.984V2.016A1.932,1.932,0,0,1,.609.609,1.932,1.932,0,0,1,2.016,0H12V2.016H2.016V15.984ZM18,18\"}));\n}\n\nIconSelected.defaultProps = {\"viewBox\":\"0 0 18 18\"};\n\nmodule.exports = IconSelected;\n\nIconSelected.default = IconSelected;\n","var React = require('react');\n\nfunction IconCompare (props) {\n return React.createElement(\"svg\",props,React.createElement(\"path\",{\"id\":\"icon-compare\",\"d\":\"M15.325,16.18V5.419H5.419V16.18Zm0-12.539a1.778,1.778,0,0,1,1.27.529,1.676,1.676,0,0,1,.55,1.249V16.18A1.882,1.882,0,0,1,15.325,18H5.419a1.744,1.744,0,0,1-1.27-.55,1.744,1.744,0,0,1-.55-1.27V5.419a1.676,1.676,0,0,1,.55-1.249,1.778,1.778,0,0,1,1.27-.529ZM12.615,0V1.82H1.778V12.581H0V1.82A1.778,1.778,0,0,1,.529.55,1.676,1.676,0,0,1,1.778,0Z\"}));\n}\n\nIconCompare.defaultProps = {\"viewBox\":\"0 0 17.145 18\"};\n\nmodule.exports = IconCompare;\n\nIconCompare.default = IconCompare;\n","import React, { createContext, useContext, useLayoutEffect, useRef, useState } from 'react';\r\nimport useWindowSize from './useWindowSize';\r\n\r\nconst ScrollerContext = createContext(null);\r\n\r\nconst ScrollerProvider = ({ cellGap, children }) => {\r\n const [maxVisible, setMaxVisible] = useState(0);\r\n const [scrollIndex, setScrollIndex] = useState(0);\r\n const [scrollPosition, setScrollPosition] = useState(0);\r\n\r\n const scrollerContainer = useRef();\r\n const cellRef = useRef();\r\n\r\n const scroller = {\r\n cellGap,\r\n cellRef,\r\n maxVisible,\r\n scrollIndex,\r\n scrollPosition,\r\n scrollerContainer,\r\n setMaxVisible,\r\n setScrollIndex,\r\n setScrollPosition,\r\n };\r\n\r\n return (\r\n {children}\r\n );\r\n};\r\n\r\nconst useScroller = () => {\r\n const context = useContext(ScrollerContext);\r\n\r\n const {\r\n cellGap,\r\n cellRef,\r\n maxVisible,\r\n scrollIndex,\r\n scrollerContainer,\r\n setMaxVisible,\r\n setScrollPosition,\r\n } = context;\r\n\r\n const [containerWidth, setContainerWidth] = useState(0);\r\n const [cellWidth, setCellWidth] = useState(0);\r\n\r\n // Subscribe to the window size.\r\n const { width } = useWindowSize();\r\n\r\n // Ensure cell and container widths are stored.\r\n useLayoutEffect(() => {\r\n if (cellRef.current) {\r\n const bcr = cellRef.current.getBoundingClientRect();\r\n const newCellWidth = bcr.width;\r\n setCellWidth(newCellWidth);\r\n }\r\n\r\n if (scrollerContainer.current) {\r\n const bcr = scrollerContainer.current.getBoundingClientRect();\r\n const newContainerWidth = bcr.width;\r\n setContainerWidth(newContainerWidth);\r\n }\r\n }, [width, cellRef.current, scrollerContainer.current]);\r\n\r\n // Calculate how many cells can be visible.\r\n useLayoutEffect(() => {\r\n const newMaxVisible = Math.max(Math.floor(containerWidth / (cellWidth + cellGap)), 1);\r\n setMaxVisible(newMaxVisible);\r\n }, [cellGap, cellWidth, containerWidth]);\r\n\r\n // Calculate new scroll position.\r\n useLayoutEffect(() => {\r\n const centreOffset = (containerWidth - (cellWidth * maxVisible) - (cellGap * (maxVisible - 1))) / 2;\r\n const newScrollPosition = ((cellWidth * scrollIndex) + (cellGap * scrollIndex)) - centreOffset;\r\n setScrollPosition(newScrollPosition);\r\n }, [cellGap, cellWidth, maxVisible, scrollIndex]);\r\n\r\n return context;\r\n};\r\n\r\nexport { ScrollerProvider, useScroller };\r\n","import get from 'lodash/get';\r\nimport { push } from 'connected-react-router';\r\nimport querystring from 'querystring';\r\nimport { mapFilters } from '../utils';\r\n\r\nexport function updateRoute() {\r\n return (dispatch, getState) => {\r\n const state = getState();\r\n\r\n const filters = get(state, 'app.filters') || [];\r\n\r\n // Map the array to a flat object so we get a nicer looking URL.\r\n const mappedFilters = mapFilters(filters.queryFilters);\r\n\r\n // Params to show in the URL\r\n const queryParams = {\r\n ...mappedFilters,\r\n };\r\n\r\n if (filters.pageIndex !== null) {\r\n queryParams.pageIndex = filters.pageIndex;\r\n }\r\n\r\n return dispatch(\r\n push({\r\n hash: '',\r\n search: querystring.stringify(queryParams),\r\n }),\r\n );\r\n };\r\n}\r\n","import get from 'lodash/get';\r\nimport { updateRoute } from './routes';\r\nimport ACTIONS from '../actions';\r\nimport { post } from './api';\r\n\r\nexport function filterChanged(filter) {\r\n return dispatch => {\r\n dispatch({\r\n type: ACTIONS.FILTERS.CHANGED,\r\n payload: { ...filter },\r\n });\r\n dispatch(updateRoute());\r\n };\r\n}\r\n\r\nexport function filterRemoved(key, value, dependantKeys = []) {\r\n return dispatch => {\r\n dispatch({\r\n type: ACTIONS.FILTERS.REMOVED,\r\n payload: { key, value, dependantKeys },\r\n });\r\n dispatch(updateRoute());\r\n };\r\n}\r\n\r\nexport function orderBy(key, value) {\r\n return dispatch => {\r\n dispatch({\r\n type: ACTIONS.FILTERS.ORDER_BY,\r\n payload: value,\r\n });\r\n dispatch(updateRoute());\r\n };\r\n}\r\n\r\nexport function loadMore() {\r\n return dispatch => {\r\n dispatch({\r\n type: ACTIONS.FILTERS.LOAD_MODE,\r\n });\r\n dispatch(updateRoute());\r\n };\r\n}\r\n\r\nexport function setAllFilters(filters, shouldUpdateRoute = true) {\r\n return dispatch => {\r\n dispatch({\r\n type: ACTIONS.FILTERS.SET_ALL,\r\n payload: filters,\r\n });\r\n\r\n if (shouldUpdateRoute) {\r\n dispatch(updateRoute());\r\n }\r\n };\r\n}\r\n\r\nexport function setAllFiltersByKey(key) {\r\n return dispatch => {\r\n dispatch({\r\n type: ACTIONS.FILTERS.SET_ALL_BY_KEY,\r\n payload: key,\r\n });\r\n dispatch(updateRoute());\r\n };\r\n}\r\n\r\nexport function clearAllFiltersByKey(key) {\r\n return dispatch => {\r\n dispatch({\r\n type: ACTIONS.FILTERS.CLEAR_ALL_BY_KEY,\r\n payload: key,\r\n });\r\n dispatch(updateRoute());\r\n };\r\n}\r\n\r\nexport function resetFilters() {\r\n return dispatch => {\r\n dispatch({\r\n type: ACTIONS.FILTERS.SET_ALL,\r\n payload: null,\r\n });\r\n dispatch(updateRoute());\r\n };\r\n}\r\n\r\nexport function toggleMobileFilters() {\r\n return {\r\n type: ACTIONS.FILTERS.TOGGLE_MOBILE_FILTERS,\r\n };\r\n}\r\n\r\nexport function fetchInitialFilters() {\r\n return (dispatch, getState) => {\r\n const state = getState();\r\n\r\n const params = get(state, 'app.api');\r\n\r\n // Params for the request\r\n const requestParams = {\r\n ...params,\r\n allFilters: [],\r\n pageIndex: 1,\r\n pageSize: 0,\r\n };\r\n\r\n return dispatch(\r\n post(\r\n requestParams.apiUrl,\r\n requestParams,\r\n ACTIONS.FILTERS.FETCH,\r\n ACTIONS.FILTERS.FETCH_SUCCESS,\r\n ACTIONS.FILTERS.FETCH_ERROR,\r\n ),\r\n );\r\n };\r\n}\r\n","import React, { Component, Fragment } from 'react';\r\nimport Loader from '@react-components/Loader';\r\n\r\nimport ProductCard from './ProductCard';\r\n\r\nclass ProductListWithCategories extends Component {\r\n render() {\r\n if (this.isLoading()) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n

{this.props.categoryName}

\r\n {!this.isLoading() &&\r\n this.props.products.map((product, index) => (\r\n \r\n ))}\r\n
\r\n
\r\n
{this.getProductCount()}
\r\n
\r\n {this.props.canLoadMore && !this.isLoading() && (\r\n \r\n
\r\n
\r\n {this.props.t('custom.loadmore')}\r\n
\r\n
\r\n {this.props.t('custom.loadall')}\r\n
\r\n
\r\n
\r\n )}\r\n \r\n );\r\n }\r\n\r\n getCurrentPage = () => {\r\n const index = this.props.filters.queryFilters.findIndex(\r\n x => x.parentKey === 'categoryPageNumber' && x.value.indexOf(this.props.nodeId) === 0,\r\n );\r\n\r\n if (index === -1) {\r\n return 2;\r\n }\r\n\r\n const pageNumber = parseInt(this.props.filters.queryFilters[index].value.split('-')[1], 10) + 1;\r\n return pageNumber;\r\n };\r\n\r\n loadMore = () => {\r\n this.props.filterChanged({\r\n parentKey: 'categoryPageNumber',\r\n value: `${this.props.nodeId}-${this.getCurrentPage()}`,\r\n });\r\n };\r\n\r\n loadAll = () => {\r\n this.props.filterChanged({\r\n parentKey: 'categoryPageNumber',\r\n value: `${this.props.nodeId}-${Math.ceil(this.props.productCount / 16)}`,\r\n });\r\n };\r\n\r\n isLoading = () => this.props.productsLoading === true;\r\n\r\n getProductCount = () => {\r\n const patt = /\\[\\[(.)\\]\\]/;\r\n const resString = this.props.t('custom.showingxproducts');\r\n\r\n return resString.replace(patt, `${this.props.products.length}/${this.props.productCount}`);\r\n };\r\n}\r\n\r\nexport default ProductListWithCategories;\r\n","export const FILTER_TYPES = {\r\n DROPDOWN: 0,\r\n SPLITDROPDOWN: 1,\r\n DROPDOWN_SINGLE: 2,\r\n DROPDOWN_LINKS: 3,\r\n};\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\n\r\nclass Dropdown extends Component {\r\n getActiveClass = (key, value) => {\r\n const index = this.props.filters.queryFilters.findIndex(x => x.parentKey === key && x.value === value);\r\n if (index === -1) {\r\n return '';\r\n }\r\n\r\n return 'active';\r\n };\r\n\r\n getAnyActive = () => this.props.filters.queryFilters.findIndex(x => x.parentKey === this.props.filterKey) !== -1;\r\n\r\n handleOptionClick = (e, filter) => {\r\n this.props.filterChanged({ ...filter });\r\n e.stopPropagation();\r\n };\r\n\r\n renderClearOrAll = () => {\r\n const preventPropagatedFunc = (e, filterFunc) => {\r\n e.stopPropagation();\r\n filterFunc();\r\n };\r\n let func;\r\n let text;\r\n let showCross = false;\r\n\r\n if (this.getAnyActive()) {\r\n func = e => preventPropagatedFunc(e, () => this.props.clearAllFiltersByKey(this.props.filterKey));\r\n text = this.props.t('custom.clear');\r\n showCross = true;\r\n } else {\r\n func = e => preventPropagatedFunc(e, () => this.props.setAllFiltersByKey(this.props.filterKey));\r\n text = this.props.t('custom.all');\r\n showCross = false;\r\n }\r\n\r\n return (\r\n
\r\n {text}\r\n
\r\n );\r\n };\r\n\r\n render() {\r\n if (this.props.items.length === 0) {\r\n return null;\r\n }\r\n\r\n const dynamicFilterClasses = classNames({\r\n 'has-value': this.getAnyActive(),\r\n });\r\n\r\n return (\r\n
\r\n \r\n {this.props.default}\r\n
\r\n {this.renderClearOrAll()}\r\n
    \r\n {this.props.items.map((x, index) => (\r\n
  • this.handleOptionClick(e, x)}>\r\n {x.name} {`(${x.count})`}\r\n
  • \r\n ))}\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nDropdown.propTypes = {\r\n default: PropTypes.string.isRequired,\r\n items: PropTypes.array.isRequired,\r\n filters: PropTypes.object.isRequired,\r\n filterChanged: PropTypes.func,\r\n filterKey: PropTypes.string.isRequired,\r\n setAllFiltersByKey: PropTypes.func,\r\n clearAllFiltersByKey: PropTypes.func,\r\n t: PropTypes.func.isRequired,\r\n reverseOnMobile: PropTypes.bool,\r\n mobileHeaderClick: PropTypes.func,\r\n redirectOnSelect: PropTypes.bool,\r\n};\r\n\r\nexport default Dropdown;\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classNames from 'classnames';\r\n\r\nclass DropdownSingle extends Component {\r\n constructor() {\r\n super();\r\n\r\n this.state = {\r\n open: false,\r\n };\r\n }\r\n\r\n handleOptionClick = (e, filter) => {\r\n if (this.props.redirectOnSelect) {\r\n window.location.href = filter.value;\r\n return;\r\n }\r\n\r\n e.stopPropagation();\r\n this.props.filterChanged({ ...filter, filterMode: this.props.filterMode });\r\n }\r\n\r\n handleClick = () => {\r\n this.setState({\r\n open: !this.state.open,\r\n });\r\n }\r\n\r\n\r\n getActiveClass = (key, value) => {\r\n const index = this.props.filters.queryFilters.findIndex(x => x.parentKey === key && x.value === value);\r\n if (index === -1) {\r\n return '';\r\n }\r\n\r\n return 'active';\r\n }\r\n\r\n getAnyActive = () => this.props.filters.queryFilters.findIndex(x => x.key === this.props.filterKey) !== -1;\r\n\r\n is\r\n\r\n render() {\r\n if (this.props.items.length === 0) {\r\n return null;\r\n }\r\n\r\n const dynamicFilterClasses = classNames({\r\n active: this.state.open,\r\n 'has-value': this.getAnyActive(),\r\n });\r\n\r\n return (\r\n
\r\n
{this.props.default}
\r\n
    \r\n {this.props.items.map((x, index) =>\r\n
  • this.handleOptionClick(e, x)}>\r\n {x.name}\r\n
  • )}\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nDropdownSingle.propTypes = {\r\n default: PropTypes.string.isRequired,\r\n items: PropTypes.array.isRequired,\r\n filters: PropTypes.object.isRequired,\r\n filterChanged: PropTypes.func,\r\n filterKey: PropTypes.string.isRequired,\r\n filterCategory: PropTypes.number.isRequired,\r\n t: PropTypes.func.isRequired,\r\n callback: PropTypes.func,\r\n callbackDelay: PropTypes.number,\r\n filterMode: PropTypes.string,\r\n dependantKeys: PropTypes.array,\r\n redirectOnSelect: PropTypes.bool,\r\n reverseOnMobile: PropTypes.bool,\r\n mobileHeaderClick: PropTypes.func,\r\n};\r\n\r\nexport default DropdownSingle;\r\n","import React, { Component, Fragment } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nclass SplitDropdown extends Component {\r\n constructor() {\r\n super();\r\n\r\n this.state = {\r\n open: false,\r\n };\r\n }\r\n\r\n // eslint-disable-next-line\r\n getSelectedItem = () => {\r\n // Lookup selected filter from URL\r\n const selectedFilter = this.props.filters.queryFilters.find(x => x.parentKey === this.props.filterKey);\r\n\r\n if (selectedFilter === undefined) {\r\n if (this.props.autoSelectFirst === true && this.props.items.length > 0) {\r\n return this.props.items[0].name;\r\n }\r\n\r\n return this.props.default;\r\n }\r\n\r\n // Look up filter values in all filters from API\r\n const filter = this.props.filters.allFilters.find(x => x.key === this.props.filterKey);\r\n\r\n if (filter === undefined) {\r\n return this.props.default;\r\n }\r\n\r\n // Match filter on filter value so we can get the display value\r\n const filterModel = filter.filterOptions.find(x => x.value === selectedFilter.value);\r\n\r\n if (filterModel === undefined) {\r\n return this.props.default;\r\n }\r\n\r\n return filterModel.name;\r\n };\r\n\r\n handleClick = () => {\r\n this.setState({\r\n open: !this.state.open,\r\n });\r\n };\r\n\r\n handleOptionClick = filter => {\r\n this.props.filterChanged({ ...filter, filterMode: this.props.filterMode });\r\n };\r\n\r\n getActiveClass = (key, value, itemIndex) => {\r\n const keyIndex = this.props.filters.queryFilters.findIndex(x => x.parentKey === key);\r\n\r\n if (keyIndex === -1 && this.props.autoSelectFirst && itemIndex === 0) {\r\n return 'active';\r\n }\r\n\r\n const index = this.props.filters.queryFilters.findIndex(x => x.parentKey === key && x.value === value);\r\n if (index === -1) {\r\n return '';\r\n }\r\n\r\n return 'active';\r\n };\r\n\r\n render() {\r\n if (this.props.items.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n
\r\n {this.props.default}\r\n
\r\n
\r\n
\r\n
{this.getSelectedItem()}
\r\n
\r\n
    \r\n {this.props.items.map((x, index) => (\r\n this.handleOptionClick(x)}\r\n >\r\n {x.name}\r\n \r\n ))}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nSplitDropdown.propTypes = {\r\n items: PropTypes.array.isRequired,\r\n default: PropTypes.string.isRequired,\r\n filters: PropTypes.object.isRequired,\r\n filterChanged: PropTypes.func,\r\n filterKey: PropTypes.string.isRequired,\r\n filterCategory: PropTypes.number.isRequired,\r\n t: PropTypes.func.isRequired,\r\n autoSelectFirst: PropTypes.bool,\r\n filterMode: PropTypes.string,\r\n};\r\n\r\nexport default SplitDropdown;\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nclass MobileDropdown extends Component {\r\n constructor() {\r\n super();\r\n\r\n this.state = {\r\n open: false,\r\n };\r\n }\r\n\r\n handleClick = () => {\r\n this.setState({\r\n open: !this.state.open,\r\n });\r\n }\r\n\r\n handleItemClick = (filter) => {\r\n this.props.filterChanged({ ...filter, filterMode: this.props.filterMode });\r\n }\r\n\r\n getActiveClass = (key, value) => {\r\n const index = this.props.filters.queryFilters.findIndex(x => x.parentKey === key && x.value === value);\r\n if (index === -1) {\r\n return '';\r\n }\r\n\r\n return 'active';\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
{this.props.default}
\r\n
    \r\n {this.props.items.map((x, index) =>
  • this.handleItemClick(x)}>{x.name}
  • )}\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nMobileDropdown.propTypes = {\r\n default: PropTypes.string.isRequired,\r\n items: PropTypes.array.isRequired,\r\n filters: PropTypes.object.isRequired,\r\n filterChanged: PropTypes.func,\r\n autoSelectFirst: PropTypes.bool,\r\n filterKey: PropTypes.string.isRequired,\r\n filterCategory: PropTypes.number.isRequired,\r\n allFilters: PropTypes.array,\r\n filterMode: PropTypes.string,\r\n};\r\n\r\nexport default MobileDropdown;\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport { toggleMobileFilters } from '../../redux/actioncreators/filters';\r\n\r\n\r\nclass MobileNavToggle extends Component {\r\n render() {\r\n return (\r\n
\r\n {this.props.t('custom.filters.filter')}\r\n
\r\n );\r\n }\r\n}\r\n\r\nMobileNavToggle.propTypes = {\r\n toggleMobileFilters: PropTypes.func,\r\n t: PropTypes.func.isRequired,\r\n};\r\n\r\n\r\n// const mapStateToProps = state => ({\r\n// });\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n toggleMobileFilters: () => dispatch(toggleMobileFilters()),\r\n});\r\n\r\n\r\nexport default connect(null, mapDispatchToProps)(MobileNavToggle);\r\n","import React, { Component } from 'react';\r\n\r\nimport isNil from 'lodash/isNil';\r\nimport { FILTER_TYPES } from '../enums/filter-types';\r\n\r\nimport Dropdown from './filters/Dropdown';\r\nimport DropdownSingle from './filters/DropdownSingle';\r\nimport SplitDropdown from './filters/SplitDropdown';\r\n\r\nimport MobileDropdown from './mobile/MobileDropdown';\r\nimport MobileNavToggle from './mobile/MobileNavToggle';\r\n\r\nclass ProductHeader extends Component {\r\n render() {\r\n if (this.props.settings.firstLoad === true) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n {!isNil(this.props.backUrl) && this.props.backUrl.length > 0 && (\r\n
\r\n \r\n  \r\n \r\n
\r\n )}\r\n
\r\n {this.props.filters.filters.map((x, index) => this.renderFilter(x, index))}\r\n {this.props.filters.dynamicFilters.map((x, index) => this.renderFilter(x, index))}\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n renderFilterLabel(index, resString) {\r\n const text = index === 0 ? this.props.t(resString) : '';\r\n return (\r\n
\r\n {text}\r\n
\r\n );\r\n }\r\n\r\n renderFilter(filter, index) {\r\n if (filter.filterOptions.length === 0) {\r\n return null;\r\n }\r\n\r\n switch (filter.filterType) {\r\n case FILTER_TYPES.DROPDOWN:\r\n default:\r\n return (\r\n
\r\n {this.renderFilterLabel(index, 'custom.filters.filter')}\r\n \r\n
\r\n );\r\n\r\n case FILTER_TYPES.DROPDOWN_LINKS:\r\n return (\r\n
\r\n {this.renderFilterLabel(index, 'custom.filters.filter')}\r\n \r\n
\r\n );\r\n\r\n case FILTER_TYPES.SPLITDROPDOWN:\r\n return (\r\n
\r\n {this.renderFilterLabel(index, 'custom.filters.filter')}\r\n \r\n
\r\n );\r\n\r\n case FILTER_TYPES.DROPDOWN_SINGLE:\r\n return (\r\n
\r\n {this.renderFilterLabel(index, 'custom.filters.filter')}\r\n \r\n
\r\n );\r\n }\r\n }\r\n\r\n getFilterCoupleFromValue = (key, value) => {\r\n const filter = this.props.products.allFilters.find(x => x.key === key);\r\n\r\n if (filter === undefined) {\r\n return undefined;\r\n }\r\n\r\n const toReturn = filter.filterOptions.find(x => x.value.toLowerCase() === value.toLowerCase());\r\n\r\n if (toReturn !== undefined) {\r\n return {\r\n parent: filter,\r\n filter: toReturn,\r\n };\r\n }\r\n return undefined;\r\n };\r\n}\r\n\r\nexport default ProductHeader;\r\n","import React from 'react';\r\n\r\nconst MobileLevel = React.forwardRef((props, ref) => (\r\n
\r\n {props.children}\r\n
\r\n));\r\n\r\nexport default MobileLevel;\r\n","import React from 'react';\r\n\r\nconst MobileCategory = props => (\r\n
\r\n
\r\n {props.filter.title}\r\n
\r\n\r\n
\r\n {props.values.map((x, index) => renderOption(x, index, props.values.length, props.allFilters))}\r\n
\r\n
\r\n);\r\n\r\nfunction renderOption(option, index, length, allFilters) {\r\n let lookup = null;\r\n if (option.name === undefined) {\r\n // we need to lookup in allFilters so we can get the display value\r\n const filter = allFilters.find(x => x.key === option.parentKey);\r\n const filterOption = filter.filterOptions.find(x => x.value === option.value);\r\n lookup = filterOption;\r\n } else {\r\n lookup = option;\r\n }\r\n\r\n let separator = ', ';\r\n\r\n if (index === length - 1) {\r\n separator = '';\r\n }\r\n\r\n if (lookup === undefined) {\r\n return null;\r\n }\r\n\r\n return {lookup.name + separator};\r\n}\r\n\r\nexport default MobileCategory;\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\n// import { lock, unlock } from 'tua-body-scroll-lock';\r\nimport Dropdown from '../filters/Dropdown';\r\nimport { FILTER_TYPES } from '../../enums/filter-types';\r\nimport DropdownSingle from '../filters/DropdownSingle';\r\nimport MobileLevel from './MobileLevel';\r\nimport MobileCategory from './MobileCategory';\r\n\r\nclass MobilePopup extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n // Keeping this out of state\r\n this.pageYOffset = null;\r\n\r\n this.state = {\r\n activeFilterKey: null,\r\n };\r\n\r\n this.mobilePopupRef = React.createRef();\r\n this.mobileLevelRef = React.createRef();\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.filters.mobileFiltersOpen === false && this.props.filters.mobileFiltersOpen === true) {\r\n this.pageYOffset = window.pageYOffset;\r\n document.querySelector('html').classList.add('no-scroll-mobile');\r\n // lock(this.mobilePopupRef.current);\r\n } else if (prevProps.filters.mobileFiltersOpen === true && this.props.filters.mobileFiltersOpen === false) {\r\n // unlock(this.mobilePopupRef.current);\r\n document.querySelector('html').classList.remove('no-scroll-mobile');\r\n window.scrollTo(0, this.pageYOffset);\r\n }\r\n }\r\n\r\n render() {\r\n if (this.props.firstLoad === true) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n\r\n
\r\n\r\n
\r\n
\r\n {this.props.t('custom.filters.filter')}\r\n
\r\n\r\n {this.renderCategories()}\r\n\r\n
\r\n {this.renderActiveCategory()}\r\n
\r\n\r\n
\r\n
\r\n {this.props.t('custom.filters.applyfilters')}\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n setActiveFilter = key => this.setState({ activeFilterKey: key });\r\n closeActiveFilter = () => this.setState({ activeFilterKey: null });\r\n hasValue = key => this.props.filters.queryFilters.findIndex(x => x.parentKey === key) !== -1;\r\n\r\n toggleMobileFiltersInternal = () => {\r\n this.setState({\r\n activeFilterKey: null,\r\n });\r\n this.props.toggleMobileFilters();\r\n }\r\n\r\n renderCategory(filter) {\r\n if (filter.filterOptions.length === 0) {\r\n return null;\r\n }\r\n\r\n const values = this.props.filters.queryFilters.filter(x => x.parentKey === filter.key);\r\n\r\n return (\r\n this.setActiveFilter(filter.key)}\r\n hasValue={this.hasValue(filter.key)}\r\n filter={filter}\r\n values={values}\r\n allFilters={this.props.filters.allFilters}\r\n />\r\n );\r\n }\r\n\r\n renderCategories = () => (\r\n \r\n {this.props.filters.filters.map(x => this.renderCategory(x))}\r\n {this.props.filters.dynamicFilters.map(x => this.renderCategory(x))}\r\n \r\n )\r\n\r\n renderActiveCategory = () => {\r\n if (this.state.activeFilterKey === null) {\r\n return null;\r\n }\r\n\r\n let filter = this.props.filters.filters.find(x => x.key === this.state.activeFilterKey);\r\n\r\n if (filter === undefined) {\r\n filter = this.props.filters.dynamicFilters.find(x => x.key === this.state.activeFilterKey);\r\n }\r\n\r\n if (filter === undefined) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n {this.renderFilter(filter)}\r\n \r\n );\r\n }\r\n\r\n renderFilter(filter) {\r\n if (filter.filterOptions.length === 0) {\r\n return null;\r\n }\r\n\r\n switch (filter.filterType) {\r\n case FILTER_TYPES.DROPDOWN:\r\n default:\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n\r\n case FILTER_TYPES.DROPDOWN_SINGLE:\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n\r\n case FILTER_TYPES.DROPDOWN_LINKS:\r\n return (\r\n \r\n \r\n );\r\n }\r\n }\r\n}\r\n\r\nMobilePopup.propTypes = {\r\n filters: PropTypes.object,\r\n dynamicFilters: PropTypes.array,\r\n filterChanged: PropTypes.func,\r\n resetFilters: PropTypes.func,\r\n t: PropTypes.func.isRequired,\r\n firstLoad: PropTypes.bool,\r\n productsLoading: PropTypes.bool,\r\n toggleMobileFilters: PropTypes.func.isRequired,\r\n setAllFiltersByKey: PropTypes.func,\r\n clearAllFiltersByKey: PropTypes.func,\r\n};\r\n\r\nexport default MobilePopup;\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { getOffset } from '@utils';\r\n\r\nclass Sticky extends Component {\r\n constructor() {\r\n super();\r\n\r\n this.state = {\r\n sticky: false,\r\n originalOffset: -1,\r\n };\r\n\r\n this.element = React.createRef();\r\n }\r\n\r\n componentDidMount() {\r\n if (this.element.current !== null) {\r\n window.addEventListener('scroll', this.handleScroll);\r\n this.handleScroll();\r\n }\r\n }\r\n\r\n handleScroll = () => {\r\n if (document.querySelector('html').classList.contains('no-scroll-mobile')) {\r\n return;\r\n }\r\n\r\n if (window.pageYOffset < this.state.originalOffset && this.state.sticky === true) {\r\n this.setState({\r\n sticky: false,\r\n originalOffset: -1,\r\n });\r\n }\r\n\r\n if (window.pageYOffset > getOffset(this.element.current).top && this.state.sticky === false) {\r\n this.setState({\r\n sticky: true,\r\n originalOffset: getOffset(this.element.current).top,\r\n });\r\n }\r\n };\r\n\r\n getStyles = () => {\r\n const styles = {};\r\n\r\n if (this.state.sticky === true) {\r\n styles.position = 'fixed';\r\n styles.top = '0px';\r\n styles.width = '100%';\r\n styles.zIndex = 10000;\r\n }\r\n\r\n if (this.props.visible === false) {\r\n styles.display = 'none';\r\n }\r\n\r\n return styles;\r\n };\r\n\r\n getPlaceholderStyles = () => {\r\n const styles = {};\r\n\r\n if (this.state.sticky) {\r\n styles.height = this.element.current.clientHeight;\r\n\r\n if (this.props.debug === true) {\r\n styles.backgroundColor = '#ff00a5';\r\n }\r\n }\r\n\r\n if (this.props.visible === false) {\r\n styles.display = 'none';\r\n }\r\n\r\n return styles;\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n
\r\n \r\n {this.props.children}\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nSticky.propTypes = {\r\n visible: PropTypes.bool,\r\n children: PropTypes.node,\r\n stickyClass: PropTypes.string,\r\n debug: PropTypes.bool,\r\n};\r\n\r\nSticky.defaultProps = {\r\n stickyClass: 'is-sticky',\r\n};\r\n\r\nexport default Sticky;\r\n","import React from 'react';\r\nimport { getOffset } from '@utils';\r\n\r\nconst ProductListWithCategoriesNav = (props) => {\r\n if (props.groupedProducts === undefined || props.groupedProducts.length <= 1) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nfunction scrollToHookId(nodeId) {\r\n const targetElement = document.querySelector(`[data-scroll-hook=\"${nodeId}\"]`);\r\n\r\n if (targetElement !== null) {\r\n const top = getOffset(targetElement).top;\r\n\r\n window.scrollTo({\r\n left: 0,\r\n top: top - 50,\r\n behavior: 'smooth',\r\n });\r\n }\r\n}\r\n\r\nexport default ProductListWithCategoriesNav;\r\n","import React, { Fragment } from 'react';\r\nimport classNames from 'classnames';\r\nexport var ListCardSize;\r\n(function (ListCardSize) {\r\n ListCardSize[ListCardSize[\"Single\"] = 0] = \"Single\";\r\n ListCardSize[ListCardSize[\"Double\"] = 1] = \"Double\";\r\n})(ListCardSize || (ListCardSize = {}));\r\nexport var ListCardTheme;\r\n(function (ListCardTheme) {\r\n ListCardTheme[ListCardTheme[\"Black\"] = 0] = \"Black\";\r\n ListCardTheme[ListCardTheme[\"White\"] = 1] = \"White\";\r\n ListCardTheme[ListCardTheme[\"Red\"] = 2] = \"Red\";\r\n})(ListCardTheme || (ListCardTheme = {}));\r\nconst renderCard = (model, t) => {\r\n const containerClassName = classNames({\r\n 'product-card': true,\r\n 'product-card__container': true,\r\n 'product-card-single': true,\r\n active: true,\r\n 'promo-card': true,\r\n 'promo-card--black': model.cardTheme === ListCardTheme.Black,\r\n 'promo-card--white': model.cardTheme === ListCardTheme.White,\r\n 'promo-card--red': model.cardTheme === ListCardTheme.Red,\r\n });\r\n return (React.createElement(\"div\", { className: containerClassName },\r\n React.createElement(\"div\", { className: \"promo-card__inner-container\" },\r\n React.createElement(\"a\", { href: model.url },\r\n React.createElement(\"div\", { className: \"promo-card__inner\" },\r\n React.createElement(\"img\", { className: \"promo-card__img\", src: model.image, alt: \"\" }),\r\n React.createElement(\"div\", { className: \"promo-card__title-container\" },\r\n model.showNewTag && React.createElement(\"div\", { className: \"promo-card__new\" }, t('custom.new')),\r\n model.title.length > 0 && React.createElement(\"h2\", { className: \"promo-card__title\" }, model.title)),\r\n React.createElement(\"div\", { className: \"promo-card__content-container\" },\r\n model.content.length > 0 && React.createElement(\"h3\", { className: \"promo-card__content\" }, model.content),\r\n !model.hideButton && React.createElement(\"div\", { className: \"product-listing__button\" }, model.buttonText)))))));\r\n};\r\nconst ListingPromoCard = ({ model, t }) => {\r\n if (model.cardSize === ListCardSize.Double) {\r\n return (React.createElement(Fragment, null,\r\n renderCard(model, t),\r\n renderCard(model, t)));\r\n }\r\n return renderCard(model, t);\r\n};\r\nexport default ListingPromoCard;\r\n","import React, { Fragment } from 'react';\r\nimport Loader from '@react-components/Loader';\r\nimport useMedia from '@react/hooks/useMedia';\r\n\r\nimport ProductCard from './ProductCard';\r\nimport ListingPromoCard from './promo/ListingPromoCard';\r\n\r\nimport { withComparison } from '../../comparison/ComparisonContext';\r\n\r\nconst MOBILE_BREAKPOINT = '(min-width: 768px)';\r\n\r\nconst ProductList = ({\r\n comparison,\r\n loadMore,\r\n mobileFiltersOpen,\r\n pageIndex,\r\n pageSize,\r\n products: productsAll,\r\n productsLoading,\r\n t,\r\n}) => {\r\n // Get initial view mode.\r\n const isMobile = useMedia([MOBILE_BREAKPOINT], [false], true);\r\n\r\n const shouldShowFakeNew = (index, product) => {\r\n if (index === 0 || product.isNew === true) {\r\n return false;\r\n }\r\n\r\n const previousProduct = productsAll.products[index - 1];\r\n if ((index + 1) % 2 === 0 && previousProduct.isNew === true) {\r\n return true;\r\n }\r\n\r\n if (index === productsAll.length - 1) {\r\n return false;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n const { enabled: enableComparison, selected, setSelected } = comparison;\r\n const { canLoadMore, cards, products } = productsAll;\r\n\r\n if (productsLoading === true) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n const roundToEven = value => (Number.isNaN(value) ? 0.0 : 2 * Math.round(value / 2));\r\n\r\n return (\r\n \r\n \r\n {products.map((product, index) => {\r\n const card = cards.find(x => {\r\n let initialCardPosition = x.position - 1;\r\n\r\n if (isMobile) {\r\n initialCardPosition = roundToEven(initialCardPosition);\r\n }\r\n\r\n if (initialCardPosition === index) {\r\n return x;\r\n }\r\n\r\n if (x.displayOnEveryPage === false) {\r\n return undefined;\r\n }\r\n\r\n for (let i = 1; i <= pageIndex; i++) {\r\n const startOfPage = pageSize * i;\r\n let cardPosition = startOfPage + x.position - i;\r\n\r\n if (isMobile) {\r\n cardPosition = roundToEven(cardPosition);\r\n } else {\r\n cardPosition -= 1;\r\n }\r\n\r\n if (index === cardPosition) {\r\n return x;\r\n }\r\n }\r\n\r\n return undefined;\r\n });\r\n if (card !== undefined) {\r\n return (\r\n \r\n \r\n {\r\n event.preventDefault();\r\n setSelected(x.agilityId);\r\n }}\r\n t={t}\r\n />\r\n \r\n );\r\n }\r\n return (\r\n {\r\n event.preventDefault();\r\n setSelected(x.agilityId);\r\n }}\r\n t={t}\r\n />\r\n );\r\n })}\r\n
\r\n {canLoadMore === true && (\r\n
\r\n
\r\n {t('custom.loadmore')}\r\n
\r\n
\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default withComparison(ProductList);\r\n","import get from 'lodash/get';\r\nimport ACTIONS from '../actions';\r\nimport { post } from './api';\r\nimport { mapFilters } from '../utils';\r\n\r\nfunction fetchProductsInternal(params) {\r\n return dispatch => {\r\n dispatch(\r\n post(params.apiUrl, params, ACTIONS.PRODUCTS.FETCH_REQUEST, ACTIONS.PRODUCTS.FETCH_SUCCESS, ACTIONS.PRODUCTS.FETCH_ERROR),\r\n );\r\n };\r\n}\r\n\r\nexport function fetchProducts() {\r\n return (dispatch, getState) => {\r\n const state = getState();\r\n\r\n const params = get(state, 'app.api');\r\n const filters = get(state, 'app.filters') || [];\r\n // Map the array to a flat object so we get a nicer looking URL.\r\n const mappedFilters = mapFilters(filters.queryFilters);\r\n\r\n // Params for the request\r\n const requestParams = {\r\n ...params,\r\n allFilters: { ...mappedFilters },\r\n pageIndex: filters.pageIndex,\r\n };\r\n\r\n return dispatch(fetchProductsInternal(requestParams));\r\n };\r\n}\r\n","import queryString from 'query-string';\r\n\r\nclass ComparisonService {\r\n async getComparisonData(ids) {\r\n const query = queryString.stringify({\r\n ids,\r\n cultureCode: 'en-GB',\r\n });\r\n\r\n const url = `/api/comparison?${query}`;\r\n try {\r\n const response = await fetch(url, getRequestSettings('GET'));\r\n const data = await response.json();\r\n\r\n return data;\r\n } catch (error) {\r\n // eslint-disable-next-line no-console\r\n console.error(url, this, error);\r\n return null;\r\n }\r\n }\r\n}\r\n\r\n/** Return the settings for a fetch request. */\r\nfunction getRequestSettings(method, params = {}) {\r\n const request = {\r\n method,\r\n mode: 'cors',\r\n headers: {\r\n 'Content-Type': 'application/json; charset=utf-8',\r\n Accept: 'application/json',\r\n },\r\n };\r\n\r\n if (method === 'POST') {\r\n request.body = JSON.stringify(params);\r\n }\r\n\r\n return request;\r\n}\r\n\r\nexport default new ComparisonService();\r\n","import { useLayoutEffect, useRef } from 'react';\r\nimport { disableBodyScroll, enableBodyScroll } from 'body-scroll-lock';\r\n\r\nconst useBodyScrollLock = (trigger) => {\r\n const ref = useRef();\r\n\r\n useLayoutEffect(() => {\r\n if (trigger) {\r\n disableBodyScroll(ref.current);\r\n } else {\r\n enableBodyScroll(ref.current);\r\n }\r\n\r\n return () => enableBodyScroll(ref.current);\r\n }, [trigger]);\r\n\r\n return ref;\r\n};\r\n\r\nexport default useBodyScrollLock;\r\n","import Hammer from 'hammerjs';\r\nimport { useEffect, useRef } from 'react';\r\n\r\nconst useGesture = (options, events, callback) => {\r\n // A ref for the element to track gestures.\r\n const elementRef = useRef();\r\n\r\n // A ref for the Hammer instance.\r\n const instanceRef = useRef();\r\n\r\n // Create new instance of Hammer for gesture control.\r\n useEffect(() => {\r\n if (!elementRef.current) {\r\n return undefined;\r\n }\r\n\r\n instanceRef.current = new Hammer(elementRef.current, options);\r\n instanceRef.current.on(events, callback);\r\n\r\n return () => {\r\n if (!instanceRef.current) {\r\n return;\r\n }\r\n\r\n instanceRef.current.off(events, callback);\r\n instanceRef.current.destroy();\r\n };\r\n }, [elementRef.current, options, events, callback]);\r\n\r\n // Return array for destructuring.\r\n return elementRef;\r\n};\r\n\r\nexport default useGesture;\r\n","import classNames from 'classnames';\r\nimport React from 'react';\r\n\r\nimport IconChevron from '../icons/IconChevron';\r\nimport IconCompare from '../icons/IconCompare';\r\n\r\nimport { useComparison } from './ComparisonContext';\r\n\r\nconst ComparisonBar = ({ onToggle, translate }) => {\r\n const { enabled, selected } = useComparison();\r\n\r\n if (!enabled) {\r\n return null;\r\n }\r\n\r\n const containerClassName = classNames({\r\n 'comparison-bar': true,\r\n 'is-active': selected && selected.length,\r\n });\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n\r\n
\r\n
\r\n \r\n {translate('tti.comparison.compare-products', { count: selected.length })}\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default ComparisonBar;\r\n","import classNames from 'classnames';\r\nimport React, { useState } from 'react';\r\n\r\nimport IconChevron from '../icons/IconChevron';\r\n\r\nconst ComparisonVariantSelector = ({ model, selectedVariant, variants, onSelectVariant }) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const containerClassName = classNames({\r\n 'variant-selector': true,\r\n 'variant-selector--no-drop': !variants || variants.length <= 1,\r\n 'is-active': isOpen,\r\n });\r\n\r\n return (\r\n
\r\n {\r\n event.preventDefault();\r\n\r\n if (variants && variants.length > 1) {\r\n setIsOpen(!isOpen);\r\n }\r\n }}\r\n >\r\n \r\n {selectedVariant.Name}\r\n \r\n \r\n \r\n
\r\n {variants && variants.length > 1 ? (\r\n
\r\n {variants.map(variant => (\r\n {\r\n event.preventDefault();\r\n setIsOpen(false);\r\n onSelectVariant(model, variant);\r\n }}\r\n >\r\n \r\n {variant.Name}\r\n
\r\n ))}\r\n \r\n ) : null}\r\n \r\n );\r\n};\r\n\r\nexport default ComparisonVariantSelector;\r\n","import PropTypes from 'prop-types';\r\nimport React, { useEffect, useState } from 'react';\r\n\r\nimport { useScroller } from '@js/react/hooks/useScroller';\r\n\r\nimport ComparisonVariantSelector from './ComparisonVariantSelector';\r\n\r\n/** The prop type definition for the response data. */\r\nconst ComparisonResponseType = PropTypes.shape({\r\n Keys: PropTypes.arrayOf(PropTypes.string).isRequired,\r\n\r\n Models: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n Id: PropTypes.number,\r\n Name: PropTypes.string,\r\n Url: PropTypes.string,\r\n VariantIds: PropTypes.arrayOf(PropTypes.number),\r\n }),\r\n ).isRequired,\r\n\r\n Specifications: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n Key: PropTypes.string,\r\n Id: PropTypes.number,\r\n Name: PropTypes.string,\r\n Value: PropTypes.string,\r\n }),\r\n ).isRequired,\r\n\r\n Variants: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n Id: PropTypes.number,\r\n Name: PropTypes.string,\r\n Image1x: PropTypes.string,\r\n Image2x: PropTypes.string,\r\n Url: PropTypes.string,\r\n SpecificationIds: PropTypes.arrayOf(PropTypes.number),\r\n }),\r\n ).isRequired,\r\n});\r\n\r\nconst ComparisonTable = ({ data, translate }) => {\r\n const { scrollPosition, scrollerContainer } = useScroller();\r\n\r\n const [selectedVariantIds, setSelectedVariantIds] = useState(null);\r\n\r\n useEffect(() => {\r\n if (!data) {\r\n return;\r\n }\r\n\r\n const newSelectedVariantIds = {};\r\n\r\n // Set the initial variant id for each model to the first id.\r\n data.Models.forEach(model => {\r\n newSelectedVariantIds[model.Id] = model.VariantIds[0];\r\n });\r\n\r\n setSelectedVariantIds(newSelectedVariantIds);\r\n }, [data]);\r\n\r\n if (!data || !selectedVariantIds) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n {/* The header row, includes images and CTAs. */}\r\n \r\n\r\n {/* @todo: At some stage the \"performance guide\" section can be added here. */}\r\n\r\n {/* @todo: When attribute sets are a thing the \"section\" components should be repeatable for each set. */}\r\n \r\n
\r\n );\r\n\r\n /** Change the selected variant id. */\r\n function onSelectVariant(model, variant) {\r\n // Handle changing the selected variant for the specified model.\r\n const newSelectedVariantIds = { ...selectedVariantIds };\r\n newSelectedVariantIds[model.Id] = variant.Id;\r\n setSelectedVariantIds(newSelectedVariantIds);\r\n }\r\n};\r\n\r\nComparisonTable.propTypes = {\r\n data: ComparisonResponseType,\r\n translate: PropTypes.func.isRequired,\r\n};\r\n\r\nComparisonTable.defaultProps = {\r\n data: null,\r\n};\r\n\r\nconst ComparisonTableHeader = ({\r\n data,\r\n scrollPosition,\r\n selectedVariantIds,\r\n onSelectVariant,\r\n translate,\r\n}) => (\r\n \r\n {data.Models.map(model => {\r\n const variants = data.Variants.filter(v => model.VariantIds.includes(v.Id));\r\n const selectedVariant = variants.find(v => v.Id === selectedVariantIds[model.Id]);\r\n\r\n return (\r\n \r\n );\r\n })}\r\n \r\n);\r\n\r\nconst ComparisonTableHeaderCell = ({\r\n model,\r\n selectedVariant,\r\n variants,\r\n onSelectVariant,\r\n translate,\r\n}) => {\r\n const { cellRef } = useScroller();\r\n\r\n return (\r\n
\r\n \r\n\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nconst ComparisonTableSection = ({ data, scrollPosition, selectedVariantIds, title }) => (\r\n
\r\n

{title}

\r\n\r\n {data.Keys.map(key => {\r\n // Get a specification model with a matching key, this is just for the label.\r\n const specification = data.Specifications.find(s => s.Key === key);\r\n\r\n return (\r\n \r\n {data.Models.map(model => {\r\n // Get the selected variant for this model.\r\n const variants = data.Variants.filter(v => model.VariantIds.includes(v.Id));\r\n const selectedVariant = variants.find(v => v.Id === selectedVariantIds[model.Id]);\r\n\r\n // Get all the model specifications.\r\n const modelSpecifications = data.Specifications.filter(s =>\r\n selectedVariant.SpecificationIds.includes(s.Id),\r\n );\r\n\r\n const modelSpecification = modelSpecifications.find(s => s.Key === key);\r\n\r\n if (modelSpecification) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n );\r\n })}\r\n \r\n);\r\n\r\nconst ComparisonTableSectionCell = ({ label, value }) => (\r\n
\r\n \r\n \r\n
\r\n);\r\n\r\nconst ComparisonHeaderCellBorder = ({ size, borderSize, borderWidth }) =>\r\n // prettier-ignore\r\n \r\n {/* Top Left */}\r\n \r\n\r\n {/* Top Right */}\r\n \r\n\r\n {/* Bottom Left */}\r\n \r\n\r\n {/* Bottom Right */}\r\n \r\n ;\r\n\r\nComparisonHeaderCellBorder.propTypes = {\r\n size: PropTypes.number,\r\n borderSize: PropTypes.number,\r\n borderWidth: PropTypes.number,\r\n};\r\n\r\nComparisonHeaderCellBorder.defaultProps = {\r\n size: 440,\r\n borderSize: 20,\r\n borderWidth: 4,\r\n};\r\n\r\nexport default ComparisonTable;\r\n","import classNames from 'classnames';\r\nimport React, { useEffect, useState } from 'react';\r\n\r\nimport comparisonService from '@js/services/ComparisonService';\r\nimport useBodyScrollLock from '@js/react/hooks/useBodyScrollLock';\r\nimport useGesture from '@js/react/hooks/useGesture';\r\nimport { useScroller } from '@js/react/hooks/useScroller';\r\n\r\nimport IconChevron from '../icons/IconChevron';\r\n\r\nimport ComparisonBar from './ComparisonBar';\r\nimport { useComparison } from './ComparisonContext';\r\nimport ComparisonTable from './ComparisonTable';\r\n\r\nconst ComparisonOverlay = ({ t: translate }) => {\r\n const { enabled, selected } = useComparison();\r\n\r\n const gestureRef = useGesture({}, 'swiperight swipeleft', handleGesture);\r\n\r\n const { maxVisible, scrollIndex, setScrollIndex } = useScroller();\r\n\r\n const [isActive, setIsActive] = useState(false);\r\n const [data, setData] = useState(null);\r\n\r\n const scrollableRef = useBodyScrollLock(isActive);\r\n\r\n /** Reload comparison data if selected products or active state changes. */\r\n useEffect(() => {\r\n // ignore if not active.\r\n if (!isActive) {\r\n return;\r\n }\r\n\r\n // load comparable product data.\r\n loadData(selected);\r\n }, [isActive, selected]);\r\n\r\n if (!enabled) {\r\n return null;\r\n }\r\n\r\n // Get the css classes for the container based on state.\r\n const containerClassName = classNames({\r\n 'comparison-overlay': true,\r\n // show overlay if it is active and there is data available.\r\n 'is-active': isActive && data,\r\n // show bar if products are selected.\r\n 'is-peeking': selected && selected.length > 1,\r\n });\r\n\r\n return (\r\n
\r\n setIsActive(!isActive)} translate={translate} />\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n {translate('tti.comparison.previous')}\r\n \r\n \r\n\r\n \r\n {translate('tti.comparison.next')}\r\n \r\n \r\n
\r\n );\r\n\r\n function handleGesture(event) {\r\n if (event.type === 'swipeleft') {\r\n handleNext(event);\r\n return;\r\n }\r\n\r\n if (event.type === 'swiperight') {\r\n handlePrev(event);\r\n return;\r\n }\r\n\r\n // eslint-disable-next-line no-console\r\n console.log('Hammer: Unsupported gesture.');\r\n }\r\n\r\n function handleNext(event) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n setScrollIndex(Math.min(scrollIndex + 1, data.Models.length - maxVisible));\r\n }\r\n\r\n function handlePrev(event) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n setScrollIndex(Math.max(scrollIndex - 1, 0));\r\n }\r\n\r\n /** Load the comparison data and store in local state. */\r\n async function loadData(ids) {\r\n const result = await comparisonService.getComparisonData(ids);\r\n\r\n if (!result) {\r\n return;\r\n }\r\n\r\n setData(result);\r\n }\r\n};\r\n\r\nexport default ComparisonOverlay;\r\n","import React, { Component, Fragment } from 'react';\r\nimport { compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport get from 'lodash/get';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport { ScrollerProvider } from '@js/react/hooks/useScroller';\r\n\r\nimport {\r\n filterChanged,\r\n resetFilters,\r\n filterRemoved,\r\n toggleMobileFilters,\r\n toggleDropdown,\r\n setAllFilters,\r\n setAllFiltersByKey,\r\n clearAllFiltersByKey,\r\n loadMore,\r\n fetchInitialFilters,\r\n} from '../../redux/actioncreators/filters';\r\n\r\nimport { setRequestParams } from '../../redux/actioncreators/api';\r\nimport { updateRoute } from '../../redux/actioncreators/routes';\r\n\r\nimport ProductListWithCategories from '../../components/ProductListWithCategories';\r\nimport ProductHeader from '../../components/ProductHeader';\r\nimport Loader from '../../../general/Loader';\r\nimport MobilePopup from '../../components/mobile/MobilePopup';\r\nimport Sticky from '../../../general/Sticky';\r\nimport ProductListWithCategoriesNav from '../../components/ProductListWithCategoriesNav';\r\nimport ProductList from '../../components/ProductList';\r\nimport { fetchProducts } from '../../redux/actioncreators/products';\r\nimport { withComparison } from '../../../comparison/ComparisonContext';\r\nimport ComparisonOverlay from '../../../comparison/ComparisonOverlay';\r\n\r\nclass ProductListContainer extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n if (props.requestParams !== undefined) {\r\n props.setRequestParams(props.requestParams);\r\n }\r\n\r\n this.props.fetchInitialFilters();\r\n this.props.updateRoute();\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.router.location.key !== this.props.router.location.key) {\r\n this.props.fetchProducts();\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n {this.props.title &&

{this.props.title}

}\r\n
\r\n {this.props.showFilters === true && this.props.products.areAnyProducts && this.renderNav()}\r\n\r\n {this.props.requestParams.groupByCategory === true && this.renderGroupedProducts()}\r\n\r\n {this.props.requestParams.groupByCategory === false && this.renderProducts()}\r\n\r\n {this.props.showFilters === true && (\r\n \r\n )}\r\n
\r\n\r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n renderProducts = () => (\r\n \r\n );\r\n\r\n renderGroupedProducts = () => {\r\n const isInitialLoad = this.props.settings.firstLoad === true && this.props.products.isLoading === true;\r\n if (isInitialLoad === true) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n const groupedProductList = this.props.products.groupedProducts.map((x, index) => (\r\n \r\n ));\r\n\r\n return (\r\n \r\n \r\n {groupedProductList}\r\n \r\n );\r\n };\r\n\r\n renderNav = () => {\r\n if (this.props.stickyFilters === true) {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n areAnyProducts = () => {\r\n if (this.props.requestParams.groupByCategory === true) {\r\n if (this.props.products.isLoading === false && this.props.products.groupedProducts.length === 0) {\r\n return false;\r\n }\r\n } else if (this.props.products.isLoading === false && this.props.products.products.length === 0) {\r\n return false;\r\n }\r\n\r\n return true;\r\n };\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n products: get(state, 'app.products') || {},\r\n filters: get(state, 'app.filters'),\r\n settings: get(state, 'app.settings'),\r\n router: state.router,\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n fetchInitialFilters: () => dispatch(fetchInitialFilters()),\r\n fetchProducts: () => dispatch(fetchProducts()),\r\n updateRoute: () => dispatch(updateRoute()),\r\n filterChanged: filter => dispatch(filterChanged(filter)),\r\n setAllFilters: (filters, shouldUpdateRoute) => dispatch(setAllFilters(filters, shouldUpdateRoute)),\r\n resetFilters: () => dispatch(resetFilters()),\r\n filterRemoved: (key, value) => dispatch(filterRemoved(key, value)),\r\n toggleMobileFilters: () => dispatch(toggleMobileFilters()),\r\n toggleDropdown: key => dispatch(toggleDropdown(key)),\r\n setRequestParams: params => dispatch(setRequestParams(params)),\r\n setAllFiltersByKey: key => dispatch(setAllFiltersByKey(key)),\r\n clearAllFiltersByKey: key => dispatch(clearAllFiltersByKey(key)),\r\n loadMore: () => dispatch(loadMore()),\r\n});\r\n\r\nProductListContainer.propTypes = {\r\n t: PropTypes.func.isRequired,\r\n stickyFilters: PropTypes.bool.isRequired,\r\n showFilters: PropTypes.bool.isRequired,\r\n title: PropTypes.string,\r\n backUrl: PropTypes.string,\r\n requestParams: PropTypes.shape({\r\n includeAllCategories: PropTypes.bool.isRequired,\r\n groupByCategory: PropTypes.bool.isRequired,\r\n pageSize: PropTypes.number.isRequired,\r\n culture: PropTypes.string.isRequired,\r\n url: PropTypes.string.isRequired,\r\n apiUrl: PropTypes.string.isRequired,\r\n filterWhitelist: PropTypes.array.isRequired,\r\n }),\r\n};\r\n\r\nexport default compose(\r\n withComparison,\r\n connect(\r\n mapStateToProps,\r\n mapDispatchToProps,\r\n ),\r\n)(ProductListContainer);\r\n","import { useEffect, useState } from 'react';\r\nimport debounce from 'lodash/debounce';\r\n\r\nfunction useWindowSize() {\r\n const isClient = typeof window === 'object';\r\n\r\n function getSize() {\r\n return {\r\n width: isClient ? window.innerWidth : undefined,\r\n height: isClient ? window.innerHeight : undefined,\r\n };\r\n }\r\n\r\n const [windowSize, setWindowSize] = useState(getSize);\r\n\r\n useEffect(() => {\r\n if (!isClient) {\r\n return false;\r\n }\r\n\r\n const handleResize = debounce(() => {\r\n setWindowSize(getSize());\r\n }, 200);\r\n\r\n window.addEventListener('resize', handleResize);\r\n return () => window.removeEventListener('resize', handleResize);\r\n }, []); // Empty array ensures that effect is only run on mount and unmount\r\n\r\n return windowSize;\r\n}\r\n\r\nexport default useWindowSize;\r\n","import { useEffect, useState } from 'react';\r\n\r\nfunction useMedia(queries, values, defaultValue) {\r\n // Array containing a media query list for each query\r\n const mediaQueryLists = queries.map(q => window.matchMedia(q));\r\n\r\n // Function that gets value based on matching media query\r\n const getValue = () => {\r\n // Get index of first media query that matches\r\n const index = mediaQueryLists.findIndex(mql => mql.matches);\r\n // Return related value or defaultValue if none\r\n return typeof values[index] !== 'undefined' ? values[index] : defaultValue;\r\n };\r\n\r\n // State and setter for matched value\r\n const [value, setValue] = useState(getValue);\r\n\r\n useEffect(\r\n () => {\r\n // Event listener callback\r\n // Note: By defining getValue outside of useEffect we ensure that it has ...\r\n // ... current values of hook args (as this hook callback is created once on mount).\r\n const handler = () => setValue(getValue);\r\n // Set a listener for each media query with above handler as callback.\r\n mediaQueryLists.forEach(mql => mql.addListener(handler));\r\n // Remove listeners on cleanup\r\n return () => mediaQueryLists.forEach(mql => mql.removeListener(handler));\r\n },\r\n [], // Empty array ensures effect is only run on mount and unmount\r\n );\r\n\r\n return value;\r\n}\r\n\r\nexport default useMedia;\r\n","var React = require('react');\n\nfunction IconChevron (props) {\n return React.createElement(\"svg\",props,React.createElement(\"path\",{\"id\":\"icon-chevron\",\"d\":\"M9.406,0,10,.656,5,6,0,.656.594,0,5,4.688Z\",\"transform\":\"translate(0 10) rotate(-90)\",\"strokeWidth\":\"0\"}));\n}\n\nIconChevron.defaultProps = {\"viewBox\":\"0 0 6 10\"};\n\nmodule.exports = IconChevron;\n\nIconChevron.default = IconChevron;\n"],"sourceRoot":""}