{"version":3,"sources":["webpack:///./src/pages/catalog/Catalog.js","webpack:///./src/gtm-events/partCatalogue.js","webpack:///./src/gtm-events/findBikePart.js","webpack:///./src/gtm-events/findBikePartChild.js"],"names":["Catalog","isHeaderPinned","useIsHeaderPinned","useSearchParams","searchParams","navigate","useNavigate","dispatch","useDispatch","getLabel","useLabel","getCta","useCta","stepperContainer","useRef","faqsContainer","useState","breadcrumb","setBreadcrumb","bikeId","get","modelId","catalogPageId","product","catalogContainer","bike","useSelector","getBike","catalogList","getCatalogList","faqs","getFaqs","useHideElement","useEffect","a","getBikeModel","data","setBike","setError","doSearch","getCatalogueByBikeModel","params","URLSearchParams","window","location","search","catalogue","id","set","toString","replace","scrollToTopOfPartsGrid","requestAnimationFrame","top","current","getBoundingClientRect","document","documentElement","scrollTop","querySelector","clientHeight","scrollTo","behaviour","getCataloguePage","name","path","breadCrumbs","map","item","Name","onClick","toQueryString","Id","setCatalogList","ref","PartsStepper","bikeSearchCompleted","cta","hideCta","questions","length","undefined","onCtaClick","withLockedHeader","scrollIntoView","title","summary","catalog","category","to","image","_links","isCatalogueLink","rel","isTopLevel","pushToDataLayer","action","label","clickText","props","configuratorBikeName","configuratorBikeId","configuratorBikeYear","year","findBikePartEvent","configuratorAccessoryCategory","findBikePartChildEvent"],"mappings":"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","file":"0fc6e70bdc4951d27bfd.js","sourcesContent":["import React, { useEffect, useState, useRef } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useNavigate, useSearchParams } from 'react-router-dom';\nimport { getBike, getCatalogList, getFaqs } from 'src/redux/app/selectors';\nimport { toQueryString, useHideElement, useIsHeaderPinned, StickyHeader, withLockedHeader } from '@triumph/shared';\nimport { setBike, setCatalogList, setError } from 'src/redux/app/actions';\nimport { useLabel } from 'src/hooks';\nimport { BikeDetails, Loader, PartsCatalog } from 'components';\nimport getCatalogueByBikeModel from 'src/requests/getCatalogueByBikeModel';\nimport getBikeModel from 'src/requests/getBikeModel';\nimport getCataloguePage from 'src/requests/getCataloguePage';\nimport PartsStepper from 'components/parts-stepper/PartsStepper';\nimport findBikePartEvent from 'src/gtm-events/findBikePart';\nimport findBikePartChildEvent from 'src/gtm-events/findBikePartChild';\nimport partCatalogueEvent from 'src/gtm-events/partCatalogue';\nimport useCta from 'src/hooks/useCta';\nimport FAQs from '../../components/faqs';\n\nconst Catalog = () => {\n const isHeaderPinned = useIsHeaderPinned();\n const [searchParams] = useSearchParams();\n const navigate = useNavigate();\n const dispatch = useDispatch();\n const getLabel = useLabel();\n const getCta = useCta();\n const stepperContainer = useRef();\n const faqsContainer = useRef();\n const [breadcrumb, setBreadcrumb] = useState([]);\n\n const bikeId = searchParams.get('bikeId');\n const modelId = searchParams.get('modelId');\n const catalogPageId = searchParams.get('catalogPageId');\n const product = searchParams.get('product');\n\n const catalogContainer = useRef();\n\n const bike = useSelector(getBike);\n const catalogList = useSelector(getCatalogList);\n const faqs = useSelector(getFaqs);\n\n useHideElement('.breadcrumb');\n useHideElement('[data-navigation-target=\"header-basket\"]');\n\n useEffect(() => {\n const doSearch = async () => {\n try {\n const { data } = await getBikeModel(bikeId, modelId);\n dispatch(setBike(data.bike));\n } catch (error) {\n dispatch(setError(error));\n throw error;\n }\n };\n\n doSearch();\n }, [bikeId]);\n\n useEffect(() => {\n if (catalogPageId) {\n return;\n }\n\n const doSearch = async () => {\n try {\n const { data } = await getCatalogueByBikeModel(modelId);\n const params = new URLSearchParams(window.location.search);\n\n if (data?.catalogue?.[0]?.id) params.set('catalogPageId', data.catalogue[0].id);\n\n navigate({ search: params.toString() }, { replace: true });\n } catch (error) {\n dispatch(setError(error));\n throw error;\n }\n };\n doSearch();\n }, [modelId]);\n\n const scrollToTopOfPartsGrid = () => {\n window.requestAnimationFrame(() => {\n const top =\n (catalogContainer.current?.getBoundingClientRect()?.top || 0) +\n document.documentElement.scrollTop -\n (isHeaderPinned ? document.querySelector('.header').clientHeight : 0) -\n (stepperContainer.current?.clientHeight || 0);\n\n window.scrollTo({\n top,\n behaviour: 'smooth',\n });\n });\n };\n\n useEffect(() => {\n if (!catalogPageId) {\n return;\n }\n\n const doSearch = async () => {\n try {\n const { data } = await getCataloguePage(catalogPageId);\n\n setBreadcrumb([\n {\n name: getLabel('bikeSelectorTitle'),\n path: getCta('bikeSearch'),\n },\n ...data.breadCrumbs.map((item) => ({\n name: item.Name,\n onClick: () => {\n navigate({\n search: toQueryString({\n bikeId,\n modelId,\n catalogPageId: item.Id,\n ...(product ? { product } : {}),\n }),\n });\n scrollToTopOfPartsGrid();\n },\n })),\n ]);\n\n dispatch(setCatalogList(data.catalogue));\n } catch (error) {\n dispatch(setError(error));\n throw error;\n }\n };\n\n doSearch();\n }, [catalogPageId]);\n\n return (\n <>\n <StickyHeader>\n <div ref={stepperContainer}>\n <PartsStepper bikeSearchCompleted />\n </div>\n </StickyHeader>\n {bike && (\n <BikeDetails\n cta={faqs.hideCta || !faqs.questions?.length ? undefined : getLabel('bikeSelectorCta')}\n onCtaClick={async () =>\n withLockedHeader(() => faqsContainer.current?.scrollIntoView({ behaviour: 'smooth' }))\n }\n title={getLabel('bikeSelectorTitle')}\n summary={getLabel('bikeSelectorSubtitle')}\n bike={bike}\n />\n )}\n {catalogList && (\n <div ref={catalogContainer}>\n <PartsCatalog\n breadcrumb={breadcrumb}\n catalog={catalogList.map((category) => {\n const { id, image, name, _links } = category;\n\n const isCatalogueLink = _links?.[0].rel === 'catalogue';\n const isTopLevel = !isCatalogueLink && breadcrumb.length < 2;\n\n let to;\n\n if (!isCatalogueLink) {\n to = `/parts/${bikeId}/${modelId}/${id}`;\n }\n\n if (product) {\n to = `${to}/${product}`;\n }\n\n return {\n id,\n image,\n name,\n to,\n onClick: () => {\n if (isCatalogueLink) {\n const params = new URLSearchParams(window.location.search);\n params.set('catalogPageId', id);\n navigate({ search: params.toString() });\n\n scrollToTopOfPartsGrid();\n\n partCatalogueEvent({ category, bike, clickText: name });\n }\n\n if (isTopLevel) {\n findBikePartEvent({ category, bike, clickText: name });\n }\n\n if (!isTopLevel) {\n findBikePartChildEvent({ category, bike, clickText: name });\n }\n },\n };\n })}\n />\n </div>\n )}\n {!faqs.hideCta && !!faqs.questions?.length && (\n <div ref={faqsContainer}>\n <FAQs title={faqs.title} questions={faqs.questions} bike={bike} />\n </div>\n )}\n {!catalogList && <Loader />}\n </>\n );\n};\n\nexport default Catalog;\n","import { pushToDataLayer } from \"@triumph/shared\";\n\nexport default () => pushToDataLayer({\n name: 'partCatalogue',\n category: 'Parts',\n action: `Step`,\n label: `Parts Catalogue`,\n});","import { pushToDataLayer } from \"@triumph/shared\";\n\nexport default ({ bike, clickText }) => pushToDataLayer({\n name: 'findBikePart',\n category: 'Parts',\n action: `Find Parts - ${bike.name}`,\n label: clickText,\n props: {\n configuratorBikeName: bike.name,\n configuratorBikeId: bike.id,\n configuratorBikeYear: bike.year,\n },\n});","import { pushToDataLayer } from '@triumph/shared';\n\nexport default ({ bike, category, clickText }) =>\n pushToDataLayer({\n name: 'findBikePartChild',\n category: 'Parts',\n action: `Find Parts - ${bike.name}`,\n label: `${category.name} ${clickText}`,\n props: {\n configuratorBikeName: bike.name,\n configuratorBikeId: bike.id,\n configuratorBikeYear: bike.year,\n configuratorAccessoryCategory: category.name,\n },\n });\n"],"sourceRoot":""}