{"version":3,"file":"index-BlW7rZWE.js","sources":["../../../app/assets/images/search/no-results.svg","../../../app/javascript/src/explore/elements/NoFilteredResults/elements/ClearFiltersButton/index.tsx","../../../app/javascript/src/explore/elements/NoFilteredResults/elements/Message/index.tsx","../../../app/javascript/src/explore/elements/NoFilteredResults/index.tsx","../../../app/javascript/src/explore/elements/RankingFactorOverlay/index.tsx","../../../app/javascript/src/explore/compositions/FilteredProductSearch/index.tsx"],"sourcesContent":["export default \"__VITE_ASSET__iWQFAFXP__\"","import React from 'react';\n\nimport styles from './index.module.sass';\n\ninterface ClearFiltersButtonProps {\n onClick: () => void;\n}\n\nexport const ClearFiltersButton = ({ onClick }: ClearFiltersButtonProps ) => (\n \n Clear Filters\n \n);\n","import React from 'react';\n\nexport const Message = () => (\n <>\n

\n \n Aww, Fudge.\n No results!\n \n

\n\n

\n Perhaps there’s something else that can satisfy your craving? Just change your filters.\n

\n \n);\n","import React from 'react';\n\nimport noResults from 'images/search/no-results.svg';\n\nimport { ClearFiltersButton } from './elements/ClearFiltersButton';\nimport { Message } from './elements/Message';\n\nimport styles from './index.module.sass';\n\ninterface NoFilteredResultsProps {\n onClick: () => void;\n}\n\nexport const NoFilteredResults = ({ onClick }: NoFilteredResultsProps ) => (\n
\n
\n
\n \"No\n
\n\n
\n \n\n \n
\n
\n
\n);\n","import React, { FC, useEffect, useRef, useState } from 'react';\nimport classNames from 'classnames';\nimport { startCase } from 'lodash-es';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faArrowDown, faArrowUp } from '@fortawesome/pro-regular-svg-icons';\n\nimport s from './index.module.sass';\n\ninterface IProps {\n rankingFactor: { [key: string]: number | null };\n displayRankingFactorOverlay: boolean;\n onToggleRankingFactorOverlay: () => void;\n}\n\nconst RankingFactorOverlay: FC = ({\n rankingFactor,\n displayRankingFactorOverlay,\n onToggleRankingFactorOverlay,\n}) => {\n const ref = useRef( null );\n const { nps, rankDifference, ...rest } = rankingFactor;\n const margin = rest?.margin;\n const [ overlayHeight, setOverlayHeight ] = useState( 0 );\n\n useEffect(() => {\n const resizeOverlay = () => {\n const rect = ref.current?.getBoundingClientRect();\n\n setOverlayHeight((( rect?.width || 0 ) * 5 ) / 4 );\n };\n\n resizeOverlay();\n window.addEventListener( 'resize', () => resizeOverlay());\n\n return () => {\n window.removeEventListener( 'resize', () => resizeOverlay());\n };\n }, []);\n\n useEffect(() => {\n if ( displayRankingFactorOverlay ) {\n const rect = ref.current?.getBoundingClientRect();\n setOverlayHeight((( rect?.width || 0 ) * 5 ) / 4 );\n } else {\n setOverlayHeight( 72 );\n }\n }, [ displayRankingFactorOverlay ]);\n\n const RankingFactorBadge: FC<{ label: string; value: string }> = ({ label, value }) => (\n \n {label}: {value}\n \n );\n\n return (\n \n
\n
\n {rankDifference === 0 || !rankDifference ? (\n \n --\n \n ) : (\n 0 ? 'text-success' : 'text-danger',\n s.overlayTrigger\n )}\n onClick={onToggleRankingFactorOverlay}\n >\n 0 ? faArrowUp : faArrowDown}\n className=\"pr-2\"\n />\n {Math.abs( rankDifference )}\n \n )}\n
\n
\n {nps && }\n {margin && }\n
\n
\n {displayRankingFactorOverlay &&\n ( Object.keys( rest ).length > 0 ? (\n Object.entries( rest ).map(([ key, value ]) => (\n \n
{startCase( key )}
\n\n 0,\n 'text-muted': value === null || value === 0,\n })}\n >\n {/* FIXME: for some reason ranking factors are coming back as strings from BE */}\n {value === null ? '--' : parseFloat( `${value}` ).toFixed( 2 )}\n \n \n ))\n ) : (\n
RankingFactor data not available
\n ))}\n \n );\n};\n\nexport default RankingFactorOverlay;\n","/*\n * TODO: this is a temporary composition until we do more refactoring on\n * FilteredSearch.\n */\nimport React, { ReactNode, useState } from 'react';\nimport camelcaseKeys from 'camelcase-keys';\nimport { fromPairs, uniq } from 'lodash-es';\n\nimport { Deserializer } from 'src/explore/services/api';\nimport {\n FilteredSearch,\n IAPIFilters,\n ISearchParams,\n} from 'src/explore/compositions/FilteredSearch';\nimport { NoFilteredResults } from 'src/explore/elements/NoFilteredResults';\nimport ProductGrid from 'src/explore/compositions/ProductGrid';\nimport ProductSkeletons from 'src/explore/elements/ProductSkeletons';\nimport RankingFactorOverlay from 'src/explore/elements/RankingFactorOverlay';\nimport { IProduct, IPromotion, ITrackingParams } from 'src/explore/types/shoppe';\nimport { ISearchFilter } from 'src/explore/compositions/FilteredSearch/compositions/SearchFilter/types'; // FIXME: import\nimport type { ISource } from 'src/explore/compositions/FilteredSearch/compositions/SearchFilter'; // FIXME: import\nimport withLazyLoadSkeleton from 'src/explore/hocs/withLazyLoadSkeleton';\n\nimport { SearchTracking } from 'src/explore/services/SearchTracking';\n\nconst LazyGrid = withLazyLoadSkeleton( ProductGrid, ProductSkeletons );\n\ninterface Props {\n adjustQueryParams?: ( queryParams: ISearchParams ) => ISearchParams;\n apiVersion?: 'v2' | 'v3';\n availableFilters?: ISearchFilter[];\n availableSorting?: Array;\n cacheable?: boolean;\n children?: ReactNode;\n clickRef?: string | null;\n conditions?: IAPIFilters;\n defaultSortOrder?: string;\n experimentName?: string;\n hideLove?: boolean;\n hideMerchant?: boolean;\n parseCollectionData?: ( collection: IProduct[], page: number ) => Array;\n size?: 'small';\n source?: ISource;\n title?: string;\n videoMaxPerPage?: number;\n videoPositions?: Array;\n withTvCards?: boolean;\n onRenderHeader?: ({ content, filters }: { content: IProduct[]; filters: IAPIFilters }) => void;\n}\n\nconst FilteredProductSearch = ({\n adjustQueryParams,\n apiVersion = 'v2',\n availableFilters,\n availableSorting,\n cacheable,\n children,\n clickRef,\n conditions,\n defaultSortOrder,\n experimentName,\n hideLove,\n hideMerchant,\n parseCollectionData,\n size,\n source,\n title,\n onRenderHeader,\n}: Props ) => {\n const [ displayRankingFactorOverlay, setDisplayRankingFactorOverlay ] = useState( false );\n const [ countShown, setCountShown ] = useState<{\n products: number;\n }>({ products: 0 });\n\n const handleSyncTrackingDataToPage = ( data: ITrackingParams, page: IProduct[]) =>\n SearchTracking.syncProductAndVideoDataToPage( data, page );\n\n const handleQueryParamsAdjustment = ( queryParams: ISearchParams ) => {\n const adjustment = queryParams;\n const currentCountShown = queryParams.page === 1 ? 0 : countShown.products;\n\n adjustment.product_offset = currentCountShown;\n adjustment.video_offset = 0;\n adjustment.max_num_videos = 0;\n\n if ( adjustQueryParams ) {\n return adjustQueryParams( adjustment );\n }\n\n return adjustment;\n };\n\n const handleParseCollectionData: (\n collection: IProduct[],\n currentPage: number\n ) => Array = ( collection, currentPage ) => {\n if ( currentPage === 1 ) {\n setCountShown({\n products: collection.length,\n });\n } else {\n setCountShown(( currentCount ) => ({\n products: currentCount.products + collection.length,\n }));\n }\n\n if ( parseCollectionData ) {\n return parseCollectionData( collection, currentPage );\n }\n\n return collection;\n };\n\n return (\n \n adjustQueryParams={handleQueryParamsAdjustment}\n apiPath=\"search\"\n apiPathOverride={apiVersion === 'v3' ? '/api/v3/' : ''}\n apiResponseParser={Deserializer.deserialize}\n availableFilters={availableFilters}\n availableSorting={availableSorting}\n cacheable={cacheable}\n conditions={conditions}\n defaultSortOrder={defaultSortOrder}\n experimentName={experimentName}\n loadMore=\"Show More Products\"\n pageSize={40} // 20, 14, 10 rows on small, large, XL size respectively\n parseCollectionData={handleParseCollectionData}\n source={source}\n syncTrackingDataToPage={handleSyncTrackingDataToPage}\n syncUrl\n title={title}\n onRenderContent={({ data, filterCount, loading, meta, onResetFilters }) => {\n const rankingFactorTemplate = meta?.ranking_factors\n ? camelcaseKeys(\n fromPairs(\n uniq(\n Object.values( meta.ranking_factors )\n .map(( x ) => Object.keys( x ))\n .flat( 2 )\n .sort(( a, b ) => a.localeCompare( b ))\n ).map(( x ) => [ x, null ])\n )\n )\n : {};\n\n return (\n {\n if ( !meta.ranking_factors ) return null;\n const rankingFactor = {\n ...rankingFactorTemplate,\n ...camelcaseKeys( meta.ranking_factors[product.id] || {}, { deep: true }),\n nps: product.merchant.nps,\n };\n\n return (\n setDisplayRankingFactorOverlay(( x ) => !x )}\n />\n );\n }}\n >\n {filterCount > 0 ? : null}\n \n );\n }}\n onRenderHeader={onRenderHeader}\n >\n {children}\n \n );\n};\n\nexport type { IAPIFilters, ISearchFilter };\nexport { FilteredProductSearch };\n"],"names":["noResults","ClearFiltersButton","onClick","React","styles","Message","NoFilteredResults","RankingFactorOverlay","rankingFactor","displayRankingFactorOverlay","onToggleRankingFactorOverlay","ref","useRef","nps","rankDifference","rest","margin","overlayHeight","setOverlayHeight","useState","useEffect","resizeOverlay","rect","_a","RankingFactorBadge","label","value","classNames","s","FontAwesomeIcon","faArrowUp","faArrowDown","key","startCase","LazyGrid","withLazyLoadSkeleton","ProductGrid","ProductSkeletons","FilteredProductSearch","adjustQueryParams","apiVersion","availableFilters","availableSorting","cacheable","children","clickRef","conditions","defaultSortOrder","experimentName","hideLove","hideMerchant","parseCollectionData","size","source","title","onRenderHeader","setDisplayRankingFactorOverlay","countShown","setCountShown","handleSyncTrackingDataToPage","data","page","SearchTracking","handleQueryParamsAdjustment","queryParams","adjustment","currentCountShown","handleParseCollectionData","collection","currentPage","currentCount","FilteredSearch","Deserializer","filterCount","loading","meta","onResetFilters","rankingFactorTemplate","camelcaseKeys","fromPairs","uniq","x","a","b","product"],"mappings":"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"}