{"version":3,"file":"index-6bd393b7.js","sources":["../../../../src/scripts/coveo/modules/search-results-listing/generic-result-card.tsx","../../../../src/scripts/coveo/modules/search-results-listing/templates.tsx","../../../../src/scripts/coveo/modules/search-results-listing/index.tsx"],"sourcesContent":["import React from 'react';\nimport { SearchListingContext } from './context';\nimport { createDataLayerString } from '../../../helpers/helpers';\nimport { ResultLink } from '../../components/interactive-result';\nimport { Result } from '@coveo/headless';\n\ntype GenericResultCardProps = {\n  resultType: string;\n  url?: string;\n  title: string;\n  productType?: string;\n  teaser: string;\n  image?: string;\n  imageAlt?: string;\n  isVideo?: boolean;\n  watchVideoLabel?: string;\n  videoModalId?: string;\n  videoId?: string;\n  isSearchListing?: boolean;\n  result: Result;\n};\n\nfunction GenericResultCard({\n  resultType,\n  url,\n  title,\n  productType,\n  teaser,\n  image,\n  imageAlt,\n  isVideo,\n  watchVideoLabel,\n  videoModalId,\n  videoId,\n  isSearchListing,\n  result\n}: GenericResultCardProps) {\n  const _productType = (): string => {\n    if (productType) {\n      if (productType.length > 1) {\n        return productType[productType.length - 1].split('_')[1];\n      } else {\n        return productType;\n      }\n    } else return '';\n  };\n\n  return (\n    <SearchListingContext.Consumer>\n      {value => (\n        <article\n          className={`generic-result-card ${\n            isVideo ? 'generic-result-card--video' : ''\n          }`}\n          data-trigger-modal={isVideo ? videoModalId : undefined}\n          data-video-id={isVideo ? videoId : undefined}\n          data-image-src={isVideo ? image : undefined}\n          data-image-description={isVideo ? imageAlt : undefined}\n          data-video-title={isVideo ? title : undefined}\n          data-video-summary={isVideo ? teaser : undefined}\n        >\n          <div className=\"generic-result-card__content\">\n            <p className=\"generic-result-card__result-type\">{resultType}</p>\n            <h2 className=\"generic-result-card__title\">\n              {url ? (\n                <ResultLink\n                  className=\"generic-result-card__link\"\n                  link={url}\n                  dataLayer={\n                    isSearchListing\n                      ? createDataLayerString([\n                          {\n                            event: 'result_click',\n                            event_category: 'result click',\n                            event_action: 'internal search',\n                            event_attributes: {\n                              results_type: resultType,\n                              search_term: value.searchTerm,\n                              search_type: value.searchTerm\n                                ? value.searchType\n                                : 'external'\n                            }\n                          }\n                        ])\n                      : ''\n                  }\n                  result={result}\n                >\n                  {title}\n                </ResultLink>\n              ) : (\n                title\n              )}\n            </h2>\n            {_productType() && (\n              <p className=\"generic-result-card__product-type\">\n                {_productType()}\n              </p>\n            )}\n            <p className=\"generic-result-card__teaser\">{teaser}</p>\n          </div>\n          {image && (\n            <picture className=\"generic-result-card__picture\">\n              <img src={image} alt={imageAlt} />\n              {isVideo && (\n                <button\n                  className=\"generic-result-card__video-button\"\n                  data-trigger-modal={videoModalId}\n                  data-video-id={videoId}\n                  data-image-src={image}\n                  data-image-description={imageAlt}\n                  data-video-title={title}\n                  data-video-summary={teaser}\n                >\n                  <span className=\"sr-only\">{watchVideoLabel}</span>\n                </button>\n              )}\n            </picture>\n          )}\n        </article>\n      )}\n    </SearchListingContext.Consumer>\n  );\n}\n\nexport default GenericResultCard;\n","import React from 'react';\n\nimport {\n  buildResultTemplatesManager,\n  ResultTemplatesHelpers,\n  ResultTemplate,\n  Result,\n  SearchEngine\n} from '@coveo/headless';\n\nimport { headlessEngine } from '../../engine';\nimport {\n  fieldsToInclude,\n  fieldsObject,\n  templateTypes,\n  certificationImagesResidential,\n  certificationImagesCommercial,\n  labelsObj\n} from '../../controllers/controller';\n\nimport GenericResultCard from './generic-result-card';\nimport SmallContractorCard from './small-contractor-card';\nimport DocumentCard from '../../../react-components/document-listing/document-card';\nimport { contractorImages } from '../../controllers/controller';\n\ntype ProjectListingResultProps = Result & {\n  UniqueId: string;\n  Uri: string;\n  solutionType: string;\n  title: string;\n  image: string;\n  imageAlt: string;\n  copy: string;\n  index: number;\n};\n\nexport const resultTemplatesManager = buildResultTemplatesManager(\n  headlessEngine as SearchEngine\n);\n\nconst productResultTemplate: ResultTemplate = {\n  conditions: [\n    ResultTemplatesHelpers.fieldMustMatch(fieldsObject.resultType, [\n      templateTypes.product\n    ])\n  ],\n  fields: ['UniqueId', 'Uri', ...fieldsToInclude],\n  content: (result: ProjectListingResultProps) => (\n    <li key={result.UniqueId}>\n      <GenericResultCard\n        resultType={result.raw[fieldsObject.resultType] as string}\n        url={result.Uri}\n        title={result.raw[fieldsObject.productName] as string}\n        productType={result.raw[fieldsObject.productCategory] as string}\n        teaser={\n          (result.raw[fieldsObject.productTeaser] as string) || result.excerpt\n        }\n        image={result.raw[fieldsObject.productImage] as string}\n        imageAlt={result.raw[fieldsObject.productImageAlt] as string}\n        isSearchListing={true}\n        result={result}\n      />\n    </li>\n  )\n};\n\nconst productCategoryResultTemplate: ResultTemplate = {\n  conditions: [\n    ResultTemplatesHelpers.fieldMustMatch(fieldsObject.resultType, [\n      templateTypes.productCategory\n    ])\n  ],\n  fields: ['UniqueId', 'Uri', ...fieldsToInclude],\n  content: (result: ProjectListingResultProps) => (\n    <li key={result.UniqueId}>\n      <GenericResultCard\n        resultType={result.raw[fieldsObject.resultType] as string}\n        url={result.Uri}\n        title={result.raw[fieldsObject.productCategoryTitle] as string}\n        teaser={\n          (result.raw[fieldsObject.productCategoryTeaser] as string) ||\n          result.excerpt\n        }\n        image={result.raw[fieldsObject.productCategoryImage] as string}\n        imageAlt={result.raw[fieldsObject.productCategoryImageAlt] as string}\n        isSearchListing={true}\n        result={result}\n      />\n    </li>\n  )\n};\n\nconst documentResultTemplate: ResultTemplate = {\n  conditions: [\n    ResultTemplatesHelpers.fieldMustMatch(fieldsObject.resultType, [\n      templateTypes.document\n    ])\n  ],\n  fields: ['UniqueId', 'Uri', ...fieldsToInclude],\n  content: (result: ProjectListingResultProps) => {\n    const documentFiles: { extension: string; url: string }[] = [];\n    const arrayDocuments = [\n      'documentPDFUrl',\n      'documentDWGUrl',\n      'documentRVTUrl',\n      'documentDOCUrl'\n    ];\n\n    arrayDocuments.forEach(docType => {\n      if (result.raw[fieldsObject[docType]]) {\n        documentFiles.push({\n          extension: docType.replace('document', '').replace('Url', ''),\n          url: result.raw[fieldsObject[docType]] as string\n        });\n      }\n    });\n\n    return (\n      <li key={result.UniqueId}>\n        <DocumentCard\n          resultType={result.raw[fieldsObject.resultType] as string}\n          title={result.raw[fieldsObject.title] as string}\n          type={\n            (result.raw[fieldsObject.documentType] as string) ||\n            'Document Type B'\n          }\n          image={result.raw[fieldsObject.documentImage] as string}\n          imageAlt={result.raw[fieldsObject.documentImageAlt] as string}\n          copyText={labelsObj.documentsCopyText}\n          copiedText={labelsObj.documentsCopiedText}\n          shareText={labelsObj.documentsShareText}\n          downloadText={labelsObj.documentsDownloadText}\n          addToCartText={labelsObj.documentsAddToCartText}\n          documents={documentFiles}\n          result={result}\n        />\n      </li>\n    );\n  }\n};\n\nconst contractorResultTemplate: ResultTemplate = {\n  conditions: [\n    ResultTemplatesHelpers.fieldMustMatch(fieldsObject.resultType, [\n      templateTypes.contractorResidential,\n      templateTypes.contractorCommercial\n    ])\n  ],\n  fields: ['UniqueId', 'Uri', ...fieldsToInclude],\n  content: (result: ProjectListingResultProps) => (\n    <li key={result.UniqueId}>\n      <SmallContractorCard\n        index={result.index}\n        id={result.raw[fieldsObject.contractorId] as string}\n        type={result.raw[fieldsObject.contractorType] as string}\n        resultType={result.raw[fieldsObject.resultType] as string}\n        modalId={labelsObj.certificationsModalId}\n        name={\n          (result.raw[fieldsObject.contractorDBA] as string) ||\n          (result.raw[fieldsObject.contractorName] as string) ||\n          'Contractor Result Name'\n        }\n        url={result.Uri}\n        city={(result.raw[fieldsObject.contractorCity] as string) || 'City'}\n        stateAbbreviation={\n          (result.raw[fieldsObject.contractorStateAbreviation] as string) ||\n          'ST'\n        }\n        certificationsLabel={labelsObj.certificationsCardLabel}\n        certifications={\n          (result.raw[fieldsObject.contractorCertifications] as string[]) || []\n        }\n        certificationImages={\n          result.raw[fieldsObject.contractorType] === 'Commercial'\n            ? certificationImagesCommercial\n            : certificationImagesResidential\n        }\n        moreCertificationsLabel={labelsObj.moreCertificationsLabel}\n        viewAllCertificationsLabel={labelsObj.viewAllCertificationsLabel}\n        image={result.raw[fieldsObject.contractorImage] as string}\n        imageAlt={result.raw[fieldsObject.contractorImageAlt] as string}\n        placeholderImage={\n          (result.raw[fieldsObject.resultType] as string)?.includes(\n            'Commercial'\n          )\n            ? contractorImages.commercial\n            : contractorImages.residential\n        }\n        isSearchListing={true}\n        result={result}\n      />\n    </li>\n  )\n};\n\nconst videoResultTemplate: ResultTemplate = {\n  conditions: [\n    ResultTemplatesHelpers.fieldMustMatch(fieldsObject.resultType, [\n      templateTypes.video\n    ])\n  ],\n  fields: ['UniqueId', 'Uri', ...fieldsToInclude],\n  content: (result: ProjectListingResultProps) => (\n    <li key={result.UniqueId}>\n      <GenericResultCard\n        resultType={result.raw[fieldsObject.resultType] as string}\n        title={result.raw[fieldsObject.title] as string}\n        productType={result.raw[fieldsObject.productType] as string}\n        teaser={result.excerpt}\n        image={result.raw[fieldsObject.videoThumbnail] as string}\n        imageAlt={result.raw[fieldsObject.videoThumbnailAlt] as string}\n        isVideo={true}\n        watchVideoLabel={labelsObj.watchVideoLabel}\n        videoModalId={labelsObj.videoModalId}\n        videoId={(result.raw[fieldsObject.videoId] as string) || 'mWRsgZuwf_8'}\n        isSearchListing={true}\n        result={result}\n      />\n    </li>\n  )\n};\n\nconst blogPostResultTemplate: ResultTemplate = {\n  conditions: [\n    ResultTemplatesHelpers.fieldMustMatch(fieldsObject.resultType, [\n      templateTypes.blog\n    ])\n  ],\n  fields: ['UniqueId', 'Uri', ...fieldsToInclude],\n  content: (result: ProjectListingResultProps) => (\n    <li key={result.UniqueId}>\n      <GenericResultCard\n        resultType={result.raw[fieldsObject.resultType] as string}\n        url={result.Uri}\n        title={result.raw[fieldsObject.blogTitle] as string}\n        teaser={\n          (result.raw[fieldsObject.blogTeaser] as string) || result.excerpt\n        }\n        image={result.raw[fieldsObject.blogImage] as string}\n        imageAlt={result.raw[fieldsObject.blogImageAlt] as string}\n        isSearchListing={true}\n        result={result}\n      />\n    </li>\n  )\n};\n\nconst projectResultTemplate: ResultTemplate = {\n  conditions: [\n    ResultTemplatesHelpers.fieldMustMatch(fieldsObject.resultType, [\n      templateTypes.project\n    ])\n  ],\n  fields: ['UniqueId', 'Uri', ...fieldsToInclude],\n  content: (result: ProjectListingResultProps) => (\n    <li key={result.UniqueId}>\n      <GenericResultCard\n        resultType={result.raw[fieldsObject.resultType] as string}\n        url={result.Uri}\n        title={result.raw[fieldsObject.projectTitle] as string}\n        teaser={\n          (result.raw[fieldsObject.projectTeaser] as string) || result.excerpt\n        }\n        image={result.raw[fieldsObject.projectImage] as string}\n        imageAlt={result.raw[fieldsObject.projectImageAlt] as string}\n        isSearchListing={true}\n        result={result}\n      />\n    </li>\n  )\n};\n\nconst miscellaneousResultTemplate: ResultTemplate = {\n  conditions: [],\n  fields: ['UniqueId', 'Uri', ...fieldsToInclude],\n  content: (result: ProjectListingResultProps) => (\n    <li key={result.UniqueId}>\n      <GenericResultCard\n        resultType={result.raw[fieldsObject.resultType] as string}\n        url={result.Uri}\n        title={result.raw[fieldsObject.title] as string}\n        teaser={result.excerpt}\n        image={result.raw[fieldsObject.teaserImage] as string}\n        imageAlt={result.raw[fieldsObject.teaserImageAlt] as string}\n        isSearchListing={true}\n        result={result}\n      />\n    </li>\n  )\n};\n\nresultTemplatesManager.registerTemplates(\n  productResultTemplate,\n  productCategoryResultTemplate,\n  documentResultTemplate,\n  contractorResultTemplate,\n  videoResultTemplate,\n  blogPostResultTemplate,\n  projectResultTemplate,\n  miscellaneousResultTemplate\n);\n","import React, { useRef, useEffect, useState } from 'react';\n\nimport { SearchListingContext } from './context';\nimport {\n  SearchBoxOptions,\n  buildFacet,\n  buildSearchBox,\n  buildDidYouMean,\n  SearchEngine,\n  ResultList as ResultListType,\n  loadQueryActions,\n  loadAdvancedSearchQueryActions,\n  loadSearchAnalyticsActions,\n  loadSearchActions\n} from '@coveo/headless';\nimport { headlessEngine } from '../../engine';\nimport {\n  resultList,\n  facets,\n  facetOptionsNumber,\n  labelsObj\n} from '../../controllers/controller';\n\nimport Facet from '../../components/facet';\nimport MobileFilters from '../../components/mobile-filters';\nimport ResultList from '../../components/result-list';\nimport { resultTemplatesManager } from './templates';\nimport Pagination from '../../components/pagination';\nimport FacetBreadcrumbs from '../../components/facet-breadcrumbs';\nimport QuerySummary from '../../components/query-summary';\nimport { SearchBox } from '../../components/searchbox';\nimport DidYouMean, { SITE_TYPES } from '../../components/did-you-mean';\nimport { bindUrlManager } from '../../components/url-manager';\nimport { SEARCH_KEYS } from '../../controllers/search-keys';\nimport { secureStorage } from '../../../helpers/global-storage';\nimport { ExtendedWindowType } from '../../../helpers/global-types';\n\ntype SearchResultsListingProps = {\n  defaultQuery: string;\n};\n\nconst facetsObj = facets.map(facet => ({\n  title: facet.title,\n  certificationsLabel: facet.certificationsLabel,\n  controller: buildFacet(headlessEngine as SearchEngine, {\n    options: {\n      field: facet.field,\n      filterFacetCount: true,\n      numberOfValues: facetOptionsNumber\n    }\n  }),\n  customOrder: facet.customOrder\n}));\n\nconst options: SearchBoxOptions = {\n  clearFilters: true,\n  numberOfSuggestions: 4,\n  highlightOptions: {\n    exactMatchDelimiters: {\n      open: '<strong>',\n      close: '</strong>'\n    }\n  }\n};\nconst searchBoxController = buildSearchBox(headlessEngine as SearchEngine, {\n  options\n});\n\nconst didYouMeanController = buildDidYouMean(headlessEngine as SearchEngine);\n\nfunction SearchResultsListing({ defaultQuery }: SearchResultsListingProps) {\n  const containerRef = useRef<HTMLDivElement | null>(null);\n  const [searchType, setSearchType] = useState('external');\n  const [searchBoxValue, setSearchBoxValue] = useState('');\n  const [resultsState, setResultsState] = useState(\n    (resultList as ResultListType).state\n  );\n  const renderFilters = (isMobile?: boolean) => {\n    return (\n      <div className=\"search-results-listing__facets\">\n        {facetsObj.map((facet, index) => (\n          <Facet\n            key={index}\n            controller={facet.controller}\n            title={facet.title}\n            certificationsLabel={facet.certificationsLabel}\n            customOrder={facet.customOrder}\n            defaultExpanded={isMobile ? false : true}\n            showMoreLabel={labelsObj.showMoreLabel}\n            showLessLabel={labelsObj.showLessLabel}\n          />\n        ))}\n      </div>\n    );\n  };\n\n  useEffect(() => {\n    if (headlessEngine) {\n      bindUrlManager(headlessEngine);\n      const { updateQuery } = loadQueryActions(headlessEngine);\n      const data = secureStorage.get(SEARCH_KEYS.globalSearch);\n\n      if (data) {\n        localStorage.removeItem(SEARCH_KEYS.globalSearch);\n        const { value, analytics } = JSON.parse(data);\n        headlessEngine.dispatch(updateQuery({ q: value }));\n        headlessEngine.executeFirstSearchAfterStandaloneSearchBoxRedirect(\n          analytics\n        );\n      } else {\n        headlessEngine.executeFirstSearch();\n      }\n\n      (resultList as ResultListType).subscribe(() => {\n        setResultsState((resultList as ResultListType).state);\n      });\n\n      if (defaultQuery) {\n        const advancedQuerySearchActionCreator =\n          loadAdvancedSearchQueryActions(headlessEngine);\n\n        headlessEngine?.dispatch(\n          advancedQuerySearchActionCreator.registerAdvancedSearchQueries({\n            aq: defaultQuery\n          })\n        );\n\n        const { logInterfaceLoad } = loadSearchAnalyticsActions(headlessEngine);\n        const { executeSearch } = loadSearchActions(headlessEngine);\n        headlessEngine.dispatch(executeSearch(logInterfaceLoad()));\n      }\n    }\n  }, []);\n\n  useEffect(() => {\n    if (resultsState.firstSearchExecuted) {\n      (window as ExtendedWindowType).dataLayer.push({\n        event_attributes: {\n          results_count: resultsState.results.length,\n          search_term: searchBoxController.state.value,\n          did_you_mean_keyword:\n            didYouMeanController.state.queryCorrection?.correctedQuery,\n          search_type: searchType\n        },\n        event: 'results_viewed',\n        event_category: 'results page viewed',\n        event_action: '',\n        event_label: resultsState.results.length > 0 ? 'success' : 'failure'\n      });\n    }\n  }, [resultsState]);\n\n  const handleSearchSubmit = (value: string, type?: string) => {\n    setSearchBoxValue(value);\n    if (type) setSearchType(type);\n  };\n\n  return (\n    <SearchListingContext.Provider\n      value={{\n        searchTerm: searchBoxValue,\n        searchType: searchType\n      }}\n    >\n      <div className=\"search-results-listing__wrapper\">\n        <DidYouMean\n          hideOnNoResults={true}\n          resultController={resultList as ResultListType}\n          searchBoxController={searchBoxController}\n          searchType={searchType}\n          siteType={SITE_TYPES.searchListing}\n        />\n        <div className=\"row search-results-listing__row\">\n          <aside className=\"search-results-listing__aside\">\n            <SearchBox\n              controller={searchBoxController}\n              searchLabel={labelsObj.searchBoxSearchLabel}\n              searchPlaceholder={labelsObj.searchBoxPlaceholder}\n              submitLabel={labelsObj.searchBoxSubmitLabel}\n              clearLabel={labelsObj.searchBoxClearLabel}\n              onSearchSubmit={handleSearchSubmit}\n            />\n            <div\n              className=\"search-results-listing__mobile-filters\"\n              ref={containerRef}\n            >\n              <MobileFilters\n                label={labelsObj.mobileFilterBy}\n                containerRef={containerRef}\n                refinementLayer={true}\n              >\n                {renderFilters(true)}\n              </MobileFilters>\n            </div>\n            <div className=\"search-results-listing__desktop-filters\">\n              {renderFilters()}\n            </div>\n          </aside>\n          <div className=\"search-results-listing__results-wrapper\">\n            <QuerySummary />\n            <FacetBreadcrumbs\n              clearLabel={labelsObj.clearAll}\n              extraClasses=\"search-results-listing__breadcrumbs\"\n            />\n            <ResultList\n              keyword={searchBoxController.state.value}\n              controller={resultList as ResultListType}\n              className=\"search-results-listing__results\"\n              resultTemplatesManager={resultTemplatesManager}\n              preventFirstCall={true}\n            />\n            <Pagination />\n          </div>\n        </div>\n      </div>\n    </SearchListingContext.Provider>\n  );\n}\n\nexport default SearchResultsListing;\n"],"names":["GenericResultCard","resultType","url","title","productType","teaser","image","imageAlt","isVideo","watchVideoLabel","videoModalId","videoId","isSearchListing","result","_productType","React","SearchListingContext","value","ResultLink","createDataLayerString","resultTemplatesManager","buildResultTemplatesManager","headlessEngine","productResultTemplate","ResultTemplatesHelpers","fieldsObject","templateTypes","fieldsToInclude","productCategoryResultTemplate","documentResultTemplate","documentFiles","docType","DocumentCard","labelsObj","contractorResultTemplate","SmallContractorCard","certificationImagesCommercial","certificationImagesResidential","_a","contractorImages","videoResultTemplate","blogPostResultTemplate","projectResultTemplate","miscellaneousResultTemplate","facetsObj","facets","facet","buildFacet","facetOptionsNumber","options","searchBoxController","buildSearchBox","didYouMeanController","buildDidYouMean","SearchResultsListing","defaultQuery","containerRef","useRef","searchType","setSearchType","useState","searchBoxValue","setSearchBoxValue","resultsState","setResultsState","resultList","renderFilters","isMobile","index","Facet","useEffect","bindUrlManager","updateQuery","loadQueryActions","data","secureStorage","SEARCH_KEYS","analytics","advancedQuerySearchActionCreator","loadAdvancedSearchQueryActions","logInterfaceLoad","loadSearchAnalyticsActions","executeSearch","loadSearchActions","handleSearchSubmit","type","DidYouMean","SITE_TYPES","SearchBox","MobileFilters","QuerySummary","FacetBreadcrumbs","ResultList","Pagination"],"mappings":"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"}