{"version":3,"sources":["Shared/Breadcrumb/Breadcrumb.tsx","Shared/Icons/CheckIcon.tsx","Shared/Hooks/useOutsideClick.ts","SearchPage/Search.ts","Shared/Icons/ArrowDown.tsx","Shared/Grid/CardGrid.tsx","Shared/LoadMoreContainer/LoadMoreContainer.tsx","Shared/Image/Image.tsx","ProductCard/ProductCard.tsx","Shared/Checkbox/Checkbox.tsx","Shared/FilterItem/FilterItem.tsx","FilterContainerDesktop/FilterContainerDesktop.tsx","Shared/Icons/ArrowDownThick.tsx","CategoryPage/CategoryPage.tsx","Shared/Hooks/useOnScreen.js"],"names":["BreadcrumbContainer","styled","div","position","top","theme","desktopHeaderHeight","fontSize","beta","left","right","margin","x","maxWidth","screenMaxWidth","width","paddingTop","alignItems","display","paddingLeft","lineHeight","letterSpacing","SelectedSpan","span","fontWeight","bold","LinkText","textDecoration","BreadcrumbLink","KexLink","opacity","color","breadText","Seperator","normal","Breadcrumb","breadcrumb","useMedia","mediaQuery","mediaMinLarge","map","link","index","length","key","text","href","compose","Svg","xmlns","viewBox","css","fill","d","stroke","strokeWidth","strokeLinecap","strokeLinejoin","useOutsideClick","ref","callback","handleClick","e","current","contains","target","useEffect","document","addEventListener","removeEventListener","SearchTypes","abortController","AbortController","InitSearchResult","query","requestToken","organizationId","pageId","channelId","languageRoute","a","litiumContext","JSON","stringify","currentPageSystemId","productCategorySystemId","channelSystemId","url","canUseDOM","FetchSearch","InitCategoryItems","GetCategoryItems","currentData","productionClass","sortBy","sortDirection","res","newRes","productSearchResult","items","QuickSearch","abort","signal","EventDispatcher","dispatch","ON_SEARCH","Fetcher","data","resolve","height","fillRule","Grid","gridTemplateColumns","gridRowGap","spacing","gridColumnGap","bottom","media","mediaMinSmall","mediaMinMedium","mediaMinHuge","CardGrid","children","rest","LoadMoreContainer","numberOfItems","onChange","availableItems","disabled","isLoadingMore","isPlanograms","useAppSettingsData","translations","showMoreLabel","showMoreTextLabel","productsLabel","planogramLabel","LoadMoreContentContainer","ProgressBarWrapper","ProgressBarLabel","htmlFor","replace","toString","toLowerCase","ProgressBar","id","value","max","LoadMoreButton","onClick","ButtonText","data-isloading","StyledLoadingCircle","isLoading","gridColumnEnd","flexDirection","justifyContent","label","black","textAlign","marginBottom","progress","boxShadow","pseudo","backgroundColor","borderRadius","iconLightBlue","CtaButton","tau","padding","xy","minHeight","white","transform","transition","property","duration","timingFunction","visibility","LoadingCircle","gamma","Image","src","alt","onLoad","usePlaceHolder","title","lazy","useRef","useOnScreen","Img","aria-label","Card","overflow","minWidth","none","ImageArea","veryLightGray","ProductImage","y","objectFit","StyledCheckIcon","CheckIcon","marginLeft","StockStatus","borderTopRightRadius","borderBottomRightRadius","StockStatusCircle","notInStockRed","marginRight","inStockGreen","StockStatusText","font","size","alpha","weight","textTransform","ItemAddedText","ProductCardInfo","ProductSection","p","large","middleGray","ProductName","small","PriceContainer","MainPriceContainer","QuantityPriceWrapper","medium","Price","moreLarge","boldest","marginTop","tight","wider","PerPackageText","QuantityText","AddToCartButton","MoreInfoButton","AddToCart","verticalAlign","primaryBackground","StyledPlusIcon","PlusToggleIcon","StyledMinusIcon","MinusToggleIcon","QuantitySelector","MinusButton","button","cursor","QuantityInput","input","MozAppearance","WebkitAppearance","Root","gridGap","tiny","mediaMinScreen","ProductCard","item","image","name","code","price","quantity","inStock","mainCategory","unitPrice","isPlanogram","addToCartLabel","inStockLabel","notInStockLabel","quantityLabel","perPackageLabel","unitPriceLabel","pieceLabel","moreInformationLabel","addedToCartLabel","placeholderImages","productPlaceholderImg","productPlaceholder","planogramPlaceholderImg","planogramPlaceholder","useState","setIsLoading","inputQuantity","setInputQuantity","itemAdded","setItemAdded","data-instock","asLink","Number","type","min","onBlur","numb","UpdateCart","setTimeout","LabelContainer","whiteSpace","LabelInner","Input","zIndex","FilterText","Square","border","style","primaryBlue","pointerEvents","content","Label","Checkbox","checked","filterType","isChecked","setIsChecked","onInputChange","val","data-ischecked","encodeURIComponent","Wrapper","mediaMaxLarge","FilterItem","filter","onFilterChange","selected","FilterContainer","flex","grow","shrink","basis","ShowMoreText","ListContainer","maxHeight","overflowY","Title","paddingBottom","grayLine","PlusIconWrapper","CategoryContainer","ExpandButton","CategoryLink","lightBlue","FilterContainerDesktop","commerceLinks","filters","onFilterClick","selectedFilters","sectorLabel","showLessLabel","showMoreCategories","setShowMoreCategories","showMoreFilters","setShowMoreFilters","listRef","filterListRef","data-isopen","links","filterLink","attributes","includes","data-isexpanded","data-isactive","scrollTo","onLinkClick","clipRule","cache","products","sorters","nrOfItems","visibleItems","pathname","Main","main","TopSection","blockMaxWidthMobile","theta","maxWidthContentPage","NoResultText","StyledCardGrid","OptionsArea","ArrowDownWrapper","OptionsModalContainer","OptionsModal","listStyle","SelectedSorterWrapper","Sorter","SelectedSorter","SorterList","ul","SorterListItem","li","ShowMoreButton","TopOptionsWrapper","columnGap","SorterWrapper","StyledArrowDown","ArrowDown","OptionsButtonWrapper","flexBasis","radius","OptionsButton","PageIntro","epsilon","FilterType","Heading","h1","psi","ProductContainer","great","CategoryPage","filterLabel","sortOnLabel","noFilterResultLabel","useCurrentPage","pageHeading","pageIntroText","itemsPerLoad","preFetchedData","setPreFetchedData","dispatchLoading","useKexLoadingCircle","useUserStateData","categoryModalOpen","setCategoryModalOpen","filterModalOpen","setFilterModalOpen","sortModalOpen","setSortModalOpen","selectedSorter","setSelectedSorter","setSorters","sorterIsOpen","setSorterIsOpen","setIsLoadingMore","nrOfVisibleItems","setNrOfVisibleItems","disableButton","isDesktop","topOptionsRef","filterRef","sorterRef","categoryRef","setSelectedFilters","setFilters","window","location","prev","find","arr","isSelected","push","then","productFilters","count","getUrlParameter","sliced","slice","parseInt","updateFilters","filtersString","join","undefined","sorter","onSorterChange","filterQuery","concat","splice","indexOf","console","log","data-fullwidth","scrollIntoView","behavior","inline","onCategoryButtonClick","product","itemsToShow","loadMoreItems","rootMargin","once","isIntersecting","setIntersecting","observerObject","setObserverObject","elm","observer","IntersectionObserver","entry","observe","Object","isEmpty","unobserve","IS_SERVER_CONTEXT"],"mappings":"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","file":"Dist/build-client/static/js/CategoryPage-CategoryPage.5f7ac515.chunk.js","sourcesContent":["import React from 'react';\r\nimport KexLink from '../../Shared/KexLink/KexLink';\r\nimport { styled, theme } from '../../../Features/Theme';\r\nimport Link from '../../Shared/Models/Link.interface';\r\nimport useMedia from '../Hooks/useMedia';\r\n\r\ntype PropTypes = {\r\n breadcrumb: Link[];\r\n};\r\n\r\nfunction Breadcrumb({ breadcrumb }: PropTypes) {\r\n const isDesktop = useMedia(theme.mediaQuery.mediaMinLarge);\r\n return isDesktop ? (\r\n \r\n {breadcrumb.map((link, index) =>\r\n breadcrumb.length === index + 1 ? (\r\n
\r\n {link.text}\r\n
\r\n ) : (\r\n \r\n {link.text}\r\n / \r\n \r\n )\r\n )}\r\n
\r\n ) : (\r\n <>\r\n );\r\n}\r\n\r\nconst BreadcrumbContainer = styled.div({\r\n position: 'absolute',\r\n top: theme.desktopHeaderHeight,\r\n fontSize: theme.beta,\r\n left: 0,\r\n right: 0,\r\n margin: { x: 'auto' },\r\n maxWidth: theme.screenMaxWidth,\r\n width: '100%',\r\n paddingTop: '18px',\r\n alignItems: 'center',\r\n display: 'flex',\r\n paddingLeft: '32px',\r\n lineHeight: 1.33,\r\n letterSpacing: 0.45,\r\n});\r\n\r\nconst SelectedSpan = styled.span({\r\n fontWeight: theme.fontWeight.bold,\r\n lineHeight: 1.33,\r\n});\r\n\r\nconst LinkText = styled.span({\r\n textDecoration: 'underline',\r\n});\r\n\r\nconst BreadcrumbLink = styled(KexLink, {\r\n display: 'flex',\r\n opacity: 0.9,\r\n color: theme.breadText,\r\n});\r\n\r\nconst Seperator = styled.span({\r\n margin: { x: '6px' },\r\n fontWeight: theme.fontWeight.normal,\r\n textDecoration: 'none',\r\n});\r\n\r\nexport default Breadcrumb;\r\n","import React from 'react';\r\nimport { styled, StyledProps } from '@glitz/react';\r\n\r\nfunction CartIcon({ compose }: StyledProps) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default styled(CartIcon);\r\n","import { useEffect } from 'react';\r\n\r\nconst useOutsideClick = (ref: React.RefObject, callback: () => void) => {\r\n const handleClick = (e: MouseEvent) => {\r\n if (ref.current && !ref.current.contains(e.target)) {\r\n callback();\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n document.addEventListener('click', handleClick);\r\n\r\n return () => {\r\n document.removeEventListener('click', handleClick);\r\n };\r\n });\r\n};\r\n\r\nexport default useOutsideClick;\r\n","import { useEffect, useState } from 'react';\r\nimport useSWR, { mutate } from 'swr';\r\nimport Fetcher from '../Shared/Common/Fetcher';\r\nimport { IS_PRODUCTION_ENV } from '../Shared/Configs/EnvConfig';\r\nimport { useAppSettingsData } from '../Shared/AppSettingsProvider/AppSettingsProvider';\r\nimport { canUseDOM } from '../Shared/Common/Helpers';\r\nimport { EventDispatcher, ON_SEARCH } from '../Shared/Common/EventDispatcher';\r\nimport useCurrentPage from '../Shared/Hooks/useCurrentPage';\r\nimport FullSearchResult from '../Search/Models/FullSearchResult.interface';\r\nimport { useUserStateData } from '../Shared/UserContextProvider/UserContextProvider';\r\nimport { AnyMxRecord } from 'dns';\r\n\r\nlet abortController: AbortController = new AbortController();\r\nlet hasMounted = false;\r\n\r\nexport enum SearchTypes {\r\n Products = 'getProduct',\r\n Content = 'getContent',\r\n Sector = 'getSector',\r\n Documents = 'getDocument',\r\n Empty = '',\r\n}\r\n\r\nexport async function InitSearchResult(\r\n query: string,\r\n requestToken: string,\r\n organizationId: string,\r\n pageId: string,\r\n channelId: string,\r\n languageRoute?: string\r\n) {\r\n const litiumContext = JSON.stringify({\r\n currentPageSystemId: pageId,\r\n productCategorySystemId: pageId,\r\n channelSystemId: channelId,\r\n });\r\n\r\n const url = canUseDOM()\r\n ? `/api/${languageRoute}/search/GetSearchResult?query=${query}&organizationId=${organizationId}&getProduct=true&getContent=true&getDocument=true`\r\n : '';\r\n\r\n return await FetchSearch(url, litiumContext, requestToken);\r\n}\r\n\r\nexport async function GetSearchResult(\r\n query: string,\r\n pageId: string,\r\n channelId: string,\r\n languageRoute: string,\r\n requestToken: string,\r\n organizationId: string,\r\n take: number,\r\n skip: number,\r\n type: SearchTypes,\r\n currentData: FullSearchResult\r\n) {\r\n const litiumContext = JSON.stringify({\r\n currentPageSystemId: pageId,\r\n productCategorySystemId: pageId,\r\n channelSystemId: channelId,\r\n });\r\n\r\n const url = canUseDOM()\r\n ? `/api/${languageRoute}/search/GetSearchResult?query=${query}&organizationId=${organizationId}&${type}=true&take=${take}&skip=${skip}`\r\n : '';\r\n\r\n var id = '/api/search/GetSearchResult';\r\n const res = await FetchSearch(url, litiumContext, requestToken);\r\n if (res) {\r\n let newRes;\r\n switch (type) {\r\n case SearchTypes.Products:\r\n newRes = {\r\n ...currentData,\r\n productSearchResult: {\r\n ...res.productSearchResult,\r\n items: [\r\n ...currentData.productSearchResult.items,\r\n ...res.productSearchResult.items,\r\n ],\r\n },\r\n };\r\n break;\r\n case SearchTypes.Content:\r\n newRes = {\r\n ...currentData,\r\n contentSearchResult: {\r\n ...res.contentSearchResult,\r\n items: [\r\n ...currentData.contentSearchResult.items,\r\n ...res.contentSearchResult.items,\r\n ],\r\n },\r\n };\r\n break;\r\n default:\r\n newRes = res;\r\n }\r\n\r\n return newRes;\r\n }\r\n}\r\n\r\nexport async function InitCategoryItems(\r\n requestToken: string,\r\n organizationId: string,\r\n languageRoute?: string,\r\n pageId?: string,\r\n channelId?: string\r\n) {\r\n const litiumContext = JSON.stringify({\r\n currentPageSystemId: pageId,\r\n productCategorySystemId: pageId,\r\n channelSystemId: channelId,\r\n });\r\n\r\n const url = canUseDOM()\r\n ? `/api/${languageRoute}/category/GetCategoryItems?organizationId=${organizationId}`\r\n : '';\r\n\r\n return await FetchSearch(url, litiumContext, requestToken);\r\n}\r\n\r\nexport async function GetCategoryItems(\r\n pageId: string,\r\n channelId: string,\r\n languageRoute: string,\r\n requestToken: string,\r\n organizationId: string,\r\n currentData?: FullSearchResult,\r\n productionClass?: string,\r\n sortBy?: string,\r\n sortDirection?: number\r\n) {\r\n const litiumContext = JSON.stringify({\r\n currentPageSystemId: pageId,\r\n productCategorySystemId: pageId,\r\n channelSystemId: channelId,\r\n });\r\n\r\n const url = canUseDOM()\r\n ? `/api/${languageRoute}/category/GetCategoryItems?organizationId=${organizationId}${\r\n sortBy ? `&sortBy=${sortBy}` : ''\r\n }${sortDirection ? `&sortDirection=${sortDirection}` : ''}${\r\n productionClass ? productionClass : ''\r\n }`\r\n : '';\r\n\r\n const res = await FetchSearch(url, litiumContext, requestToken);\r\n if (res && currentData) {\r\n let newRes;\r\n newRes = {\r\n ...res,\r\n productSearchResult: {\r\n ...res.productSearchResult,\r\n items: [\r\n ...currentData.productSearchResult.items,\r\n ...res.productSearchResult.items,\r\n ],\r\n },\r\n };\r\n return newRes;\r\n }\r\n return res;\r\n}\r\n\r\nexport async function QuickSearch(\r\n url: string,\r\n requestToken: string,\r\n pageId: string,\r\n channelId: string\r\n) {\r\n const litiumContext = JSON.stringify({\r\n currentPageSystemId: pageId,\r\n productCategorySystemId: pageId,\r\n channelSystemId: channelId,\r\n });\r\n const res = await FetchSearch(url, litiumContext, requestToken);\r\n\r\n return res;\r\n}\r\n\r\nfunction BaseSearch(url: string, id: string, requestToken: string) {\r\n const [searchResult, setSearchResult] = useState(\r\n {} as FullSearchResult\r\n );\r\n\r\n const litiumContext = JSON.stringify({\r\n currentPageSystemId: '96d94c1b-eb76-4cc7-b09a-3092b3c9aae7',\r\n productCategorySystemId: '96d94c1b-eb76-4cc7-b09a-3092b3c9aae7',\r\n channelSystemId: '951186b2-04af-47c4-98c8-3935ed7753e2',\r\n });\r\n const { data: fechedSearchResult } = useSWR(\r\n `${url}-${id}`,\r\n () => FetchSearch(url, litiumContext, requestToken),\r\n {\r\n initialData: undefined,\r\n revalidateOnFocus: IS_PRODUCTION_ENV,\r\n dedupingInterval: 0,\r\n }\r\n );\r\n\r\n useEffect(() => {\r\n if (!hasMounted) {\r\n hasMounted = true;\r\n } else {\r\n if (fechedSearchResult) {\r\n setSearchResult(fechedSearchResult);\r\n }\r\n }\r\n }, [fechedSearchResult]);\r\n\r\n return searchResult;\r\n}\r\n\r\nfunction FetchSearch(url: string, litiumContext: string, requestToken: string) {\r\n abortController.abort();\r\n abortController = new AbortController();\r\n const signal = abortController.signal;\r\n EventDispatcher.dispatch(ON_SEARCH, true);\r\n\r\n return Fetcher(\r\n url,\r\n signal,\r\n (data, resolve) => {\r\n resolve(data);\r\n EventDispatcher.dispatch(ON_SEARCH, false);\r\n },\r\n litiumContext,\r\n requestToken\r\n );\r\n}\r\n","import React from 'react';\r\nimport { styled } from '../../Theme';\r\nimport { StyledProps } from '@glitz/react';\r\n\r\nfunction ArrowDown({ compose }: StyledProps) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default styled(ArrowDown);\r\n","import React from 'react';\r\nimport { theme, styled } from '../../Theme';\r\nimport { media } from '@glitz/core';\r\nimport { StyledProps } from '@glitz/react';\r\n\r\ntype PropTypes = StyledProps & {\r\n children: React.ReactNode;\r\n};\r\n\r\nfunction CardGrid({ children, compose, ...rest }: PropTypes) {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nconst Grid = styled.div({\r\n width: '100%',\r\n display: 'grid',\r\n gridTemplateColumns: 'repeat(4,minmax(0,1fr))',\r\n gridRowGap: theme.spacing(9),\r\n gridColumnGap: theme.spacing(4),\r\n // gridGap: theme.tiny,\r\n margin: { x: 'auto', bottom: 'auto' },\r\n ...media(theme.mediaQuery.mediaMinSmall, {\r\n // gridTemplateColumns: '1fr 1fr',\r\n // gridGap: theme.tiny,\r\n }),\r\n ...media(theme.mediaQuery.mediaMinMedium, {\r\n gridTemplateColumns: 'repeat(6,minmax(0,1fr))',\r\n // gridGap: theme.large,\r\n }),\r\n ...media(theme.mediaQuery.mediaMinLarge, {\r\n gridTemplateColumns: 'repeat(12,minmax(0,1fr))',\r\n gridRowGap: theme.spacing(12),\r\n gridColumnGap: theme.spacing(6),\r\n // gridGap: theme.large,\r\n }),\r\n ...media(theme.mediaQuery.mediaMinHuge, {\r\n // gridTemplateColumns: '1fr 1fr 1fr 1fr',\r\n // gridGap: theme.great,\r\n }),\r\n});\r\n\r\nexport default CardGrid;\r\n","import React from 'react';\r\nimport { styled, theme } from '../../Theme';\r\nimport { media, pseudo } from '@glitz/core';\r\nimport { useAppSettingsData } from '../AppSettingsProvider/AppSettingsProvider';\r\nimport { mediaQuery } from '../../Theme/mediaQueries';\r\nimport { LoadingCircle } from '../Icons';\r\nimport CtaButton from '../CtaButton/CtaButton';\r\n\r\ntype PropType = {\r\n numberOfItems: number;\r\n onChange: () => void;\r\n availableItems: number;\r\n disabled?: boolean;\r\n isLoadingMore?: boolean;\r\n isPlanograms?: boolean;\r\n};\r\n\r\nconst LoadMoreContainer = ({\r\n numberOfItems,\r\n onChange,\r\n availableItems,\r\n disabled,\r\n isLoadingMore,\r\n isPlanograms,\r\n}: PropType) => {\r\n const {\r\n translations: {\r\n 'common/showMore': showMoreLabel,\r\n 'common/showMoreText': showMoreTextLabel,\r\n 'common/products': productsLabel,\r\n 'common/planogram': planogramLabel,\r\n },\r\n } = useAppSettingsData();\r\n\r\n return (\r\n \r\n \r\n \r\n {showMoreTextLabel &&\r\n showMoreTextLabel.replace(\r\n '{0}',\r\n numberOfItems >= availableItems\r\n ? availableItems.toString()\r\n : numberOfItems.toString()\r\n )}{' '}\r\n {availableItems}{' '}\r\n {!isPlanograms\r\n ? productsLabel.toLowerCase()\r\n : planogramLabel.toLowerCase()}\r\n \r\n \r\n \r\n onChange()}>\r\n {showMoreLabel}\r\n {isLoadingMore && }\r\n \r\n \r\n );\r\n};\r\n\r\nexport default LoadMoreContainer;\r\n\r\nconst LoadMoreContentContainer = styled.div({\r\n gridColumnEnd: 'span 4',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n margin: { x: 'auto', top: 0, bottom: theme.spacing(6) },\r\n ...media(theme.mediaQuery.mediaMinMedium, {\r\n gridColumnEnd: 'span 6',\r\n }),\r\n ...media(theme.mediaQuery.mediaMinLarge, {\r\n gridColumnEnd: 'span 12',\r\n margin: { top: '22px', bottom: theme.spacing(16) },\r\n }),\r\n});\r\n\r\nconst ProgressBarWrapper = styled.div({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n});\r\n\r\nconst ProgressBarLabel = styled.label({\r\n fontSize: '16px',\r\n color: theme.black,\r\n textAlign: 'center',\r\n marginBottom: theme.spacing(3),\r\n});\r\n\r\nconst ProgressBar = styled.progress({\r\n maxWidth: '345px',\r\n width: '100%',\r\n height: '8px',\r\n boxShadow: '0px 10px 20px rgba(0, 0, 0, 0.15)',\r\n ...pseudo(['::-moz-progress-bar'], {\r\n backgroundColor: 'white',\r\n borderRadius: '8px',\r\n }),\r\n ...pseudo(['::-webkit-progress-value'], {\r\n backgroundColor: theme.iconLightBlue,\r\n borderRadius: '8px',\r\n }),\r\n ...pseudo(['::-webkit-progress-bar'], {\r\n backgroundColor: 'white',\r\n borderRadius: '8px',\r\n }),\r\n});\r\n\r\nconst LoadMoreButton = styled(CtaButton, {\r\n maxWidth: '365px',\r\n width: '100%',\r\n position: 'relative',\r\n alignItems: 'center',\r\n fontSize: theme.tau,\r\n padding: { xy: theme.spacing(3) },\r\n minHeight: '40px',\r\n margin: { x: theme.spacing(4), top: theme.spacing(4) },\r\n ...media(mediaQuery.mediaMinLarge, {\r\n padding: { xy: theme.spacing(4) },\r\n width: '365px',\r\n }),\r\n});\r\n\r\nconst ButtonText = styled.span({\r\n color: theme.white,\r\n fontSize: '15px',\r\n transform: 'uppercase',\r\n transition: {\r\n property: 'all',\r\n duration: '0.2s',\r\n timingFunction: 'linear',\r\n },\r\n ...pseudo([':nth-child(n)[data-isloading=\"true\"]'], {\r\n visibility: 'hidden',\r\n opacity: 0,\r\n }),\r\n});\r\n\r\nconst StyledLoadingCircle = styled(LoadingCircle, {\r\n color: theme.white,\r\n height: theme.gamma,\r\n margin: { xy: 'auto' },\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n});\r\n","import React, { useRef } from 'react';\r\nimport useOnScreen from '../../Shared/Hooks/useOnScreen';\r\nimport { StyledProps } from '@glitz/react';\r\nimport { styled } from '../../Theme';\r\n\r\ntype PropType = StyledProps & {\r\n src: string;\r\n alt: string;\r\n imgFit?: boolean;\r\n onLoad?: () => void;\r\n usePlaceHolder?: boolean;\r\n title?: string;\r\n lazy?: boolean;\r\n};\r\n\r\nconst Image = ({\r\n src,\r\n alt = '',\r\n onLoad,\r\n usePlaceHolder,\r\n title = '',\r\n lazy = true,\r\n compose,\r\n}: PropType) => {\r\n const ref = useRef(null);\r\n const onScreen = useOnScreen({ ref });\r\n\r\n return onScreen || !lazy ? (\r\n \r\n ) : usePlaceHolder ? (\r\n
\r\n ) : (\r\n \r\n );\r\n};\r\n\r\nexport default Image;\r\n","import React, { useState, useEffect } from 'react';\r\nimport { styled, theme } from '../Theme';\r\nimport Image from '../Shared/Image/Image';\r\nimport { LoadingCircle } from '../Shared/Icons';\r\nimport { useAppSettingsData } from '../Shared/AppSettingsProvider/AppSettingsProvider';\r\nimport { UpdateCart } from '../Cart/Cart';\r\nimport ProductCardModel from './Models/ProductCardModel.interface';\r\nimport CtaButton from '../Shared/CtaButton/CtaButton';\r\nimport { pseudo, media } from '@glitz/core';\r\nimport { mediaQuery } from '../Theme/mediaQueries';\r\nimport PlusToggleIcon from '../Shared/Icons/PlusToggleIcon';\r\nimport MinusToggleIcon from '../Shared/Icons/MinusToggleIcon';\r\nimport CheckIcon from '../Shared/Icons/CheckIcon';\r\nimport KexLink from '../Shared/KexLink/KexLink';\r\n\r\ntype ProductCardType = {\r\n item: ProductCardModel;\r\n inEditMode?: Boolean;\r\n isPlanogram?: boolean;\r\n};\r\n\r\nfunction ProductCard({\r\n item: {\r\n image,\r\n name,\r\n code,\r\n url,\r\n price,\r\n quantity,\r\n inStock,\r\n mainCategory,\r\n unitPrice,\r\n },\r\n isPlanogram = false,\r\n}: ProductCardType) {\r\n const {\r\n translations: {\r\n 'productPage/addToCart': addToCartLabel,\r\n 'productPage/inStock': inStockLabel,\r\n 'productPage/notInStock': notInStockLabel,\r\n 'common/quantity': quantityLabel,\r\n 'common/perPackage': perPackageLabel,\r\n 'common/unitPrice': unitPriceLabel,\r\n 'common/piece': pieceLabel,\r\n 'common/moreInformation': moreInformationLabel,\r\n 'productPage/addedToCart': addedToCartLabel,\r\n },\r\n placeholderImages: {\r\n productPlaceholder: productPlaceholderImg,\r\n planogramPlaceholder: planogramPlaceholderImg,\r\n },\r\n languageRoute,\r\n } = useAppSettingsData();\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [inputQuantity, setInputQuantity] = useState('1');\r\n const [itemAdded, setItemAdded] = useState(false);\r\n\r\n const onInputChange = (value: string) => {\r\n if (Number(value) < 0) {\r\n setInputQuantity('1');\r\n return;\r\n }\r\n setInputQuantity(value);\r\n };\r\n\r\n const onInputBlur = (numb: string) => {\r\n Number(numb) < 1 && setInputQuantity('1');\r\n };\r\n\r\n const addToCart = () => {\r\n const updated = UpdateCart(\r\n code,\r\n Number(inputQuantity),\r\n languageRoute,\r\n '',\r\n setIsLoading\r\n );\r\n if (updated) {\r\n setItemAdded(true);\r\n setTimeout(() => {\r\n setItemAdded(false);\r\n }, 2000);\r\n }\r\n };\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n {inStock ? (\r\n <>\r\n \r\n {inStockLabel}\r\n \r\n ) : (\r\n <>\r\n \r\n {notInStockLabel}\r\n \r\n )}\r\n \r\n \r\n \r\n {mainCategory}\r\n {name}\r\n \r\n \r\n {price}\r\n /{perPackageLabel}\r\n \r\n
\r\n \r\n \r\n {quantityLabel}/{perPackageLabel}: \r\n \r\n \r\n {quantity}\r\n {pieceLabel}\r\n \r\n \r\n \r\n {unitPriceLabel}: \r\n {unitPrice}:-\r\n \r\n
\r\n
\r\n {inStock && (\r\n \r\n {!isPlanogram ? (\r\n <>\r\n \r\n \r\n setInputQuantity(\r\n (Number(inputQuantity) - 1).toString()\r\n )\r\n }\r\n >\r\n \r\n \r\n onInputChange(e.target.value)}\r\n onBlur={e => onInputBlur(e.target.value)}\r\n />\r\n \r\n setInputQuantity(\r\n (Number(inputQuantity) + 1).toString()\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n addToCart()}>\r\n \r\n {addToCartLabel}\r\n \r\n {isLoading && (\r\n \r\n )}\r\n {itemAdded && !isLoading && (\r\n \r\n {addedToCartLabel}\r\n \r\n \r\n )}\r\n \r\n \r\n ) : (\r\n \r\n {moreInformationLabel}\r\n \r\n )}\r\n \r\n )}\r\n
\r\n
\r\n
\r\n \r\n );\r\n}\r\nconst Card = styled.div({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n position: 'relative',\r\n backgroundColor: theme.white,\r\n overflow: 'hidden',\r\n borderRadius: '10px',\r\n minWidth: theme.none,\r\n width: '100%',\r\n transition: {\r\n property: 'box-shadow',\r\n },\r\n ...media(mediaQuery.mediaMinLarge, {\r\n ':hover': {\r\n boxShadow: '0px 4px 50px rgba(0, 0, 0, 0.2)',\r\n },\r\n }),\r\n});\r\n\r\nconst ImageArea = styled(KexLink, {\r\n position: 'relative',\r\n backgroundColor: theme.veryLightGray,\r\n});\r\n\r\nconst ProductImage = styled(Image, {\r\n height: '135px',\r\n width: '96px',\r\n margin: { x: 'auto', y: theme.spacing(3) },\r\n objectFit: 'contain',\r\n});\r\n\r\nconst StyledCheckIcon = styled(CheckIcon, {\r\n height: '14px',\r\n width: '14px',\r\n marginLeft: '8px',\r\n});\r\n\r\nconst StockStatus = styled.div({\r\n display: 'flex',\r\n alignItems: 'center',\r\n position: 'absolute',\r\n bottom: 0,\r\n padding: { y: '7px', x: '10px' },\r\n backgroundColor: theme.white,\r\n borderTopRightRadius: '20px',\r\n borderBottomRightRadius: '20px',\r\n margin: { bottom: theme.spacing(3) },\r\n});\r\n\r\nconst StockStatusCircle = styled.div({\r\n borderRadius: '50%',\r\n width: '8px',\r\n height: '8px',\r\n backgroundColor: theme.notInStockRed,\r\n marginRight: theme.spacing(2),\r\n ...pseudo([':nth-child(n)[data-instock=\"true\"]'], {\r\n backgroundColor: theme.inStockGreen,\r\n }),\r\n});\r\n\r\nconst StockStatusText = styled.span({\r\n color: theme.black,\r\n font: { size: theme.alpha, weight: theme.fontWeight.bold },\r\n textTransform: 'uppercase',\r\n});\r\n\r\nconst ItemAddedText = styled.div({\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n color: theme.white,\r\n height: theme.gamma,\r\n margin: { xy: 'auto' },\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n});\r\n\r\nconst ProductCardInfo = styled.div({\r\n padding: {\r\n xy: '10px',\r\n },\r\n backgroundColor: theme.white,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n height: '100%',\r\n});\r\n\r\nconst ProductSection = styled.p({\r\n fontSize: theme.large,\r\n color: theme.middleGray,\r\n lineHeight: '14.4px',\r\n});\r\n\r\nconst ProductName = styled.p({\r\n font: { size: '20px', weight: theme.fontWeight.bold },\r\n color: theme.black,\r\n lineHeight: '21.6px',\r\n margin: {\r\n top: theme.small,\r\n bottom: theme.large,\r\n },\r\n});\r\n\r\nconst PriceContainer = styled.div({\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n margin: {\r\n top: 'auto',\r\n bottom: theme.small,\r\n },\r\n});\r\n\r\nconst MainPriceContainer = styled.div({\r\n display: 'flex',\r\n alignItems: 'center',\r\n});\r\n\r\nconst QuantityPriceWrapper = styled.div({\r\n fontSize: '15px',\r\n display: 'flex',\r\n justifyContent: 'end',\r\n ...pseudo(':not(:last-child)', { marginBottom: theme.medium }),\r\n});\r\n\r\nconst Price = styled.span({\r\n font: {\r\n size: theme.moreLarge,\r\n weight: theme.fontWeight.boldest,\r\n },\r\n marginTop: theme.spacing(2),\r\n lineHeight: theme.lineHeight.tight,\r\n letterSpacing: theme.letterSpacing.wider,\r\n color: theme.black,\r\n});\r\n\r\nconst PerPackageText = styled.p({\r\n marginTop: theme.spacing(4),\r\n fontSize: '12px',\r\n marginLeft: '3px',\r\n});\r\n\r\nconst QuantityText = styled.span({\r\n color: theme.middleGray,\r\n fontSize: theme.large,\r\n});\r\n\r\nconst AddToCartButton = styled(CtaButton, {\r\n position: 'relative',\r\n alignItems: 'center',\r\n width: '100%',\r\n fontSize: theme.tau,\r\n padding: { xy: '10px' },\r\n marginLeft: theme.spacing(2),\r\n minHeight: '40px',\r\n ...media(mediaQuery.mediaMinLarge, {\r\n padding: { xy: theme.spacing(3) },\r\n }),\r\n});\r\n\r\nconst MoreInfoButton = styled(CtaButton, {\r\n position: 'relative',\r\n alignItems: 'center',\r\n width: '100%',\r\n fontSize: theme.tau,\r\n padding: { xy: '10px' },\r\n minHeight: '40px',\r\n ...media(mediaQuery.mediaMinLarge, {\r\n padding: { xy: theme.spacing(3) },\r\n }),\r\n});\r\n\r\nconst ButtonText = styled.span({\r\n transition: {\r\n property: 'all',\r\n duration: '0.2s',\r\n timingFunction: 'linear',\r\n },\r\n ...pseudo([':nth-child(n)[data-isloading=\"true\"]'], {\r\n visibility: 'hidden',\r\n opacity: 0,\r\n }),\r\n});\r\n\r\nconst AddToCart = styled.div({\r\n display: 'flex',\r\n alignItems: 'center',\r\n verticalAlign: 'bottom',\r\n backgroundColor: theme.primaryBackground,\r\n padding: { xy: theme.spacing(3) },\r\n});\r\n\r\nconst StyledPlusIcon = styled(PlusToggleIcon, {\r\n height: '18px',\r\n width: '18px',\r\n fill: theme.black,\r\n});\r\n\r\nconst StyledMinusIcon = styled(MinusToggleIcon, {\r\n height: '18px',\r\n width: '18px',\r\n fill: theme.black,\r\n});\r\n\r\nconst QuantitySelector = styled.div({\r\n backgroundColor: theme.white,\r\n borderRadius: '100px',\r\n display: 'flex',\r\n height: '40px',\r\n alignItems: 'center',\r\n padding: { x: theme.spacing(3) },\r\n});\r\n\r\nconst MinusButton = styled.button({\r\n ':disabled': {\r\n cursor: 'default',\r\n opacity: 0.6,\r\n },\r\n});\r\n\r\nconst QuantityInput = styled.input({\r\n width: theme.spacing(7),\r\n backgroundColor: theme.white,\r\n textAlign: 'center',\r\n MozAppearance: 'textfield', // hide number arrows Firefox\r\n ...pseudo(['::-webkit-outer-spin-button', '::-webkit-inner-spin-button'], {\r\n WebkitAppearance: 'none', // hide number arrows Chrome, Safari, Edge, Opera\r\n margin: { xy: 0 },\r\n }),\r\n});\r\n\r\nconst Root = styled.div({\r\n gridColumnEnd: 'span 4',\r\n display: 'flex',\r\n width: '100%',\r\n minWidth: theme.none,\r\n borderRadius: '10px',\r\n ...media(theme.mediaQuery.mediaMinSmall, {\r\n gridColumnEnd: 'span 2',\r\n gridGap: theme.tiny,\r\n }),\r\n ...media(theme.mediaQuery.mediaMinLarge, {\r\n gridColumnEnd: 'span 6',\r\n }),\r\n ...media(theme.mediaQuery.mediaMinHuge, {\r\n gridColumnEnd: 'span 4',\r\n }),\r\n ...media(theme.mediaQuery.mediaMinScreen, {\r\n gridColumnEnd: 'span 3',\r\n }),\r\n});\r\n\r\nconst StyledLoadingCircle = styled(LoadingCircle, {\r\n color: theme.white,\r\n height: theme.gamma,\r\n margin: { xy: 'auto' },\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n});\r\n\r\nexport default ProductCard;\r\n","import React, { useState } from 'react';\r\n\r\nimport { theme, styled } from '../../Theme';\r\nimport { pseudo } from '@glitz/core';\r\n\r\nimport CheckIcon from '../../Shared/Icons/CheckIcon';\r\n\r\ntype PropType = {\r\n name: string;\r\n value: boolean;\r\n label?: string;\r\n checked?: boolean;\r\n onChange?: (value: string, checked: boolean, filterType: string) => void;\r\n filterType?: string;\r\n};\r\n\r\nfunction Checkbox({\r\n name,\r\n value,\r\n label,\r\n checked = false,\r\n onChange,\r\n filterType,\r\n}: PropType) {\r\n const [isChecked, setIsChecked] = useState(checked);\r\n\r\n const onInputChange = (checked: boolean, val: string) => {\r\n setIsChecked(checked);\r\n onChange && filterType && onChange(val, checked, filterType);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst Root = styled.div({\r\n display: 'flex',\r\n position: 'relative',\r\n justifyContent: 'space-between',\r\n});\r\n\r\nconst LabelContainer = styled.div({\r\n display: 'flex',\r\n whiteSpace: 'pre-wrap',\r\n width: '100%',\r\n});\r\n\r\nconst LabelInner = styled.div({ display: 'inline-flex', alignItems: 'center' });\r\n\r\nconst Input = styled.input({\r\n opacity: 0,\r\n position: 'absolute',\r\n});\r\n\r\nconst StyledCheckIcon = styled(CheckIcon, {\r\n position: 'absolute',\r\n height: '18px',\r\n width: '14px',\r\n zIndex: 10,\r\n left: '1px',\r\n});\r\n\r\nconst FilterText = styled.span({});\r\n\r\nconst Square = styled.div({\r\n position: 'relative',\r\n marginRight: '16px',\r\n left: 0,\r\n width: '18px',\r\n height: '18px',\r\n borderRadius: '5px',\r\n border: {\r\n xy: {\r\n style: 'solid',\r\n width: theme.tiny,\r\n color: theme.primaryBlue,\r\n },\r\n },\r\n pointerEvents: 'none',\r\n transition: {\r\n property: 'opacity',\r\n duration: '0.3s',\r\n timingFunction: 'linear',\r\n },\r\n ...pseudo([':nth-child(n)[data-ischecked=\"true\"]'], {\r\n ...pseudo(':after', {\r\n transform: 'scale(1)',\r\n }),\r\n }),\r\n ...pseudo(':after', {\r\n width: '16px',\r\n height: '100%',\r\n borderRadius: '3px',\r\n content: '\" \"',\r\n display: 'block',\r\n position: 'relative',\r\n backgroundColor: theme.primaryBlue,\r\n transform: 'scale(0)',\r\n transition: {\r\n property: 'transform',\r\n duration: '0.2s',\r\n timingFunction: 'linear',\r\n },\r\n }),\r\n});\r\n\r\nconst Label = styled.label({\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n fontSize: '14px',\r\n cursor: 'pointer',\r\n});\r\n\r\nexport default Checkbox;\r\n","import React from 'react';\r\nimport Checkbox from '../Checkbox/Checkbox';\r\nimport { theme, styled } from '../../Theme';\r\nimport KexContentLinkModel from '../../Search/Models/KexContentLinkModel.interface';\r\nimport { media } from '@glitz/core';\r\nimport { mediaQuery } from '../../Theme/mediaQueries';\r\n\r\ntype PropType = {\r\n filter: KexContentLinkModel;\r\n filterType: string;\r\n onFilterChange?: any;\r\n selected?: boolean;\r\n};\r\n\r\nfunction FilterItem({\r\n filter,\r\n filterType,\r\n onFilterChange,\r\n selected,\r\n}: PropType) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst Wrapper = styled.div({\r\n ...media(mediaQuery.mediaMaxLarge, {\r\n paddingLeft: theme.spacing(4),\r\n }),\r\n padding: { y: theme.spacing(4) },\r\n});\r\n\r\nexport default FilterItem;\r\n","import React, { useState, useRef } from 'react';\r\n\r\nimport { useAppSettingsData } from '../Shared/AppSettingsProvider/AppSettingsProvider';\r\nimport { styled, theme } from '../Theme';\r\nimport IHeaderLink from '../Shared/Models/Headers/HeaderLink.interface';\r\nimport { pseudo } from '@glitz/core';\r\nimport KexLink from '../Shared/KexLink/KexLink';\r\nimport PlusToggleIcon from '../Shared/Icons/PlusToggleIcon';\r\nimport IHeaderLinkModel from '../Shared/AutoMapInterfaces/IHeaderLinkModel.interface';\r\nimport FilterItem from '../Shared/FilterItem/FilterItem';\r\nimport KexContentLinkModel from '../Search/Models/KexContentLinkModel.interface';\r\n\r\ntype PropType = {\r\n pageId: string;\r\n commerceLinks: IHeaderLinkModel[];\r\n filters?: KexContentLinkModel[];\r\n onFilterClick?: any;\r\n selectedFilters?: any;\r\n};\r\n\r\nfunction FilterContainerDesktop({\r\n pageId,\r\n commerceLinks,\r\n filters,\r\n onFilterClick,\r\n selectedFilters,\r\n}: PropType) {\r\n const {\r\n translations: {\r\n 'common/sector': sectorLabel,\r\n 'common/showMore': showMoreLabel,\r\n 'common/showLess': showLessLabel,\r\n },\r\n } = useAppSettingsData();\r\n\r\n const [showMoreCategories, setShowMoreCategories] = useState(false);\r\n const [showMoreFilters, setShowMoreFilters] = useState(false);\r\n\r\n const listRef = useRef(null);\r\n const filterListRef = useRef(null);\r\n\r\n const onLinkClick = () => {\r\n setShowMoreCategories(false);\r\n listRef.current?.scrollTo(0, 0);\r\n setShowMoreFilters(false);\r\n filterListRef.current?.scrollTo(0, 0);\r\n };\r\n\r\n return (\r\n \r\n {filters &&\r\n !!filters.length &&\r\n filters.map(filter => (\r\n \r\n {filter.name}\r\n \r\n <>\r\n {filter.links.map(filterLink => (\r\n \r\n ))}\r\n \r\n \r\n {filter && filter.links.length > 4 && (\r\n setShowMoreFilters(!showMoreFilters)}\r\n >\r\n \r\n \r\n \r\n \r\n {!showMoreFilters ? showMoreLabel : showLessLabel}\r\n \r\n \r\n )}\r\n \r\n ))}\r\n \r\n {sectorLabel}\r\n \r\n {commerceLinks &&\r\n !!commerceLinks.length &&\r\n commerceLinks.map((link: IHeaderLink) => (\r\n onLinkClick()}\r\n >\r\n {link.text}\r\n \r\n ))}\r\n \r\n {commerceLinks && commerceLinks.length > 4 && (\r\n setShowMoreCategories(!showMoreCategories)}\r\n >\r\n \r\n \r\n \r\n \r\n {!showMoreCategories ? showMoreLabel : showLessLabel}\r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n}\r\n\r\nconst FilterContainer = styled.div({\r\n font: { size: theme.gamma, weight: theme.fontWeight.bold },\r\n color: theme.black,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n maxWidth: '280px',\r\n flex: { grow: 0, shrink: 0, basis: '280px' },\r\n textTransform: 'uppercase',\r\n marginRight: theme.spacing(16),\r\n marginTop: theme.spacing(4),\r\n});\r\n\r\nconst ShowMoreText = styled.span({\r\n marginLeft: theme.spacing(2),\r\n});\r\n\r\nconst ListContainer = styled.div({\r\n maxHeight: '250px',\r\n overflow: 'hidden',\r\n transition: {\r\n property: 'all',\r\n duration: '0.2s',\r\n timingFunction: 'linear',\r\n },\r\n ...pseudo([':nth-child(n)[data-isopen=\"true\"]'], {\r\n maxHeight: '400px',\r\n overflowY: 'scroll',\r\n ...pseudo('::-webkit-scrollbar', {\r\n height: '12px',\r\n width: '8px',\r\n borderRadius: '100px',\r\n backgroundColor: theme.white,\r\n border: {\r\n y: {\r\n style: 'solid',\r\n width: theme.tiny,\r\n color: theme.veryLightGray,\r\n },\r\n },\r\n }),\r\n ...pseudo('::-webkit-scrollbar-thumb', {\r\n width: '60px',\r\n borderRadius: '100px',\r\n backgroundColor: theme.primaryBlue,\r\n }),\r\n }),\r\n});\r\n\r\nconst Title = styled.span({\r\n font: { size: '16px', weight: theme.fontWeight.boldest },\r\n paddingBottom: theme.spacing(6),\r\n marginBottom: theme.spacing(1),\r\n border: {\r\n bottom: { width: '2px', style: 'solid', color: theme.grayLine },\r\n },\r\n});\r\n\r\nconst PlusIconWrapper = styled.div({\r\n transition: {\r\n property: 'all',\r\n duration: '0.2s',\r\n timingFunction: 'linear',\r\n },\r\n ...pseudo([':nth-child(n)[data-isexpanded=\"true\"]'], {\r\n transform: 'rotate(45deg)',\r\n }),\r\n});\r\n\r\nconst StyledPlusIcon = styled(PlusToggleIcon, {\r\n width: '16px',\r\n height: '16px',\r\n});\r\n\r\nconst CategoryContainer = styled.div({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n marginBottom: theme.spacing(11),\r\n});\r\n\r\nconst ExpandButton = styled.div({\r\n display: 'flex',\r\n alignItems: 'center',\r\n color: theme.black,\r\n font: { size: '14px', weight: theme.fontWeight.bold },\r\n margin: { x: '-5px', top: theme.spacing(1) },\r\n padding: { xy: theme.spacing(5), left: 0 },\r\n cursor: 'pointer',\r\n textTransform: 'uppercase',\r\n ...pseudo([':nth-child(n)[data-showless=\"true\"]'], {\r\n margin: { x: 0 },\r\n }),\r\n});\r\n\r\nconst CategoryLink = styled(KexLink, {\r\n display: 'flex',\r\n fontSize: '14px',\r\n color: theme.black,\r\n lineHeight: '16.8px',\r\n padding: { xy: theme.spacing(4) },\r\n justifyContent: 'space-between',\r\n border: {\r\n bottom: {\r\n width: '1px',\r\n style: 'solid',\r\n color: theme.veryLightGray,\r\n },\r\n },\r\n ...pseudo([':nth-child(n)[data-isactive=\"true\"]'], {\r\n borderRadius: '10px',\r\n backgroundColor: theme.lightBlue,\r\n }),\r\n});\r\n\r\nexport default FilterContainerDesktop;\r\n","import React from 'react';\r\nimport { styled } from '../../Theme';\r\nimport { StyledProps } from '@glitz/react';\r\n\r\nfunction ArrowDownThick({ compose }: StyledProps) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default styled(ArrowDownThick);\r\n","import React, { useState, useEffect, useRef } from 'react';\r\nimport useCurrentPage from '../Shared/Hooks/useCurrentPage';\r\nimport ICategoryPage from './Models/CategoryPageModel.interface';\r\nimport { InitCategoryItems, GetCategoryItems } from '../SearchPage/Search';\r\nimport ProductCard from '../ProductCard/ProductCard';\r\nimport CardGrid from '../Shared/Grid/CardGrid';\r\nimport { theme, styled } from '../Theme';\r\nimport { useAppSettingsData } from '../Shared/AppSettingsProvider/AppSettingsProvider';\r\nimport { media, pseudo } from '@glitz/core';\r\nimport ProductCardModel from '../ProductCard/Models/ProductCardModel.interface';\r\nimport IHeaderLink from '../Shared/Models/Headers/HeaderLink.interface';\r\nimport Breadcrumb from '../Shared/Breadcrumb/Breadcrumb';\r\nimport useMedia from '../Shared/Hooks/useMedia';\r\nimport ArrowDown from '../Shared/Icons/ArrowDown';\r\nimport KexLink from '../Shared/KexLink/KexLink';\r\nimport PlusToggleIcon from '../Shared/Icons/PlusToggleIcon';\r\nimport FilterContainerDesktop from '../FilterContainerDesktop/FilterContainerDesktop';\r\nimport { useUserStateData } from '../Shared/UserContextProvider/UserContextProvider';\r\nimport SearchSorter from '../Search/Models/SearchSorter.interface';\r\nimport { useKexLoadingCircle } from '../Shared/Loading/KexLoadingCircle/KexLoadingCircle';\r\nimport ArrowDownThick from '../Shared/Icons/ArrowDownThick';\r\nimport useOutsideClick from '../Shared/Hooks/useOutsideClick';\r\nimport { mediaQuery } from '../Theme/mediaQueries';\r\nimport KexContentLinkModel from '../Search/Models/KexContentLinkModel.interface';\r\nimport LoadMoreContainer from '../Shared/LoadMoreContainer/LoadMoreContainer';\r\nimport FilterItem from '../Shared/FilterItem/FilterItem';\r\nimport { getUrlParameter } from '../Shared/Common/Helpers';\r\n\r\nconst cache = {\r\n products: {\r\n items: [] as any[],\r\n filters: [] as any[],\r\n sorters: [] as any[],\r\n availableItems: 12,\r\n nrOfItems: 0,\r\n visibleItems: [] as any[],\r\n },\r\n filters: [] as any,\r\n pathname: '',\r\n};\r\n\r\nfunction CategoryPage() {\r\n const {\r\n translations: {\r\n 'common/filter': filterLabel,\r\n 'common/sector': sectorLabel,\r\n 'common/showMore': showMoreLabel,\r\n 'categoryPage/sortOn': sortOnLabel,\r\n 'categoryPage/noFilterResult': noFilterResultLabel,\r\n },\r\n languageRoute,\r\n commerceLinks,\r\n requestToken,\r\n } = useAppSettingsData();\r\n const {\r\n pageHeading,\r\n pageIntroText,\r\n pageId,\r\n channelId,\r\n breadcrumb,\r\n itemsPerLoad,\r\n } = useCurrentPage();\r\n\r\n const [preFetchedData, setPreFetchedData] = useState(cache.products);\r\n\r\n const dispatchLoading = useKexLoadingCircle();\r\n const { organizationId } = useUserStateData();\r\n\r\n const [categoryModalOpen, setCategoryModalOpen] = useState(false);\r\n const [filterModalOpen, setFilterModalOpen] = useState(false);\r\n const [sortModalOpen, setSortModalOpen] = useState(false);\r\n const [showMoreCategories, setShowMoreCategories] = useState(false);\r\n const [selectedSorter, setSelectedSorter] = useState();\r\n const [sorters, setSorters] = useState();\r\n\r\n const [sorterIsOpen, setSorterIsOpen] = useState(false);\r\n const [isLoadingMore, setIsLoadingMore] = useState(false);\r\n const [nrOfVisibleItems, setNrOfVisibleItems] = useState(\r\n itemsPerLoad\r\n );\r\n\r\n const disableButton =\r\n preFetchedData &&\r\n cache.products?.visibleItems?.length >= cache.products.nrOfItems;\r\n\r\n const isDesktop = useMedia(theme.mediaQuery.mediaMinLarge);\r\n\r\n const topOptionsRef = useRef(null);\r\n\r\n const filterRef = useRef(null);\r\n const sorterRef = useRef(null);\r\n const categoryRef = useRef(null);\r\n const [selectedFilters, setSelectedFilters] = useState([]);\r\n const [filters, setFilters] = useState([]);\r\n\r\n useEffect(() => {\r\n if (\r\n cache.pathname &&\r\n cache.pathname === window.location.pathname &&\r\n cache.products\r\n ) {\r\n setPreFetchedData((prev: any) => ({\r\n ...prev,\r\n products: cache.products,\r\n }));\r\n setFilters(cache.products.filters);\r\n setSorters(cache.products.sorters);\r\n setSelectedSorter(\r\n cache.products.sorters.find((x: SearchSorter) => x.selected)\r\n );\r\n let arr: string[] = [];\r\n if (\r\n cache.products.filters[0] &&\r\n !!cache.products.filters[0].links.length\r\n ) {\r\n const cachedSelectedFilters = cache.products.filters[0].links.filter(\r\n (x: any) => x.isSelected === true\r\n );\r\n cachedSelectedFilters.map((x: any) =>\r\n arr.push(`&${cache.products.filters[0].attributes.value}=${x.name}`)\r\n );\r\n cache.products.filters[0].links.find((x: any) => x.isSelected);\r\n setSelectedFilters(arr);\r\n }\r\n return;\r\n }\r\n dispatchLoading('add');\r\n InitCategoryItems(\r\n requestToken,\r\n organizationId,\r\n languageRoute,\r\n pageId,\r\n channelId\r\n ).then(data => {\r\n if (\r\n data &&\r\n data.productSearchResult &&\r\n data.productSearchResult.numberOfItems > 0\r\n ) {\r\n setPreFetchedData((prev: any) => ({\r\n ...prev,\r\n products: data.productSearchResult,\r\n filters: data.productFilters,\r\n }));\r\n cache.pathname = window.location.pathname;\r\n if (data.productSearchResult.sorters) {\r\n cache.products.sorters = data.productSearchResult.sorters;\r\n }\r\n cache.products.availableItems = data.productSearchResult.availableItems;\r\n let count = getUrlParameter('count');\r\n let sliced = data.productSearchResult.items.slice(\r\n 0,\r\n count ? parseInt(count) : itemsPerLoad\r\n );\r\n if (data.productSearchResult.items) {\r\n cache.products.items = data.productSearchResult.items;\r\n }\r\n cache.products.filters = data.productFilters;\r\n cache.products.nrOfItems = data.productSearchResult.numberOfItems;\r\n cache.products.visibleItems = sliced;\r\n setFilters(data.productFilters);\r\n setSelectedFilters([]);\r\n setSelectedSorter(\r\n data.productSearchResult.sorters.find(x => x.selected)\r\n );\r\n setSorters(data.productSearchResult.sorters);\r\n } else {\r\n }\r\n dispatchLoading('remove');\r\n });\r\n }, [pageId]);\r\n\r\n const loadMoreItems = () => {\r\n if (preFetchedData) {\r\n setIsLoadingMore(true);\r\n let sliced = preFetchedData.products?.items?.slice(\r\n cache.products?.visibleItems?.length,\r\n cache.products?.visibleItems?.length + itemsPerLoad\r\n );\r\n let itemsToShow = cache.products?.visibleItems?.concat(sliced);\r\n cache.products.availableItems = nrOfVisibleItems + itemsPerLoad;\r\n cache.products.visibleItems = itemsToShow;\r\n setIsLoadingMore(false);\r\n nrOfVisibleItems && setNrOfVisibleItems(nrOfVisibleItems + itemsPerLoad);\r\n }\r\n };\r\n\r\n const onFilterChange = (filter: string[], checked: boolean) => {\r\n let filters: string[] = [];\r\n if (checked) {\r\n filters = filter.concat(selectedFilters);\r\n setSelectedFilters(filters);\r\n } else {\r\n filters = selectedFilters.slice(0, selectedFilters.length);\r\n filters.splice(filters.indexOf(filter[0]), 1);\r\n setSelectedFilters(filters);\r\n }\r\n updateFilters(filters);\r\n };\r\n\r\n const updateFilters = (filters: string[]) => {\r\n let filtersString: string = `${filters.map(x => `${x}`).join('')}`;\r\n dispatchLoading('add');\r\n GetCategoryItems(\r\n pageId,\r\n channelId,\r\n languageRoute,\r\n requestToken,\r\n organizationId,\r\n undefined,\r\n filtersString\r\n ).then(data => {\r\n if (data) {\r\n setPreFetchedData((prev: any) => ({\r\n ...prev,\r\n products: data.productSearchResult,\r\n }));\r\n cache.products.nrOfItems = data.productSearchResult?.numberOfItems;\r\n let sliced = data.productSearchResult?.items.slice(0, itemsPerLoad);\r\n if (data.productSearchResult?.items) {\r\n cache.products.visibleItems = sliced;\r\n }\r\n if (data.productFilters) {\r\n cache.products.filters = data.productFilters;\r\n }\r\n cache.products.visibleItems = sliced;\r\n data.productFilters && setFilters(data.productFilters);\r\n data.productSearchResult &&\r\n setSorters(data.productSearchResult?.sorters);\r\n setSelectedSorter(\r\n data?.productSearchResult?.sorters.find(sorter => sorter.selected)\r\n );\r\n setNrOfVisibleItems(itemsPerLoad);\r\n }\r\n dispatchLoading('remove');\r\n });\r\n };\r\n\r\n useOutsideClick(sorterRef, () => {\r\n sortModalOpen && setSortModalOpen(false);\r\n });\r\n\r\n useOutsideClick(categoryRef, () => {\r\n categoryModalOpen && setCategoryModalOpen(false);\r\n });\r\n\r\n useOutsideClick(filterRef, () => {\r\n filterModalOpen && setFilterModalOpen(false);\r\n });\r\n\r\n const onSorterChange = (sortBy: string, sortDirection: number) => {\r\n setSortModalOpen(false);\r\n if (preFetchedData != undefined) {\r\n let filters: string = '';\r\n if (selectedFilters && !!selectedFilters.length) {\r\n filters = `${selectedFilters.map(x => `${x}`).join('')}`;\r\n }\r\n dispatchLoading('add');\r\n GetCategoryItems(\r\n pageId,\r\n channelId,\r\n languageRoute,\r\n requestToken,\r\n organizationId,\r\n undefined,\r\n filters,\r\n sortBy,\r\n sortDirection\r\n ).then(data => {\r\n setPreFetchedData((prev: any) => ({\r\n ...prev,\r\n products: data.productSearchResult,\r\n }));\r\n let sliced = data.productSearchResult?.items.slice(0, itemsPerLoad);\r\n cache.products.visibleItems = sliced;\r\n cache.products.sorters = data.productSearchResult?.sorters;\r\n setSorters(data.productSearchResult?.sorters);\r\n setSelectedSorter(\r\n data?.productSearchResult?.sorters.find(sorter => sorter.selected)\r\n );\r\n setNrOfVisibleItems(itemsPerLoad);\r\n dispatchLoading('remove');\r\n });\r\n }\r\n };\r\n\r\n const onFilterClick = (val: string, checked: boolean, filterType: string) => {\r\n let filters: string[] = [];\r\n let filterQuery = `&${filterType}=${val}`;\r\n filters.push(filterQuery);\r\n onFilterChange(filters, checked);\r\n };\r\n\r\n const onCategoryButtonClick = () => {\r\n if (!categoryModalOpen) {\r\n topOptionsRef?.current?.scrollIntoView({\r\n behavior: 'smooth',\r\n inline: 'center',\r\n });\r\n }\r\n setCategoryModalOpen(!categoryModalOpen);\r\n setShowMoreCategories(false);\r\n };\r\n\r\n const onFilterButtonClick = () => {\r\n setFilterModalOpen(!filterModalOpen);\r\n };\r\n\r\n const onSortButtonClick = () => {\r\n setSortModalOpen(!sortModalOpen);\r\n };\r\n console.log(preFetchedData);\r\n return (\r\n
\r\n {!!breadcrumb.length && }\r\n \r\n {pageHeading}\r\n {pageIntroText && {pageIntroText}}\r\n \r\n {!isDesktop && (\r\n <>\r\n \r\n \r\n {filters && !!filters.length && (\r\n \r\n onFilterButtonClick()}\r\n >\r\n {filterLabel}\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {preFetchedData && (\r\n \r\n onCategoryButtonClick()}\r\n >\r\n {sectorLabel}\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n {filterModalOpen && (\r\n \r\n \r\n \r\n {filters &&\r\n filters.map(filter => (\r\n
\r\n {filter.name}\r\n {filter.links.map(filterLink => (\r\n \r\n ))}\r\n
\r\n ))}\r\n
\r\n
\r\n
\r\n )}\r\n {categoryModalOpen && (\r\n \r\n \r\n \r\n {commerceLinks &&\r\n !!commerceLinks.length &&\r\n commerceLinks.map((link: IHeaderLink) => (\r\n setCategoryModalOpen(false)}\r\n >\r\n {link.text}\r\n \r\n ))}\r\n \r\n {commerceLinks &&\r\n commerceLinks.length > 4 &&\r\n !showMoreCategories && (\r\n setShowMoreCategories(true)}\r\n >\r\n
\r\n \r\n
\r\n {showMoreLabel}\r\n \r\n )}\r\n
\r\n
\r\n )}\r\n {selectedSorter && (\r\n \r\n onSortButtonClick()}\r\n >\r\n {selectedSorter?.text}{' '}\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {sortModalOpen && (\r\n \r\n \r\n {sorters !== undefined &&\r\n sorters.map(\r\n (sorter: SearchSorter) =>\r\n !sorter.selected && (\r\n \r\n onSorterChange(\r\n sorter.sortBy,\r\n sorter.sortDirection\r\n )\r\n }\r\n >\r\n {sorter.text}\r\n \r\n )\r\n )}\r\n \r\n \r\n )}\r\n
\r\n \r\n )}\r\n \r\n {isDesktop && (\r\n \r\n )}\r\n \r\n {isDesktop && selectedSorter && (\r\n \r\n setSorterIsOpen(!sorterIsOpen)}>\r\n \r\n \r\n \r\n {sortOnLabel} {selectedSorter?.text}\r\n \r\n \r\n \r\n \r\n \r\n {sorterIsOpen && (\r\n \r\n {sorters !== undefined &&\r\n sorters.map(\r\n (sorter: SearchSorter) =>\r\n !sorter.selected && (\r\n \r\n onSorterChange(\r\n sorter.sortBy,\r\n sorter.sortDirection\r\n )\r\n }\r\n >\r\n {sorter.text}\r\n \r\n )\r\n )}\r\n \r\n )}\r\n \r\n \r\n \r\n )}\r\n {(preFetchedData &&\r\n preFetchedData.products &&\r\n preFetchedData.products.nrOfItems > 0) ||\r\n (!!selectedFilters.length && !preFetchedData?.products && (\r\n {noFilterResultLabel}\r\n ))}\r\n {cache.products?.visibleItems?.map((product: ProductCardModel) => (\r\n \r\n ))}\r\n {cache.products?.visibleItems &&\r\n !!cache.products?.visibleItems?.length && (\r\n loadMoreItems()}\r\n availableItems={cache.products.nrOfItems}\r\n disabled={disableButton}\r\n isLoadingMore={isLoadingMore}\r\n />\r\n )}\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nconst Main = styled.main({\r\n backgroundColor: theme.primaryBackground,\r\n});\r\n\r\nconst TopSection = styled.div({\r\n margin: { y: theme.spacing(8), x: 'auto' },\r\n width: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n maxWidth: theme.blockMaxWidthMobile,\r\n padding: {\r\n x: '15px',\r\n },\r\n ...media(theme.mediaQuery.mediaMinMedium, {\r\n margin: { y: theme.theta, x: 'auto' },\r\n }),\r\n ...media(theme.mediaQuery.mediaMinLarge, {\r\n margin: { top: theme.spacing(24), bottom: theme.spacing(13) },\r\n padding: { x: theme.medium, y: theme.none },\r\n maxWidth: theme.maxWidthContentPage,\r\n }),\r\n});\r\n\r\nconst NoResultText = styled.div({\r\n gridColumnEnd: 'span 12',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n color: theme.black,\r\n ...media(mediaQuery.mediaMinLarge, {\r\n marginTop: theme.spacing(16),\r\n }),\r\n});\r\n\r\nconst StyledCardGrid = styled(CardGrid, { maxWidth: theme.screenMaxWidth });\r\n\r\nconst OptionsArea = styled.div({\r\n marginTop: theme.spacing(5),\r\n margin: { x: '15px' },\r\n});\r\n\r\nconst ArrowDownWrapper = styled.div({\r\n marginLeft: theme.spacing(2),\r\n transition: {\r\n property: 'all',\r\n duration: '0.2s',\r\n timingFunction: 'linear',\r\n },\r\n ...pseudo([':nth-child(n)[data-isopen=\"true\"]'], {\r\n transform: 'rotate(180deg)',\r\n }),\r\n});\r\n\r\nconst OptionsModalContainer = styled.div({ position: 'relative', zIndex: 10 });\r\n\r\nconst OptionsModal = styled.div({\r\n color: theme.black,\r\n position: 'absolute',\r\n backgroundColor: theme.white,\r\n top: theme.spacing(1),\r\n padding: { xy: theme.spacing(1) },\r\n borderRadius: '6px',\r\n boxShadow: '0px 10px 20px rgba(0, 0, 0, 0.15)',\r\n width: '100%',\r\n listStyle: 'none',\r\n});\r\n\r\nconst SelectedSorterWrapper = styled.div({\r\n display: 'flex',\r\n alignItems: 'center',\r\n});\r\n\r\nconst Sorter = styled.div({\r\n backgroundColor: theme.white,\r\n borderRadius: '10px',\r\n});\r\n\r\nconst ListContainer = styled.div({\r\n maxHeight: '244px',\r\n overflow: 'hidden',\r\n transition: {\r\n property: 'all',\r\n duration: '0.2s',\r\n timingFunction: 'linear',\r\n },\r\n ...pseudo([':nth-child(n)[data-isopen=\"true\"]'], {\r\n maxHeight: '400px',\r\n overflowY: 'scroll',\r\n ...pseudo('::-webkit-scrollbar', {\r\n height: '12px',\r\n width: '8px',\r\n borderRadius: '100px',\r\n backgroundColor: theme.white,\r\n border: {\r\n y: {\r\n style: 'solid',\r\n width: theme.tiny,\r\n color: theme.veryLightGray,\r\n },\r\n },\r\n }),\r\n ...pseudo('::-webkit-scrollbar-thumb', {\r\n width: '60px',\r\n borderRadius: '100px',\r\n backgroundColor: theme.primaryBlue,\r\n }),\r\n }),\r\n});\r\n\r\nconst SelectedSorter = styled.div({\r\n position: 'relative',\r\n padding: { xy: theme.spacing(4) },\r\n cursor: 'pointer',\r\n});\r\n\r\nconst SorterList = styled.ul({\r\n position: 'absolute',\r\n listStyle: 'none',\r\n overflow: 'hidden',\r\n backgroundColor: theme.white,\r\n paddingTop: theme.spacing(3),\r\n zIndex: 10,\r\n width: '100%',\r\n left: 0,\r\n right: 0,\r\n borderRadius: '10px',\r\n boxShadow: '0px 10px 20px rgba(0, 0, 0, 0.15)',\r\n});\r\n\r\nconst SorterListItem = styled.li({\r\n fontSize: '14px',\r\n padding: { xy: theme.spacing(4) },\r\n ':hover': {\r\n backgroundColor: theme.lightBlue,\r\n },\r\n});\r\n\r\nconst ShowMoreButton = styled.div({\r\n display: 'flex',\r\n alignItems: 'center',\r\n color: theme.black,\r\n font: { size: '14px', weight: theme.fontWeight.bold },\r\n margin: { x: '-5px', top: theme.spacing(3) },\r\n padding: { xy: theme.spacing(5), bottom: theme.spacing(4) },\r\n border: {\r\n top: {\r\n width: '1px',\r\n style: 'solid',\r\n color: theme.veryLightGray,\r\n },\r\n },\r\n textTransform: 'uppercase',\r\n});\r\n\r\nconst StyledPlusIcon = styled(PlusToggleIcon, {\r\n width: '16px',\r\n height: '16px',\r\n marginRight: theme.spacing(2),\r\n});\r\n\r\nconst CategoryLink = styled(KexLink, {\r\n display: 'flex',\r\n fontSize: '14px',\r\n color: theme.black,\r\n lineHeight: '16.8px',\r\n padding: { xy: theme.spacing(4) },\r\n justifyContent: 'space-between',\r\n ...pseudo([':nth-child(n)[data-isactive=\"true\"]'], {\r\n borderRadius: '10px',\r\n backgroundColor: theme.lightBlue,\r\n }),\r\n});\r\n\r\nconst TopOptionsWrapper = styled.div({\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n columnGap: theme.spacing(4),\r\n});\r\n\r\nconst SorterWrapper = styled.div({\r\n color: theme.black,\r\n fontSize: '14px',\r\n gridColumnEnd: 'span 12',\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n marginBottom: '-40px',\r\n alignItems: 'center',\r\n});\r\n\r\nconst StyledArrowDown = styled(ArrowDown, {\r\n fill: theme.black,\r\n height: '6px',\r\n width: '14px',\r\n});\r\n\r\nconst OptionsButtonWrapper = styled.div({\r\n display: 'flex',\r\n alignItems: 'center',\r\n fontSize: '14px',\r\n color: theme.black,\r\n justifyContent: 'space-between',\r\n backgroundColor: theme.white,\r\n flexBasis: '50%',\r\n maxWidth: '50%',\r\n lineHeight: '16.8px',\r\n border: {\r\n radius: '8px',\r\n xy: {\r\n width: '1px',\r\n style: 'solid',\r\n color: theme.veryLightGray,\r\n },\r\n },\r\n ...pseudo([':nth-child(n)[data-fullwidth=\"true\"]'], {\r\n width: '100%',\r\n maxWidth: '100%',\r\n flexBasis: '100%',\r\n marginTop: theme.spacing(5),\r\n }),\r\n ...pseudo([':nth-child(n)[data-isactive=\"true\"]'], {\r\n border: { xy: { color: theme.iconLightBlue } },\r\n }),\r\n});\r\n\r\nconst OptionsButton = styled.button({\r\n display: 'flex',\r\n alignItems: 'center',\r\n width: '100%',\r\n color: theme.black,\r\n justifyContent: 'space-between',\r\n padding: { x: theme.spacing(6), y: theme.spacing(4) },\r\n ...pseudo([':nth-child(n)[data-isopen=\"true\"]'], {\r\n fontWeight: theme.fontWeight.bold,\r\n }),\r\n});\r\n\r\nconst PageIntro = styled.span({\r\n color: theme.black,\r\n lineHeight: '28.8px',\r\n ...media(theme.mediaQuery.mediaMinLarge, {\r\n fontSize: theme.epsilon,\r\n lineHeight: '32px',\r\n }),\r\n});\r\n\r\nconst FilterType = styled.div({\r\n padding: {\r\n x: theme.spacing(4),\r\n top: theme.spacing(4),\r\n bottom: theme.spacing(2),\r\n },\r\n font: { size: '16px', weight: theme.fontWeight.bold },\r\n});\r\n\r\nconst Heading = styled.h1({\r\n color: theme.black,\r\n font: { size: theme.psi, weight: theme.fontWeight.bold },\r\n marginBottom: theme.spacing(5),\r\n ...media(theme.mediaQuery.mediaMinLarge, {\r\n fontSize: '32px',\r\n lineHeight: '40px',\r\n }),\r\n});\r\n\r\nconst ProductContainer = styled.div({\r\n margin: { x: '15px', y: theme.great },\r\n ...media(theme.mediaQuery.mediaMinLarge, {\r\n maxWidth: theme.screenMaxWidth,\r\n margin: { x: 'auto', top: theme.spacing(12) },\r\n padding: { x: theme.spacing(10) },\r\n display: 'flex',\r\n }),\r\n});\r\n\r\nexport default CategoryPage;\r\n","import { useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { IS_SERVER_CONTEXT } from '../Configs/EnvConfig';\r\n\r\nconst useOnScreen = ({ ref, rootMargin = '0px', once = true }) => {\r\n const [isIntersecting, setIntersecting] = useState(false);\r\n const [observerObject, setObserverObject] = useState(false);\r\n\r\n useEffect(() => {\r\n const elm = ref.current;\r\n const observer = new IntersectionObserver(\r\n ([entry]) => {\r\n setIntersecting(entry.isIntersecting);\r\n },\r\n {\r\n rootMargin,\r\n }\r\n );\r\n if (elm) {\r\n observer.observe(elm);\r\n }\r\n setObserverObject(observer);\r\n return () => {\r\n !Object.isEmpty(elm) && observer.unobserve(elm);\r\n };\r\n }, [ref, rootMargin]);\r\n\r\n if (\r\n once &&\r\n isIntersecting &&\r\n observerObject &&\r\n !Object.isEmpty(ref.current)\r\n ) {\r\n observerObject.unobserve(ref.current);\r\n }\r\n\r\n return IS_SERVER_CONTEXT ? true : isIntersecting;\r\n};\r\n\r\nuseOnScreen.propTypes /* remove-proptypes */ = {\r\n ref: PropTypes.shape({ current: PropTypes.element }),\r\n rootMargin: PropTypes.string,\r\n once: PropTypes.bool,\r\n};\r\n\r\nexport default useOnScreen;\r\n"],"sourceRoot":""}