{"version":3,"file":"products.bundle.js","mappings":"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,QAAS,KACvB,CAAED,KAAM,IAAKC,QAAS,YACtB,CACID,KAAM,IACNC,QAAS,oBAEb,CAAED,KAAM,KAAMC,QAAS,KACvB,CAAED,KAAM,KAAMC,QAAS,KACvB,CACID,KAAM,IACNC,QACI,+CAER,CAAED,KAAM,KAAMC,QAAS,KACvB,CAAED,KAAM,KAAMC,QAAS,KACvB,CAAED,KAAM,KAAMC,QAAS,KACvB,CAAED,KAAM,KAAMC,QAAS,MACvB,CAAED,KAAM,KAAMC,QAAS,MACvB,CAAED,KAAM,IAAKC,QAAS,cACtB,CAAED,KAAM,IAAKC,QAAS,UACtB,CACID,KAAM,IACNC,QACI,qBAER,CACID,KAAM,IACNC,QACI,qBAER,CACID,KAAM,IACNC,QAAS,mBAEb,CAAED,KAAM,KAAMC,QAAS,KACvB,CACID,KAAM,IACNC,QACI,sCAER,CAAED,KAAM,IAAKC,QAAS,YACtB,CAAED,KAAM,KAAMC,QAAS,KACvB,CAAED,KAAM,IAAKC,QAAS,cACtB,CAAED,KAAM,IAAKC,QAAS,SACtB,CACID,KAAM,IACNC,QAAS,mBAEb,CAAED,KAAM,IAAKC,QAAS,kBACtB,CACID,KAAM,IACNC,QACI,uCAER,CAAED,KAAM,KAAMC,QAAS,KACvB,CAAED,KAAM,KAAMC,QAAS,OACvB,CAAED,KAAM,KAAMC,QAAS,KACvB,CAAED,KAAM,KAAMC,QAAS,KACvB,CAAED,KAAM,KAAMC,QAAS,MACvB,CAAED,KAAM,KAAMC,QAAS,KACvB,CAAED,KAAM,IAAKC,QAAS,aACtB,CAAED,KAAM,IAAKC,QAAS,iBACtB,CAAED,KAAM,IAAKC,QAAS,kBACtB,CAAED,KAAM,KAAMC,QAAS,MACvB,CACID,KAAM,IACNC,QACI,mCAER,CAAED,KAAM,IAAKC,QAAS,UACtB,CACID,KAAM,IACNC,QAAS,mBAEb,CACID,KAAM,IACNC,QAAS,mBAEb,CAAED,KAAM,KAAMC,QAAS,KACvB,CACID,KAAM,IACNC,QACI,wBAER,CAAED,KAAM,IAAKC,QAAS,UACtB,CAAED,KAAM,IAAKC,QAAS,kBACtB,CACID,KA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","sources":["webpack:///webpack/runtime/chunk loaded","webpack:///webpack/runtime/create fake namespace object","webpack:///webpack/runtime/load script","webpack:///webpack/runtime/css loading","webpack:///./components/products/AdCard/AdCard.tsx","webpack:///./components/products/FraudModal/FraudModal.tsx","webpack:///./components/products/i18n.ts","webpack:///./components/products/NiceSelect/NiceSelect.tsx","webpack:///./components/products/utils/ProductHelpers.ts","webpack:///./components/products/utils/SizeHelpers.ts","webpack:///./components/products/utils/SwatchHelpers.ts","webpack:///./components/products/ProductCard/productCardi18n.ts","webpack:///./components/products/ProductCard/productCardModali18n.ts","webpack:///./components/products/ProductCard/ProductCardModal.tsx","webpack:///./components/products/ProductCard/ProductCard.tsx","webpack:///./components/products/Prp.mock.tsx","webpack:///./components/products/PrpFilterPanel/i18n.ts","webpack:///./components/products/PrpFilterPanel/OnAirButtons.tsx","webpack:///./components/products/utils/removeDiacritic.ts","webpack:///./components/products/PrpFilterPanel/PrpFilterPanel.tsx","webpack:///./components/products/PrpNoSearchResults/PrpNoSearchResults.tsx","webpack:///./components/products/Prp.tsx","webpack:///./components/products/index.tsx","webpack:///./entry/products.ts","webpack:///external var \"jQuery\"","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/ensure chunk","webpack:///webpack/runtime/get javascript chunk filename","webpack:///webpack/runtime/get mini-css chunk filename","webpack:///webpack/runtime/global","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///webpack/runtime/make namespace object","webpack:///webpack/runtime/runtimeId","webpack:///webpack/runtime/publicPath","webpack:///webpack/runtime/jsonp chunk loading","webpack:///webpack/runtime/nonce","webpack:///webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var getProto = Object.getPrototypeOf ? function(obj) { return Object.getPrototypeOf(obj); } : function(obj) { return obj.__proto__; };\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach(function(key) { def[key] = function() { return value[key]; }; });\n\t}\n\tdef['default'] = function() { return value; };\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"tsc-react:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","var createStylesheet = function(chunkId, fullhref, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tlinkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tdocument.head.appendChild(linkTag);\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t2893: 0\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\"7867\":1,\"8652\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(function() {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, function(e) {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","import React from 'react';\r\n\r\n/**\r\n * AdCard component props\r\n *\r\n * @interface AdCardProps\r\n */\r\nexport interface AdCardProps {\r\n /** @member {string} `image` Source of the background image */\r\n image: string;\r\n /** @member {string} `title` Title text */\r\n title: string;\r\n /** @member {string} `text` Main content */\r\n text: string;\r\n /** @member {string} `href` Redirect URLs */\r\n href: string;\r\n /** @member {string} `text` Call to action text */\r\n ctaText: string;\r\n /** @member {string} `imageAlt` Alt tag for the image */\r\n imageAlt: string;\r\n /** @member {string} `textColour` Text colour in RGB format like `A1A1A1` */\r\n textColour: string;\r\n /** @member {string} `textBackgroundColour` Text background colour in RGB format like `A1A1A1` */\r\n textBackgroundColour: string;\r\n /** @member {number} `textBackgroundOpacity` Text background opacity. Range 0-1 */\r\n textBackgroundOpacity: number;\r\n /** @member {string | undefined} `className` CSS classname */\r\n className?: string;\r\n}\r\n\r\nconst AdCard = ({\r\n image,\r\n title,\r\n text,\r\n ctaText,\r\n href,\r\n imageAlt,\r\n textColour,\r\n textBackgroundColour,\r\n textBackgroundOpacity,\r\n className = '',\r\n}: AdCardProps) => {\r\n return (\r\n
\r\n \r\n
\r\n {imageAlt}\r\n
\r\n \r\n {title}\r\n \r\n \r\n {text}\r\n \r\n \r\n {ctaText}\r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default AdCard;\r\n","import React from 'react';\r\n\r\ninterface FraudModalProps {\r\n onCloseClickListener: () => void;\r\n}\r\n\r\nconst FraudModal = ({ onCloseClickListener }: FraudModalProps) => {\r\n return (\r\n <>\r\n
\r\n
\r\n \r\n

We're sorry for the inconvenience

\r\n
\r\n

\r\n TSC.ca will not be able to process your request at this time due to the status of\r\n your account.\r\n

\r\n

\r\n For more information regarding your account, please contact our Customer Service\r\n Center at 1-888-2020-888\r\n

\r\n
\r\n
\r\n
\r\n \r\n );\r\n}\r\n\r\nexport default FraudModal;\r\n","export const en = {\r\n showingResultsFor: 'Showing results for',\r\n noSearchResultHeading: 'We weren’t able to find any results',\r\n noSearchResultText: 'Please check the spelling or ',\r\n noSearchResultButtonText: 'try another search',\r\n filter: 'Filter',\r\n products: 'products',\r\n clearAll: 'Clear all',\r\n top: 'Top',\r\n displayingItems: 'Displaying items',\r\n outOf: 'out of',\r\n previous: 'Previous',\r\n next: 'Next',\r\n loading: 'Loading',\r\n};\r\n\r\nexport const fr = {\r\n showingResultsFor: 'Showing results for',\r\n noSearchResultHeading: 'We weren’t able to find any results',\r\n noSearchResultText: 'Please check the spelling or',\r\n noSearchResultButtonText: 'try another search',\r\n filter: 'Filter',\r\n products: 'products',\r\n clearAll: 'Clear all',\r\n top: 'Top',\r\n displayingItems: 'Displaying items',\r\n outOf: 'out of',\r\n previous: 'Previous',\r\n next: 'Next',\r\n loading: 'Loading',\r\n};\r\n","/* eslint-disable no-useless-escape */\r\nimport React, { useState, useLayoutEffect, useEffect, useRef, MouseEvent, Fragment } from 'react';\r\n\r\ntype OptionProps = {\r\n option: string;\r\n value: string;\r\n disabled?: boolean;\r\n};\r\n\r\ntype NiceSelectProps = {\r\n id: string;\r\n options: OptionProps[];\r\n selectedIndex?: number;\r\n label?: string;\r\n selectClassName?: string;\r\n selectDefaultValue?: string;\r\n selectOnLoad?: () => any;\r\n // eslint-disable-next-line @typescript-eslint/ban-types\r\n selectOnChange?: Function;\r\n};\r\n\r\ntype SelectedOption = {\r\n option: string;\r\n value: string;\r\n};\r\n\r\nconst NiceSelect = ({\r\n id,\r\n options,\r\n selectedIndex,\r\n label,\r\n selectClassName,\r\n selectDefaultValue,\r\n selectOnLoad,\r\n selectOnChange,\r\n}: NiceSelectProps) => {\r\n const [selectedOption, setSelectedOption] = useState({\r\n option: options[0].option,\r\n value: options[0].value,\r\n });\r\n const [isNiceSelectOpen, setIsNiceSelectOpen] = useState(false);\r\n const [isMobileDevice, setIsMobileDevice] = useState(true);\r\n\r\n const selectInput = useRef(null);\r\n const niceSelectContainer = useRef(null);\r\n const niceSelectRef = useRef(null);\r\n const currentlySelected = useRef(null);\r\n\r\n const isTouchDevice = () =>\r\n /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(\r\n navigator.userAgent,\r\n ) ||\r\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(\r\n navigator.userAgent.substr(0, 4),\r\n );\r\n //const isTouchDevice = () => 'ontouchstart' in window || navigator.maxTouchPoints > 0;\r\n\r\n const setSelectOption = (val: string) => {\r\n const selected = options.find((opt) => opt.value === val);\r\n if (selected) {\r\n const formatSelected = { option: selected.option, value: selected.value };\r\n setSelectedOption(formatSelected);\r\n }\r\n };\r\n\r\n const showHideNiceSelect = (event: MouseEvent, isOpen: boolean) => {\r\n event.preventDefault();\r\n setIsNiceSelectOpen(isOpen);\r\n setTimeout(() => currentlySelected.current?.focus(), 10);\r\n };\r\n\r\n const setNiceSelectOption = (event: MouseEvent, selected: SelectedOption) => {\r\n event.preventDefault();\r\n setSelectedOption(selected);\r\n setIsNiceSelectOpen(false);\r\n niceSelectRef.current?.focus();\r\n };\r\n\r\n const blurNiceSelect = () => {\r\n setTimeout(() => {\r\n if (!niceSelectContainer.current?.contains(document.activeElement)) setIsNiceSelectOpen(false);\r\n }, 150);\r\n };\r\n\r\n useLayoutEffect(() => {\r\n setIsMobileDevice(isTouchDevice);\r\n if (selectDefaultValue) {\r\n const defaultValueIndex = options.findIndex((opt) => opt.value === selectDefaultValue);\r\n setSelectedOption({\r\n option: options[defaultValueIndex].option,\r\n value: options[defaultValueIndex].value,\r\n });\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (selectedIndex > -1) {\r\n setSelectedOption({\r\n value: options[selectedIndex].value,\r\n option: options[selectedIndex].option,\r\n });\r\n }\r\n }, [selectedIndex]);\r\n\r\n return (\r\n
\r\n \r\n {label}\r\n \r\n {isMobileDevice &&
}\r\n {\r\n setSelectOption(e.currentTarget.value);\r\n if (selectOnChange) selectOnChange(e.currentTarget.value);\r\n }}\r\n tabIndex={!isMobileDevice ? -1 : 0}\r\n aria-hidden={isMobileDevice}\r\n >\r\n {options.map((opt, i) => {\r\n const { option, value, disabled } = opt;\r\n return (\r\n \r\n );\r\n })}\r\n \r\n {!isMobileDevice && (\r\n
\r\n {label && (\r\n \r\n \r\n
\r\n
\r\n )}\r\n showHideNiceSelect(e, true)}\r\n aria-labelledby={`niceSelect-${id}-label niceSelect-${id}-selected`}\r\n aria-describedby={`niceSelect-${id}-selected-desc`}\r\n aria-haspopup=\"listbox\"\r\n aria-controls={`niceSelect-${id}-ul`}\r\n aria-expanded={isNiceSelectOpen}\r\n >\r\n {selectedOption.option}\r\n \r\n \r\n Select to choose a different option.\r\n

\r\n {isNiceSelectOpen && (\r\n \r\n {options.map((opt, i) => {\r\n const { option, value, disabled } = opt;\r\n return (\r\n
  • \r\n {\r\n setNiceSelectOption(e, { option, value });\r\n if (selectOnChange) selectOnChange(value);\r\n }}\r\n aria-selected={value === selectedOption.value}\r\n >\r\n {option}\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\nexport default NiceSelect;\r\n","import { IEdp } from '../IProduct';\r\nimport { StyleAndSize } from '../ProductCard/ProductCard';\r\n\r\nexport class ProductHelpers {\r\n public static isSizeDisabled(\r\n i: number,\r\n styleIndex: number,\r\n edps: IEdp[],\r\n styles: StyleAndSize[],\r\n sizes: StyleAndSize[],\r\n ): boolean {\r\n // If no style option available, only consider sizes\r\n // Find the edp by size and check the inventory field\r\n if (!styles || styles?.length === 0) {\r\n const edp = edps.find((edpItem) => {\r\n return sizes[i] && sizes[i].DimensionId === edpItem.SizeDimensionId;\r\n });\r\n\r\n if (!edp) {\r\n return true;\r\n }\r\n\r\n return edp.Inventory === 0;\r\n }\r\n\r\n // At this point, there is at least one style value\r\n // First check the style index\r\n // If no style option is selected, check edps with only size\r\n if (styleIndex === -1) {\r\n const filtered = edps.filter((edpItem) => {\r\n return sizes[i] && sizes[i].DimensionId === edpItem.SizeDimensionId;\r\n });\r\n\r\n return filtered.every((item) => item.Inventory === 0);\r\n }\r\n\r\n const edp = edps.find((edpItem) => {\r\n return (\r\n styles[styleIndex] &&\r\n sizes[i] &&\r\n styles[styleIndex].DimensionId === edpItem.StyleDimensionId &&\r\n sizes[i].DimensionId === edpItem.SizeDimensionId\r\n );\r\n });\r\n\r\n if (!edp) {\r\n return true;\r\n }\r\n\r\n return edp.Inventory === 0;\r\n }\r\n\r\n // returns disabled only if style in currently selected size is sold out -used on PRP\r\n public static isStyleDisabled(\r\n i: number,\r\n selectedSizeIndex: number,\r\n edps: IEdp[],\r\n styles: StyleAndSize[],\r\n sizes: StyleAndSize[],\r\n ): boolean {\r\n // If no size option available, only consider styles\r\n // Find the edp by style, and check the inventory field\r\n if (!sizes || sizes?.length === 0) {\r\n const edp = edps.find((edpItem) => {\r\n return styles[i] && styles[i].DimensionId === edpItem.StyleDimensionId;\r\n });\r\n\r\n if (!edp) {\r\n return true;\r\n }\r\n\r\n return edp.Inventory === 0;\r\n }\r\n\r\n // At this point, there is at least one size value exists\r\n // First check the size index\r\n // If no size option is selected, check only with style\r\n if (selectedSizeIndex === -1) {\r\n const filtered = edps.filter((edpItem) => {\r\n return styles[i] && styles[i].DimensionId === edpItem.StyleDimensionId;\r\n });\r\n\r\n return filtered.every((item) => item.Inventory === 0);\r\n }\r\n\r\n const edp = edps.find((edpItem) => {\r\n return (\r\n sizes[selectedSizeIndex] &&\r\n styles[i] &&\r\n sizes[selectedSizeIndex].DimensionId === edpItem.SizeDimensionId &&\r\n styles[i].DimensionId === edpItem.StyleDimensionId\r\n );\r\n });\r\n\r\n if (!edp) {\r\n return true;\r\n }\r\n\r\n return edp.Inventory === 0;\r\n }\r\n // returns size disabled\r\n public static isSizeDisabledV2(\r\n i: number,\r\n styleIndex: number,\r\n edps: IEdp[],\r\n styles: StyleAndSize[],\r\n sizes: StyleAndSize[],\r\n ): boolean {\r\n // If no style option available, only consider sizes\r\n // Find the edp by size and check the inventory field\r\n if (!styles || styles?.length === 0) {\r\n const edp = edps.find((edpItem) => {\r\n return sizes[i] && sizes[i].DimensionId === edpItem.SizeDimensionId;\r\n });\r\n\r\n if (!edp) {\r\n return true;\r\n }\r\n\r\n return edp.Inventory <= 0;\r\n }\r\n\r\n // At this point, there is at least one style value\r\n // First check the style index\r\n // If no style option is selected, check edps with only size\r\n if (styleIndex === -1) {\r\n const filtered = edps.filter((edpItem) => {\r\n return sizes[i] && sizes[i].DimensionId === edpItem.SizeDimensionId;\r\n });\r\n\r\n return filtered.every((item) => item.Inventory <= 0);\r\n }\r\n\r\n const edp = edps.find((edpItem) => {\r\n return (\r\n styles[styleIndex] &&\r\n sizes[i] &&\r\n styles[styleIndex].DimensionId === edpItem.StyleDimensionId &&\r\n sizes[i].DimensionId === edpItem.SizeDimensionId\r\n );\r\n });\r\n\r\n if (!edp) {\r\n return true;\r\n }\r\n\r\n return edp.Inventory <= 0;\r\n }\r\n\r\n // this returns style disabled only if style in every size is sold out -used on PDP\r\n public static isStyleDisabledV2(\r\n i: number,\r\n selectedSizeIndex: number,\r\n edps: IEdp[],\r\n styles: StyleAndSize[],\r\n sizes: StyleAndSize[],\r\n ): boolean {\r\n // If no size option available, only consider styles\r\n // Find the edp by style, and check the inventory field\r\n if (!sizes || sizes?.length === 0) {\r\n const edp = edps.find((edpItem) => {\r\n return styles[i] && styles[i].DimensionId === edpItem.StyleDimensionId;\r\n });\r\n\r\n if (!edp) {\r\n return true;\r\n }\r\n\r\n return edp.Inventory <= 0;\r\n }\r\n\r\n // multiple sizes of this style exists\r\n // check if its sold out in all sizes, return true if all sold out\r\n\r\n const filtered = edps.filter((edpItem) => {\r\n return styles[i] && styles[i].DimensionId === edpItem.StyleDimensionId;\r\n });\r\n\r\n return filtered.every((item) => item.Inventory <= 0);\r\n }\r\n}\r\n","/**\r\n * Type union definition of available label sizes.\r\n * This sizes are human readable format of the character limits.\r\n * These values don't represent the \"size labels\" of the products.\r\n */\r\nexport type Size = 'sm' | 'md' | 'lg' | 'xl' | 'select';\r\n\r\ntype SizesWithoutSelect = Exclude;\r\n\r\ntype SizeCharMapping = 'sm' | 'md' | 'lg' | 'max';\r\n\r\ntype SizeDimension = {\r\n DimensionId: string;\r\n DisplayName: string;\r\n};\r\n\r\n/**\r\n * Values for each label size that determines when the label size\r\n * should go up one size.\r\n */\r\nexport const thresholds: Record = {\r\n sm: 3,\r\n md: 2.25,\r\n lg: 2,\r\n xl: 1.5,\r\n};\r\n\r\n/**\r\n * Actual character limits for each label size\r\n */\r\nexport const charLimit: Record = {\r\n sm: 2,\r\n md: 5,\r\n lg: 8,\r\n max: 20,\r\n};\r\n\r\n/**\r\n * How many items can fit into one row\r\n */\r\nexport const maxItems: Record = {\r\n sm: 12,\r\n md: 10,\r\n lg: 8,\r\n xl: 4,\r\n};\r\n\r\nexport default class SizeHelpers {\r\n // public static sortLabels = (labels: SizeDimension[]): SizeDimension[] => {\r\n // const sorted: SizeDimension[] = [].concat(labels);\r\n // sorted.sort((a, b) => a.DisplayName.length - b.DisplayName.length);\r\n // return sorted;\r\n // }\r\n\r\n public static determineSize = (labels: SizeDimension[]): Size => {\r\n const max = SizeHelpers.maxLength(labels);\r\n const mean = SizeHelpers.meanLength(labels);\r\n const diff = max / mean;\r\n\r\n // If any label is super-long, don't display as tiles\r\n // Use select (dropdown) variation\r\n if (max >= charLimit['max']) {\r\n return 'select';\r\n }\r\n\r\n if (max <= charLimit['sm']) {\r\n return 'sm';\r\n }\r\n\r\n if (mean <= charLimit['md'] && max <= charLimit['md']) {\r\n return 'md';\r\n }\r\n\r\n if (mean <= charLimit['lg'] && max <= charLimit['lg']) {\r\n return 'lg';\r\n }\r\n\r\n if (mean <= charLimit['max'] && max < charLimit['max']) {\r\n return 'xl';\r\n }\r\n\r\n // Select a size\r\n const size = SizeHelpers.compareMeanWithCharLimits(mean);\r\n const bumpedSize = SizeHelpers.bumpIfExceedsThreshold(size, diff);\r\n\r\n return bumpedSize;\r\n };\r\n\r\n private static maxLength = (labels: SizeDimension[]): number => {\r\n const lengths = labels.map((label) => label.DisplayName.length);\r\n let max = -1;\r\n\r\n for (const length of lengths) {\r\n max = length > max ? length : max;\r\n }\r\n\r\n return max;\r\n };\r\n\r\n private static meanLength = (labels: SizeDimension[]): number => {\r\n if (labels.length === 0) {\r\n return 0;\r\n }\r\n\r\n const total = labels.reduce((acc, curr) => acc + curr.DisplayName.length, 0);\r\n const mean = total / labels.length;\r\n return mean;\r\n };\r\n\r\n private static compareMeanWithCharLimits = (mean: number): Size => {\r\n let size: Size = 'xl';\r\n\r\n if (mean <= charLimit['lg']) {\r\n size = 'lg';\r\n }\r\n\r\n if (mean <= charLimit['md']) {\r\n size = 'md';\r\n }\r\n\r\n if (mean <= charLimit['sm']) {\r\n size = 'sm';\r\n }\r\n\r\n return size;\r\n };\r\n\r\n private static bumpIfExceedsThreshold = (initial: Size, diff: number): Size => {\r\n let size = initial;\r\n\r\n // Bump up if the mean/max diff exceeds a threshold\r\n if (size === 'sm' && diff > thresholds['sm']) {\r\n size = 'md';\r\n }\r\n\r\n if (size === 'md' && diff > thresholds['md']) {\r\n size = 'lg';\r\n }\r\n\r\n if (size === 'lg' && diff > thresholds['lg']) {\r\n size = 'xl';\r\n }\r\n\r\n if (size === 'xl' && diff > thresholds['xl']) {\r\n size = 'select';\r\n }\r\n\r\n return size;\r\n };\r\n}\r\n","import { StyleAndSize } from '../ProductCard/ProductCard';\r\n\r\nexport class SwatchHelpers {\r\n private static readonly IMAGE_URL_PREFIX = 'https://item.tscimg.ca/TSC/';\r\n private static readonly IMAGE_URL_DELIMITER = '/0x0/';\r\n\r\n public static async isSwatchAvailable(source: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n const imgElement = document.createElement('img');\r\n imgElement.src = source;\r\n\r\n imgElement.addEventListener('load', () => {\r\n resolve(true);\r\n });\r\n\r\n imgElement.addEventListener('error', (error) => {\r\n reject('Failed to load');\r\n //resolve(false);\r\n });\r\n } catch (e) {\r\n reject(e);\r\n //resolve(false);\r\n }\r\n });\r\n }\r\n\r\n public static getSwatchUrl(imageUrl: string, dimensionId: string): string {\r\n const [fst, snd] = imageUrl.split(SwatchHelpers.IMAGE_URL_DELIMITER);\r\n const [id] = snd.split('_');\r\n const link = `${fst}/${id}_${dimensionId}_SW.jpg`;\r\n return SwatchHelpers.IMAGE_URL_PREFIX + link;\r\n }\r\n\r\n public static async doSwatchesExist(AvailableSwatches: string[]): Promise {\r\n if (Array.isArray(AvailableSwatches) && AvailableSwatches.length >= 1) {\r\n try {\r\n const result = await SwatchHelpers.isSwatchAvailable(\r\n SwatchHelpers.IMAGE_URL_PREFIX + AvailableSwatches[0],\r\n );\r\n return result;\r\n } catch (error) {\r\n return false;\r\n }\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n public static async areSwatchesOk(stylesArr: StyleAndSize[], imageUrl: string) {\r\n const promises = [];\r\n stylesArr.map((s) => {\r\n const source = SwatchHelpers.getSwatchUrl(imageUrl, s.DimensionId);\r\n promises.push(SwatchHelpers.isSwatchAvailable(source));\r\n });\r\n return Promise.all(promises);\r\n }\r\n}\r\n","export const en = {\r\n styles: 'styles',\r\n tastes: 'tastes',\r\n sizes: 'sizes',\r\n frequency: 'frequency',\r\n addedToBag: 'Added to bag',\r\n addToBag: 'Add to bag',\r\n selectSize: 'Select size',\r\n selectStyle: 'Select style',\r\n optionsAvailable: 'Options available',\r\n selectSizeAndStyle: 'Select size & style',\r\n oneTimeShipment: '1 Time Shipment',\r\n autoDelivery: 'Auto Delivery',\r\n size: 'Size',\r\n viewAllSizes: 'View all sizes',\r\n viewAll: 'View all',\r\n was: 'Was',\r\n reviews: 'reviews',\r\n by: 'By',\r\n like: 'Like',\r\n currentPrice: 'Current price:',\r\n previousPrice: 'Previous price:',\r\n goToDetailPage: 'Go to detail page',\r\n freeShipping: 'Free Shipping',\r\n onlyXLeft: 'Only {{inventory}} item(s) left',\r\n outOf: 'out of',\r\n outOfStock: 'Out of stock',\r\n rating: 'Rating:',\r\n stars: 'stars'\r\n};\r\n\r\nexport const fr = {\r\n styles: 'styles',\r\n tastes: 'tastes',\r\n sizes: 'sizes',\r\n frequency: 'frequency',\r\n addedToBag: 'Added to bag',\r\n addToBag: 'Add to bag',\r\n selectSize: 'Select size',\r\n selectStyle: 'Select style',\r\n optionsAvailable: 'Options available',\r\n selectSizeAndStyle: 'Select size & style',\r\n oneTimeShipment: '1 Time Shipment',\r\n autoDelivery: 'Auto Delivery',\r\n size: 'Size',\r\n viewAllSizes: 'View all sizes',\r\n viewAll: 'View all',\r\n was: 'Was',\r\n reviews: 'reviews',\r\n by: 'By',\r\n like: 'Comme',\r\n currentPrice: 'Prix actuel :',\r\n previousPrice: 'Prix précédent :',\r\n goToDetailPage: 'Go to detail page',\r\n freeShipping: 'Livraison Gratuite',\r\n onlyXLeft: 'Stock limité: seulement {{inventory}} unité(s)',\r\n outOf: 'sur',\r\n outOfStock: 'Stock épuisé',\r\n rating: 'Note :',\r\n stars: 'étoiles'\r\n};\r\n","export const en = {\r\n colours: 'colours',\r\n tastes: 'tastes',\r\n sizes: 'sizes',\r\n frequency: 'frequency',\r\n addedToBag: 'Added to bag',\r\n addToBag: 'Add to bag',\r\n selectSize: 'Select size',\r\n selectStyle: 'Select style',\r\n optionsAvailable: 'Options available',\r\n selectSizeAndStyle: 'Select size & style',\r\n oneTimeShipment: '1 Time Shipment',\r\n autoDelivery: 'Auto Delivery',\r\n size: 'Size',\r\n viewAllSizes: 'View all sizes',\r\n viewAll: 'View all',\r\n was: 'Was',\r\n reviews: 'reviews',\r\n by: 'By',\r\n goToDetailPage: 'Go to detail page',\r\n};\r\n\r\nexport const fr = {\r\n colours: 'colours',\r\n tastes: 'tastes',\r\n sizes: 'sizes',\r\n frequency: 'frequency',\r\n addedToBag: 'Added to bag',\r\n addToBag: 'Add to bag',\r\n selectSize: 'Select size',\r\n selectStyle: 'Select style',\r\n optionsAvailable: 'Options available',\r\n selectSizeAndStyle: 'Select size & style',\r\n oneTimeShipment: '1 Time Shipment',\r\n autoDelivery: 'Auto Delivery',\r\n size: 'Size',\r\n viewAllSizes: 'View all sizes',\r\n viewAll: 'View all',\r\n was: 'Was',\r\n reviews: 'reviews',\r\n by: 'By',\r\n goToDetailPage: 'Go to detail page',\r\n};\r\n","/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */\r\nimport classNames from 'classnames';\r\nimport React, { useState, useMemo, useCallback, useEffect, useRef, KeyboardEvent } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport insightsClient from 'search-insights';\r\n\r\nimport { IEdp } from '../IProduct';\r\nimport { ProductHelpers } from '../utils/ProductHelpers';\r\nimport { Size } from '../utils/SizeHelpers';\r\nimport { SwatchHelpers } from '../utils/SwatchHelpers';\r\n\r\nimport { ProductCategoryType, StyleAndSize, deriveFreqAutoDelivery } from './ProductCard';\r\nimport { en, fr } from './productCardModali18n';\r\n\r\nexport interface ProductCardModalProps {\r\n onCloseListener: () => void;\r\n colorOrTasteText: string;\r\n styles: Array<{\r\n DimensionId: string;\r\n DisplayName: string;\r\n }>;\r\n sizes: Array<{\r\n DimensionId: string;\r\n DisplayName: string;\r\n }>;\r\n productImage: string;\r\n edps: Array;\r\n edp: number;\r\n //onAddToBagClickListener: (sizeIndex: number, styleIndex: number) => Promise;\r\n onAddToBagClickListener: (styleIndex: number, sizeIndex: number) => void;\r\n productHref: string;\r\n categoryPath: ProductCategoryType;\r\n updateSizeIndex: (value: React.SetStateAction) => void;\r\n updateColorOrTasteIndex: (value: React.SetStateAction) => void;\r\n mainIsAddedToBag: boolean;\r\n updateIsAddToBagLoading: (value: React.SetStateAction) => void;\r\n itemNo?: string;\r\n position?: number;\r\n currentPage?: number;\r\n pageSize?: number;\r\n queryId?: string;\r\n showSwatches: boolean;\r\n labelSize: Size;\r\n displayedSizeLabels: StyleAndSize[];\r\n availableSwatches: string[];\r\n}\r\n\r\nconst ProductCardModal = ({\r\n onCloseListener,\r\n colorOrTasteText,\r\n styles,\r\n sizes,\r\n productImage,\r\n edps,\r\n onAddToBagClickListener,\r\n productHref,\r\n categoryPath,\r\n updateSizeIndex,\r\n updateColorOrTasteIndex,\r\n mainIsAddedToBag,\r\n updateIsAddToBagLoading,\r\n itemNo,\r\n edp,\r\n position,\r\n currentPage,\r\n pageSize,\r\n queryId,\r\n showSwatches,\r\n labelSize,\r\n displayedSizeLabels,\r\n availableSwatches,\r\n}: ProductCardModalProps) => {\r\n const { i18n, t } = useTranslation('product-card-modal');\r\n i18n.addResourceBundle('en', 'product-card-modal', en, true, true);\r\n i18n.addResourceBundle('fr', 'product-card-modal', fr, true, true);\r\n\r\n const [selectedSizeIndex, _setSelectedSizeIndex] = useState(-1);\r\n const [selectedColorOrTasteIndex, _setSelectedColorOrTasteIndex] = useState(-1);\r\n const [isAddedToBag, setIsAddedToBag] = useState(false);\r\n const [isAddToBagLoading, _setIsAddToBagLoading] = useState(false);\r\n const IMAGE_URL_PREFIX = 'https://item.tscimg.ca/TSC/';\r\n const LOADING_ASSET_PATH = '/App_Assets/public/loading.gif';\r\n const SIZE_COUNT_LIMIT = 10;\r\n const STYLE_COUNT_LIMIT = 16;\r\n const productCardOverlay = useRef(null);\r\n\r\n const setSelectedSizeIndex = (value: React.SetStateAction) => {\r\n _setSelectedSizeIndex(value);\r\n updateSizeIndex(value);\r\n };\r\n\r\n const setSelectedColorOrTasteIndex = (value: React.SetStateAction) => {\r\n _setSelectedColorOrTasteIndex(value);\r\n updateColorOrTasteIndex(value);\r\n };\r\n\r\n const setIsAddToBagLoading = (value: React.SetStateAction) => {\r\n _setIsAddToBagLoading(value);\r\n updateIsAddToBagLoading(value);\r\n };\r\n\r\n const buttonText = useMemo(() => {\r\n if (isAddedToBag) {\r\n return t('addedToBag');\r\n }\r\n\r\n if (styles.length === 0 && sizes.length === 0) {\r\n return t('addToBag');\r\n }\r\n\r\n if (styles.length === 0 && sizes.length !== 0) {\r\n if (selectedSizeIndex === -1) {\r\n return t('selectSize');\r\n }\r\n }\r\n\r\n if (styles.length !== 0 && sizes.length === 0) {\r\n if (selectedColorOrTasteIndex === -1) {\r\n return t('selectStyle');\r\n }\r\n }\r\n\r\n if (styles.length !== 0 && sizes.length !== 0) {\r\n if (selectedSizeIndex === -1 && selectedColorOrTasteIndex === -1) {\r\n return t('selectSizeAndStyle');\r\n }\r\n\r\n if (selectedSizeIndex !== -1 && selectedColorOrTasteIndex === -1) {\r\n return t('selectStyle');\r\n }\r\n\r\n if (selectedSizeIndex === -1 && selectedColorOrTasteIndex !== -1) {\r\n return t('selectSize');\r\n }\r\n }\r\n\r\n return t('addToBag');\r\n }, [isAddedToBag, selectedSizeIndex, selectedColorOrTasteIndex, styles, sizes, categoryPath]);\r\n\r\n function getDefaultEdpItem() {\r\n return edps.find((edpItem) => edpItem.EdpNo === edp);\r\n }\r\n\r\n const isFreqAutoDelivery = deriveFreqAutoDelivery(\r\n sizes,\r\n styles,\r\n getDefaultEdpItem,\r\n selectedSizeIndex,\r\n edps,\r\n selectedColorOrTasteIndex,\r\n );\r\n\r\n const ctaText = useMemo(() => {\r\n if (styles.length === 0 && sizes.length === 0) {\r\n return t('goToDetailPage');\r\n }\r\n\r\n if (styles.length === 0 && sizes.length !== 0) {\r\n if (selectedSizeIndex === -1) {\r\n return t('selectSize');\r\n }\r\n }\r\n\r\n if (styles.length !== 0 && sizes.length === 0) {\r\n if (selectedColorOrTasteIndex === -1) {\r\n return t('selectStyle');\r\n }\r\n }\r\n\r\n if (styles.length !== 0 && sizes.length !== 0) {\r\n if (selectedSizeIndex === -1 && selectedColorOrTasteIndex === -1) {\r\n return t('selectSizeAndStyle');\r\n }\r\n\r\n if (selectedSizeIndex !== -1 && selectedColorOrTasteIndex === -1) {\r\n return t('selectStyle');\r\n }\r\n\r\n if (selectedSizeIndex === -1 && selectedColorOrTasteIndex !== -1) {\r\n return t('selectSize');\r\n }\r\n }\r\n\r\n if (!showSwatches && labelSize === 'select') {\r\n return t('selectSizeAndStyle');\r\n }\r\n\r\n return t('goToDetailPage');\r\n }, [\r\n isAddedToBag,\r\n selectedSizeIndex,\r\n selectedColorOrTasteIndex,\r\n styles,\r\n sizes,\r\n categoryPath,\r\n showSwatches,\r\n labelSize,\r\n ]);\r\n\r\n const isSOEligible = useMemo(() => {\r\n let isSOEligible = false;\r\n\r\n for (const edp of edps) {\r\n if (edp.IsSOEligible == true) {\r\n isSOEligible = true;\r\n break;\r\n }\r\n }\r\n return isSOEligible;\r\n }, [edps]);\r\n\r\n const onSizeKeyDownListener = (e: React.KeyboardEvent, i: number) => {\r\n if (e.key === 'Enter') {\r\n // console.log('%c onSizeKeyDownListener.', 'color: purple; font-weight: bold;');\r\n e.preventDefault();\r\n setSelectedSizeIndex((prev) => (prev === i ? -1 : i));\r\n }\r\n };\r\n\r\n const onSizeClickListener = (e: React.MouseEvent, i: number) => {\r\n e.preventDefault();\r\n setSelectedSizeIndex((prev) => (prev === i ? -1 : i));\r\n };\r\n\r\n const onColorOrTasteKeyDownListener = (e: React.KeyboardEvent, i: number) => {\r\n // console.log('%c onColorOrTasteKeyDownListener.', 'color: purple; font-weight: bold;');\r\n if (e.key === 'Enter') {\r\n e.preventDefault();\r\n setSelectedColorOrTasteIndex((prev) => (prev === i ? -1 : i));\r\n }\r\n };\r\n\r\n const onColorOrTasteClickListener = (e: React.MouseEvent, i: number) => {\r\n e.preventDefault();\r\n setSelectedColorOrTasteIndex((prev) => (prev === i ? -1 : i));\r\n };\r\n\r\n const keyboardControls = (event: KeyboardEvent) => {\r\n /*\r\n console.log('%c event.code:', 'color: red; font-weight: bold;');\r\n console.log({ eventCode: event.code });\r\n */\r\n if (event.code === 'Escape') {\r\n event.preventDefault();\r\n setIsAddedToBag(false);\r\n onCloseListener();\r\n return;\r\n }\r\n const isTabPressed = event.key === 'Tab';\r\n if (!isTabPressed) {\r\n return;\r\n }\r\n const focusableElements = 'button:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\r\n const firstFocusableElement = productCardOverlay?.current?.querySelectorAll(\r\n focusableElements,\r\n )[0] as HTMLElement;\r\n const focusableContent = productCardOverlay?.current?.querySelectorAll(focusableElements);\r\n /*\r\n console.log('%c firstFousableElement, focusableContent:', 'color: blue; font-weight: bold;');\r\n console.log({ firstFocusableElement, focusableContent });\r\n */\r\n if (!focusableContent) {\r\n return;\r\n }\r\n\r\n const lastFocusableElement = focusableContent[focusableContent.length - 1] as HTMLElement;\r\n if (event.shiftKey) {\r\n if (document.activeElement === firstFocusableElement) {\r\n event.preventDefault();\r\n lastFocusableElement.focus();\r\n }\r\n } else {\r\n if (document.activeElement === lastFocusableElement) {\r\n event.preventDefault();\r\n firstFocusableElement.focus();\r\n }\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n const firstParagraph = productCardOverlay?.current?.querySelector('p[tabindex=\"0\"]') as HTMLParagraphElement;\r\n firstParagraph?.focus();\r\n }, []);\r\n\r\n const onAddToBagClick = () => {\r\n setIsAddToBagLoading(true);\r\n };\r\n\r\n // useEffect(() => {\r\n // if (isAddToBagLoading) {\r\n // onAddToBagClickListener(selectedSizeIndex, selectedColorOrTasteIndex)\r\n // .then(() => {\r\n // setIsAddedToBag(true);\r\n // setIsAddToBagLoading(false);\r\n // });\r\n // }\r\n // }, [isAddToBagLoading]);\r\n\r\n const trackSearchEventClick = (itemNo: string, position: number) => {\r\n /*\r\n console.log('%c insightsClientObject:', 'color: red; font-weight: bold;');\r\n console.log({ insightsClientObject: {\r\n eventName: 'Items clicked',\r\n index: 'products',\r\n objectIDs: [itemNo],\r\n positions: [position + 1 + (currentPage - 1) * pageSize],\r\n queryID: queryId ? queryId : '',\r\n } });\r\n */\r\n insightsClient('clickedObjectIDsAfterSearch', {\r\n eventName: 'Items clicked',\r\n index: 'products',\r\n objectIDs: [itemNo],\r\n positions: [position + 1 + (currentPage - 1) * pageSize],\r\n queryID: queryId ? queryId : '',\r\n });\r\n };\r\n\r\n const getSwatchUrl = (index: number) => {\r\n const resource = availableSwatches[index];\r\n if (!resource) {\r\n return '';\r\n }\r\n return IMAGE_URL_PREFIX + resource;\r\n };\r\n\r\n const isSizeDisabled = useCallback(\r\n (i: number): boolean => {\r\n return ProductHelpers.isSizeDisabled(i, selectedColorOrTasteIndex, edps, styles, sizes);\r\n },\r\n [selectedColorOrTasteIndex, edps, styles, sizes],\r\n );\r\n\r\n const isStyleDisabled = useCallback(\r\n (i: number): boolean => {\r\n return ProductHelpers.isStyleDisabled(i, selectedSizeIndex, edps, styles, sizes);\r\n },\r\n [selectedSizeIndex, edps, styles, sizes],\r\n );\r\n\r\n const firstAvailableStyleIndex = useMemo(() => {\r\n for (let i = 0; i < styles.length; i++) {\r\n if (!isStyleDisabled(i)) {\r\n return i;\r\n }\r\n }\r\n\r\n return -1;\r\n }, [styles, isStyleDisabled]);\r\n\r\n const firstAvailableSizeIndex = useMemo(() => {\r\n for (let i = 0; i < sizes.length; i++) {\r\n if (!isSizeDisabled(i)) {\r\n return i;\r\n }\r\n }\r\n\r\n return -1;\r\n }, [sizes, isSizeDisabled]);\r\n\r\n useEffect(() => {\r\n if (!showSwatches) {\r\n setSelectedColorOrTasteIndex(firstAvailableStyleIndex);\r\n }\r\n\r\n if (labelSize === 'select') {\r\n setSelectedSizeIndex(firstAvailableSizeIndex);\r\n }\r\n }, []);\r\n\r\n const renderStyleSwatch = useCallback(() => {\r\n if (!showSwatches) {\r\n return <>;\r\n }\r\n\r\n return styles.slice(0, STYLE_COUNT_LIMIT).map((style, styleIndex) => (\r\n onColorOrTasteKeyDownListener(e, styleIndex)}\r\n onClick={(e) => onColorOrTasteClickListener(e, styleIndex)}\r\n disabled={isStyleDisabled(styleIndex)}\r\n aria-pressed={styleIndex === selectedColorOrTasteIndex}\r\n >\r\n setSelectedColorOrTasteIndex(styleIndex)}\r\n />\r\n \r\n \r\n {colorOrTasteText} {style.DisplayName}\r\n \r\n \r\n \r\n ));\r\n }, [\r\n showSwatches,\r\n styles,\r\n STYLE_COUNT_LIMIT,\r\n onColorOrTasteKeyDownListener,\r\n onColorOrTasteClickListener,\r\n isStyleDisabled,\r\n selectedColorOrTasteIndex,\r\n setSelectedColorOrTasteIndex,\r\n name,\r\n SwatchHelpers,\r\n SwatchHelpers.getSwatchUrl,\r\n colorOrTasteText,\r\n ]);\r\n\r\n const renderStyleDropdown = useCallback(() => {\r\n if (styles.length === 0) {\r\n return <>;\r\n }\r\n\r\n return (\r\n setSelectedColorOrTasteIndex(firstAvailableStyleIndex)}\r\n onChange={(e) => {\r\n const index = styles.findIndex((style) => {\r\n return style.DimensionId === e.target.value;\r\n });\r\n setSelectedColorOrTasteIndex(index);\r\n }}\r\n value={styles[selectedColorOrTasteIndex]?.DimensionId}\r\n >\r\n {styles.slice(0, STYLE_COUNT_LIMIT).map((style, styleIndex) => (\r\n \r\n ))}\r\n \r\n );\r\n }, [styles, setSelectedColorOrTasteIndex, selectedColorOrTasteIndex, isStyleDisabled]);\r\n\r\n const renderStyles = () => {\r\n return (\r\n
    \r\n {colorOrTasteText}\r\n {/* Color and Taste */}\r\n {styles.length !== 0 && (\r\n
    \r\n

    \r\n {t('selectStyle')}:{' '}\r\n {selectedColorOrTasteIndex !== -1 && (\r\n {styles[selectedColorOrTasteIndex].DisplayName}\r\n )}\r\n

    \r\n {showSwatches && (\r\n
    {renderStyleSwatch()}
    \r\n )}\r\n {!showSwatches && renderStyleDropdown()}\r\n {styles.length >= STYLE_COUNT_LIMIT && (\r\n trackSearchEventClick(itemNo, position)\r\n : null\r\n }\r\n >\r\n {`${t('viewAll')} ${colorOrTasteText}`}\r\n \r\n )}\r\n
    \r\n )}\r\n
    \r\n );\r\n };\r\n\r\n const renderSizeDropdown = useCallback(() => {\r\n if (sizes.length === 0) {\r\n return <>;\r\n }\r\n\r\n return (\r\n setSelectedSizeIndex(firstAvailableSizeIndex)}\r\n onChange={(e) => {\r\n const index = sizes.findIndex((size) => {\r\n return size.DimensionId === e.target.value;\r\n });\r\n setSelectedSizeIndex(index);\r\n }}\r\n value={sizes[selectedSizeIndex]?.DimensionId}\r\n >\r\n {sizes.map((size, sizeIndex) => (\r\n \r\n ))}\r\n \r\n );\r\n }, [sizes, firstAvailableSizeIndex, selectedSizeIndex, setSelectedSizeIndex, isSizeDisabled]);\r\n\r\n return (\r\n <>\r\n {\r\n setIsAddedToBag(false);\r\n onCloseListener();\r\n }}\r\n />\r\n {/* Mobile Modal */}\r\n keyboardControls(e)}\r\n >\r\n {\r\n setIsAddedToBag(false);\r\n onCloseListener();\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 \r\n \r\n \r\n \r\n \r\n \r\n\r\n
    \r\n
    \r\n {t('sizes')}\r\n\r\n {/* Size */}\r\n {/* Size */}\r\n {displayedSizeLabels.length !== 0 && (\r\n
    \r\n \r\n {t('selectSize')}:{' '}\r\n {selectedSizeIndex !== -1 && (\r\n {displayedSizeLabels[selectedSizeIndex].DisplayName}\r\n )}\r\n \r\n \r\n {labelSize === 'select' && renderSizeDropdown()}\r\n {labelSize !== 'select' &&\r\n displayedSizeLabels.map((size, sizeIndex) => (\r\n onSizeKeyDownListener(e, sizeIndex)}\r\n onClick={(e) => onSizeClickListener(e, sizeIndex)}\r\n disabled={isSizeDisabled(sizeIndex)}\r\n aria-pressed={sizeIndex === selectedSizeIndex}\r\n >\r\n setSelectedSizeIndex(sizeIndex)}\r\n disabled={isSizeDisabled(sizeIndex)}\r\n tabIndex={0}\r\n />\r\n \r\n Size\r\n {size.DisplayName}\r\n \r\n \r\n ))}\r\n
    \r\n {sizes.length > displayedSizeLabels.length && (\r\n trackSearchEventClick(itemNo, position)\r\n : null\r\n }\r\n >\r\n {t('viewAllSizes')}\r\n \r\n )}\r\n \r\n )}\r\n
    \r\n\r\n {renderStyles()}\r\n\r\n
    \r\n \r\n\r\n {/* Frequency Options */}\r\n {isSOEligible && (\r\n
    \r\n {t('optionsAvailable')}: \r\n \r\n
    \r\n \r\n {t('autoDelivery')}\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 onAddToBagClickListener(selectedColorOrTasteIndex, selectedSizeIndex);\r\n }}\r\n >\r\n {(isAddedToBag || mainIsAddedToBag) && (\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 \"\"\r\n \r\n {ctaText}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ProductCardModal;\r\n","import classNames from 'classnames';\r\nimport React, { useState, useMemo, useCallback, useEffect, useRef, ChangeEvent } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport insightsClient from 'search-insights';\r\n\r\nimport { TmCart } from '@/tscapi/model/cart';\r\nimport { TmCartLineRequest } from '@/tscapi/model/request/cart-request';\r\nimport { WebApi } from '@/tscapi/service/webapi.service';\r\nimport { Storage } from '@/tscapi/utils/browser-storage';\r\nimport { Cookie } from '@/tscapi/utils/cookie';\r\n\r\nimport { TmFavourite } from '@@/App_Assets/scripts/tscapi/model/favourite';\r\n\r\nimport { FavouriteUtility } from '../../favorite/favshare.utility';\r\nimport { IProduct, IEdp } from '../IProduct';\r\nimport NiceSelect from '../NiceSelect/NiceSelect';\r\nimport { ProductHelpers } from '../utils/ProductHelpers';\r\nimport SizeHelpers, { maxItems, Size } from '../utils/SizeHelpers';\r\nimport { SwatchHelpers } from '../utils/SwatchHelpers';\r\n\r\nimport { en, fr } from './productCardi18n';\r\nimport ProductCardModal from './ProductCardModal';\r\n\r\nexport type ProductCategoryType =\r\n | 'Clothing & Shoes'\r\n | 'Jewellery'\r\n | 'Beauty'\r\n | 'Home & Garden'\r\n | 'Kitchen'\r\n | 'Health & Fitness'\r\n | 'Electronics'\r\n | 'Coins & Hobbies';\r\n\r\nexport type StyleAndSize = {\r\n DimensionId: string;\r\n DisplayName: string;\r\n};\r\n\r\nexport interface ProductCardProps {\r\n header: {\r\n title?: string;\r\n isLiked: boolean;\r\n };\r\n productObj: IProduct;\r\n productHref: string;\r\n productImage: string;\r\n availableSwatches: string[];\r\n priceIsLabel: string;\r\n name: string;\r\n brandName: string;\r\n isPriceRange: string;\r\n wasPriceRange: string;\r\n reviewCount: number;\r\n rating: number;\r\n styles: Array;\r\n sizes: Array;\r\n edps: Array;\r\n categoryPath: ProductCategoryType;\r\n enabledAddToCart: boolean;\r\n isShowstopper: boolean;\r\n showBadgeImage: boolean;\r\n badgeImagePath: string;\r\n itemNo: string;\r\n edp: number;\r\n position?: number;\r\n currentPage?: number;\r\n pageSize?: number;\r\n queryId?: string;\r\n sellerType?: 'TSC' | 'TSCPartner' | 'Marketplace';\r\n showFraudModal: () => void;\r\n}\r\ntype FavoriteEventDetail = {\r\n productData: IProduct;\r\n selectedEdp: number;\r\n};\r\n\r\nconst ProductCard = ({\r\n availableSwatches,\r\n header,\r\n productObj,\r\n productHref,\r\n productImage,\r\n name,\r\n brandName,\r\n isPriceRange,\r\n wasPriceRange,\r\n reviewCount,\r\n rating,\r\n styles,\r\n sizes,\r\n edps,\r\n categoryPath,\r\n enabledAddToCart,\r\n isShowstopper,\r\n showBadgeImage,\r\n badgeImagePath,\r\n itemNo,\r\n priceIsLabel,\r\n edp,\r\n position,\r\n currentPage,\r\n pageSize,\r\n queryId,\r\n sellerType,\r\n showFraudModal,\r\n}: ProductCardProps) => {\r\n const { i18n, t } = useTranslation('product-card');\r\n i18n.addResourceBundle('en', 'product-card', en, true, true);\r\n i18n.addResourceBundle('fr', 'product-card', fr, true, true);\r\n\r\n const [selectedSizeIndex, setSelectedSizeIndex] = useState(-1);\r\n const [isLikedCurrent, setIsLikedCurrent] = useState(header.isLiked);\r\n const [selectedColorOrTasteIndex, setSelectedColorOrTasteIndex] = useState(-1);\r\n const [isMobileModalEnabled, setIsMobileModalEnabled] = useState(false);\r\n const [width, setWidth] = useState(window.innerWidth);\r\n const [isAddedToBag, setIsAddedToBag] = useState(false);\r\n const [isAddToBagLoading, setIsAddToBagLoading] = useState(false);\r\n const [showSwatches, setShowSwatches] = useState(true);\r\n const [displayedSizeLabels, setDisplayedSizeLabels] = useState(sizes);\r\n const [labelSize, setLabelSize] = useState('md');\r\n\r\n const BREAKPOINT = 1023;\r\n const SIZE_COUNT_LIMIT = 10;\r\n const STYLE_COUNT_LIMIT = 16;\r\n const IMAGE_URL_PREFIX = 'https://item.tscimg.ca/TSC/';\r\n const IMAGE_URL_SUFFIX = '?impolicy=L';\r\n const LOADING_ASSET_PATH = '/App_Assets/public/loading.gif';\r\n const productCardAddButton = useRef(null);\r\n\r\n useEffect(() => {\r\n const body = document.querySelector('body');\r\n if (isMobileModalEnabled) {\r\n body.classList.add('bodyScrollOff');\r\n } else {\r\n body.classList.remove('bodyScrollOff');\r\n }\r\n }, [isMobileModalEnabled]);\r\n\r\n useEffect(() => {\r\n setIsLikedCurrent(header.isLiked);\r\n }, [header.isLiked]);\r\n\r\n useEffect(() => {\r\n const interval = setInterval(() => {\r\n setWidth(window.innerWidth);\r\n }, 300);\r\n\r\n return () => {\r\n clearInterval(interval);\r\n };\r\n }, [setWidth]);\r\n\r\n const isMobileOrTablet = useMemo(() => {\r\n return width <= BREAKPOINT;\r\n }, [width, BREAKPOINT]);\r\n\r\n const colorOrTasteText = useMemo(() => {\r\n return t('styles');\r\n }, [categoryPath, t]);\r\n\r\n function getDefaultEdpItem() {\r\n return edps.find((edpItem) => edpItem.EdpNo === edp);\r\n }\r\n\r\n const colorsAndSizesText = useMemo(() => {\r\n if (styles.length > 0 && sizes.length > 0) {\r\n return (\r\n \r\n
  • \r\n {styles.length} {colorOrTasteText} |\r\n
  • \r\n
  • \r\n {' '}\r\n {`${sizes.length} ${t('sizes')}`}\r\n
  • \r\n \r\n );\r\n }\r\n\r\n if (styles.length > 0 && sizes.length === 0) {\r\n return (\r\n
      \r\n
    • \r\n {styles.length} {colorOrTasteText}\r\n
    • \r\n
    \r\n );\r\n }\r\n\r\n if (styles.length === 0 && sizes.length > 0) {\r\n return (\r\n
      \r\n
    • {`${sizes.length} ${t('sizes')}`}
    • \r\n
    \r\n );\r\n }\r\n\r\n return (\r\n
      \r\n
    • \r\n
    \r\n );\r\n }, [styles, sizes, selectedColorOrTasteIndex, selectedSizeIndex, getDefaultEdpItem, edps, colorOrTasteText, t]);\r\n\r\n const currentProductImage = useMemo(() => {\r\n if (selectedColorOrTasteIndex === -1) {\r\n return productImage;\r\n }\r\n\r\n const edp = edps.find((edpItem) => {\r\n const sizeIndex = selectedSizeIndex === -1 ? 0 : selectedSizeIndex;\r\n if (styles[selectedColorOrTasteIndex] && sizes[sizeIndex]) {\r\n return (\r\n edpItem.StyleDimensionId === styles[selectedColorOrTasteIndex].DimensionId &&\r\n edpItem.SizeDimensionId === sizes[sizeIndex].DimensionId\r\n );\r\n } else if (styles[selectedColorOrTasteIndex]) {\r\n return edpItem.StyleDimensionId === styles[selectedColorOrTasteIndex].DimensionId;\r\n } else if (sizes[sizeIndex]) {\r\n return edpItem.SizeDimensionId === sizes[sizeIndex].DimensionId;\r\n } else {\r\n return false;\r\n }\r\n });\r\n\r\n if (!edp) {\r\n return productImage;\r\n }\r\n\r\n return edp.ImageUrl;\r\n }, [productImage, selectedColorOrTasteIndex, edps, styles, sizes, selectedSizeIndex]);\r\n\r\n const ratingAsString = useMemo(() => {\r\n return (Math.round(rating * 2) / 2).toString();\r\n }, [rating]);\r\n\r\n const ctaText = useMemo(() => {\r\n if (styles.length === 0 && sizes.length === 0) {\r\n return t('goToDetailPage');\r\n }\r\n\r\n if (styles.length === 0 && sizes.length !== 0) {\r\n if (selectedSizeIndex === -1) {\r\n return t('selectSize');\r\n }\r\n }\r\n\r\n if (styles.length !== 0 && sizes.length === 0) {\r\n if (selectedColorOrTasteIndex === -1) {\r\n return t('selectStyle');\r\n }\r\n }\r\n\r\n if (styles.length !== 0 && sizes.length !== 0) {\r\n if (selectedSizeIndex === -1 && selectedColorOrTasteIndex === -1) {\r\n return t('selectSizeAndStyle');\r\n }\r\n\r\n if (selectedSizeIndex !== -1 && selectedColorOrTasteIndex === -1) {\r\n return t('selectStyle');\r\n }\r\n\r\n if (selectedSizeIndex === -1 && selectedColorOrTasteIndex !== -1) {\r\n return t('selectSize');\r\n }\r\n }\r\n\r\n if (!showSwatches && labelSize === 'select') {\r\n return t('selectSizeAndStyle');\r\n }\r\n\r\n return t('goToDetailPage');\r\n }, [\r\n isAddedToBag,\r\n selectedSizeIndex,\r\n selectedColorOrTasteIndex,\r\n styles,\r\n sizes,\r\n categoryPath,\r\n showSwatches,\r\n labelSize,\r\n ]);\r\n\r\n const buttonText = useMemo(() => {\r\n if (isAddedToBag) {\r\n return t('addedToBag');\r\n }\r\n\r\n if (styles.length === 0 && sizes.length === 0) {\r\n return t('addToBag');\r\n }\r\n\r\n if (styles.length === 0 && sizes.length !== 0) {\r\n if (selectedSizeIndex === -1) {\r\n return t('selectSize');\r\n }\r\n }\r\n\r\n if (styles.length !== 0 && sizes.length === 0) {\r\n if (selectedColorOrTasteIndex === -1) {\r\n return t('selectStyle');\r\n }\r\n }\r\n\r\n if (styles.length !== 0 && sizes.length !== 0) {\r\n if (selectedSizeIndex === -1 && selectedColorOrTasteIndex === -1) {\r\n return t('selectSizeAndStyle');\r\n }\r\n\r\n if (selectedSizeIndex !== -1 && selectedColorOrTasteIndex === -1) {\r\n return t('selectStyle');\r\n }\r\n\r\n if (selectedSizeIndex === -1 && selectedColorOrTasteIndex !== -1) {\r\n return t('selectSize');\r\n }\r\n }\r\n\r\n if (!showSwatches && labelSize === 'select') {\r\n return t('selectSizeAndStyle');\r\n }\r\n\r\n return t('addToBag');\r\n }, [\r\n isAddedToBag,\r\n selectedSizeIndex,\r\n selectedColorOrTasteIndex,\r\n styles,\r\n sizes,\r\n categoryPath,\r\n showSwatches,\r\n labelSize,\r\n ]);\r\n\r\n const isSizeDisabled = useCallback(\r\n (i: number): boolean => {\r\n return ProductHelpers.isSizeDisabled(i, selectedColorOrTasteIndex, edps, styles, sizes);\r\n },\r\n [selectedColorOrTasteIndex, edps, styles, sizes],\r\n );\r\n\r\n const isFreqAutoDelivery = deriveFreqAutoDelivery(\r\n sizes,\r\n styles,\r\n getDefaultEdpItem,\r\n selectedSizeIndex,\r\n edps,\r\n selectedColorOrTasteIndex,\r\n );\r\n\r\n const isStyleDisabled = useCallback(\r\n (i: number): boolean => {\r\n return ProductHelpers.isStyleDisabled(i, selectedSizeIndex, edps, styles, sizes);\r\n },\r\n [selectedSizeIndex, edps, styles, sizes],\r\n );\r\n\r\n const firstAvailableStyleIndex = useMemo(() => {\r\n for (let i = 0; i < styles.length; i++) {\r\n if (!isStyleDisabled(i)) {\r\n return i;\r\n }\r\n }\r\n\r\n return -1;\r\n }, [styles, isStyleDisabled]);\r\n\r\n const firstAvailableSizeIndex = useMemo(() => {\r\n for (let i = 0; i < sizes.length; i++) {\r\n if (!isSizeDisabled(i)) {\r\n return i;\r\n }\r\n }\r\n\r\n return -1;\r\n }, [sizes, isSizeDisabled]);\r\n /**\r\n * Check every edp value.\r\n * If every AppliedShipping field is equal to \"\"(empty string)\r\n * return true\r\n * else false\r\n */\r\n const isFreeShipping = useMemo(() => {\r\n let isFreeShipping = true;\r\n\r\n for (const edp of edps) {\r\n if (edp.AppliedShipping !== '') {\r\n isFreeShipping = false;\r\n }\r\n }\r\n\r\n return isFreeShipping;\r\n }, [edps]);\r\n\r\n const isSOEligible = useMemo(() => {\r\n let isSOEligible = false;\r\n\r\n for (const edp of edps) {\r\n if (edp.IsSOEligible == true) {\r\n isSOEligible = true;\r\n break;\r\n }\r\n }\r\n return isSOEligible;\r\n }, [edps]);\r\n\r\n const getSwatchLink = useCallback((imageUrl: string, dimensionId: string): string => {\r\n const IMAGE_URL_DELIMITER = '/0x0/';\r\n const [fst, snd] = imageUrl.split(IMAGE_URL_DELIMITER);\r\n const [id] = snd.split('_');\r\n const link = `${fst}/${id}_${dimensionId}_SW.jpg`;\r\n return IMAGE_URL_PREFIX + link;\r\n }, []);\r\n\r\n const onMouseLeaveOrBlur = () => {\r\n setSelectedSizeIndex(labelSize === 'select' ? firstAvailableSizeIndex : -1);\r\n setSelectedColorOrTasteIndex(showSwatches ? -1 : firstAvailableStyleIndex);\r\n setIsAddedToBag(false);\r\n\r\n if (document.activeElement instanceof HTMLElement) {\r\n // console.log('%c Is this whats happening?', 'color: purple; font-weight: bold;');\r\n document.activeElement.blur();\r\n }\r\n };\r\n\r\n const onSizeKeyDownListener = (e: React.KeyboardEvent, i: number) => {\r\n if (e.key === 'Enter') {\r\n // console.log('%c onSizeKeyDownListener parent.', 'color: purple; font-weight: bold;');\r\n e.preventDefault();\r\n setSelectedSizeIndex((prev) => (prev === i ? -1 : i));\r\n }\r\n };\r\n\r\n const onSizeClickListener = (e: React.MouseEvent, i: number) => {\r\n e.preventDefault();\r\n setSelectedSizeIndex((prev) => (prev === i ? -1 : i));\r\n };\r\n\r\n const onColorOrTasteKeyDownListener = (e: React.KeyboardEvent, i: number) => {\r\n // console.log('%c onColorOrTasteKeyDownListener parent.', 'color: purple; font-weight: bold;');\r\n if (e.key === 'Enter') {\r\n e.preventDefault();\r\n setSelectedColorOrTasteIndex((prev) => (prev === i ? -1 : i));\r\n }\r\n };\r\n\r\n const onColorOrTasteClickListener = (e: React.MouseEvent, i: number) => {\r\n e.preventDefault();\r\n setSelectedColorOrTasteIndex((prev) => (prev === i ? -1 : i));\r\n };\r\n\r\n const cartEvent = (eventName: string) => {\r\n if (typeof Event === 'function') {\r\n //modern browsers\r\n const event = new Event(eventName);\r\n return event;\r\n } else {\r\n //ie9,10,11\r\n const event = document.createEvent('Event');\r\n event.initEvent(eventName, true, true);\r\n return event;\r\n }\r\n };\r\n\r\n const addToBagAction = async (sizeIndex: number, styleIndex: number) => {\r\n // console.log('%c addToBagAction!', 'color: red; font-weight: bold;');\r\n\r\n const lang = new Cookie().Language.substring(0, 2) || 'en';\r\n const baseUrl = '/api/v2/' + lang + '/carts';\r\n\r\n const cookie = new Cookie();\r\n const cartGuid = cookie.CartGuid;\r\n\r\n const cachebleHeaders = {\r\n 'Content-Type': 'application/json',\r\n 'cache-control': 'no-cache',\r\n currentdatetime: new Cookie().CurrentDate,\r\n };\r\n\r\n const sizeDimension = sizes[sizeIndex]?.DimensionId || null;\r\n const styleDimension = styles[styleIndex]?.DimensionId || null;\r\n\r\n const selectedProduct = edps.find((edpItem) => {\r\n return edpItem.SizeDimensionId === sizeDimension && edpItem.StyleDimensionId === styleDimension;\r\n });\r\n\r\n if (!selectedProduct) {\r\n setIsAddToBagLoading(false);\r\n return false;\r\n }\r\n\r\n /*\r\n console.log('%c selectedProduct.EdpNo, selectedProduct:', 'color: red; font-weight: bold;');\r\n console.log({ selectedProductEdpNo: selectedProduct.EdpNo, selectedProduct });\r\n */\r\n\r\n // To open the \"add-to-bag modal\", set these values.\r\n // @see add-to-bag.component.tsx\r\n // @see productdetail-base.ts\r\n const edpAddedToCartEl = document.querySelector('#edpAddedToCart');\r\n const qtyAddedToCartEl = document.querySelector('#qtyAddedToCart');\r\n\r\n const cartlineModel: TmCartLineRequest = new TmCartLineRequest();\r\n\r\n cartlineModel.ItemEDP = selectedProduct.EdpNo;\r\n cartlineModel.Quantity = 1;\r\n\r\n if (cookie.UserAccessToken != null && cookie.UserAccessToken.Edp != null) {\r\n cartlineModel.CustomerEdp = cookie.UserAccessToken.Edp;\r\n }\r\n\r\n const apiSvc = new WebApi();\r\n\r\n const cartSuccess = (cartData: TmCart) => {\r\n cookie.CartGuid = cartData.CartGuid;\r\n cookie.CartProductCount = cartData.OrderSummary.TotalQuantity.toString();\r\n\r\n const storage: Storage = new Storage();\r\n storage.setSessionCart(cartData);\r\n\r\n if (edpAddedToCartEl && qtyAddedToCartEl) {\r\n edpAddedToCartEl.value = `${selectedProduct.EdpNo}`;\r\n qtyAddedToCartEl.value = '1';\r\n edpAddedToCartEl.dispatchEvent(cartEvent('change'));\r\n }\r\n\r\n // Previous TSC PRP analytics\r\n window.analyticsData.productChange = {};\r\n window.analyticsData.productChange.sku = `${selectedProduct.EdpNo}`;\r\n window.analyticsData.productChange.quantity = 1;\r\n window.analyticsData.event.eventTitle = 'change-in-cart';\r\n // New FastTrack analytics\r\n window.analyticsData.event.eventType = 'product-card-add-to-cart';\r\n window.analyticsData.product = selectedProduct;\r\n window.analyticsData.page.selectedEdp = `${selectedProduct.EdpNo}`;\r\n window.analyticsData.page.selectedEdpData = selectedProduct;\r\n\r\n setIsAddedToBag(true);\r\n setIsAddToBagLoading(false);\r\n\r\n if (cartData.Buyer && cartData.Buyer.IsFraud) {\r\n showFraudModal();\r\n }\r\n };\r\n\r\n const cartError = () => {\r\n setIsAddedToBag(false);\r\n setIsAddToBagLoading(false);\r\n };\r\n\r\n if (cookie != undefined && cookie.CartGuid != undefined) {\r\n return apiSvc.addItemToCart(\r\n cartlineModel,\r\n function (responseData) {\r\n cartSuccess(responseData);\r\n },\r\n function (errorData) {\r\n cartError();\r\n },\r\n );\r\n } else {\r\n return apiSvc.createCartAndAddItem(\r\n cartlineModel,\r\n function (responseData) {\r\n cartSuccess(responseData);\r\n },\r\n function (errorData) {\r\n cartError();\r\n },\r\n );\r\n }\r\n\r\n // if (!cartGuid) {\r\n // try {\r\n // await http.post(baseUrl, {\r\n // ItemEdp: selectedProduct.EdpNo,\r\n // Quantity: 1,\r\n // }, {\r\n // headers: cachebleHeaders,\r\n // });\r\n // setIsAddedToBag(true);\r\n\r\n // if (edpAddedToCartEl && qtyAddedToCartEl) {\r\n // edpAddedToCartEl.value = `${selectedProduct.EdpNo}`;\r\n // qtyAddedToCartEl.value = \"1\";\r\n // edpAddedToCartEl.dispatchEvent(cartEvent('change'));\r\n // }\r\n\r\n // return true;\r\n // } catch (e) {\r\n // setIsAddedToBag(false);\r\n // return false;\r\n // }\r\n // } else {\r\n // try {\r\n // await http.post(baseUrl + `/${cartGuid}/cartlines`, {\r\n // ItemEdp: selectedProduct.EdpNo,\r\n // Quantity: 1,\r\n // }, {\r\n // headers: cachebleHeaders,\r\n // });\r\n // setIsAddedToBag(true);\r\n\r\n // if (edpAddedToCartEl && qtyAddedToCartEl) {\r\n // edpAddedToCartEl.value = `${selectedProduct.EdpNo}`;\r\n // qtyAddedToCartEl.value = \"1\";\r\n // edpAddedToCartEl.dispatchEvent(cartEvent('change'));\r\n // }\r\n\r\n // return true;\r\n // } catch (e) {\r\n // setIsAddedToBag(false);\r\n // return false;\r\n // }\r\n // }\r\n };\r\n\r\n const onAddToBagClick = () => {\r\n if (!isMobileOrTablet) {\r\n setIsAddToBagLoading(true);\r\n } else {\r\n if (styles.length === 0 && sizes.length === 0) {\r\n setIsAddToBagLoading(true);\r\n } else {\r\n setIsMobileModalEnabled(true);\r\n }\r\n }\r\n };\r\n\r\n const applyDesktopHoverFocusAnalytics = () => {\r\n // New FastTrack analytics\r\n if (!isMobileOrTablet) {\r\n window.analyticsData.product = productObj;\r\n window.analyticsData.event.eventType = 'product card view';\r\n }\r\n };\r\n\r\n const onCtaClick = () => {\r\n if (!isMobileOrTablet) {\r\n ctaClick(selectedColorOrTasteIndex, selectedSizeIndex);\r\n } else {\r\n if (styles.length === 0 && sizes.length === 0) {\r\n ctaClick(selectedColorOrTasteIndex, selectedSizeIndex);\r\n } else {\r\n // New FastTrack analytics\r\n window.analyticsData.product = productObj;\r\n window.analyticsData.event.eventType = 'product card view';\r\n setIsMobileModalEnabled(true);\r\n }\r\n }\r\n };\r\n\r\n const isCtaDisabled = useMemo(() => {\r\n if (styles.length === 0 && sizes.length === 0) {\r\n return false;\r\n }\r\n\r\n if (styles.length === 0 && sizes.length !== 0) {\r\n if (selectedSizeIndex === -1) {\r\n return true;\r\n }\r\n }\r\n\r\n if (styles.length !== 0 && sizes.length === 0) {\r\n if (selectedColorOrTasteIndex === -1) {\r\n return true;\r\n }\r\n }\r\n\r\n if (styles.length !== 0 && sizes.length !== 0) {\r\n return selectedSizeIndex === -1 || selectedColorOrTasteIndex === -1;\r\n }\r\n\r\n return false;\r\n }, [styles, sizes, selectedSizeIndex, selectedColorOrTasteIndex]);\r\n\r\n useEffect(() => {\r\n if (isAddToBagLoading && !isMobileModalEnabled) {\r\n addToBagAction(selectedSizeIndex, selectedColorOrTasteIndex);\r\n }\r\n }, [isAddToBagLoading]);\r\n\r\n useEffect(() => {\r\n if (labelSize === 'select') {\r\n setDisplayedSizeLabels(sizes);\r\n setSelectedSizeIndex(firstAvailableSizeIndex);\r\n } else {\r\n const limit = maxItems[labelSize];\r\n setDisplayedSizeLabels(sizes.slice(0, limit));\r\n }\r\n }, [labelSize, maxItems, sizes, setDisplayedSizeLabels, setSelectedSizeIndex, firstAvailableSizeIndex]);\r\n\r\n useEffect(() => {\r\n const size = SizeHelpers.determineSize(sizes);\r\n setLabelSize(size);\r\n }, [sizes, setLabelSize]);\r\n\r\n const onFavouriteClick = async () => {\r\n const uat = new Cookie().UserAccessToken;\r\n\r\n if (!uat) {\r\n const targetUrlCookie = new Cookie();\r\n targetUrlCookie.setValue('TSC_TargetUrl', window.location.href, 1);\r\n window.location.href = '/pages/signin';\r\n return;\r\n }\r\n\r\n const userEdp = uat.Edp;\r\n\r\n if (!userEdp) {\r\n window.location.href = '/pages/signin';\r\n return;\r\n }\r\n\r\n if (isLikedCurrent) {\r\n try {\r\n const favouriteUtility = new FavouriteUtility();\r\n await favouriteUtility.removeByItemNumber(itemNo);\r\n setIsLikedCurrent(false);\r\n } catch (e) {\r\n console.log('Failed to unfavourite', e);\r\n }\r\n } else {\r\n try {\r\n const favourite: TmFavourite = new TmFavourite();\r\n favourite.ItemNumber = itemNo;\r\n favourite.ActivityDateTime = new Date();\r\n const favouriteUtility = new FavouriteUtility();\r\n await favouriteUtility.add(favourite);\r\n setIsLikedCurrent(true);\r\n\r\n // New FastTrack analytics\r\n /*\r\n const favouritedProduct = edps.find(prod => prod.EdpNo === edp);\r\n window.analyticsData.product = favouritedProduct;\r\n */\r\n window.analyticsData.product = productObj;\r\n window.analyticsData.event.eventType = 'favourite';\r\n //trigger TT analytics event\r\n const event = new CustomEvent('favoriteEvent', {\r\n detail: { productData: productObj, selectedEdp: edp },\r\n });\r\n document.dispatchEvent(event);\r\n } catch (error) {\r\n console.log('Failed to add favourite', error);\r\n }\r\n }\r\n };\r\n\r\n const ctaClick = (styleIndex: number, sizeIndex: number) => {\r\n let url = productHref;\r\n\r\n if (styles.length === 0 && sizes.length === 0) {\r\n url = productHref;\r\n } else if (styles.length > 0 && styleIndex === -1) {\r\n url = productHref;\r\n } else if (sizes.length > 0 && sizeIndex === -1) {\r\n url = productHref;\r\n } else if (styles.length > 0 && sizes.length > 0 && (sizeIndex === -1 || styleIndex === -1)) {\r\n url = productHref;\r\n } else {\r\n const currentEdp = edps.find((edpItem) => {\r\n if (sizes.length === 0 && styleIndex !== -1) {\r\n return styles[styleIndex].DimensionId === edpItem.StyleDimensionId;\r\n } else if (styles.length === 0 && sizeIndex !== -1) {\r\n return sizes[sizeIndex].DimensionId === edpItem.SizeDimensionId;\r\n } else {\r\n return (\r\n styles[styleIndex].DimensionId === edpItem.StyleDimensionId &&\r\n sizes[sizeIndex].DimensionId === edpItem.SizeDimensionId\r\n );\r\n }\r\n });\r\n if (!currentEdp) {\r\n url = productHref;\r\n } else {\r\n url = productHref + `&edp=${currentEdp.EdpNo}`;\r\n }\r\n }\r\n // New FastTrack analytics\r\n window.analyticsData.product = productObj;\r\n window.analyticsData.event.eventType = 'product card step 1';\r\n window.location.href = url;\r\n };\r\n\r\n /*\r\n console.log('%c isMobileModalEnabled:', 'color: brown; font-weight: bold;');\r\n console.log({ isMobileModalEnabled });\r\n */\r\n\r\n const trackSearchEventClick = (itemNo: string, position: number) => {\r\n /*\r\n console.log('%c insightsClientObject:', 'color: red; font-weight: bold;');\r\n console.log({ insightsClientObject: {\r\n eventName: 'Items clicked',\r\n index: 'products',\r\n objectIDs: [itemNo],\r\n positions: [position + 1 + (currentPage - 1) * pageSize],\r\n queryID: queryId ? queryId : '',\r\n } });\r\n */\r\n insightsClient('clickedObjectIDsAfterSearch', {\r\n eventName: 'Items clicked',\r\n index: 'products',\r\n objectIDs: [itemNo],\r\n positions: [position + 1 + (currentPage - 1) * pageSize],\r\n queryID: queryId ? queryId : '',\r\n });\r\n // store data for conversion tracking on PDP\r\n try {\r\n window.sessionStorage.setItem(\r\n 'TSC_AlgoliaClick',\r\n JSON.stringify({\r\n index: 'products',\r\n objectIDs: [itemNo],\r\n positions: [position + 1 + (currentPage - 1) * pageSize],\r\n queryID: queryId ? queryId : '',\r\n }),\r\n );\r\n } catch (error) {\r\n // if it fails\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n //initially we checked if all swatches exist but for optimizatin we only now check one\r\n //if one exists, we assume all exist\r\n SwatchHelpers.doSwatchesExist(availableSwatches)\r\n .then((result) => {\r\n setShowSwatches(result);\r\n })\r\n .catch(() => {\r\n setShowSwatches(false);\r\n });\r\n }, [styles, availableSwatches]);\r\n\r\n useEffect(() => {\r\n if (!showSwatches) {\r\n setSelectedColorOrTasteIndex(firstAvailableStyleIndex);\r\n }\r\n }, [showSwatches, setSelectedColorOrTasteIndex]);\r\n\r\n const getSwatchUrl = (index: number) => {\r\n const resource = availableSwatches[index];\r\n if (!resource) {\r\n return '';\r\n }\r\n return IMAGE_URL_PREFIX + resource;\r\n };\r\n\r\n const getStarClassName = (\r\n roundedRating: number,\r\n ratingValue: 1 | 2 | 3 | 4 | 5,\r\n isRatingWhole: boolean,\r\n roundedFractional: number,\r\n ) => {\r\n /*\r\n console.log('%c isRatingWhole, roundedFractional:', 'color: red; font-weight: bold;');\r\n console.log({ isRatingWhole, roundedFractional });\r\n */\r\n const roundedDownWholeNumber = Math.floor(roundedRating);\r\n const className =\r\n ratingValue === roundedDownWholeNumber + 1 &&\r\n !isRatingWhole &&\r\n roundedFractional <= 87 &&\r\n roundedFractional >= 13\r\n ? `product-card__rating__star product-card__rating__star__${roundedFractional}-filled`\r\n : roundedDownWholeNumber >= ratingValue\r\n ? 'product-card__rating__star product-card__rating__star__100-filled'\r\n : 'product-card__rating__star product-card__rating__star__0-filled';\r\n return className;\r\n };\r\n\r\n const getStars = () => {\r\n /*\r\n console.log('%c rating:', 'color: red; font-weight: bold;');\r\n console.log({ rating });\r\n */\r\n const splitRating = rating.toString().split('.');\r\n const integer = parseInt(splitRating[0]);\r\n const fractional = splitRating[1]\r\n ? parseInt(splitRating[1].length === 1 ? splitRating[1] + '0' : splitRating[1])\r\n : 0;\r\n /*\r\n console.log('%c integer, fractional:', 'color: blue; font-weight: bold;');\r\n console.log({ integer, fractional });\r\n */\r\n const roundedFractional =\r\n fractional > 87\r\n ? 1\r\n : fractional <= 87 && fractional >= 63\r\n ? 0.75\r\n : fractional < 63 && fractional >= 38\r\n ? 0.5\r\n : fractional < 38 && fractional >= 13\r\n ? 0.25\r\n : 0;\r\n const roundedRating = integer + roundedFractional;\r\n /*\r\n console.log('%c roundedRating:', 'color: green; font-weight: bold;');\r\n console.log({ roundedRating });\r\n */\r\n const isRatingWhole = roundedRating % 1 === 0;\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  \r\n \r\n \r\n  \r\n \r\n \r\n

    {`${t('rating')} ${rating} ${t('outOf')} 5 ${t('stars')}`}

    \r\n
    \r\n );\r\n };\r\n\r\n const renderStyleSwatch = useCallback(() => {\r\n if (!showSwatches) {\r\n return <>;\r\n }\r\n\r\n return styles.slice(0, STYLE_COUNT_LIMIT).map((style, styleIndex) => (\r\n onColorOrTasteKeyDownListener(e, styleIndex)}\r\n onClick={(e) => onColorOrTasteClickListener(e, styleIndex)}\r\n disabled={isStyleDisabled(styleIndex)}\r\n aria-pressed={styleIndex === selectedColorOrTasteIndex}\r\n >\r\n setSelectedColorOrTasteIndex(styleIndex)}\r\n />\r\n \r\n \r\n {colorOrTasteText} {style.DisplayName}\r\n \r\n \r\n \r\n ));\r\n }, [\r\n showSwatches,\r\n styles,\r\n STYLE_COUNT_LIMIT,\r\n onColorOrTasteKeyDownListener,\r\n onColorOrTasteClickListener,\r\n isStyleDisabled,\r\n selectedColorOrTasteIndex,\r\n setSelectedColorOrTasteIndex,\r\n name,\r\n SwatchHelpers,\r\n SwatchHelpers.getSwatchUrl,\r\n colorOrTasteText,\r\n ]);\r\n\r\n const selectOnChange = (value: string) => {\r\n const index = styles.findIndex((style) => style.DimensionId === value);\r\n setSelectedColorOrTasteIndex(index);\r\n };\r\n\r\n {\r\n /*\r\n const renderStyleDropdown = useCallback(() => {\r\n if (styles.length === 0) {\r\n return <>;\r\n }\r\n\r\n const stylesOptions = styles.slice(0, STYLE_COUNT_LIMIT).map((style, styleIndex) => {\r\n return {\r\n option: style.DisplayName,\r\n value: style.DimensionId,\r\n disabled: isStyleDisabled(styleIndex)\r\n };\r\n })\r\n\r\n return (\r\n setSelectedColorOrTasteIndex(firstAvailableStyleIndex)}\r\n onChange={(e) => {\r\n const index = styles.findIndex((style) => {\r\n return style.DimensionId === e.target.value;\r\n });\r\n setSelectedColorOrTasteIndex(index);\r\n }}\r\n value={styles[selectedColorOrTasteIndex]?.DimensionId}\r\n >\r\n {\r\n styles.slice(0, STYLE_COUNT_LIMIT).map((style, styleIndex) => (\r\n \r\n {style.DisplayName}\r\n \r\n ))\r\n }\r\n \r\n );\r\n }, [styles, setSelectedColorOrTasteIndex, selectedColorOrTasteIndex, isStyleDisabled]);\r\n */\r\n }\r\n\r\n const renderStyleDropdown = useCallback(() => {\r\n if (styles.length === 0) {\r\n return <>;\r\n }\r\n\r\n const stylesOptions = styles.map((style, styleIndex) => {\r\n return {\r\n option: style.DisplayName,\r\n value: style.DimensionId,\r\n disabled: isStyleDisabled(styleIndex),\r\n };\r\n });\r\n\r\n return (\r\n setSelectedColorOrTasteIndex(firstAvailableStyleIndex)}\r\n selectOnChange={selectOnChange}\r\n />\r\n );\r\n }, [styles, setSelectedColorOrTasteIndex, selectedColorOrTasteIndex, isStyleDisabled]);\r\n\r\n const renderStyles = () => {\r\n return (\r\n
    \r\n {colorOrTasteText}\r\n {/* Color and Taste */}\r\n {styles.length !== 0 && (\r\n
    \r\n

    \r\n {t('selectStyle')}:{' '}\r\n {selectedColorOrTasteIndex !== -1 && (\r\n {styles[selectedColorOrTasteIndex].DisplayName}\r\n )}\r\n

    \r\n {showSwatches && (\r\n
    {renderStyleSwatch()}
    \r\n )}\r\n {!showSwatches && renderStyleDropdown()}\r\n {styles.length >= STYLE_COUNT_LIMIT && showSwatches && (\r\n trackSearchEventClick(itemNo, position)\r\n : null\r\n }\r\n >\r\n {`${t('viewAll')} ${colorOrTasteText}`}\r\n \r\n )}\r\n
    \r\n )}\r\n
    \r\n );\r\n };\r\n\r\n const renderSizeDropdown = useCallback(() => {\r\n if (sizes.length === 0) {\r\n return <>;\r\n }\r\n\r\n return (\r\n setSelectedSizeIndex(firstAvailableSizeIndex)}\r\n onChange={(e) => {\r\n const index = sizes.findIndex((size) => {\r\n return size.DimensionId === e.target.value;\r\n });\r\n setSelectedSizeIndex(index);\r\n }}\r\n value={sizes[selectedSizeIndex]?.DimensionId}\r\n >\r\n {sizes.map((size, sizeIndex) => (\r\n \r\n ))}\r\n \r\n );\r\n }, [sizes, firstAvailableSizeIndex, selectedSizeIndex, setSelectedSizeIndex, isSizeDisabled]);\r\n\r\n return (\r\n <>\r\n \r\n
    \r\n
    \r\n \r\n {priceIsLabel !== '' ? priceIsLabel : ''}\r\n {priceIsLabel === '' &&  }\r\n \r\n \r\n {`${t('like')} ${name}`}\r\n \r\n
    \r\n
    \r\n {sellerType === 'Marketplace' ? (\r\n
    \r\n \r\n {sellerType + ' Seller'}\r\n
    \r\n ) : (\r\n  \r\n )}\r\n
    \r\n
    \r\n trackSearchEventClick(itemNo, position)\r\n : null\r\n }\r\n data-lpos=\"product card image\"\r\n >\r\n {name}\r\n \r\n\r\n
    \r\n
    {colorsAndSizesText}
    \r\n\r\n
    \r\n {t('sizes')}\r\n\r\n {/* Size */}\r\n {displayedSizeLabels.length !== 0 && (\r\n
    \r\n \r\n {t('selectSize')}:{' '}\r\n {selectedSizeIndex !== -1 && (\r\n {displayedSizeLabels[selectedSizeIndex].DisplayName}\r\n )}\r\n \r\n \r\n {labelSize === 'select' && renderSizeDropdown()}\r\n {labelSize !== 'select' &&\r\n displayedSizeLabels.map((size, sizeIndex) => (\r\n onSizeKeyDownListener(e, sizeIndex)}\r\n onClick={(e) => onSizeClickListener(e, sizeIndex)}\r\n disabled={isSizeDisabled(sizeIndex)}\r\n aria-pressed={sizeIndex === selectedSizeIndex}\r\n >\r\n setSelectedSizeIndex(sizeIndex)}\r\n disabled={isSizeDisabled(sizeIndex)}\r\n tabIndex={0}\r\n />\r\n \r\n Size\r\n {size.DisplayName}\r\n \r\n \r\n ))}\r\n
    \r\n {sizes.length > displayedSizeLabels.length && (\r\n trackSearchEventClick(itemNo, position)\r\n : null\r\n }\r\n >\r\n {t('viewAllSizes')}\r\n \r\n )}\r\n \r\n )}\r\n
    \r\n\r\n {renderStyles()}\r\n\r\n
    \r\n \r\n\r\n {/* Frequency Options */}\r\n {isSOEligible && (\r\n
    \r\n {t('optionsAvailable')}: \r\n \r\n
    \r\n \r\n {t('autoDelivery')}\r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n )}\r\n
    \r\n\r\n
    \r\n trackSearchEventClick(itemNo, position)\r\n : null\r\n }\r\n >\r\n {name}\r\n \r\n

    {brandName ? `${t('by')} ${brandName}` : '\\u00a0'}

    \r\n
    \r\n trackSearchEventClick(itemNo, position)\r\n : null\r\n }\r\n >\r\n \r\n {t('currentPrice')}\r\n {isPriceRange}\r\n \r\n {isPriceRange !== wasPriceRange && (\r\n \r\n {t('previousPrice')}\r\n {wasPriceRange}\r\n \r\n )}\r\n \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n {reviewCount !== 0 && (\r\n <>\r\n {getStars()}\r\n trackSearchEventClick(itemNo, position)\r\n : null\r\n }\r\n >\r\n {`${reviewCount} ${t('reviews')}`}\r\n \r\n \r\n )}\r\n
    \r\n\r\n
    \r\n {isFreeShipping && (\r\n
    \r\n {t('freeShipping')}\r\n
    \r\n )}\r\n \r\n {isAddedToBag && (\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 \r\n {/*{buttonText}*/}\r\n {ctaText}\r\n \r\n \r\n {isMobileModalEnabled && (\r\n {\r\n setIsMobileModalEnabled(false);\r\n // console.log('%c setIsMobileModalEnabled #3', 'color: red; font-weight: bold;');\r\n setIsAddedToBag(false);\r\n /*\r\n if (document.activeElement instanceof HTMLElement) {\r\n document.activeElement.blur();\r\n }\r\n */\r\n setSelectedSizeIndex(-1);\r\n setSelectedColorOrTasteIndex(-1);\r\n productCardAddButton?.current?.focus();\r\n }}\r\n //onAddToBagClickListener={addToBagAction}\r\n onAddToBagClickListener={ctaClick}\r\n edps={edps}\r\n productHref={productHref}\r\n categoryPath={categoryPath}\r\n updateSizeIndex={(v) => setSelectedSizeIndex(v)}\r\n updateColorOrTasteIndex={(v) => setSelectedColorOrTasteIndex(v)}\r\n mainIsAddedToBag={isAddedToBag}\r\n updateIsAddToBagLoading={(v) => setIsAddToBagLoading(v)}\r\n itemNo={itemNo}\r\n edp={edp}\r\n position={position}\r\n currentPage={currentPage}\r\n pageSize={pageSize}\r\n queryId={queryId}\r\n showSwatches={showSwatches}\r\n labelSize={labelSize}\r\n displayedSizeLabels={displayedSizeLabels}\r\n availableSwatches={availableSwatches}\r\n />\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default ProductCard;\r\nexport function deriveFreqAutoDelivery(\r\n sizes: StyleAndSize[],\r\n styles: StyleAndSize[],\r\n getDefaultEdpItem: () => IEdp,\r\n selectedSizeIndex: number,\r\n edps: IEdp[],\r\n selectedColorOrTasteIndex: number,\r\n) {\r\n return () => {\r\n let isFrequencyAutoDelivery = false;\r\n let currentEdp = null;\r\n //figure out selected EDP for check below\r\n if (sizes.length === 0 && styles.length === 0) {\r\n //has no styles or sizes\r\n currentEdp = getDefaultEdpItem();\r\n } else if (sizes.length > 0 && styles.length === 0) {\r\n // has sizes, no styles\r\n if (selectedSizeIndex !== -1) {\r\n // size selected\r\n currentEdp = edps.find((edpItem) => {\r\n return edpItem.SizeDimensionId === sizes[selectedSizeIndex].DimensionId;\r\n });\r\n } else {\r\n // size not selected, return defaultedp\r\n const tmp = getDefaultEdpItem();\r\n currentEdp = tmp && tmp.Inventory > 0 && tmp.Inventory < 10 ? tmp : undefined;\r\n }\r\n } else if (styles.length > 0 && sizes.length === 0) {\r\n // has styles, no size\r\n if (selectedColorOrTasteIndex !== -1) {\r\n currentEdp = edps.find((edpItem) => {\r\n return edpItem.StyleDimensionId === styles[selectedColorOrTasteIndex].DimensionId;\r\n });\r\n } else {\r\n const tmp = getDefaultEdpItem();\r\n currentEdp = tmp && tmp.Inventory > 0 && tmp.Inventory < 10 ? tmp : undefined;\r\n }\r\n } else if (selectedSizeIndex === -1 && selectedColorOrTasteIndex === -1) {\r\n // has both Style/Size, not selected\r\n currentEdp = getDefaultEdpItem();\r\n } else if (selectedSizeIndex === -1 && selectedColorOrTasteIndex !== -1) {\r\n // has both, style selected\r\n currentEdp = edps.find((edpItem) => {\r\n return edpItem.StyleDimensionId === styles[selectedColorOrTasteIndex].DimensionId;\r\n });\r\n } else if (selectedSizeIndex !== -1 && selectedColorOrTasteIndex === -1) {\r\n // has both, size selected\r\n currentEdp = edps.find((edpItem) => {\r\n return edpItem.SizeDimensionId === sizes[selectedSizeIndex].DimensionId;\r\n });\r\n } else if (selectedSizeIndex !== -1 && selectedColorOrTasteIndex !== -1) {\r\n // has both Style/Size, both selected\r\n currentEdp = edps.find((edpItem) => {\r\n return (\r\n edpItem.SizeDimensionId === sizes[selectedSizeIndex].DimensionId &&\r\n edpItem.StyleDimensionId === styles[selectedColorOrTasteIndex].DimensionId\r\n );\r\n });\r\n }\r\n if (currentEdp?.IsSOEligible == true) {\r\n isFrequencyAutoDelivery = true;\r\n }\r\n return isFrequencyAutoDelivery;\r\n };\r\n}\r\n","import { PrpProps } from './Prp';\r\n\r\nconst mockData: PrpProps = {\r\n data: {\r\n DimensionStates: [],\r\n Paging: {\r\n TotalRecords: 0,\r\n TotalPages: 0,\r\n CurrentPage: 0,\r\n },\r\n Sorting: {\r\n SelectedSortOption: {\r\n Key: 'FeaturedProducts',\r\n DisplayName: 'Featured Products',\r\n },\r\n SortOptions: [],\r\n },\r\n Products: [],\r\n QueryDims: [],\r\n RedirectUrl: null,\r\n SearchTerm: '',\r\n Redirected: false,\r\n AimRequestEndpoint: 'https://aim-gql-tsc.conscia.ai/graphql',\r\n AimRequestBody:\r\n '{\\r\\n \"query\": \"query ($segments: [String!]!, $context: Object!) {processedSegments(segments: $segments, context: $context) {result}}\",\\r\\n \"variables\": {\\r\\n \"segments\": [\\r\\n \"keyword-redirects\",\\r\\n \"product-search-results\",\\r\\n \"full-facet-data\",\\r\\n \"facet-rules\"\\r\\n ],\\r\\n \"context\": {\\r\\n \"queryProfileCode\": \"main\",\\r\\n \"searchTerms\": \" \",\\r\\n \"useGlobalRules\": \"TRUE\",\\r\\n \"maxResults\": 144,\\r\\n \"fieldsToReturn\": [\\r\\n \"ItemNo\",\\r\\n \"Name_En\",\\r\\n \"Name_Fr\",\\r\\n \"DefaultEdpNo\",\\r\\n \"IsSoldOut\",\\r\\n \"ProductReviewCount\",\\r\\n \"ProductReviewRating\",\\r\\n \"PriceIsLabel_En\",\\r\\n \"PriceIsLabel_Fr\",\\r\\n \"CanAddToCart\",\\r\\n \"TSFrom\",\\r\\n \"TSTo\",\\r\\n \"Styles\",\\r\\n \"Sizes\",\\r\\n \"Videos\",\\r\\n \"ShipMethod\",\\r\\n \"Installments\",\\r\\n \"Status\",\\r\\n \"IsWebOnly\",\\r\\n \"IsWebExcluded\",\\r\\n \"IsActive\",\\r\\n \"ActiveFrom\",\\r\\n \"ActiveTo\",\\r\\n \"IsSearchable\",\\r\\n \"SearchExcludeFrom\",\\r\\n \"SearchExcludeTo\",\\r\\n \"Edps.ItemNo\",\\r\\n \"Edps.EdpNo\",\\r\\n \"Edps.UpcNo\",\\r\\n \"Edps.Inventory\",\\r\\n \"Edps.PriceIs\",\\r\\n \"Edps.PriceWas\",\\r\\n \"Edps.Installments\",\\r\\n \"Edps.StyleCode\",\\r\\n \"Edps.SizeCode\",\\r\\n \"Edps.UnitsSold\",\\r\\n \"Edps.ColourFamily_en\",\\r\\n \"Edps.ColourFamily_fr\",\\r\\n \"Edps.ImageUrl\",\\r\\n \"Edps.IsPAndHOverride\",\\r\\n \"Edps.ShippingSurcharge\",\\r\\n \"Edps.PH_Routine_Alt\",\\r\\n \"Edps.Weight\",\\r\\n \"Edps.SkuAvailabilityType\",\\r\\n \"Edps.SkuAvailabilityDate\",\\r\\n \"Edps.EdpStatus\",\\r\\n \"Edps.RestrictedShipmentCode\",\\r\\n \"Edps.RestrictedProvinces\",\\r\\n \"TSC_d_product_type\",\\r\\n \"TSC_d_brand\",\\r\\n \"TSC_d_more_ways_to_shop\",\\r\\n \"TSC_d_is_price_label\",\\r\\n \"TSC_d_specialty_shop\"\\r\\n ],\\r\\n \"selectedDimensions\": [\\r\\n \"3002805\"\\r\\n ],\\r\\n \"facetState\": {\\r\\n \"selectedFacets\": {\\r\\n \"TSC_d_product_type\": {\\r\\n \"selectedKeys\": [\\r\\n \"3002805\"\\r\\n ]\\r\\n }\\r\\n }\\r\\n }\\r\\n }\\r\\n }\\r\\n}',\r\n AimRequestTime: '20211006083339446',\r\n AimResponseTimeInMS: 3797,\r\n AimRequestResponseLogDir: '',\r\n AimRequestFileName: '',\r\n AimResponseFileName: '',\r\n AimRequestResponseLogThreshold: 0,\r\n QueryId: 'b2e9eeca11eb8037b56655f4006f6f60',\r\n },\r\n};\r\n\r\nexport default mockData;\r\n","export const en = {\r\n reviews: 'reviews',\r\n filter: 'Filter',\r\n clearAll: 'Clear all',\r\n category: 'Category',\r\n filtersAdded: 'Filters added',\r\n view: 'View',\r\n products: 'products',\r\n search: 'Search',\r\n onAirToday: 'On Air Today',\r\n onAirYesterday: 'On Air Yesterday',\r\n onAirRecently: 'On Air Recently',\r\n};\r\n\r\nexport const fr = {\r\n reviews: 'reviews',\r\n filter: 'Filter',\r\n clearAll: 'Clear all',\r\n category: 'Category',\r\n filtersAdded: 'Filters added',\r\n view: 'View',\r\n products: 'products',\r\n search: 'Search',\r\n onAirToday: 'On Air Today',\r\n onAirYesterday: 'On Air Yesterday',\r\n onAirRecently: 'On Air Recently',\r\n};\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { en, fr } from './i18n';\r\nimport classnames from 'classnames';\r\n\r\nexport interface OnAirButtonsProps {\r\n className?: string;\r\n}\r\n\r\nconst OnAirButtons = ({ className = '' }: OnAirButtonsProps) => {\r\n const { i18n, t } = useTranslation('prp-filter-panel');\r\n i18n.addResourceBundle('en', 'prp-filter-panel', en, true, true);\r\n i18n.addResourceBundle('fr', 'prp-filter-panel', fr, true, true);\r\n\r\n const onAirButtons = [\r\n {\r\n id: 'on-air-today',\r\n label: t('onAirToday'),\r\n dimensionId: tscConfig.AliasDimensionOnAirToday,\r\n trackingId: '&ic=PG_BTN_OnAirProducts_Today'\r\n },\r\n {\r\n id: 'on-air-yesterday',\r\n label: t('onAirYesterday'),\r\n dimensionId: tscConfig.AliasDimensionOnAirYesterday,\r\n trackingId: '&ic=PG_BTN_OnAirProducts_Yesterday'\r\n\r\n },\r\n {\r\n id: 'on-air-recently',\r\n label: t('onAirRecently'),\r\n dimensionId: tscConfig.AliasDimensionOnAirRecently,\r\n trackingId: '&ic=PG_BTN_OnAirProducts_Recently'\r\n },\r\n ];\r\n\r\n const onAirName = 'on-air-radio-buttons';\r\n\r\n return (\r\n
      \r\n {onAirButtons.map((btn) => (\r\n
    • \r\n {\r\n window.location.href = `/pages/productresults?dimensions=${btn.dimensionId}&page=1&pageSize=36&rd=false${btn.trackingId}`;\r\n }}\r\n value={btn.dimensionId}\r\n />\r\n \r\n
    • \r\n ))}\r\n
    \r\n );\r\n}\r\n\r\nexport default OnAirButtons;\r\n","/*\r\n Licensed under the Apache License, Version 2.0 (the \"License\");\r\n you may not use this file except in compliance with the License.\r\n You may obtain a copy of the License at\r\n\r\n http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n Unless required by applicable law or agreed to in writing, software\r\n distributed under the License is distributed on an \"AS IS\" BASIS,\r\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n See the License for the specific language governing permissions and\r\n limitations under the License.\r\n*/\r\nconst defaultDiacriticsRemovalMap = [\r\n {\r\n base: 'A',\r\n letters:\r\n '\\u0041\\u24B6\\uFF21\\u00C0\\u00C1\\u00C2\\u1EA6\\u1EA4\\u1EAA\\u1EA8\\u00C3\\u0100\\u0102\\u1EB0\\u1EAE\\u1EB4\\u1EB2\\u0226\\u01E0\\u00C4\\u01DE\\u1EA2\\u00C5\\u01FA\\u01CD\\u0200\\u0202\\u1EA0\\u1EAC\\u1EB6\\u1E00\\u0104\\u023A\\u2C6F',\r\n },\r\n { base: 'AA', letters: '\\uA732' },\r\n { base: 'AE', letters: '\\u00C6\\u01FC\\u01E2' },\r\n { base: 'AO', letters: '\\uA734' },\r\n { base: 'AU', letters: '\\uA736' },\r\n { base: 'AV', letters: '\\uA738\\uA73A' },\r\n { base: 'AY', letters: '\\uA73C' },\r\n { base: 'B', letters: '\\u0042\\u24B7\\uFF22\\u1E02\\u1E04\\u1E06\\u0243\\u0182\\u0181' },\r\n { base: 'C', letters: '\\u0043\\u24B8\\uFF23\\u0106\\u0108\\u010A\\u010C\\u00C7\\u1E08\\u0187\\u023B\\uA73E' },\r\n {\r\n base: 'D',\r\n letters: '\\u0044\\u24B9\\uFF24\\u1E0A\\u010E\\u1E0C\\u1E10\\u1E12\\u1E0E\\u0110\\u018B\\u018A\\u0189\\uA779\\u00D0',\r\n },\r\n { base: 'DZ', letters: '\\u01F1\\u01C4' },\r\n { base: 'Dz', letters: '\\u01F2\\u01C5' },\r\n {\r\n base: 'E',\r\n letters:\r\n '\\u0045\\u24BA\\uFF25\\u00C8\\u00C9\\u00CA\\u1EC0\\u1EBE\\u1EC4\\u1EC2\\u1EBC\\u0112\\u1E14\\u1E16\\u0114\\u0116\\u00CB\\u1EBA\\u011A\\u0204\\u0206\\u1EB8\\u1EC6\\u0228\\u1E1C\\u0118\\u1E18\\u1E1A\\u0190\\u018E',\r\n },\r\n { base: 'F', letters: '\\u0046\\u24BB\\uFF26\\u1E1E\\u0191\\uA77B' },\r\n {\r\n base: 'G',\r\n letters: '\\u0047\\u24BC\\uFF27\\u01F4\\u011C\\u1E20\\u011E\\u0120\\u01E6\\u0122\\u01E4\\u0193\\uA7A0\\uA77D\\uA77E',\r\n },\r\n { base: 'H', letters: '\\u0048\\u24BD\\uFF28\\u0124\\u1E22\\u1E26\\u021E\\u1E24\\u1E28\\u1E2A\\u0126\\u2C67\\u2C75\\uA78D' },\r\n {\r\n base: 'I',\r\n letters:\r\n '\\u0049\\u24BE\\uFF29\\u00CC\\u00CD\\u00CE\\u0128\\u012A\\u012C\\u0130\\u00CF\\u1E2E\\u1EC8\\u01CF\\u0208\\u020A\\u1ECA\\u012E\\u1E2C\\u0197',\r\n },\r\n { base: 'J', letters: '\\u004A\\u24BF\\uFF2A\\u0134\\u0248' },\r\n { base: 'K', letters: '\\u004B\\u24C0\\uFF2B\\u1E30\\u01E8\\u1E32\\u0136\\u1E34\\u0198\\u2C69\\uA740\\uA742\\uA744\\uA7A2' },\r\n {\r\n base: 'L',\r\n letters:\r\n '\\u004C\\u24C1\\uFF2C\\u013F\\u0139\\u013D\\u1E36\\u1E38\\u013B\\u1E3C\\u1E3A\\u0141\\u023D\\u2C62\\u2C60\\uA748\\uA746\\uA780',\r\n },\r\n { base: 'LJ', letters: '\\u01C7' },\r\n { base: 'Lj', letters: '\\u01C8' },\r\n { base: 'M', letters: '\\u004D\\u24C2\\uFF2D\\u1E3E\\u1E40\\u1E42\\u2C6E\\u019C' },\r\n {\r\n base: 'N',\r\n letters: '\\u004E\\u24C3\\uFF2E\\u01F8\\u0143\\u00D1\\u1E44\\u0147\\u1E46\\u0145\\u1E4A\\u1E48\\u0220\\u019D\\uA790\\uA7A4',\r\n },\r\n { base: 'NJ', letters: '\\u01CA' },\r\n { base: 'Nj', letters: '\\u01CB' },\r\n {\r\n base: 'O',\r\n letters:\r\n '\\u004F\\u24C4\\uFF2F\\u00D2\\u00D3\\u00D4\\u1ED2\\u1ED0\\u1ED6\\u1ED4\\u00D5\\u1E4C\\u022C\\u1E4E\\u014C\\u1E50\\u1E52\\u014E\\u022E\\u0230\\u00D6\\u022A\\u1ECE\\u0150\\u01D1\\u020C\\u020E\\u01A0\\u1EDC\\u1EDA\\u1EE0\\u1EDE\\u1EE2\\u1ECC\\u1ED8\\u01EA\\u01EC\\u00D8\\u01FE\\u0186\\u019F\\uA74A\\uA74C',\r\n },\r\n { base: 'OI', letters: '\\u01A2' },\r\n { base: 'OO', letters: '\\uA74E' },\r\n { base: 'OU', letters: '\\u0222' },\r\n { base: 'OE', letters: '\\u008C\\u0152' },\r\n { base: 'oe', letters: '\\u009C\\u0153' },\r\n { base: 'P', letters: '\\u0050\\u24C5\\uFF30\\u1E54\\u1E56\\u01A4\\u2C63\\uA750\\uA752\\uA754' },\r\n { base: 'Q', letters: '\\u0051\\u24C6\\uFF31\\uA756\\uA758\\u024A' },\r\n {\r\n base: 'R',\r\n letters:\r\n '\\u0052\\u24C7\\uFF32\\u0154\\u1E58\\u0158\\u0210\\u0212\\u1E5A\\u1E5C\\u0156\\u1E5E\\u024C\\u2C64\\uA75A\\uA7A6\\uA782',\r\n },\r\n {\r\n base: 'S',\r\n letters:\r\n '\\u0053\\u24C8\\uFF33\\u1E9E\\u015A\\u1E64\\u015C\\u1E60\\u0160\\u1E66\\u1E62\\u1E68\\u0218\\u015E\\u2C7E\\uA7A8\\uA784',\r\n },\r\n {\r\n base: 'T',\r\n letters: '\\u0054\\u24C9\\uFF34\\u1E6A\\u0164\\u1E6C\\u021A\\u0162\\u1E70\\u1E6E\\u0166\\u01AC\\u01AE\\u023E\\uA786',\r\n },\r\n { base: 'TZ', letters: '\\uA728' },\r\n {\r\n base: 'U',\r\n letters:\r\n '\\u0055\\u24CA\\uFF35\\u00D9\\u00DA\\u00DB\\u0168\\u1E78\\u016A\\u1E7A\\u016C\\u00DC\\u01DB\\u01D7\\u01D5\\u01D9\\u1EE6\\u016E\\u0170\\u01D3\\u0214\\u0216\\u01AF\\u1EEA\\u1EE8\\u1EEE\\u1EEC\\u1EF0\\u1EE4\\u1E72\\u0172\\u1E76\\u1E74\\u0244',\r\n },\r\n { base: 'V', letters: '\\u0056\\u24CB\\uFF36\\u1E7C\\u1E7E\\u01B2\\uA75E\\u0245' },\r\n { base: 'VY', letters: '\\uA760' },\r\n { base: 'W', letters: '\\u0057\\u24CC\\uFF37\\u1E80\\u1E82\\u0174\\u1E86\\u1E84\\u1E88\\u2C72' },\r\n { base: 'X', letters: '\\u0058\\u24CD\\uFF38\\u1E8A\\u1E8C' },\r\n {\r\n base: 'Y',\r\n letters: '\\u0059\\u24CE\\uFF39\\u1EF2\\u00DD\\u0176\\u1EF8\\u0232\\u1E8E\\u0178\\u1EF6\\u1EF4\\u01B3\\u024E\\u1EFE',\r\n },\r\n { base: 'Z', letters: '\\u005A\\u24CF\\uFF3A\\u0179\\u1E90\\u017B\\u017D\\u1E92\\u1E94\\u01B5\\u0224\\u2C7F\\u2C6B\\uA762' },\r\n {\r\n base: 'a',\r\n letters:\r\n '\\u0061\\u24D0\\uFF41\\u1E9A\\u00E0\\u00E1\\u00E2\\u1EA7\\u1EA5\\u1EAB\\u1EA9\\u00E3\\u0101\\u0103\\u1EB1\\u1EAF\\u1EB5\\u1EB3\\u0227\\u01E1\\u00E4\\u01DF\\u1EA3\\u00E5\\u01FB\\u01CE\\u0201\\u0203\\u1EA1\\u1EAD\\u1EB7\\u1E01\\u0105\\u2C65\\u0250',\r\n },\r\n { base: 'aa', letters: '\\uA733' },\r\n { base: 'ae', letters: '\\u00E6\\u01FD\\u01E3' },\r\n { base: 'ao', letters: '\\uA735' },\r\n { base: 'au', letters: '\\uA737' },\r\n { base: 'av', letters: '\\uA739\\uA73B' },\r\n { base: 'ay', letters: '\\uA73D' },\r\n { base: 'b', letters: '\\u0062\\u24D1\\uFF42\\u1E03\\u1E05\\u1E07\\u0180\\u0183\\u0253' },\r\n { base: 'c', letters: '\\u0063\\u24D2\\uFF43\\u0107\\u0109\\u010B\\u010D\\u00E7\\u1E09\\u0188\\u023C\\uA73F\\u2184' },\r\n { base: 'd', letters: '\\u0064\\u24D3\\uFF44\\u1E0B\\u010F\\u1E0D\\u1E11\\u1E13\\u1E0F\\u0111\\u018C\\u0256\\u0257\\uA77A' },\r\n { base: 'dz', letters: '\\u01F3\\u01C6' },\r\n {\r\n base: 'e',\r\n letters:\r\n '\\u0065\\u24D4\\uFF45\\u00E8\\u00E9\\u00EA\\u1EC1\\u1EBF\\u1EC5\\u1EC3\\u1EBD\\u0113\\u1E15\\u1E17\\u0115\\u0117\\u00EB\\u1EBB\\u011B\\u0205\\u0207\\u1EB9\\u1EC7\\u0229\\u1E1D\\u0119\\u1E19\\u1E1B\\u0247\\u025B\\u01DD',\r\n },\r\n { base: 'f', letters: '\\u0066\\u24D5\\uFF46\\u1E1F\\u0192\\uA77C' },\r\n {\r\n base: 'g',\r\n letters: '\\u0067\\u24D6\\uFF47\\u01F5\\u011D\\u1E21\\u011F\\u0121\\u01E7\\u0123\\u01E5\\u0260\\uA7A1\\u1D79\\uA77F',\r\n },\r\n {\r\n base: 'h',\r\n letters: '\\u0068\\u24D7\\uFF48\\u0125\\u1E23\\u1E27\\u021F\\u1E25\\u1E29\\u1E2B\\u1E96\\u0127\\u2C68\\u2C76\\u0265',\r\n },\r\n { base: 'hv', letters: '\\u0195' },\r\n {\r\n base: 'i',\r\n letters:\r\n '\\u0069\\u24D8\\uFF49\\u00EC\\u00ED\\u00EE\\u0129\\u012B\\u012D\\u00EF\\u1E2F\\u1EC9\\u01D0\\u0209\\u020B\\u1ECB\\u012F\\u1E2D\\u0268\\u0131',\r\n },\r\n { base: 'j', letters: '\\u006A\\u24D9\\uFF4A\\u0135\\u01F0\\u0249' },\r\n { base: 'k', letters: '\\u006B\\u24DA\\uFF4B\\u1E31\\u01E9\\u1E33\\u0137\\u1E35\\u0199\\u2C6A\\uA741\\uA743\\uA745\\uA7A3' },\r\n {\r\n base: 'l',\r\n letters:\r\n '\\u006C\\u24DB\\uFF4C\\u0140\\u013A\\u013E\\u1E37\\u1E39\\u013C\\u1E3D\\u1E3B\\u017F\\u0142\\u019A\\u026B\\u2C61\\uA749\\uA781\\uA747',\r\n },\r\n { base: 'lj', letters: '\\u01C9' },\r\n { base: 'm', letters: '\\u006D\\u24DC\\uFF4D\\u1E3F\\u1E41\\u1E43\\u0271\\u026F' },\r\n {\r\n base: 'n',\r\n letters:\r\n '\\u006E\\u24DD\\uFF4E\\u01F9\\u0144\\u00F1\\u1E45\\u0148\\u1E47\\u0146\\u1E4B\\u1E49\\u019E\\u0272\\u0149\\uA791\\uA7A5',\r\n },\r\n { base: 'nj', letters: '\\u01CC' },\r\n {\r\n base: 'o',\r\n letters:\r\n '\\u006F\\u24DE\\uFF4F\\u00F2\\u00F3\\u00F4\\u1ED3\\u1ED1\\u1ED7\\u1ED5\\u00F5\\u1E4D\\u022D\\u1E4F\\u014D\\u1E51\\u1E53\\u014F\\u022F\\u0231\\u00F6\\u022B\\u1ECF\\u0151\\u01D2\\u020D\\u020F\\u01A1\\u1EDD\\u1EDB\\u1EE1\\u1EDF\\u1EE3\\u1ECD\\u1ED9\\u01EB\\u01ED\\u00F8\\u01FF\\u0254\\uA74B\\uA74D\\u0275',\r\n },\r\n { base: 'oi', letters: '\\u01A3' },\r\n { base: 'ou', letters: '\\u0223' },\r\n { base: 'oo', letters: '\\uA74F' },\r\n { base: 'p', letters: '\\u0070\\u24DF\\uFF50\\u1E55\\u1E57\\u01A5\\u1D7D\\uA751\\uA753\\uA755' },\r\n { base: 'q', letters: '\\u0071\\u24E0\\uFF51\\u024B\\uA757\\uA759' },\r\n {\r\n base: 'r',\r\n letters:\r\n '\\u0072\\u24E1\\uFF52\\u0155\\u1E59\\u0159\\u0211\\u0213\\u1E5B\\u1E5D\\u0157\\u1E5F\\u024D\\u027D\\uA75B\\uA7A7\\uA783',\r\n },\r\n {\r\n base: 's',\r\n letters:\r\n '\\u0073\\u24E2\\uFF53\\u00DF\\u015B\\u1E65\\u015D\\u1E61\\u0161\\u1E67\\u1E63\\u1E69\\u0219\\u015F\\u023F\\uA7A9\\uA785\\u1E9B',\r\n },\r\n {\r\n base: 't',\r\n letters: '\\u0074\\u24E3\\uFF54\\u1E6B\\u1E97\\u0165\\u1E6D\\u021B\\u0163\\u1E71\\u1E6F\\u0167\\u01AD\\u0288\\u2C66\\uA787',\r\n },\r\n { base: 'tz', letters: '\\uA729' },\r\n {\r\n base: 'u',\r\n letters:\r\n '\\u0075\\u24E4\\uFF55\\u00F9\\u00FA\\u00FB\\u0169\\u1E79\\u016B\\u1E7B\\u016D\\u00FC\\u01DC\\u01D8\\u01D6\\u01DA\\u1EE7\\u016F\\u0171\\u01D4\\u0215\\u0217\\u01B0\\u1EEB\\u1EE9\\u1EEF\\u1EED\\u1EF1\\u1EE5\\u1E73\\u0173\\u1E77\\u1E75\\u0289',\r\n },\r\n { base: 'v', letters: '\\u0076\\u24E5\\uFF56\\u1E7D\\u1E7F\\u028B\\uA75F\\u028C' },\r\n { base: 'vy', letters: '\\uA761' },\r\n { base: 'w', letters: '\\u0077\\u24E6\\uFF57\\u1E81\\u1E83\\u0175\\u1E87\\u1E85\\u1E98\\u1E89\\u2C73' },\r\n { base: 'x', letters: '\\u0078\\u24E7\\uFF58\\u1E8B\\u1E8D' },\r\n {\r\n base: 'y',\r\n letters: '\\u0079\\u24E8\\uFF59\\u1EF3\\u00FD\\u0177\\u1EF9\\u0233\\u1E8F\\u00FF\\u1EF7\\u1E99\\u1EF5\\u01B4\\u024F\\u1EFF',\r\n },\r\n { base: 'z', letters: '\\u007A\\u24E9\\uFF5A\\u017A\\u1E91\\u017C\\u017E\\u1E93\\u1E95\\u01B6\\u0225\\u0240\\u2C6C\\uA763' },\r\n];\r\n\r\nconst diacriticsMap = {};\r\nfor (let i = 0; i < defaultDiacriticsRemovalMap.length; i++) {\r\n const letters = defaultDiacriticsRemovalMap[i].letters;\r\n for (let j = 0; j < letters.length; j++) {\r\n diacriticsMap[letters[j]] = defaultDiacriticsRemovalMap[i].base;\r\n }\r\n}\r\n\r\n// \"what?\" version ... http://jsperf.com/diacritics/12\r\nexport default function removeDiacritics(str) {\r\n return str.replace(/[^\\u0000-\\u007E]/g, function (a) {\r\n return diacriticsMap[a] || a;\r\n });\r\n}\r\n","import algoliasearch from 'algoliasearch/lite';\r\nimport React, { useCallback, useEffect, useState, useMemo } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { TmMenu } from '../../../tscapi/model/menu';\r\nimport getNavMenu from '../../../tscapi/service/menu.service';\r\nimport { IExpandedPanel } from '../IProduct';\r\nimport { IPrpDimensionState, IPrpDimensionStateRefinement, IQueryDim } from '../IPrp';\r\nimport removeDiacritics from '../utils/removeDiacritic';\r\n\r\nimport { en, fr } from './i18n';\r\nimport OnAirButtons from './OnAirButtons';\r\n\r\nexport interface PrpFilterPanelProps {\r\n dimensionStates: Array;\r\n queryDims: Array | null;\r\n onCloseListener: () => void;\r\n onFilterChangeListener: (refinement: IPrpDimensionStateRefinement) => void;\r\n onClearAllClickListener: () => void;\r\n appliedFilters: IPrpDimensionStateRefinement[];\r\n totalProductCount: number;\r\n isSearchPage: boolean;\r\n isOnAirPage: boolean;\r\n isExpandedFilter: (type: string, isExpanded: boolean) => void;\r\n expandedFilter: IExpandedPanel[];\r\n}\r\n\r\nexport interface AlgoliaResponse {\r\n hits: Array<{\r\n valueName: {\r\n en: string;\r\n fr: string;\r\n };\r\n valueId: string;\r\n objectId: string;\r\n }>;\r\n}\r\n\r\nexport const ratingSvgMapping: Record = {\r\n '0': '/App_Assets/public/Raiting_00.svg',\r\n '0.5': '/App_Assets/public/Raiting_05.svg',\r\n '1': '/App_Assets/public/Raiting_10.svg',\r\n '1.5': '/App_Assets/public/Raiting_15.svg',\r\n '2': '/App_Assets/public/Raiting_20.svg',\r\n '2.5': '/App_Assets/public/Raiting_25.svg',\r\n '3': '/App_Assets/public/Raiting_30.svg',\r\n '3.5': '/App_Assets/public/Raiting_35.svg',\r\n '4': '/App_Assets/public/Raiting_40.svg',\r\n '4.5': '/App_Assets/public/Raiting_45.svg',\r\n '5': '/App_Assets/public/Raiting_50.svg',\r\n};\r\n\r\nexport type CategoryBreadcrumb = {\r\n displayName: string;\r\n dimensionId: string;\r\n urlSlug: string;\r\n};\r\n\r\nconst PrpFilterPanel = ({\r\n dimensionStates,\r\n queryDims,\r\n onCloseListener,\r\n onFilterChangeListener,\r\n onClearAllClickListener,\r\n appliedFilters,\r\n totalProductCount,\r\n isSearchPage,\r\n isOnAirPage,\r\n isExpandedFilter,\r\n expandedFilter,\r\n}: PrpFilterPanelProps) => {\r\n const categoryDimensionType = 'Category';\r\n\r\n const { i18n, t } = useTranslation('prp-filter-panel');\r\n i18n.addResourceBundle('en', 'prp-filter-panel', en, true, true);\r\n i18n.addResourceBundle('fr', 'prp-filter-panel', fr, true, true);\r\n\r\n const [isDimensionExpanded, setIsDimensionExpanded] = useState>([]);\r\n\r\n const [isDimensionSeeMore, setIsDimensionSeeMore] = useState>(\r\n new Array(dimensionStates.length).fill(false),\r\n );\r\n\r\n //const [l2, setL2] = useState>([])\r\n // const [l3, setL3] = useState>([]);\r\n\r\n const [isMobileSubPanelOpen, setIsMobileSubPanelOpen] = useState(false);\r\n const [isCategoryExpanded, setIsCategoryExpanded] = useState(true);\r\n const [brandSearch, setBrandSearch] = useState('');\r\n const [lastBackListItem, setLastBackListItem] = useState({\r\n dimensionId: '',\r\n displayName: '',\r\n urlSlug: '',\r\n });\r\n\r\n const fetchAlgolia = (dimensionId: string | null | undefined) => {\r\n let appId = 'F8X5YYAL68';\r\n let apiKey = '32e195c2957188a3db9954132e999bd2';\r\n let searchEnvironment = 'pr';\r\n const urlParams = new URLSearchParams(window.location.search);\r\n //\r\n if (\r\n window.location.hostname.startsWith('www') ||\r\n window.location.hostname.startsWith('pr') ||\r\n window.location.hostname.startsWith('st')\r\n ) {\r\n searchEnvironment = 'pr';\r\n } else {\r\n searchEnvironment = 'qa';\r\n }\r\n\r\n // parameter overides destination index for debugging\r\n if (urlParams.get('algoliadebug') == 'pr') {\r\n searchEnvironment = 'pr';\r\n }\r\n if (urlParams.get('algoliadebug') == 'qa') {\r\n searchEnvironment = 'qa';\r\n }\r\n\r\n if (searchEnvironment == 'pr') {\r\n // On production and staging, query Production indexes\r\n appId = 'F8X5YYAL68';\r\n apiKey = '4c8346d66994aa53e2fed2b017a8455b';\r\n } else {\r\n // on anything else search on QA algolia indexes\r\n appId = 'N2PGXY1LE4';\r\n apiKey = '1c209dd6850cf47fb7d0b4a7a0b1ebf8';\r\n }\r\n\r\n // create searchClient only once and reuse for each call to leverage caching\r\n const searchClient = algoliasearch(appId, apiKey);\r\n // parentId is the dimension hovered over\r\n // const filterStr = \"typeId: 'Category' AND productsCount > 0 AND parentId:100038\";\r\n const filterStr = `typeId: 'Category' AND productsCount > 0 AND parentId:${dimensionId}`;\r\n // query pr-dimensions\r\n const index = searchClient.initIndex('dimensions');\r\n index\r\n .search('', {\r\n sortFacetValuesBy: 'count',\r\n hitsPerPage: 15,\r\n filters: filterStr,\r\n attributesToRetrieve: ['valueName', 'valueId'],\r\n })\r\n .then((d) => {\r\n const response = d as unknown as AlgoliaResponse;\r\n const newL3 = response.hits.map((it) => {\r\n return {\r\n DisplayName: it.valueName.en.split(':')[0],\r\n DimensionId: it.valueId,\r\n };\r\n });\r\n //setL3(newL3);\r\n });\r\n };\r\n\r\n const getL2 = (l1DimId: string) => {\r\n const onSuccess = (tscMenu: TmMenu[]) => {\r\n const a = tscMenu.find((m) => m.Menu.NavigationDimension === l1DimId);\r\n if (!a) {\r\n //setL2([]);\r\n return;\r\n }\r\n const tmp = a.SubMenu[0].Row2Col1Left[0].Refinements.map((r) => {\r\n return {\r\n DisplayName: r.DimensionName,\r\n DimensionId: r.Url,\r\n };\r\n });\r\n //setL2(tmp);\r\n };\r\n\r\n const onFailure = () => {\r\n //setL2([]);\r\n };\r\n\r\n getNavMenu(onSuccess, onFailure);\r\n };\r\n\r\n const backList = useMemo(() => {\r\n const arr: Array = [];\r\n\r\n if (!queryDims || queryDims.length <= 0) {\r\n return [];\r\n }\r\n\r\n let dim = queryDims[0];\r\n let i = 0; // Control maximum loop\r\n const maxLoopLimit = 10;\r\n\r\n // for (let i = 0; i < queryDims.length; i++) {\r\n // arr.unshift({\r\n // DimensionId: queryDims[i].DimensionId,\r\n // DisplayName: queryDims[i].DisplayName,\r\n // });\r\n // }\r\n\r\n while (i < maxLoopLimit) {\r\n const dimState = dimensionStates.filter((dimstate) =>\r\n dimstate.Refinements.some((ref) => ref.DimensionId === dim.DimensionId),\r\n );\r\n let urlSlug = '';\r\n if (dimState.length > 0) {\r\n urlSlug = dimState[0].Refinements.filter((ref) => ref.DimensionId === dim.DimensionId)[0].UrlSlug;\r\n }\r\n\r\n arr.unshift({\r\n dimensionId: dim.DimensionId,\r\n displayName: dim.DisplayName,\r\n urlSlug,\r\n });\r\n\r\n if (dim.ParentDimensions.length <= 0) {\r\n break;\r\n }\r\n\r\n dim = dim.ParentDimensions[0];\r\n i++;\r\n }\r\n\r\n const lastElement = arr.pop();\r\n setLastBackListItem(lastElement);\r\n\r\n // if (arr.length === 0) {\r\n // getL2(lastElement.DimensionId);\r\n // }\r\n\r\n // if (arr.length === 1) {\r\n // fetchAlgolia(lastElement.DimensionId);\r\n // }\r\n\r\n return arr;\r\n }, [queryDims, setLastBackListItem]);\r\n\r\n const dimensionsExceptCategory = useMemo(() => {\r\n return dimensionStates.filter((dimensionState) => {\r\n return dimensionState.DimensionType !== categoryDimensionType;\r\n });\r\n }, [dimensionStates]);\r\n\r\n useEffect(() => {\r\n const arr: IExpandedPanel[] = [];\r\n const doesShopByCategoryExists =\r\n dimensionStates.find((s) => s.DimensionType === categoryDimensionType) !== undefined;\r\n if (!doesShopByCategoryExists) {\r\n arr.push({ Type: 'Category', Expanded: true });\r\n } else {\r\n arr.push({ Type: 'Category', Expanded: false });\r\n }\r\n dimensionStates.forEach((dimensionState, index) => {\r\n if (dimensionState.DimensionType !== 'Category') {\r\n const filterIndex = expandedFilter.findIndex((f) => f.Type === dimensionState.DimensionType);\r\n if (filterIndex > -1) {\r\n arr.push(expandedFilter[filterIndex]);\r\n } else {\r\n if (!doesShopByCategoryExists && index === 0) {\r\n arr.push({ Type: dimensionState.DimensionType, Expanded: true });\r\n } else {\r\n arr.push({ Type: dimensionState.DimensionType, Expanded: false });\r\n }\r\n }\r\n }\r\n });\r\n setIsDimensionExpanded(arr);\r\n }, [dimensionStates, setIsDimensionExpanded, backList]);\r\n\r\n const isExpanded = (type: string) => {\r\n return isDimensionExpanded.find((it) => it.Type === type)?.Expanded || false;\r\n };\r\n\r\n const getRefinements = useCallback(\r\n (dimensionState: IPrpDimensionState, dimensionIndex: number) => {\r\n if (dimensionState.DimensionType === 'TSC_d_brand' || dimensionState.DimensionType === 'Brand') {\r\n if (brandSearch === '') {\r\n if (isDimensionSeeMore[dimensionIndex]) {\r\n return dimensionState.Refinements;\r\n }\r\n\r\n return dimensionState.Refinements.slice(0, dimensionState.VisibleNumber);\r\n }\r\n return dimensionState.Refinements.filter((ref) => {\r\n return removeDiacritics(ref.DimensionName.toLowerCase()).includes(\r\n removeDiacritics(brandSearch.toLowerCase()),\r\n );\r\n });\r\n }\r\n\r\n if (isDimensionSeeMore[dimensionIndex]) {\r\n return dimensionState.Refinements;\r\n }\r\n /*\r\n console.log('%c dimensionState:', 'color: green; font-weight: bold;');\r\n console.log({ dimensionState });\r\n */\r\n return dimensionState.Refinements.slice(0, dimensionState.VisibleNumber);\r\n },\r\n [isDimensionSeeMore, brandSearch],\r\n );\r\n\r\n const getTitleFormatted = useCallback((dimensionState: IPrpDimensionState) => {\r\n return dimensionState.ListTitle.charAt(0).toUpperCase() + dimensionState.ListTitle.slice(1).toLowerCase();\r\n }, []);\r\n\r\n const onRefinementKeyDown = (e: React.KeyboardEvent, refinement: IPrpDimensionStateRefinement) => {\r\n if (e.key === 'Enter' || e.key === ' ') {\r\n onFilterChangeListener(refinement);\r\n }\r\n };\r\n\r\n const renderStandardRefinement = (dimensionState: IPrpDimensionState, refinement: IPrpDimensionStateRefinement) => {\r\n return (\r\n
  • \r\n \r\n
  • \r\n );\r\n };\r\n\r\n const renderReviewRefinement = (dimensionState: IPrpDimensionState, refinement: IPrpDimensionStateRefinement) => {\r\n const totalReviewsCount = dimensionState.Refinements.map((ref) => ref.Count).reduce(\r\n (acc, curr) => acc + curr,\r\n 0,\r\n );\r\n const percentage = Math.floor((refinement.Count * 100) / totalReviewsCount);\r\n\r\n return (\r\n \r\n onFilterChangeListener(refinement)}\r\n onKeyDown={(e) => onRefinementKeyDown(e, refinement)}\r\n id={`${dimensionState.ListTitle}-${refinement.DimensionId}`}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n {refinement.DimensionName}\r\n \r\n \r\n (\r\n {refinement.Count}\r\n )\r\n {t('reviews')}\r\n \r\n
    \r\n \r\n
    \r\n \r\n \r\n );\r\n };\r\n\r\n const getCategoryPath = (path: string, index: number, count: number, slugPath: string) => {\r\n if (index === count - 1) {\r\n if (path.lastIndexOf('/') > -1) {\r\n let newPath = path.substring(0, path.lastIndexOf('/'));\r\n if (slugPath) {\r\n if (newPath.lastIndexOf('/') > -1) {\r\n newPath = newPath.substring(0, newPath.lastIndexOf('/')) + '/';\r\n }\r\n if (newPath.lastIndexOf('/') < newPath.length - 1) {\r\n newPath = newPath + '/';\r\n }\r\n }\r\n return newPath;\r\n }\r\n } else if (index < count - 1) {\r\n let i = index;\r\n let newPath = path;\r\n while (i <= count - 1) {\r\n if (newPath.lastIndexOf('/') > -1) {\r\n newPath = newPath.substring(0, newPath.lastIndexOf('/'));\r\n } else {\r\n break;\r\n }\r\n i++;\r\n }\r\n if (slugPath && newPath.lastIndexOf('/') < newPath.length - 1) {\r\n newPath = newPath + '/';\r\n }\r\n return newPath;\r\n }\r\n return path;\r\n };\r\n\r\n const renderCategory = () => {\r\n const categoryDimensionType = 'Category';\r\n const category = dimensionStates.find((s) => s.DimensionType === categoryDimensionType);\r\n const doesShopByCategoryExists = category !== undefined;\r\n let queryString = window.location.search;\r\n if (queryString.length > 0) {\r\n let queryList = queryString.slice(1).split('&');\r\n queryList = queryList.filter(\r\n (q) => !q.includes('page=') && !q.includes('category=') && !q.includes('ic=') && !q.includes('fm='),\r\n );\r\n queryString = queryList.length > 0 ? '?' + queryList.join('&') : '';\r\n }\r\n return (\r\n <>\r\n {doesShopByCategoryExists && (\r\n
    \r\n setIsCategoryExpanded((prev) => !prev)}\r\n >\r\n {t('category')}\r\n \r\n \r\n\r\n {isCategoryExpanded && (\r\n <>\r\n
      \r\n {backList.map((item, index) => (\r\n
    • \r\n \r\n \r\n \r\n {item.displayName}\r\n \r\n \r\n
    • \r\n ))}\r\n
    \r\n
    {lastBackListItem.displayName}
    \r\n {/*
    Showing {backList.length === 0 ? 'refinements' : 'l3'}
    */}\r\n
      \r\n {/* {backList.length === 0 && category.Refinements.map((refinement) => (\r\n
    • \r\n {refinement.DimensionName}\r\n
    • \r\n ))}\r\n {backList.length === 1 && l3.map((subCategory) => (\r\n
    • \r\n {subCategory.DisplayName}\r\n
    • \r\n ))} */}\r\n {category.Refinements.map((refinement) => (\r\n \r\n \r\n !q.includes('page=') && !q.includes('category='),\r\n )\r\n .join('&')\r\n : refinement.Url\r\n }\r\n >\r\n {refinement.DimensionName}\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 return (\r\n
    \r\n {/* Header */}\r\n
    \r\n \r\n
    \r\n {/* */}\r\n {/*
    \r\n
      \r\n
    1. \r\n \r\n \r\n
    2. \r\n
    3. \r\n \r\n \r\n
    4. \r\n
    5. \r\n \r\n \r\n
    6. \r\n
    \r\n
    */}\r\n\r\n {isOnAirPage && }\r\n\r\n {/* Category */}\r\n {renderCategory()}\r\n\r\n {/* Brand */}\r\n {dimensionsExceptCategory.map((dimensionState, dimensionIndex) => (\r\n
    \r\n {/* Refinement group title*/}\r\n {\r\n const expanded = !isExpanded(dimensionState.DimensionType);\r\n isExpandedFilter(dimensionState.DimensionType, expanded);\r\n setIsDimensionExpanded((prev) =>\r\n prev.map((it) =>\r\n it.Type === dimensionState.DimensionType\r\n ? { Type: it.Type, Expanded: expanded }\r\n : it,\r\n ),\r\n );\r\n }}\r\n aria-label=\"Open\"\r\n >\r\n {getTitleFormatted(dimensionState)}\r\n \r\n \r\n\r\n {/* Expanded section */}\r\n {isExpanded(dimensionState.DimensionType) && (\r\n
    \r\n {/* If dimension is brand, add search input */}\r\n {(dimensionState.DimensionType === 'TSC_d_brand' ||\r\n dimensionState.DimensionType === 'Brand') && (\r\n {\r\n setBrandSearch(e.target.value);\r\n }}\r\n />\r\n )}\r\n
    \r\n
      \r\n {getRefinements(dimensionState, dimensionIndex).map((refinement) => {\r\n const isReview =\r\n refinement.DimensionType === 'TSC_d_reviews' ||\r\n refinement.DimensionType.toLowerCase() === 'review';\r\n return isReview\r\n ? renderReviewRefinement(dimensionState, refinement)\r\n : renderStandardRefinement(dimensionState, refinement);\r\n })}\r\n
    \r\n {\r\n setIsDimensionSeeMore((prev) =>\r\n prev.map((it, i) => (i === dimensionIndex ? !it : it)),\r\n );\r\n }}\r\n >\r\n \r\n {dimensionState.VisibleNumber > dimensionState.Refinements.length\r\n ? ''\r\n : isDimensionSeeMore[dimensionIndex]\r\n ? dimensionState.SeeLessLinkText\r\n : dimensionState.SeeMoreLinkText}\r\n \r\n \r\n
    \r\n
    \r\n )}\r\n
    \r\n ))}\r\n\r\n {/* Mobile SubPanel */}\r\n
    \r\n {appliedFilters.length > 0 && (\r\n setIsMobileSubPanelOpen((prev) => !prev)}\r\n >\r\n \r\n {t('filtersAdded')} ({appliedFilters.length})\r\n \r\n {/* Close Classname -> prp-filter-panel__mobile-subpanel__title-button__icon--closed */}\r\n \r\n \r\n )}\r\n {isMobileSubPanelOpen && (\r\n
    \r\n {appliedFilters.map((filter) => (\r\n onFilterChangeListener(filter)}\r\n >\r\n {(filter.DimensionType === 'TSC_d_reviews' ||\r\n filter.DimensionType.toLowerCase() === 'reviews') && (\r\n \r\n )}\r\n {filter.DimensionName}\r\n \r\n ))}\r\n \r\n
    \r\n )}\r\n \r\n {`${t('view')} ${totalProductCount} ${t('products')}`}\r\n \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default PrpFilterPanel;\r\n","import React from 'react';\r\n\r\n/**\r\n * @interface PrpNoSearchResultsProps\r\n */\r\nexport interface PrpNoSearchResultsProps {\r\n noResult: {\r\n heading: string;\r\n text: string;\r\n buttonText: string;\r\n };\r\n}\r\n\r\nconst PrpNoSearchResults = ({ noResult }: PrpNoSearchResultsProps) => {\r\n const onButtonClick = () => {\r\n const saytInputClassName = '.aa-Input';\r\n const saytInputElement = document.querySelector(saytInputClassName);\r\n if (saytInputElement) {\r\n saytInputElement.focus();\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\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n

    {noResult.heading}

    \r\n
    \r\n
    \r\n

    {noResult.text}

    \r\n \r\n
    \r\n
    \r\n
    \r\n {/*
    \r\n Did you mean {'\"'} boogie {'\"'}?\r\n View 50 search results\r\n
    */}\r\n
    \r\n );\r\n};\r\n\r\nexport default PrpNoSearchResults;\r\n","/* eslint-disable no-useless-escape */\r\nimport { AxiosResponse } from 'axios';\r\nimport classNames from 'classnames';\r\nimport { default as dayjs } from 'dayjs';\r\nimport DOMPurify from 'dompurify';\r\nimport React, { useCallback, useEffect, useState, useMemo } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\nimport { TmFavouriteLocalStorage } from '@/tscapi/model/favourite';\r\nimport http from '@/tscapi/service/httpservice';\r\nimport { Cookie } from '@/tscapi/utils/cookie';\r\nimport { FavouriteStorage } from '@/tscapi/utils/favourites-storage';\r\n\r\nimport { trackFBSearchEvent } from '../tracking_third_party/fbSearch';\r\n\r\nimport AdCard, { AdCardProps } from './AdCard/AdCard';\r\nimport FraudModal from './FraudModal/FraudModal';\r\nimport { en, fr } from './i18n';\r\nimport { IDimension, IExpandedPanel, IProduct } from './IProduct';\r\nimport { IPrp, IPrpDimensionStateRefinement, IPrpDimensionState, IPrpPaging, IPrpResponse } from './IPrp';\r\nimport ProductCard, { ProductCategoryType } from './ProductCard/ProductCard';\r\nimport prpMock from './Prp.mock';\r\nimport OnAirButtons from './PrpFilterPanel/OnAirButtons';\r\nimport PrpFilterPanel, { ratingSvgMapping } from './PrpFilterPanel/PrpFilterPanel';\r\nimport PrpNoSearchResults from './PrpNoSearchResults/PrpNoSearchResults';\r\n\r\nexport interface PrpProps {\r\n data: IPrp;\r\n}\r\n\r\nexport type FocusArea = 'products' | 'filter' | 'sort';\r\n\r\nconst Prp = () => {\r\n const { i18n, t } = useTranslation('prp');\r\n i18n.addResourceBundle('en', 'prp', en, true, true);\r\n i18n.addResourceBundle('fr', 'prp', fr, true, true);\r\n\r\n const BREAKPOINT = 1023;\r\n const DEFAULT_PAGE_SIZE = 48;\r\n const DEFAULT_PAGE_SORT_KEY = 'FeaturedProducts';\r\n const DEFAULT_DIMENSION_ID = '0';\r\n const PRP_CARD_GRID_ITEM_CLASSNAME = '.prp-card-grid-item';\r\n\r\n const [data, setData] = useState({\r\n ...prpMock.data,\r\n Products: [],\r\n DimensionStates: [],\r\n });\r\n\r\n const [currentPage, setCurrentPage] = useState(1);\r\n const [pageSortKey, setPageSortKey] = useState('');\r\n const [keyword, setKeyword] = useState('');\r\n const [rdParameter, setRdParameter] = useState('');\r\n const [viParameter, setViParameter] = useState('');\r\n const [currentPageSize, setCurrentPageSize] = useState(DEFAULT_PAGE_SIZE);\r\n const [isFilterPanelOpen, setIsFilterPanelOpen] = useState(false);\r\n const [width, setWidth] = useState(window.innerWidth);\r\n const [currentFocusedCardIndex, setCurrentFocusedCardIndex] = useState(0);\r\n const [favourites, setFavourites] = useState(null);\r\n const [currentFocusArea, setCurrentFocusArea] = useState('products');\r\n const [isFetchComplete, setIsFetchComplete] = useState(false);\r\n const [showFraudModal, setShowFraudModal] = useState(false);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [jsonLD, setJsonLD] = useState('');\r\n const [dimensions, setDimensions] = useState([]);\r\n const [expandedFilter, setExpandedFilter] = useState([]);\r\n const dimensionTypes: string[] = [\r\n //dimension urlSlugs\r\n 'colour',\r\n 'brand',\r\n 'size',\r\n 'price',\r\n 'metal',\r\n 'stone',\r\n 'review', //Exception: Algolia typeId is not matching\r\n 'clearance',\r\n 'collection',\r\n 'price-label',\r\n 'vendor-type', //Exception: Algolia typeId is not matching\r\n 'marketplace-vendor', //Exception: Algolia typeId is not matching\r\n 'new-arrival', //Exception: Algolia typeId is not matching\r\n 'league', //Exception: Algolia typeId is not matching\r\n 'category',\r\n 'team',\r\n 'player',\r\n ];\r\n\r\n const [isAdCardAvailable, setIsAdCardAvailable] = useState(false);\r\n const [adCardProps, setAdCardProps] = useState(null);\r\n\r\n /*\r\n console.log('%c data.DimensionStates:', 'color: purple; font-weight: bold;');\r\n console.log({ dataDimensionStates: data.DimensionStates });\r\n */\r\n /*\r\n console.log('%c pageDimensionId:', 'color: magenta; font-weight: bold;');\r\n console.log({ pageDimensionId });\r\n */\r\n\r\n const getProductImageURL = (prod: IProduct) => {\r\n if (prod != null && prod.ImageUrl != null && prod.ImageUrl.length > 0) {\r\n return 'https://item.tscimg.ca/TSC/' + prod.ImageUrl + '?impolicy=L';\r\n }\r\n return '';\r\n };\r\n\r\n const getEdpNo = (prod: IProduct) => {\r\n const defEdp = prod.DefaultEdp;\r\n for (const edp of prod.Edps) {\r\n if (edp.EdpNo == prod.DefaultEdp) {\r\n return edp.EdpNo;\r\n }\r\n }\r\n return '';\r\n };\r\n\r\n const getUpcNo = (prod: IProduct) => {\r\n const defEdp = prod.DefaultEdp;\r\n for (const edp of prod.Edps) {\r\n if (edp.EdpNo == prod.DefaultEdp) {\r\n return edp.UpcNo;\r\n }\r\n }\r\n return '';\r\n };\r\n\r\n const getAppliedPrice = (prod: IProduct) => {\r\n const defEdp = prod.DefaultEdp;\r\n for (const edp of prod.Edps) {\r\n if (edp.EdpNo == prod.DefaultEdp) {\r\n return edp.AppliedPrice || '0.00';\r\n }\r\n }\r\n return '';\r\n };\r\n\r\n const getSafeHTML = (value: object) => {\r\n // If value convert to JSON and escape / to prevent script tag in JSON\r\n const json = value ? JSON.stringify(value, null) : ''; /*.replace(/\\//g, '\\\\/')*/\r\n return DOMPurify.sanitize(json);\r\n };\r\n\r\n const getBaseUrl = (): string => {\r\n switch (window.location.href.substring(0, window.location.href.indexOf('.'))) {\r\n case 'https://lo-tsc':\r\n return 'https://lo-api.tsc.ca';\r\n case 'https://qa-tsc':\r\n return 'https://qa-api.tsc.ca';\r\n case 'https://qa-tsc-pre':\r\n return 'https://qa-api-pre.tsc.ca';\r\n case 'https://st-tsc':\r\n return 'https://st-api.tsc.ca';\r\n case 'https://st-tsc-pre':\r\n return 'https://st-api-pre.tsc.ca';\r\n case 'https://pr-tsc-pre':\r\n return 'https://api-pre.tsc.ca';\r\n case 'https://tsc':\r\n case 'https://www':\r\n return 'https://api.tsc.ca';\r\n default:\r\n return 'https://api.tsc.ca';\r\n }\r\n };\r\n\r\n const updateSchema = (prodResult: IPrp) => {\r\n //debugger;\r\n const todayDate: Date = new Date(Date.now());\r\n function makeDate(date: Date) {\r\n return new Date(+date);\r\n }\r\n\r\n const todaysDateFormatted = dayjs(makeDate(todayDate)).format('YYYY-MM-DD');\r\n const oneWeekLaterDateFormatted = dayjs(makeDate(todayDate)).add(7, 'day').format('YYYY-MM-DD');\r\n\r\n //let dateToString = formatWithOptions('yyyy-MM-dd');\r\n if (prodResult.Products == null || prodResult.Products.length == 0) {\r\n setJsonLD('');\r\n return;\r\n }\r\n\r\n //Construct Schema's mainEntity object\r\n const schema = {\r\n '@context': 'https://schema.org',\r\n '@type': 'SearchResultsPage',\r\n mainEntity: [],\r\n };\r\n\r\n const objEntity = {\r\n '@type': 'ItemList',\r\n name:\r\n prodResult.DimensionStates != null && prodResult.DimensionStates.length > 0\r\n ? prodResult.DimensionStates[0].ListTitle\r\n : 'ItemList',\r\n itemListOrder:\r\n 'https://schema.org/ItemListOrderAscending' /* Order is not available in TmProductResult */,\r\n itemListElement: [],\r\n };\r\n\r\n let position = 0;\r\n const cookie = new Cookie();\r\n const language = cookie.Language.toLowerCase();\r\n const getUrl = window.location;\r\n const baseUrl = getUrl.protocol + '//' + getUrl.host;\r\n\r\n for (const product of prodResult.Products) {\r\n position = position + 1;\r\n\r\n const oProd: { [k: string]: any } = {\r\n '@type': 'ListItem',\r\n position: position,\r\n item: {\r\n '@type': 'Product',\r\n name: product.Name,\r\n image: getProductImageURL(product),\r\n description: product.Name /* description is not available in TmProductForPRP, so Name is used */,\r\n brand: product.Brand != null ? product.Brand : 'Brand not provided',\r\n offers: {\r\n '@type': 'Offer',\r\n priceCurrency: 'CAD',\r\n url:\r\n baseUrl +\r\n product.LinkWithoutDomain.substring(\r\n product.LinkWithoutDomain.indexOf('/pages/productdetails'),\r\n ),\r\n itemCondition: 'https://schema.org/NewCondition',\r\n priceValidUntil: product.IsShowstopper ? todaysDateFormatted : oneWeekLaterDateFormatted,\r\n price:\r\n language == 'en_ca'\r\n ? getAppliedPrice(product).replace(/[^0-9\\.]+/g, '')\r\n : getAppliedPrice(product)\r\n .replace(/[^0-9\\,]+/g, '')\r\n .replace(',', '.'),\r\n availability: 'https://schema.org/InStock',\r\n },\r\n },\r\n };\r\n\r\n if (getUpcNo(product)) {\r\n oProd.item.gtin12 = getUpcNo(product);\r\n }\r\n if (getEdpNo(product)) {\r\n oProd.item.sku = getEdpNo(product);\r\n }\r\n\r\n if (product.ProductReviewCount > 0) {\r\n const oAggregateRating = {\r\n '@type': 'AggregateRating',\r\n ratingValue: product.ProductReviewRating,\r\n bestRating: '5',\r\n worstRating: '0',\r\n ratingCount: product.ProductReviewCount,\r\n };\r\n oProd.item['aggregateRating'] = Object.assign({}, oAggregateRating);\r\n }\r\n\r\n objEntity.itemListElement.push(oProd);\r\n }\r\n\r\n schema.mainEntity.push(objEntity);\r\n const json = schema;\r\n setJsonLD(getSafeHTML(json));\r\n };\r\n\r\n const filterPanelHandler = () => {\r\n if (isFilterPanelOpen) {\r\n setIsFilterPanelOpen(false);\r\n } else {\r\n setIsFilterPanelOpen(true);\r\n }\r\n };\r\n\r\n const getUserFavourites = (edp: number) => {\r\n const favouriteStorage = new FavouriteStorage();\r\n favouriteStorage.Favourites;\r\n setFavourites(favouriteStorage.Favourites);\r\n };\r\n\r\n const buildApiUrl = useCallback(\r\n (\r\n page: number,\r\n sortKey: string,\r\n keywordKey: string,\r\n pageSize: number,\r\n rdValue: string,\r\n viValue: string,\r\n dimensions: IDimension[],\r\n ) => {\r\n const lang = new Cookie().Language.substring(0, 2) || 'en';\r\n const baseUrl = getBaseUrl() + '/product/v1/' + lang;\r\n let visitorId = '';\r\n if (viValue !== '') {\r\n visitorId = `visitorId=${viValue}`;\r\n }\r\n const filters = [];\r\n dimensionTypes.forEach((type) => {\r\n type = type.toLowerCase();\r\n if (dimensions.length > 0) {\r\n const dimension = dimensions.find((d) => d.Type === type);\r\n if (dimension && dimension.UrlSlugs.length > 0) {\r\n filters.push(\r\n `${type}=${\r\n dimension.UrlSlugs.length > 1 ? dimension.UrlSlugs.join(',') : dimension.UrlSlugs[0]\r\n }`,\r\n );\r\n }\r\n }\r\n });\r\n const pageParam = page === 1 ? '' : `page=${page}`;\r\n const pageSizeParam = pageSize === DEFAULT_PAGE_SIZE ? '' : `pageSize=${pageSize}`;\r\n const sortKeyParam = sortKey !== '' && sortKey !== DEFAULT_PAGE_SORT_KEY ? 'sortKey=' + sortKey : '';\r\n const keywordParam = keywordKey !== '' ? 'keyword=' + keywordKey : '';\r\n const rdParam = rdValue !== '' ? 'rd=' + rdValue : '';\r\n const params = [visitorId, pageParam, pageSizeParam, sortKeyParam, keywordParam, rdParam].filter(\r\n (it) => it !== '',\r\n );\r\n params.push(...filters);\r\n const concat = params.join('&');\r\n const endpoint = concat !== '' ? `?${concat}` : '';\r\n let pathname = '';\r\n if (\r\n window.location.pathname.length !== window.location.pathname.indexOf('products') + 8 &&\r\n window.location.pathname.length !== window.location.pathname.indexOf('products') + 9\r\n ) {\r\n pathname = window.location.pathname.substring(window.location.pathname.indexOf('products/') + 9);\r\n }\r\n const prpUrl = baseUrl + `/products/${pathname}${endpoint}`;\r\n return prpUrl;\r\n },\r\n [],\r\n );\r\n\r\n const buildPageUrl = useCallback(\r\n (\r\n page: number,\r\n sortKey: string,\r\n keywordKey: string,\r\n pageSize: number,\r\n rdValue: string,\r\n viValue: string,\r\n dimensions: IDimension[],\r\n ) => {\r\n /*\r\n console.log('%c dimensionId:', 'color: brown; font-weight: bold;');\r\n console.log({ dimensionId });\r\n */\r\n const baseUrl = '/pages';\r\n let visitorId = '';\r\n if (viValue !== '') {\r\n visitorId = `nav=vi:${viValue}`;\r\n }\r\n const filters = [];\r\n dimensionTypes.forEach((type) => {\r\n type = type.toLowerCase();\r\n if (dimensions.length > 0) {\r\n const dimension = dimensions.find((d) => d.Type === type);\r\n if (dimension && dimension.UrlSlugs.length > 0) {\r\n filters.push(\r\n `${type}=${\r\n dimension.UrlSlugs.length > 1 ? dimension.UrlSlugs.join(',') : dimension.UrlSlugs[0]\r\n }`,\r\n );\r\n }\r\n }\r\n });\r\n const pageParam = page === 1 ? '' : `page=${page}`;\r\n const pageSizeParam = pageSize === DEFAULT_PAGE_SIZE ? '' : `pageSize=${pageSize}`;\r\n const sortKeyParam = sortKey !== '' && sortKey !== DEFAULT_PAGE_SORT_KEY ? 'sortKey=' + sortKey : '';\r\n const keywordParam = keywordKey !== '' ? 'keyword=' + keywordKey : '';\r\n const rdParam = rdValue !== '' ? 'rd=' + rdValue : '';\r\n const params = [visitorId, pageParam, pageSizeParam, sortKeyParam, keywordParam, rdParam].filter(\r\n (it) => it !== '',\r\n );\r\n params.push(...filters);\r\n const concat = params.join('&');\r\n const endpoint = concat !== '' ? `?${concat}` : '';\r\n let pathname = '';\r\n if (\r\n window.location.pathname.length !== window.location.pathname.indexOf('products') + 8 &&\r\n window.location.pathname.length !== window.location.pathname.indexOf('products') + 9\r\n ) {\r\n pathname = window.location.pathname.substring(window.location.pathname.indexOf('products/') + 9);\r\n }\r\n const pageUrl = baseUrl + `/products/${pathname}${endpoint}`;\r\n return pageUrl;\r\n },\r\n [],\r\n );\r\n\r\n const setProductRefinementAnalytics = (searchTerm: string, paging: IPrpPaging) => {\r\n const { TotalRecords, TotalPages, CurrentPage } = paging;\r\n const searchObj = { searchTerm, totalRecords: TotalRecords, totalPages: TotalPages, currentPage: CurrentPage };\r\n window.analyticsData.event = window.analyticsData.event || {};\r\n window.analyticsData.event.type = 'prp_refinement';\r\n window.analyticsData.search = searchObj;\r\n };\r\n\r\n const setMissingProductAnalytics = (searchTerm: string) => {\r\n const missingProductObj = { itemNo: searchTerm };\r\n const searchObj = { searchTerm, totalRecords: 0, totalPages: 0, currentPage: 0 };\r\n window.analyticsData.missingProduct = missingProductObj;\r\n window.analyticsData.search = searchObj;\r\n };\r\n\r\n const scrollToTopOfPRP = () => {\r\n const toScrollPosition = document.getElementById('to-scroll-position');\r\n toScrollPosition.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n };\r\n\r\n const navigateToPage = useCallback(\r\n async (\r\n page: number,\r\n sortKey: string,\r\n keyword: string,\r\n pageSize: number,\r\n rdValue: string,\r\n viValue: string,\r\n dimensions: IDimension[],\r\n ): Promise => {\r\n const cachebleHeaders = {\r\n 'Content-Type': 'application/json',\r\n currentdatetime: new Cookie().CurrentDate || new Date().toISOString(),\r\n };\r\n\r\n const prpUrl = buildApiUrl(page, sortKey, keyword, pageSize, rdValue, viValue, dimensions);\r\n\r\n let result: AxiosResponse;\r\n const removeDims = [];\r\n\r\n try {\r\n result = await http.get(prpUrl, {\r\n headers: cachebleHeaders,\r\n transformRequest: (data, headers) => {\r\n delete headers.Authorization;\r\n return data;\r\n },\r\n });\r\n\r\n const mybrands = dimensions.filter((x) => x.Type.toLowerCase() === 'brand');\r\n if (mybrands.length > 0 && mybrands[0].UrlSlugs.length > 0) {\r\n mybrands[0].UrlSlugs.forEach((brand) => {\r\n const brandstate = result.data.DimensionStates.find(\r\n (x) => x.DimensionType.toLowerCase() === 'brand',\r\n );\r\n if (brandstate) {\r\n const ref = brandstate.Refinements.find((x) => x.UrlSlug === brand);\r\n if (!ref) {\r\n removeDims.push(brand);\r\n }\r\n }\r\n });\r\n mybrands[0].UrlSlugs = mybrands[0].UrlSlugs.filter((x) => !removeDims.includes(x));\r\n }\r\n\r\n setDimensions(dimensions);\r\n setData(result.data);\r\n setCurrentPage(result.data.Paging.CurrentPage);\r\n setPageSortKey(result.data.Sorting.SelectedSortOption.Key);\r\n updateSchema(result.data);\r\n generateAnalyticsFilters(result.data.DimensionStates);\r\n if (result.data.Products.length > 0)\r\n setProductRefinementAnalytics(result.data.SearchTerm, result.data.Paging);\r\n if (result.data.Products === null || result.data.Products.length === 0)\r\n setMissingProductAnalytics(result.data.SearchTerm);\r\n setIsFetchComplete(true);\r\n } catch (e) {\r\n setIsFetchComplete(true);\r\n }\r\n\r\n const resp: IPrpResponse = {\r\n url: buildPageUrl(page, sortKey, keyword, pageSize, rdValue, viValue, dimensions),\r\n dimensionStates: result.data.DimensionStates,\r\n };\r\n\r\n if (removeDims && removeDims.length > 0) {\r\n window.history.pushState({}, '', resp.url);\r\n }\r\n return resp;\r\n },\r\n [setData],\r\n );\r\n\r\n const fetchAndSetProducts = useCallback(\r\n async (\r\n page: number,\r\n sortKey: string,\r\n keywordKey: string,\r\n pageSize: number,\r\n rdValue: string,\r\n viValue: string,\r\n dimensions: IDimension[],\r\n ): Promise => {\r\n return await navigateToPage(page, sortKey, keywordKey, pageSize, rdValue, viValue, dimensions);\r\n },\r\n [navigateToPage],\r\n );\r\n\r\n useEffect(() => {\r\n try {\r\n const searchString = window.sessionStorage.getItem('TSC_SearchString');\r\n if (searchString) {\r\n trackFBSearchEvent(searchString);\r\n window.sessionStorage.removeItem('TSC_SearchString');\r\n }\r\n } catch (error) {\r\n console.error('Error accessing sessionStorage:', error);\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n const domAdCard = document.querySelector('.ad-card');\r\n\r\n const adCardData: AdCardProps = {\r\n ctaText: '',\r\n href: '',\r\n image: '',\r\n text: '',\r\n title: '',\r\n imageAlt: '',\r\n textBackgroundColour: '',\r\n textBackgroundOpacity: 0.5,\r\n textColour: '',\r\n };\r\n const queryString = window.location.search.slice(1);\r\n const queries: Record = {};\r\n queryString.split('&').forEach((query) => {\r\n const [key, value] = query.split('=');\r\n queries[key] = value;\r\n });\r\n\r\n const pageSizeFromQuery = queries['pageSize'] || `$${DEFAULT_PAGE_SIZE}`;\r\n const parsedPageSize = parseInt(pageSizeFromQuery, 10) || DEFAULT_PAGE_SIZE;\r\n let pageSize = parsedPageSize;\r\n setCurrentPageSize(pageSize);\r\n\r\n if (!domAdCard) {\r\n setIsAdCardAvailable(false);\r\n } else {\r\n setIsAdCardAvailable(true);\r\n const domAdCardImage = document.querySelector('.ad-card__self');\r\n const domAdCardTitle = document.querySelector('.ad-card__content-title');\r\n const domAdCardText = document.querySelector('.ad-card__content-text');\r\n const domAdCardCta = document.querySelector('.ad-card__content-cta__title');\r\n const domAdCardImageAltText = document.querySelector('.ad-card__image-alt-text');\r\n const domAdCardTextColour = document.querySelector('.ad-card__text-colour');\r\n const domAdCardTextBackgroundColour = document.querySelector(\r\n '.ad-card__text-background-colour',\r\n );\r\n const domAdCardTextBackgroundOpacity = document.querySelector(\r\n '.ad-card__text-background-opacity',\r\n );\r\n\r\n adCardData.href = domAdCard.getAttribute('href') || '';\r\n adCardData.image = domAdCardImage?.getAttribute('src') || '';\r\n adCardData.title = domAdCardTitle.textContent || '';\r\n adCardData.text = domAdCardText.textContent || '';\r\n adCardData.ctaText = domAdCardCta.textContent || '';\r\n adCardData.imageAlt = domAdCardImageAltText.textContent || '';\r\n adCardData.textColour = domAdCardTextColour.textContent || '';\r\n adCardData.textBackgroundColour = domAdCardTextBackgroundColour.textContent || '';\r\n adCardData.textBackgroundOpacity = parseFloat(domAdCardTextBackgroundOpacity.textContent) || 0.5;\r\n\r\n setAdCardProps(adCardData);\r\n domAdCard.remove();\r\n\r\n pageSize -= 1;\r\n setCurrentPageSize(pageSize);\r\n }\r\n\r\n let navQuery = queries['nav'];\r\n let viValue = '';\r\n const pathname = window.location.pathname.substring(window.location.pathname.indexOf('products/') + 9);\r\n const paths = pathname.split('/');\r\n\r\n if (navQuery) {\r\n navQuery = decodeURIComponent(navQuery);\r\n const [head, tail] = navQuery.split(':');\r\n if (head === 'vi') {\r\n //dimensionId = tail;\r\n setViParameter(tail);\r\n viValue = tail;\r\n }\r\n }\r\n\r\n const pageQuery = queries['page'];\r\n let page = 1;\r\n\r\n if (pageQuery) {\r\n page = parseInt(pageQuery, 10) || 1;\r\n setCurrentPage(page);\r\n }\r\n\r\n const sortKey = queries['sortKey'] || '';\r\n setPageSortKey(sortKey);\r\n\r\n const keyword = queries['keyword'] || '';\r\n setKeyword(keyword);\r\n\r\n const rdTemp = queries['rd'] || '';\r\n const rd = rdTemp === 'false' ? '0' : rdTemp;\r\n setRdParameter(rd);\r\n\r\n const dimensionObject: IDimension[] = [];\r\n\r\n dimensionTypes.forEach((type) => {\r\n type = type.toLowerCase();\r\n const filterByDimension = queries[type] || '';\r\n const filterByDimensionArray = filterByDimension.split(',');\r\n const dims = filterByDimensionArray;\r\n\r\n if (dims.length > 0 && filterByDimension !== '') {\r\n dims.forEach((dim: string) => {\r\n const dimension = dimensionObject.find((d) => d.Type === type) as IDimension;\r\n if (dimension && !dimension.UrlSlugs.includes(dim)) {\r\n dimension.UrlSlugs.push(dim);\r\n } else if (!dimension || !dimension.UrlSlugs.includes(dim)) {\r\n dimensionObject.push({ Type: type, UrlSlugs: [dim] });\r\n }\r\n });\r\n }\r\n });\r\n\r\n setDimensions(dimensionObject);\r\n\r\n fetchAndSetProducts(page, sortKey, keyword, pageSize, rd, viValue, dimensionObject).then(\r\n (prpResponse: IPrpResponse) => {\r\n if (prpResponse.dimensionStates) {\r\n prpResponse.dimensionStates.forEach((state) => {\r\n state.Refinements.forEach((refinement) => {\r\n const includedDimensions = dimensions.filter(\r\n (x) =>\r\n (x.Type.toLowerCase() === refinement.DimensionType.toLowerCase() &&\r\n x.Type.toLowerCase() === 'brand' &&\r\n x.UrlSlugs.includes(refinement.UrlSlug)) ||\r\n (x.Type.toLowerCase() !== 'brand' &&\r\n x.Type.toLowerCase() === refinement.DimensionType.toLowerCase()),\r\n );\r\n const excluded = includedDimensions.length === 0;\r\n if (refinement.Selected && excluded) {\r\n setExpandedFilter((prev: IExpandedPanel[]) => {\r\n const dim = prev.find(\r\n (x) => x.Type.toLowerCase() === refinement.DimensionType.toLowerCase(),\r\n );\r\n if (dim) {\r\n dim.Expanded = true;\r\n } else {\r\n prev.push({ Type: refinement.DimensionType, Expanded: true });\r\n }\r\n return prev;\r\n });\r\n }\r\n });\r\n });\r\n }\r\n\r\n const uat = new Cookie().UserAccessToken;\r\n if (!uat) {\r\n return;\r\n }\r\n\r\n const customerEdp = uat.Edp;\r\n if (!customerEdp) {\r\n return;\r\n }\r\n\r\n getUserFavourites(customerEdp);\r\n },\r\n );\r\n }, [fetchAndSetProducts]);\r\n\r\n const isSignedIn = useMemo(() => {\r\n const cookie = new Cookie();\r\n return !!cookie.UserAccessToken;\r\n }, [Cookie]);\r\n\r\n const isFavourite = (itemNo: string) => {\r\n if (!isSignedIn) {\r\n return false;\r\n }\r\n\r\n return favourites?.some((item) => item.ItemNumber === itemNo);\r\n };\r\n\r\n const products = useMemo(() => {\r\n return data.Products.map((el, i) => {\r\n const isLiked = isFavourite(el.ItemNo) || false;\r\n return (\r\n \r\n {\r\n document.querySelector('.prp-wrapper')?.scrollIntoView();\r\n setShowFraudModal(true);\r\n $('#fraudModal').modal('show');\r\n }}\r\n />\r\n \r\n );\r\n });\r\n }, [data, favourites]);\r\n\r\n const cards = useMemo(() => {\r\n const MOBILE_BREAKPOINT = 768;\r\n const isMobile = window.innerWidth < MOBILE_BREAKPOINT;\r\n const tmp: JSX.Element[] = [];\r\n\r\n if (isAdCardAvailable && adCardProps !== null) {\r\n const adCardComponent = (\r\n \r\n );\r\n\r\n if (isMobile) {\r\n tmp.push(adCardComponent);\r\n tmp.push(products[0]);\r\n tmp.push(products[1]);\r\n } else {\r\n tmp.push(products[0]);\r\n tmp.push(products[1]);\r\n tmp.push(adCardComponent);\r\n }\r\n\r\n products.slice(2).forEach((p) => {\r\n tmp.push(p);\r\n });\r\n } else {\r\n products.forEach((p) => {\r\n tmp.push(p);\r\n });\r\n }\r\n\r\n return tmp.slice(0, currentPageSize);\r\n }, [products, currentPageSize, adCardProps, window.innerWidth]);\r\n\r\n // const scrollToTop = useCallback(() => {\r\n // // window.scrollTo({\r\n // // top: 0,\r\n // // left: 0,\r\n // // behavior: 'smooth',\r\n // // });\r\n\r\n // document.querySelector('.prp')?.scrollIntoView();\r\n // }, []);\r\n\r\n const productGridKeyListener = (e: React.KeyboardEvent) => {\r\n const UP_ARROW = 'ArrowUp';\r\n const RIGHT_ARROW = 'ArrowRight';\r\n const DOWN_ARROW = 'ArrowDown';\r\n const LEFT_ARROW = 'ArrowLeft';\r\n\r\n let newIndex = -1;\r\n if (e.key === UP_ARROW) {\r\n newIndex = currentFocusedCardIndex - 3;\r\n } else if (e.key === RIGHT_ARROW) {\r\n newIndex = currentFocusedCardIndex + 1;\r\n } else if (e.key === DOWN_ARROW) {\r\n newIndex = currentFocusedCardIndex + 3;\r\n } else if (e.key === LEFT_ARROW) {\r\n newIndex = currentFocusedCardIndex - 1;\r\n }\r\n\r\n if (newIndex < 0) {\r\n newIndex = 0;\r\n } else if (newIndex >= cards.length) {\r\n newIndex = cards.length - 1;\r\n }\r\n\r\n setCurrentFocusedCardIndex(newIndex);\r\n };\r\n\r\n const prpKeyDownListener = (e: React.KeyboardEvent) => {\r\n if (!e.ctrlKey) {\r\n return;\r\n }\r\n\r\n if (currentFocusArea === 'products') {\r\n setCurrentFocusArea('filter');\r\n if (document.activeElement instanceof HTMLElement) {\r\n document.activeElement.blur();\r\n }\r\n const el = document.querySelector('.prp-filter-panel__blocks');\r\n el?.focus();\r\n return;\r\n }\r\n\r\n if (currentFocusArea === 'filter') {\r\n setCurrentFocusArea('sort');\r\n document.querySelector('.prp__count-and-shorting__shorting')?.focus();\r\n return;\r\n }\r\n\r\n if (currentFocusArea === 'sort') {\r\n setCurrentFocusArea('products');\r\n document.querySelector(PRP_CARD_GRID_ITEM_CLASSNAME)?.focus();\r\n return;\r\n }\r\n };\r\n\r\n const updateFilterAnalyticsData = (selectedFilters: any[]) => {\r\n const analyticsData = window.analyticsData || {};\r\n analyticsData.filters = selectedFilters;\r\n window.analytics_track = window.analytics_track || [];\r\n window.analytics_track.push({\r\n event: {\r\n type: 'prp_refinement',\r\n },\r\n });\r\n };\r\n\r\n const generateAnalyticsFilters = (dimensionStates: IPrpDimensionState[]) => {\r\n if (dimensionStates != null && dimensionStates.length > 0) {\r\n // let totalSelectedRefinements = 0;\r\n\r\n const analyticsFilters = [];\r\n\r\n for (const dimState of dimensionStates) {\r\n const groupName: string = dimState.ListTitle;\r\n\r\n dimState.ListTitle = dimState.ListTitle.substr(\r\n 0,\r\n dimState.ListTitle.indexOf('(') > 0 ? dimState.ListTitle.indexOf('(') : dimState.ListTitle.length,\r\n ).trim();\r\n const selectedRefinements: number = dimState.Refinements.filter((dim) => dim.Selected).length;\r\n if (selectedRefinements > 0) {\r\n dimState.ListTitle += ' (' + selectedRefinements + ')';\r\n // totalSelectedRefinements += selectedRefinements;\r\n\r\n const options = [];\r\n const selectedFilters = dimState.Refinements.filter((dim) => dim.Selected);\r\n for (const selectedFilter of selectedFilters) {\r\n options.push({ name: selectedFilter.DimensionName });\r\n }\r\n analyticsFilters.push({ group: groupName, options: options });\r\n }\r\n }\r\n /*\r\n console.log('%c analyticsFilters:', 'color: purple; font-weight: bold;');\r\n console.log({ analyticsFilters });\r\n */\r\n updateFilterAnalyticsData(analyticsFilters);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n // window.addEventListener('resize', () => setWidth(window.innerWidth));\r\n if (width <= BREAKPOINT) {\r\n setIsFilterPanelOpen(false);\r\n } else {\r\n setIsFilterPanelOpen(true);\r\n }\r\n }, [width, BREAKPOINT, setIsFilterPanelOpen, setWidth]);\r\n\r\n useEffect(() => {\r\n const interval = setInterval(() => {\r\n setWidth(window.innerWidth);\r\n }, 300);\r\n\r\n return () => {\r\n clearInterval(interval);\r\n };\r\n }, [setWidth]);\r\n\r\n useEffect(() => {\r\n const allGridItems = document.querySelectorAll(PRP_CARD_GRID_ITEM_CLASSNAME);\r\n const currentItem = allGridItems[currentFocusedCardIndex];\r\n const isProductCard = currentItem?.classList.contains('prp-card-grid-item--product-card');\r\n\r\n if (isProductCard) {\r\n const index = currentFocusedCardIndex >= 2 ? currentFocusedCardIndex - 1 : currentFocusedCardIndex;\r\n document.querySelectorAll('.product-card')[index]?.focus();\r\n } else {\r\n document.querySelectorAll('.ad-card')[0]?.focus();\r\n }\r\n }, [currentFocusedCardIndex]);\r\n\r\n const onBackButtonEvent = (event: PopStateEvent) => {\r\n event.preventDefault();\r\n // eslint-disable-next-line no-self-assign\r\n window.location.href = window.location.href;\r\n };\r\n\r\n useEffect(() => {\r\n window.addEventListener('popstate', onBackButtonEvent);\r\n return () => window.removeEventListener('popstate', onBackButtonEvent);\r\n }, []);\r\n\r\n const paginationIndices = useMemo(() => {\r\n const indices = [];\r\n const halfSize = 5;\r\n for (let i = 0; i < halfSize; i++) {\r\n indices.push(currentPage - i);\r\n }\r\n\r\n for (let i = 1; i < 2 * halfSize; i++) {\r\n indices.push(currentPage + i);\r\n }\r\n\r\n const maxPage = data.Paging.TotalPages <= 10 ? data.Paging.TotalPages : 10;\r\n const filtered = indices.filter((i) => i > 0 && i <= data.Paging.TotalPages).sort((a, b) => a - b);\r\n const arr: number[] = [];\r\n\r\n for (let i = 0; i < Math.min(maxPage, filtered.length); i++) {\r\n arr.push(filtered[i]);\r\n }\r\n\r\n return arr;\r\n }, [currentPage, data.Paging.TotalPages]);\r\n\r\n const appliedFilters = useMemo(() => {\r\n const filters: Array = [];\r\n if (!data.DimensionStates) {\r\n return [];\r\n }\r\n data.DimensionStates.forEach((state) => {\r\n state.Refinements.forEach((refinement) => {\r\n /*\r\n console.log('%c refinement:', 'color: lime; font-weight: bold;');\r\n console.log({ refinement });\r\n */\r\n if (refinement.Selected) {\r\n filters.push(refinement);\r\n }\r\n });\r\n });\r\n return filters;\r\n }, [data, data.DimensionStates]);\r\n\r\n const removedFilters = useMemo(() => {\r\n const filters: Array = [];\r\n if (!data.DimensionStates) {\r\n return [];\r\n }\r\n data.DimensionStates.forEach((state) => {\r\n state.Refinements.forEach((refinement) => {\r\n const includedDimensions = dimensions.filter(\r\n (x) =>\r\n (x.Type.toLowerCase() === refinement.DimensionType.replace(' ', '-').toLowerCase() &&\r\n x.Type.toLowerCase() === 'brand' &&\r\n x.UrlSlugs.includes(refinement.UrlSlug)) ||\r\n (x.Type.toLowerCase() !== 'brand' &&\r\n (refinement.DimensionType.replace(' ', '-').toLowerCase() === x.Type ||\r\n (x.Type === 'vendortype' &&\r\n refinement.DimensionType.replace(' ', '-').toLowerCase() === 'vendor-type') ||\r\n (x.Type === 'review' &&\r\n refinement.DimensionType.replace(' ', '-').toLowerCase() === 'reviews') ||\r\n (x.Type === 'new-arrival' &&\r\n refinement.DimensionType.replace(' ', '-').toLowerCase() === 'newarrivals') ||\r\n (x.Type === 'league' &&\r\n refinement.DimensionType.replace(' ', '-').toLowerCase() === 'leagues'))),\r\n );\r\n const excluded = includedDimensions.length === 0;\r\n if (refinement.Selected && !excluded) {\r\n filters.push(refinement);\r\n }\r\n });\r\n });\r\n return filters;\r\n }, [data, data.DimensionStates]);\r\n\r\n const onFilterChange = (refinement: IPrpDimensionStateRefinement) => {\r\n const queryString = window.location.search.slice(1);\r\n const queries: Record = {};\r\n queryString.split('&').forEach((query) => {\r\n const [key, value] = query.split('=');\r\n queries[key] = value;\r\n });\r\n\r\n const dimensionObject: IDimension[] = dimensions;\r\n\r\n dimensionTypes.forEach((type) => {\r\n type = type.toLowerCase();\r\n const filteredDimension = queries[type] || '';\r\n let filteredDimensionList = [];\r\n if (filteredDimension !== '') {\r\n filteredDimensionList = filteredDimension.split(',');\r\n }\r\n let filterByDimension: string[] = filteredDimensionList;\r\n // If not selected, then add a new selection\r\n // Else, remove the selection\r\n if (!refinement.Selected) {\r\n if (\r\n refinement.DimensionType.replace(' ', '-').toLowerCase() === type ||\r\n (type === 'vendortype' &&\r\n refinement.DimensionType.replace(' ', '-').toLowerCase() === 'vendor-type') ||\r\n (type === 'review' && refinement.DimensionType.replace(' ', '-').toLowerCase() === 'reviews') ||\r\n (type === 'new-arrival' &&\r\n refinement.DimensionType.replace(' ', '-').toLowerCase() === 'newarrivals') ||\r\n (type === 'league' && refinement.DimensionType.replace(' ', '-').toLowerCase() === 'leagues')\r\n ) {\r\n if (filterByDimension.length > 0) {\r\n filterByDimension.push(refinement.UrlSlug);\r\n } else {\r\n filterByDimension = [refinement.UrlSlug];\r\n }\r\n }\r\n } else {\r\n filterByDimension = filterByDimension.filter((x) => x !== refinement.UrlSlug);\r\n }\r\n\r\n const dimension = dimensionObject.find((d) => d.Type === type) as IDimension;\r\n if (dimension) {\r\n dimension.UrlSlugs = filterByDimension;\r\n } else {\r\n dimensionObject.push({ Type: type, UrlSlugs: filterByDimension });\r\n }\r\n });\r\n setDimensions(dimensionObject);\r\n\r\n const dimensionRefinement = data.DimensionStates.filter((dim) =>\r\n dim.Refinements.some((y) => y.UrlSlug == refinement.UrlSlug),\r\n );\r\n\r\n if (dimensionRefinement.length > 0) {\r\n const ref = dimensionRefinement[0].Refinements.filter((x) => x.UrlSlug == refinement.UrlSlug);\r\n ref[0].Selected = !ref[0].Selected;\r\n setData(data);\r\n }\r\n\r\n setIsLoading(true);\r\n fetchAndSetProducts(\r\n 1,\r\n data.Sorting.SelectedSortOption.Key,\r\n keyword,\r\n currentPageSize,\r\n rdParameter,\r\n viParameter,\r\n dimensions,\r\n ).then((newPageUrl: IPrpResponse) => {\r\n // history.push(newPageUrl);\r\n // window.location.replace(newPageUrl);\r\n window.history.pushState({}, null, newPageUrl.url);\r\n setIsLoading(false);\r\n });\r\n };\r\n\r\n const removeAppliedFilter = (type: string, urlSlug: string) => {\r\n const dimensionObject: IDimension[] = dimensions;\r\n dimensionTypes.forEach((dimensionType) => {\r\n dimensionType = dimensionType.toLowerCase();\r\n if (\r\n dimensionType === type.replace(' ', '-').toLowerCase() ||\r\n (dimensionType === 'review' && type.replace(' ', '-').toLowerCase() === 'reviews') ||\r\n (dimensionType === 'new-arrival' && type.replace(' ', '-').toLowerCase() === 'newarrivals') ||\r\n (dimensionType === 'league' && type.replace(' ', '-').toLowerCase() === 'leagues')\r\n ) {\r\n const selectedDimemsions = data.DimensionStates.filter((dim) =>\r\n dim.Refinements.some((ref) => ref.Selected),\r\n );\r\n\r\n const dims = selectedDimemsions.filter((dim) => dim.Refinements.some((y) => y.UrlSlug === urlSlug));\r\n\r\n if (dims.length > 0) {\r\n const dimType = dimensionType;\r\n const dimension = dimensionObject.find((d) => d.Type === dimType) as IDimension;\r\n if (dimension) {\r\n dimension.UrlSlugs.splice(dimension.UrlSlugs.indexOf(urlSlug), 1);\r\n }\r\n }\r\n }\r\n });\r\n setDimensions(dimensionObject);\r\n setIsLoading(true);\r\n fetchAndSetProducts(\r\n 1,\r\n data.Sorting.SelectedSortOption.Key,\r\n keyword,\r\n currentPageSize,\r\n rdParameter,\r\n viParameter,\r\n dimensionObject,\r\n ).then((newPageUrl: IPrpResponse) => {\r\n // history.push(newPageUrl);\r\n // window.location.replace(newPageUrl);\r\n window.history.pushState({}, null, newPageUrl.url);\r\n setIsLoading(false);\r\n });\r\n };\r\n\r\n const removeAllAppliedFilters = () => {\r\n setIsLoading(true);\r\n const dimensionObject: IDimension[] = dimensions;\r\n const collectionDim = dimensionObject.filter((dim) => dim.Type === 'collection' || dim.Type === 'category');\r\n fetchAndSetProducts(\r\n 1,\r\n data.Sorting.SelectedSortOption.Key,\r\n keyword,\r\n currentPageSize,\r\n rdParameter,\r\n viParameter,\r\n collectionDim,\r\n ).then((newPageUrl: IPrpResponse) => {\r\n // history.push(newPageUrl);\r\n // window.location.replace(newPageUrl);\r\n window.history.pushState({}, null, newPageUrl.url);\r\n setIsLoading(false);\r\n });\r\n };\r\n\r\n const isExpandedFilter = (type: string, isExpanded: boolean) => {\r\n setExpandedFilter((prev: IExpandedPanel[]) => {\r\n const dim = prev.find((x) => x.Type === type);\r\n if (dim) {\r\n dim.Expanded = isExpanded;\r\n } else {\r\n prev.push({ Type: type, Expanded: isExpanded });\r\n }\r\n return prev;\r\n });\r\n };\r\n\r\n const isSearchPage = useMemo(() => {\r\n return keyword !== '';\r\n }, [keyword]);\r\n\r\n const isOnAirPage = useMemo(\r\n () => {\r\n return (\r\n /*tscConfig.AliasDimensionOnAirRecently === pageDimensionId[0] ||\r\n tscConfig.AliasDimensionOnAirToday === pageDimensionId[0] ||\r\n tscConfig.AliasDimensionOnAirYesterday === pageDimensionId[0]*/\r\n false\r\n );\r\n },\r\n [\r\n /*pageDimensionId*/\r\n ],\r\n );\r\n\r\n /*\r\n console.log('%c jsonLD, isJsonLDTrue:', 'color: red; font-weight: bold;');\r\n console.log({ jsonLD, isJsonLDTrue: jsonLD.length > 0 });\r\n */\r\n\r\n const sortChange = (e: React.ChangeEvent) => {\r\n setIsLoading(true);\r\n fetchAndSetProducts(1, e.target.value, keyword, currentPageSize, rdParameter, viParameter, dimensions).then(\r\n (newPageUrl: IPrpResponse) => {\r\n window.history.pushState({}, null, newPageUrl.url);\r\n setIsLoading(false);\r\n setPageSortKey(data.Sorting.SelectedSortOption.Key);\r\n },\r\n );\r\n };\r\n\r\n if (!isFetchComplete) {\r\n return (\r\n
    \r\n

    {t('loading')}

    \r\n
    \r\n );\r\n }\r\n\r\n if (isFetchComplete && data.Paging.TotalRecords === 0) {\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n }\r\n\r\n return (\r\n <>\r\n {showFraudModal && setShowFraudModal(false)} />}\r\n
    \r\n {isSearchPage && (\r\n

    \r\n {t('showingResultsFor')} "{decodeURIComponent(keyword)}"\r\n

    \r\n )}\r\n {isOnAirPage && }\r\n {\r\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\r\n
    \r\n {isLoading &&
    Loading
    }\r\n {jsonLD.length > 0 && (\r\n