{"version":3,"file":"search.0762b8fcdb5d6ea68677.chunk.js","mappings":"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","sources":["webpack://AlfaLaval/./components/LoadingSpinner/LoadingSpinner.tsx","webpack://AlfaLaval/./pages/SearchPage/components/DidYouMean/DidYouMean.tsx","webpack://AlfaLaval/./pages/SearchPage/components/CategoryBar/CategoryBar.tsx","webpack://AlfaLaval/./pages/SearchPage/components/CategoryResultsContainer/components/SearchListItem.tsx","webpack://AlfaLaval/./components/ImageListItem/ImageListItem.tsx","webpack://AlfaLaval/./components/NewsListItem/NewsListItem.tsx","webpack://AlfaLaval/./pages/SearchPage/components/CategoryResultsContainer/components/DocumentListItem.tsx","webpack://AlfaLaval/./pages/SearchPage/components/CategoryResultsContainer/CategoryResultsContainer.tsx","webpack://AlfaLaval/./pages/SearchPage/components/CategoryResultsContainer/CategoryResultsContainer.hooks.ts","webpack://AlfaLaval/./pages/SearchPage/SearchPage.tsx","webpack://AlfaLaval/./pages/SearchPage/index.ts","webpack://AlfaLaval/./pages/SearchPage/SearchPage.hooks.ts","webpack://AlfaLaval/./pages/SearchPage/SearchPage.helpers.ts"],"sourcesContent":["import React from \"react\";\r\nimport \"./LoadingSpinner.scss\";\r\n\r\nexport const LoadingSpinner = () => {\r\n return (\r\n <div className=\"c-loading-spinner\">\r\n <img className=\"inline-block lazyload\" src=\"/ui/css/img/loader.gif\" alt=\"Loading\" />\r\n </div>\r\n );\r\n};\r\n","import React from 'react';\r\nimport './DidYouMean.scss';\r\n\r\ninterface DidYouMeanProps {\r\n label: string;\r\n misspelling: string[];\r\n onItemClick: (misspellingItem: string) => void;\r\n}\r\n\r\nexport const DidYouMean = ({ misspelling, label, onItemClick }: DidYouMeanProps) => {\r\n return (\r\n <div className='did-you-mean'>\r\n <p>{label}</p>\r\n <ul>\r\n {misspelling.map((item, index) => {\r\n return (\r\n <li key={index}>\r\n <a onClick={() => onItemClick(item)}>{item}</a>\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n </div>\r\n );\r\n};\r\n","import React, { useEffect } from 'react';\r\nimport { InPageNavSlider } from '@layouts/utils/InPageNavSlider';\r\nimport './CategoryBar.scss';\r\nimport { SearchCategory, SearchResult } from '@pages/SearchPage/SearchPage.types';\r\nimport { DidYouMean } from '../DidYouMean';\r\n\r\ninterface CategoryBarProps {\r\n tags: SearchCategory[];\r\n selectedCategory: string;\r\n onChangeSelectedCategory: (item: any) => void;\r\n query: string;\r\n result?: SearchResult;\r\n onSubmit: (keyword: any) => void;\r\n}\r\n\r\nexport const CategoryBar = ({\r\n tags = [],\r\n selectedCategory,\r\n onChangeSelectedCategory,\r\n query,\r\n result,\r\n onSubmit,\r\n}: CategoryBarProps) => {\r\n useEffect(() => {\r\n InPageNavSlider.init();\r\n\r\n const navElementCount = result.FacetGroups[0].Facets.length;\r\n // Logic to show results on the first go if we have single Shop Tab\r\n if (navElementCount === 1) {\r\n const shopElement = result.FacetGroups[0].Facets[0];\r\n onSubmit(query);\r\n }\r\n }, []);\r\n\r\n if (!result) {\r\n return <div className='l-empty-section' />;\r\n }\r\n\r\n return (\r\n <div className='c-search-category-bar'>\r\n {!!query && <h3>{`${result.i18n.SearchResultsFor} \"${query}\":`}</h3>}\r\n <p>\r\n <strong>{result.TotalResult}</strong> {result.i18n.ItemsFound}\r\n </p>\r\n {result.TotalResult === 0 && result.MissSpelling.length > 0 && (\r\n <DidYouMean\r\n misspelling={result.MissSpelling}\r\n label={result.i18n.SpellCheck}\r\n onItemClick={(query) => onSubmit(query)}\r\n />\r\n )}\r\n {result.TotalResult > 0 && (\r\n <div className='c-in-page-nav'>\r\n <div className='c-in-page-nav-swiper swiper-container'>\r\n <ul className='c-in-page-nav-list swiper-wrapper'>\r\n {tags.map((item, index) => {\r\n return (\r\n <li key={index} className='c-in-page-nav-list-item swiper-slide'>\r\n <a\r\n className={`c-search-category-bar-link ${\r\n selectedCategory === item.Id ? 'selected' : ''\r\n }`}\r\n onClick={() => onChangeSelectedCategory(item)}\r\n >\r\n {item.Title ? `${item.Title}` : `${item.Id}`}\r\n </a>\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n </div>\r\n\r\n <div className='c-in-page-nav-button is-next is-hidden'></div>\r\n <div className='c-in-page-nav-button is-prev is-hidden'></div>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n","import React from 'react';\r\nimport { SearchHitsItem } from '@pages/SearchPage';\r\n\r\ninterface SearchListItemProps {\r\n item: SearchHitsItem;\r\n onClick: () => void;\r\n}\r\n\r\nexport const SearchListItem = ({ item, onClick }: SearchListItemProps) => {\r\n const imageThumbnail = item.Category === 'Product Model' ? 'product-model-thumbnail' : '';\r\n\r\n const getTitleText = (searchItem) => {\r\n if (\r\n searchItem &&\r\n searchItem.Title &&\r\n searchItem.Language &&\r\n searchItem.Category === 'SafetyDocuments'\r\n ) {\r\n let lang = searchItem.Language.split('-');\r\n if (lang.length > 1) {\r\n return searchItem.Title + ' - ' + lang[1].toUpperCase();\r\n } else return searchItem.Title + ' - ' + searchItem.Language.toUpperCase();\r\n } else if (searchItem && searchItem.Title) {\r\n return searchItem.Title;\r\n }\r\n };\r\n\r\n return item ? (\r\n <a\r\n href={item.Url}\r\n target={\r\n item.Category === 'External' ||\r\n item.Category === 'SafetyDocuments' ||\r\n item.Category === null\r\n ? '_blank'\r\n : '_self'\r\n }\r\n rel='noreferrer'\r\n className='c-search-list-item'\r\n onClick={onClick}\r\n >\r\n <div className='c-search-list-item-container'>\r\n <div className='i-title'>\r\n <label>{item.CardType}</label>\r\n </div>\r\n <div className='i-container'>\r\n {item.ImageUrl ? (\r\n <div className='c-search-list-item-thumbnail'>\r\n <img className={imageThumbnail} src={item.ImageUrl} alt={item.AltText} />\r\n </div>\r\n ) : (\r\n <div className='c-search-list-item-thumbnail'></div>\r\n )}\r\n\r\n <div className='c-search-list-item-content'>\r\n <div className='c-search-list-item-title-container'>\r\n <h4\r\n className='c-search-list-item-title-text'\r\n dangerouslySetInnerHTML={{ __html: getTitleText(item) }}\r\n ></h4>\r\n </div>\r\n <p\r\n className='c-search-list-item-content-text'\r\n dangerouslySetInnerHTML={{\r\n __html: item.Excerpt,\r\n }}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </a>\r\n ) : null;\r\n};\r\n","import React from 'react';\r\nimport { SearchHitsItem } from '@pages/SearchPage/SearchPage.types';\r\n\r\ninterface ImageListItemProps {\r\n item: SearchHitsItem;\r\n onClick: () => void;\r\n}\r\n\r\nexport const ImageListItem = ({ item, onClick }: ImageListItemProps) => {\r\n return !item ? null : (\r\n <a href={item.Url} className='c-search-list-item c-search-list-item-image' onClick={onClick}>\r\n <div className='c-search-list-item-container'>\r\n <div className='i-title'>\r\n <label>{item.CardType}</label>\r\n </div>\r\n <div className='i-container'>\r\n {item.Url && (\r\n <div className='c-search-list-item-thumbnail'>\r\n <img src={item.Url} alt={item.AltText} />\r\n </div>\r\n )}\r\n <div className='c-search-list-item-content c-search-list-item-document'>\r\n <div className='c-search-list-item-title-container'>\r\n <h4\r\n className='c-search-list-item-title-text'\r\n title={item.Title}\r\n dangerouslySetInnerHTML={{ __html: item.Title }}\r\n ></h4>\r\n </div>\r\n </div>\r\n </div>\r\n <div className='c-search-list-item-image-footer'>\r\n <div>\r\n {item.Dimensions && (\r\n <div className='c-search-list-item-date-container'>\r\n <p className='c-search-list-item-date-text'>{item.Dimensions}</p>\r\n </div>\r\n )}\r\n </div>\r\n <div>\r\n {item.Size && (\r\n <div className='c-search-list-item-date-container'>\r\n <p className='c-search-list-item-date-text'>{item.Size}</p>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </a>\r\n );\r\n};\r\n","import React from 'react';\r\nimport { SearchHitsItem } from '@pages/SearchPage/SearchPage.types';\r\n\r\ninterface NewsListItemProps {\r\n item: SearchHitsItem;\r\n onClick: () => void;\r\n}\r\n\r\nexport const NewsListItem = ({ item, onClick }: NewsListItemProps) => {\r\n return item ? (\r\n <a href={item.Url} className='c-search-list-item' onClick={onClick}>\r\n <div className='c-search-list-item-container'>\r\n <div className='i-title'>\r\n <label>{item.CardType}</label>\r\n </div>\r\n <div className='i-container'>\r\n {item.ImageUrl ? (\r\n <div className='c-search-list-item-thumbnail'>\r\n <img src={item.ImageUrl} alt={item.AltText} />\r\n </div>\r\n ) : (\r\n <div className='c-search-list-item-thumbnail' />\r\n )}\r\n <div className='c-search-list-item-content-2cols'>\r\n <div className='c-search-list-item-title-container'>\r\n <h4\r\n className='c-search-list-item-title-text'\r\n dangerouslySetInnerHTML={{ __html: item.Title }}\r\n />\r\n </div>\r\n {item.PublishDate && (\r\n <div className='c-search-list-item-date-container'>\r\n <p className='c-search-list-item-date-text'>{item.PublishDate}</p>\r\n </div>\r\n )}\r\n <p\r\n className='c-search-list-item-content-text'\r\n dangerouslySetInnerHTML={{ __html: item.Excerpt }}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </a>\r\n ) : null;\r\n};\r\n","import React from 'react';\r\nimport { SearchHitsItem } from '@pages/SearchPage/SearchPage.types';\r\nimport dataLayer from '@helpers/dataLayer';\r\nimport { getURLFileData } from '@helpers/URLHelpers';\r\n\r\ninterface DocumentListItemProps {\r\n item: SearchHitsItem;\r\n onClick: () => void;\r\n}\r\n\r\nexport const DocumentListItem = ({ item, onClick }: DocumentListItemProps) => {\r\n const title = item.Title + `${item.Language ? ' - ' + item.Language : ''}`;\r\n\r\n const onItemClick = () => {\r\n onClick();\r\n const { fileName } = getURLFileData(item.Url);\r\n dataLayer.push('file_download', {\r\n file_name: fileName,\r\n file_extension: item.MimeType,\r\n file_context: undefined,\r\n file_category: item.DocumentCategory,\r\n link_text: title,\r\n link_url: item.Url,\r\n });\r\n };\r\n\r\n return item ? (\r\n <a\r\n download\r\n href={item.Url}\r\n target='_blank'\r\n className='c-search-list-item c-search-list-item-product'\r\n onClick={onItemClick}\r\n >\r\n <div className='c-search-list-item-container'>\r\n <div className='i-title'>\r\n <label>{item.CardType}</label>\r\n </div>\r\n <div className='i-container'>\r\n {item.ImageUrl && (\r\n <div className='c-search-list-item-thumbnail'>\r\n <img src={item.ImageUrl} alt={item.AltText} />\r\n </div>\r\n )}\r\n <div className='c-search-list-item-content c-search-list-item-document'>\r\n <div className='c-search-list-item-title-container'>\r\n <h4\r\n className='c-search-list-item-title-text'\r\n dangerouslySetInnerHTML={{ __html: title }}\r\n ></h4>\r\n </div>\r\n <p className='c-search-list-item-document-type'>{item.DocumentCategory}</p>\r\n </div>\r\n </div>\r\n <div className='c-search-list-item-document-footer'>\r\n {item.MimeType && <div className='c-search-list-item-pdf'>{item.MimeType}</div>}\r\n <div>{item.PublishDate}</div>\r\n <div>{item.Size}</div>\r\n </div>\r\n </div>\r\n </a>\r\n ) : null;\r\n};\r\n","import React, { memo } from 'react';\r\nimport { SearchListItem } from './components/SearchListItem';\r\nimport { ImageListItem } from '@components/ImageListItem';\r\nimport { NewsListItem } from '@components/NewsListItem';\r\nimport { LoadingSpinner } from '@components/LoadingSpinner';\r\nimport { DocumentListItem } from './components/DocumentListItem';\r\nimport { useSearchResults } from './CategoryResultsContainer.hooks';\r\nimport { SearchHitsItem, SearchResult } from '@pages/SearchPage';\r\nimport dataLayer from '@helpers/dataLayer';\r\nimport './CategoryResultsContainer.scss';\r\n\r\ninterface CategoryResultsContainerProps {\r\n result: SearchResult;\r\n isLoading: boolean;\r\n page: number;\r\n onShowMoreCategoriesClick: () => void;\r\n}\r\n\r\nexport const CategoryResultsContainer = memo(\r\n ({ result, isLoading, page, onShowMoreCategoriesClick }: CategoryResultsContainerProps) => {\r\n const { list } = useSearchResults(result);\r\n const isShowMoreDisabled = result.SearchHits.length >= result.total || result.total === 0;\r\n const showMoreResultText = result.i18n.ShowMoreResults.split('{{category}}');\r\n\r\n const doDataLayerPush = (item: SearchHitsItem, itemPosition: number) => {\r\n dataLayer.push('search_result_click', {\r\n search_term: window.localStorage.getItem('queryterm'),\r\n link_url: item.Url,\r\n link_text: item.Title,\r\n search_result_category: item.Category,\r\n search_result_index: itemPosition + 1,\r\n });\r\n };\r\n\r\n if (result.TotalResult === 0) {\r\n return null;\r\n }\r\n\r\n if (isLoading && page === 1) {\r\n return <LoadingSpinner />;\r\n }\r\n\r\n return (\r\n <div id={result.listType} className='c-category-results-container'>\r\n <div className='l-search-items-container'>\r\n {list.map((item, index) => {\r\n switch (item.Category) {\r\n case 'News':\r\n return (\r\n <NewsListItem\r\n key={item.Title + index}\r\n item={item}\r\n onClick={() => doDataLayerPush(item, index)}\r\n />\r\n );\r\n case 'Documents':\r\n return (\r\n <DocumentListItem\r\n key={item.Title + index}\r\n item={item}\r\n onClick={() => doDataLayerPush(item, index)}\r\n />\r\n );\r\n case 'Images':\r\n return (\r\n <ImageListItem\r\n key={item.Title + index}\r\n item={item}\r\n onClick={() => doDataLayerPush(item, index)}\r\n />\r\n );\r\n default:\r\n return (\r\n <SearchListItem\r\n key={item.Title + index}\r\n item={item}\r\n onClick={() => doDataLayerPush(item, index)}\r\n />\r\n );\r\n }\r\n })}\r\n </div>\r\n {result.ShowMore && (\r\n <>\r\n {isLoading && <LoadingSpinner />}\r\n {!isLoading && (\r\n <div className='l-show-more-btn-container'>\r\n <button\r\n onClick={onShowMoreCategoriesClick}\r\n className={`c-button is-medium is-primary ${isShowMoreDisabled ? 'is-disabled' : ''\r\n }`}\r\n >\r\n {showMoreResultText[0]} {result.category} {showMoreResultText[1]}\r\n </button>\r\n </div>\r\n )}\r\n </>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\n","import { SearchResult, SearchHitsItem } from \"@pages/SearchPage\";\r\nimport { useEffect, useState } from \"react\";\r\n\r\nexport const useSearchResults = (result: SearchResult) => {\r\n const [list, setList] = useState<SearchHitsItem[]>([]);\r\n const page = result?.CurrentPage;\r\n\r\n useEffect(() => {\r\n if (page === 1) {\r\n setList(result.SearchHits || []);\r\n }\r\n }, [result]);\r\n\r\n useEffect(() => {\r\n if (page > 1) {\r\n setList(prevList => [...prevList, ...result.SearchHits]);\r\n }\r\n }, [page]);\r\n\r\n return { list, page };\r\n}\r\n","import React, { useState, useEffect } from 'react';\r\nimport { SearchBar } from '../../components/SearchBar/SearchBar';\r\nimport { CategoryBar } from './components/CategoryBar/CategoryBar';\r\nimport { CategoryResultsContainer } from './components/CategoryResultsContainer';\r\nimport { LoadingSpinner } from '@components/LoadingSpinner';\r\nimport './SearchPage.scss';\r\nimport { useSearchURL } from './SearchPage.hooks';\r\nimport { SearchCategory } from './SearchPage.types';\r\nimport { useDoSearchQuery } from './SearchPage.service';\r\nimport { doDataLayerPush } from './SearchPage.helpers';\r\nimport { useFetchMegaMenuNavigationQuery } from '@layouts/Header/Header.service';\r\n\r\nconst SearchPage = () => {\r\n const { defaultCategory, defaultQuery, updateUrl } = useSearchURL();\r\n const [category, setCategory] = useState(defaultCategory);\r\n const [query, setQuery] = useState(defaultQuery);\r\n const [page, setPage] = useState(1);\r\n const { data: megaMenuNavigation } = useFetchMegaMenuNavigationQuery();\r\n const {\r\n data: result,\r\n isFetching,\r\n fulfilledTimeStamp,\r\n } = useDoSearchQuery(\r\n { query, category, page, orderBy: 'relevance' },\r\n { refetchOnMountOrArgChange: true }\r\n );\r\n\r\n useEffect(() => {\r\n // reset params to default if the query has changed\r\n setCategory(defaultCategory);\r\n setPage(1);\r\n }, [query]);\r\n\r\n useEffect(() => {\r\n updateUrl(query, category);\r\n }, [query, category]);\r\n\r\n useEffect(() => {\r\n // getItem returns null if the key does not exist. query will always be different from null for the first time\r\n const queryHasChanged = window.localStorage.getItem('queryterm') !== query;\r\n if (queryHasChanged && result) {\r\n // do datalayer push only after new result is fetched\r\n doDataLayerPush(query, result);\r\n window.localStorage.setItem('queryterm', query);\r\n }\r\n }, [result]);\r\n\r\n const onSearchSubmit = (keyword: string) => {\r\n setQuery(keyword);\r\n };\r\n\r\n const onShowMoreCategoriesClick = () => {\r\n setPage((page) => page + 1);\r\n };\r\n\r\n const onChangeCategory = (item: SearchCategory) => {\r\n if (item.Id) {\r\n setCategory(item.Id);\r\n setPage(1);\r\n }\r\n };\r\n\r\n return (\r\n <section className='l-search-page'>\r\n <div className='modal-content l-page-center'>\r\n <div className='l-section l-section-100'>\r\n <div className='l-area-centered'>\r\n <SearchBar\r\n query={query}\r\n searchLastUpdated={fulfilledTimeStamp?.toString() || ''}\r\n onSubmit={onSearchSubmit}\r\n placeholder={megaMenuNavigation?.Search.Placeholder}\r\n searchInformation={megaMenuNavigation?.Search.SearchInformation}\r\n className='l-search-panel'\r\n />\r\n {isFetching && !result && <LoadingSpinner />}\r\n {result && (\r\n <div className='l-result-container'>\r\n <CategoryBar\r\n tags={result.FacetGroups[0].Facets}\r\n selectedCategory={category}\r\n onChangeSelectedCategory={onChangeCategory}\r\n query={query}\r\n result={result}\r\n onSubmit={onSearchSubmit}\r\n />\r\n <CategoryResultsContainer\r\n result={result}\r\n isLoading={isFetching}\r\n page={page}\r\n onShowMoreCategoriesClick={onShowMoreCategoriesClick}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n );\r\n};\r\n\r\nexport default SearchPage;\r\n","import SearchPage from './SearchPage';\r\nexport * from './SearchPage.types';\r\nexport default SearchPage;\r\n","import { parseStringObject } from '@helpers/objectHelpers';\r\n\r\nexport const useSearchURL = () => {\r\n const getParamsFromUrl = () => {\r\n const url = new URL(window.location.href);\r\n return parseStringObject(Object.fromEntries(url.searchParams));\r\n };\r\n\r\n const updateUrl = (keyword, category = 'All', orderBy = 'relevance') => {\r\n const url = new URL(window.location.href);\r\n const searchParams = new URLSearchParams({\r\n query: keyword || '',\r\n category,\r\n orderBy,\r\n });\r\n\r\n const newUrlString = url.origin + url.pathname + '?' + searchParams.toString();\r\n const newUrl = new URL(newUrlString);\r\n\r\n if (url.href !== newUrl.href) {\r\n window.history.pushState({}, '', newUrl);\r\n }\r\n };\r\n\r\n const params = getParamsFromUrl();\r\n\r\n const defaultQuery = params.query;\r\n const defaultCategory = params.category || 'All';\r\n\r\n return { updateUrl, defaultQuery, defaultCategory };\r\n};\r\n","import dataLayer from '@helpers/dataLayer';\r\nimport { SearchResult } from './SearchPage.types';\r\n\r\nexport const doDataLayerPush = (queryTerm: string, result: SearchResult) => {\r\n const values = {\r\n search_term: queryTerm,\r\n search_results: result && result.TotalResult,\r\n };\r\n\r\n if (result) {\r\n result.FacetGroups[0].Facets.forEach((item) => {\r\n values['search_results_' + item.Id.toLowerCase()] = item.Count;\r\n });\r\n }\r\n\r\n dataLayer.push('view_search_results', values);\r\n};\r\n"],"names":["LoadingSpinner","className","src","alt","DidYouMean","misspelling","label","onItemClick","map","item","index","key","onClick","CategoryBar","tags","selectedCategory","onChangeSelectedCategory","query","result","onSubmit","useEffect","InPageNavSlider","FacetGroups","Facets","length","i18n","SearchResultsFor","TotalResult","ItemsFound","MissSpelling","SpellCheck","Id","Title","SearchListItem","imageThumbnail","Category","href","Url","target","rel","CardType","ImageUrl","AltText","dangerouslySetInnerHTML","__html","searchItem","Language","lang","split","toUpperCase","getTitleText","Excerpt","ImageListItem","title","Dimensions","Size","NewsListItem","PublishDate","DocumentListItem","download","fileName","dataLayer","file_name","file_extension","MimeType","file_context","undefined","file_category","DocumentCategory","link_text","link_url","CategoryResultsContainer","memo","isLoading","page","onShowMoreCategoriesClick","list","setList","useState","CurrentPage","SearchHits","prevList","useSearchResults","isShowMoreDisabled","total","showMoreResultText","ShowMoreResults","doDataLayerPush","itemPosition","search_term","window","localStorage","getItem","search_result_category","search_result_index","id","listType","ShowMore","category","defaultCategory","defaultQuery","updateUrl","params","url","URL","location","Object","fromEntries","searchParams","getParamsFromUrl","keyword","orderBy","URLSearchParams","newUrlString","origin","pathname","toString","newUrl","history","pushState","useSearchURL","setCategory","setQuery","setPage","data","megaMenuNavigation","isFetching","fulfilledTimeStamp","refetchOnMountOrArgChange","queryTerm","values","search_results","forEach","toLowerCase","Count","setItem","onSearchSubmit","SearchBar","searchLastUpdated","placeholder","Search","Placeholder","searchInformation","SearchInformation"],"sourceRoot":""}