{"version":3,"file":"SearchTags-Q0z1zQnZ.js","sources":["../../src/scripts/components/react-components/Pagination.tsx","../../src/scripts/modules/react-modules/Listings/types.ts","../../src/scripts/modules/react-modules/Listings/Facets/FacetDate.tsx","../../src/scripts/modules/react-modules/Listings/utils.ts","../../src/scripts/modules/react-modules/Listings/ECommerceCoursesAndProductsListing/useGetEcommerceCoursesAndProductsListing.ts","../../src/scripts/modules/react-modules/Listings/Facets/useFacetChangeHandler.ts","../../src/scripts/modules/react-modules/Listings/Facets/useIsChecked.ts","../../src/scripts/modules/react-modules/Listings/Search.tsx","../../src/scripts/modules/react-modules/Listings/Facets/useClearAllFacets.ts","../../src/scripts/modules/react-modules/Listings/Facets/FacetsMobile.tsx","../../src/scripts/modules/react-modules/Listings/BlogAndNewsListing/BlogAndNewsCard.tsx","../../src/scripts/modules/react-modules/Listings/ECommerceCoursesAndProductsListing/EcommerceCoursesCard.tsx","../../src/scripts/modules/react-modules/Listings/ECommerceCoursesAndProductsListing/EcommerceProductsCard.tsx","../../src/scripts/modules/react-modules/Listings/EventListing/EventListingCard.tsx","../../src/scripts/modules/react-modules/Listings/OfficeAndServicesListing/OfficesAndServicesCard.tsx","../../src/scripts/modules/react-modules/Listings/PeopleDirectoryListing/PeopleDirectoryCard.tsx","../../src/scripts/components/react-components/ScrollIndicator/index.tsx","../../src/scripts/modules/react-modules/Listings/ProgramsAndCertificatesListing/ProgramAndCertificatesCard.tsx","../../src/scripts/modules/react-modules/Listings/ResourcesListing/ResourcesListingCard.tsx","../../src/scripts/modules/react-modules/Listings/SearchListing/SearchCard.tsx","../../src/scripts/modules/react-modules/Listings/Listing.tsx","../../src/scripts/modules/react-modules/Listings/SearchTags.tsx"],"sourcesContent":["import React from 'react';\r\n\r\nexport enum PaginationType {\r\n  ShowMore = 'show-more',\r\n  Pagination = 'pagination'\r\n}\r\nexport type PaginationProps = {\r\n  pagination: {\r\n    skip: number;\r\n    limit: number;\r\n    total: number;\r\n  };\r\n  onPageChange: (page: number | string) => void;\r\n  type: PaginationType;\r\n  showAllPaginationLabel?: string;\r\n};\r\n\r\nconst Pagination = ({\r\n  onPageChange,\r\n  type,\r\n  showAllPaginationLabel,\r\n  pagination\r\n}: PaginationProps) => {\r\n  const currentPage = pagination.skip / pagination.limit + 1;\r\n  const totalPages = Math.ceil(pagination.total / +pagination.limit);\r\n  const showBtns = totalPages > 5;\r\n\r\n  const generatePages = () => {\r\n    let pages = [];\r\n    if (totalPages <= 5) {\r\n      for (let i = 1; i <= totalPages; i++) {\r\n        pages.push(i);\r\n      }\r\n    } else {\r\n      if (currentPage <= 3) {\r\n        pages = [1, 2, 3, '...', totalPages];\r\n      } else if (currentPage > 3 && currentPage < totalPages - 3) {\r\n        pages = [1, '...', currentPage - 1, currentPage, currentPage + 1, '...', totalPages];\r\n      } else {\r\n        pages = [\r\n          1,\r\n          '...',\r\n          totalPages - 4,\r\n          totalPages - 3,\r\n          totalPages - 2,\r\n          totalPages - 1,\r\n          totalPages\r\n        ];\r\n      }\r\n    }\r\n    return pages;\r\n  };\r\n\r\n  const handlePageClick = (page: number | string) => {\r\n    if (page !== '...') {\r\n      onPageChange(page);\r\n    }\r\n  };\r\n\r\n  if (pagination.total <= pagination.limit) {\r\n    return null;\r\n  }\r\n\r\n  if (type === PaginationType.ShowMore) {\r\n    if (currentPage * pagination.limit >= pagination.total) {\r\n      return null;\r\n    }\r\n\r\n    return (\r\n      <div className=\"pagination\">\r\n        <button className=\"btn btn--secondary\" onClick={() => onPageChange(currentPage + 1)}>\r\n          {showAllPaginationLabel}\r\n          <div className=\"btn-decorator\">\r\n            <span className=\"btn-decorator-inner\"></span>\r\n            <span className=\"btn-decorator-outer\"></span>\r\n          </div>\r\n        </button>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <div className=\"pagination\">\r\n      {showBtns && (\r\n        <button\r\n          onClick={() => handlePageClick(currentPage - 1)}\r\n          disabled={currentPage === 1}\r\n          className={`pagination__button--prev ${currentPage === 1 ? 'disabled' : ''}`}\r\n          aria-label=\"Previous page\"\r\n        >\r\n          <svg viewBox=\"0 0 24 24\" className=\"checkbox-check\" role=\"presentation\">\r\n            <use xlinkHref=\"#chevron-left\"></use>\r\n          </svg>\r\n        </button>\r\n      )}\r\n\r\n      <ul className=\"pagination__list\">\r\n        {generatePages().map((page, index) => (\r\n          <li\r\n            key={index}\r\n            className={`pagination__item ${page === currentPage ? 'pagination__item--current' : ''}`}\r\n          >\r\n            <a\r\n              key={index}\r\n              onClick={() => handlePageClick(page)}\r\n              className={`pagination__link primary-copy `}\r\n            >\r\n              {page}\r\n            </a>\r\n          </li>\r\n        ))}\r\n      </ul>\r\n\r\n      {showBtns && (\r\n        <button\r\n          onClick={() => handlePageClick(currentPage + 1)}\r\n          disabled={currentPage === totalPages}\r\n          className={`pagination__button--prev ${currentPage === totalPages ? 'disabled' : ''}`}\r\n          aria-label=\"Next page\"\r\n        >\r\n          <svg viewBox=\"0 0 24 24\" className=\"checkbox-check\" role=\"presentation\">\r\n            <use xlinkHref=\"#chevron-right\"></use>\r\n          </svg>\r\n        </button>\r\n      )}\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default Pagination;\r\n","import {\n  ArticleDetailPage,\n  CourseProduct,\n  EventDetailPage,\n  OfficesAndServicesDetailPage,\n  PeopleDetailPage,\n  ProgramDetailPage,\n  ResourceDetailPage\n} from '../../../../codegenGenerated/optigraphql/generated';\nimport { ProductsCardProps } from './ECommerceCoursesAndProductsListing/EcommerceProductsCard';\nimport { SearchCardProps } from './SearchListing/SearchCard';\n\nexport interface ListingCommonProps {\n  noResultsLabel: string;\n  clearAllLabel: string;\n  tagsNoResultsLabel: string;\n  searchPlaceholder: string;\n  resultsNumberLabel: string;\n  resultsNumber: string;\n  sortByRelevanceLabel: string;\n  sortByRecentLabel: string;\n  sortByAlphabeticalLabel: string;\n  mobileShowResultsLabel: string;\n  mobileFilterNarrowLabel: string;\n  mobileAppliedFiltersLabel: string;\n  minDatePlaceholder: string;\n  maxDatePlaceholder: string;\n  showAllPaginationLabel: string;\n  imgFallback?: string;\n}\n\nexport type FacetsCommonProps = {\n  listingType?: string | ListingTypes;\n  facets: FacetProps[];\n  pagination: { skip: number; limit: number; total: number };\n  setPagination: (pagination: { skip: number; limit: number; total: number }) => void;\n  setFilters: (facets: FacetProps[]) => void;\n};\n\nexport type FacetProps = {\n  id: string;\n  type: string;\n  title: string;\n  items: FacetPropsItems[];\n  value: string | string[] | null;\n};\n\nexport type FacetPropsItems = {\n  id: string;\n  value: string;\n  count?: number;\n  title?: string;\n  disabled?: boolean;\n};\n\nexport type ListingParams = {\n  orderBy?: string;\n  searchTerm?: string;\n  facets?: FacetProps[];\n  pagination?: {\n    total: number;\n    limit: number;\n    skip: number;\n  };\n};\n\nexport enum SortOptions {\n  ASC = 'ASC',\n  DESC = 'DESC',\n  RELEVANCE = 'RELEVANCE',\n  AZ = 'A-Z'\n}\n\nexport enum ListingTypes {\n  RESOURCES_LISTING = 'RESOURCES_LISTING',\n  PROGRAMS_CERTS_LISTING = 'PROGRAMS_CERTS_LISTING',\n  ECOMMERCE_COURSES_LISTING = 'ECOMMERCE_COURSES_LISTING',\n  SEARCH_LISTING = 'SEARCH_LISTING',\n  PEOPLE_LISTING = 'PEOPLE_LISTING',\n  BLOG_AND_NEWS_LISTING = 'BLOG_AND_NEWS_LISTING',\n  OFFICES_SERVICES_LISTING = 'OFFICES_SERVICES_LISTING',\n  EVENT_LISTING = 'EVENT_LISTING'\n}\n\ntype RankingType = 'RELEVANCE' | 'SEMANTIC';\ntype OrderType = 'ASC' | 'DESC';\n\nexport type OrderByValue = { _ranking: RankingType } | { [key: string]: OrderType | RankingType };\n\nexport type ListingResultTypes =\n  | EventDetailPage[]\n  | ResourceDetailPage[]\n  | ArticleDetailPage[]\n  | SearchCardProps[]\n  | OfficesAndServicesDetailPage[]\n  | ProgramDetailPage[]\n  | CourseProduct[]\n  | ProductsCardProps[]\n  | PeopleDetailPage[]\n  | null;\n\nexport type commonListTypesMerged = ListingSlice_ProgramsAndCerts;\n\ninterface BaseListingSlice {\n  orderBy: string;\n  searchTerm: string;\n  facets: FacetProps[];\n  pagination: {\n    total: number;\n    limit: number;\n    skip: number;\n  };\n  setOrderBy: (order: string) => void;\n  setSearchTerm: (searchTerm: string) => void;\n  setFilters: (filters: FacetProps[]) => void;\n  setPagination: (pagination: { limit: number; skip: number; total: number }) => void;\n  reset: () => void;\n}\n\ntype Suffixes =\n  | 'Event'\n  | 'Resource'\n  | 'Search'\n  | 'ProgramsAndCerts'\n  | 'ECommerceCoursesAndProducts'\n  | 'PeopleDirectory';\n\nexport type ListingSlice<T extends Suffixes> = {\n  [K in keyof BaseListingSlice as `${string & K}_${T}`]: BaseListingSlice[K];\n} & {\n  _from: string;\n} & {\n  [key: string]: string | object | object[] | null;\n};\n\ntype ListingSlice_Event = ListingSlice<'Event'>;\ntype ListingSlice_Resource = ListingSlice<'Resource'>;\ntype ListingSlice_Search = ListingSlice<'Search'>;\ntype ListingSlice_ProgramsAndCerts = ListingSlice<'ProgramsAndCerts'>;\ntype ListingSlice_ECommerceCoursesAndProducts = ListingSlice<'ECommerceCoursesAndProducts'>;\ntype ListingSlice_PeopleDirectory = ListingSlice<'PeopleDirectory'>;\n\nexport type {\n  ListingSlice_ECommerceCoursesAndProducts,\n  ListingSlice_Event,\n  ListingSlice_PeopleDirectory,\n  ListingSlice_ProgramsAndCerts,\n  ListingSlice_Resource,\n  ListingSlice_Search\n};\n","import React, { useEffect, useRef, useState } from 'react';\r\nimport { iOS, isMobile, isTablet } from '../../../../helpers';\r\nimport { FacetProps, FacetPropsItems } from '../types';\r\n\r\ntype OwnProps = {\r\n  id: string;\r\n  title?: string;\r\n  value: string | Date;\r\n  onSelectionChange: (id: string, value: string) => void;\r\n  selectedFilters: FacetProps[] | FacetPropsItems[];\r\n  minDate?: string;\r\n  maxDate?: string;\r\n};\r\n\r\nconst FacetDate = ({ id, title, value, onSelectionChange, minDate, maxDate }: OwnProps) => {\r\n  // Temporary state to hold the raw input value\r\n  const [tempValue, setTempValue] = useState('');\r\n  const [isTabletMobileiOS, setIsTabletOrLess] = useState(false);\r\n  const [inputType, setInputType] = useState(\r\n    isTabletMobileiOS && tempValue !== '' ? 'date' : 'text'\r\n  );\r\n  const inputRef = useRef<HTMLInputElement>(null);\r\n\r\n  // Effect to format the initial value or any external changes to it\r\n  useEffect(() => {\r\n    setInputType(value ? 'date' : 'text');\r\n\r\n    if (id === 'maxDate' && minDate && maxDate) {\r\n      // if maxDaate is lower than minDate, set maxDate to minDate\r\n      if (new Date(maxDate) < new Date(minDate)) {\r\n        setTempValue(setFormattedDate(maxDate, 'yyyy-mm-dd'));\r\n        onSelectionChange('minDate', tempValue);\r\n      }\r\n    }\r\n\r\n    setTempValue(setFormattedDate(value, 'yyyy-mm-dd'));\r\n  }, [value]);\r\n\r\n  const setFormattedDate = (value: Date | string, format: string) => {\r\n    if (value) {\r\n      const date = new Date(value);\r\n      const day = date.getUTCDate();\r\n      const month = date.getUTCMonth() + 1;\r\n      const year = date.getUTCFullYear();\r\n\r\n      if (format === 'yyyy-mm-dd') {\r\n        return `${year}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day : day}`;\r\n      }\r\n\r\n      return `${day < 10 ? '0' + day : day}/${month < 10 ? '0' + month : month}/${year}`;\r\n    }\r\n\r\n    return '';\r\n  };\r\n\r\n  const handleChange = (e: { target: { value: string } }) => {\r\n    const rawValue = e.target.value;\r\n    setTempValue(rawValue); // Update the temporary state with the raw input value\r\n\r\n    // Assuming formattedDate formats the date as needed and setValue updates your application state\r\n    const formattedDate = setFormattedDate(rawValue, 'yyyy-mm-dd');\r\n\r\n    // Execute search or any action immediately upon selection\r\n    if (onSelectionChange) {\r\n      onSelectionChange(id, formattedDate);\r\n    }\r\n  };\r\n\r\n  useEffect(() => {\r\n    setIsTabletOrLess((isTablet() || isMobile()) && iOS());\r\n  }, []);\r\n\r\n  useEffect(() => {\r\n    if (isTabletMobileiOS) {\r\n      if (inputType === 'text' && inputRef.current) {\r\n        setInputType('text');\r\n        // inputRef.current.showPicker();\r\n      } else {\r\n        setInputType('date');\r\n      }\r\n    }\r\n  }, [inputType, isTabletMobileiOS]);\r\n\r\n  const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\r\n    e.target.type = 'date';\r\n    try {\r\n      e.target.showPicker();\r\n    } catch (error) {\r\n      console.warn('showPicker() is not supported or allowed in this context:', error);\r\n      e.target.focus();\r\n    }\r\n  };\r\n\r\n  if (isTabletMobileiOS) {\r\n    return (\r\n      <div className=\"listing__facet listing__facet--borderless\">\r\n        {title && (\r\n          <label htmlFor={id} className=\"listing-label listing-label--ios\">\r\n            {title}\r\n          </label>\r\n        )}\r\n\r\n        <input\r\n          ref={inputRef}\r\n          id={id}\r\n          type=\"date\"\r\n          onChange={handleChange}\r\n          value={tempValue} // Use the temporary state for the input value\r\n          className=\"listing-input listing-input__date listing-input__date--ios\"\r\n          placeholder={'dd/mm/yyyy'}\r\n          aria-label={title}\r\n          style={{ textAlign: 'left' }}\r\n          // max={id !== 'maxDate' ? maxDate : undefined} // This is not needed for iOS since is not supported\r\n        />\r\n\r\n        <svg className=\"listing-input__date-icon listing-input__date-icon--ios\" role=\"presentation\">\r\n          <use xlinkHref=\"#calendar\"></use>\r\n        </svg>\r\n      </div>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <div className=\"listing__facet listing__facet--borderless\">\r\n      {title && (\r\n        <label htmlFor={id} hidden className=\"listing-label\">\r\n          {title}\r\n        </label>\r\n      )}\r\n\r\n      <input\r\n        ref={inputRef}\r\n        id={id}\r\n        type={inputType}\r\n        onFocus={handleFocus}\r\n        onChange={handleChange}\r\n        value={tempValue} // Use the temporary state for the input value\r\n        className=\"listing-input listing-input__date\"\r\n        placeholder={title}\r\n        aria-label={title}\r\n        max={id !== 'maxDate' ? maxDate : undefined}\r\n        onBlur={() => {\r\n          if (isTabletMobileiOS) return;\r\n          setInputType('text');\r\n        }}\r\n      />\r\n\r\n      <svg className=\"listing-input__date-icon\" role=\"presentation\">\r\n        <use xlinkHref=\"#calendar\"></use>\r\n      </svg>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default FacetDate;\r\n","// Transform the data to the format expected by the Facets component\nimport { FilterCategoryModelFacet } from '../../../../codegenGenerated/optigraphql/generated';\nimport { ECommerceCoursesAndProductsFacetTypes } from './ECommerceCoursesAndProductsListing/useGetEcommerceCoursesAndProductsListing';\nimport { EventFacetTypes } from './EventListing/useGetEventsListing';\nimport { PeopleDirectoryFacetTypes } from './PeopleDirectoryListing/useGetPeopleDirectoryListing';\nimport { ProgramsAndCertificatesFacetTypes } from './ProgramsAndCertificatesListing/useGetProgramsAndCertsListing';\nimport { ResourceFacetTypes } from './ResourcesListing/useGetResourcesListing';\nimport { BlogFacetTypes } from './BlogAndNewsListing/useGetBlogAndNewsListing';\nimport {\n  commonListTypesMerged,\n  FacetProps,\n  FacetPropsItems,\n  ListingSlice_ECommerceCoursesAndProducts,\n  ListingSlice_Event,\n  ListingSlice_PeopleDirectory,\n  ListingSlice_ProgramsAndCerts,\n  ListingSlice_Resource,\n  ListingSlice_Search\n} from './types';\n\nexport const transformToFacetPropsItems = (data: FilterCategoryModelFacet): FacetPropsItems[] => {\n  const { Categories } = data ?? {};\n\n  if (!Categories) return [];\n\n  // Handle the case where we have IdTitle array\n  if (Categories.IdTitle) {\n    return Categories.IdTitle.map(item => {\n      const [id, name] = item?.name?.split('|') ?? ['', ''];\n      return { id, value: name, count: item?.count ?? 0 };\n    }).sort((a, b) => a.value.localeCompare(b.value));\n  }\n\n  // Handle the case where we have separate Id and Title arrays\n  if (Categories.Id && Categories.Title && Categories.Id.length === Categories.Title.length) {\n    const items: FacetPropsItems[] = [];\n\n    for (let i = 0; i < Categories.Id.length; i++) {\n      const idItem = Categories.Id[i];\n      const titleItem = Categories.Title[i];\n\n      if (idItem?.name && titleItem?.name) {\n        items.push({\n          id: idItem.name,\n          value: titleItem.name,\n          count: idItem.count ?? 0\n        });\n      }\n    }\n\n    return items.sort((a, b) => a.value.localeCompare(b.value));\n  }\n\n  return [];\n};\n\n// Common function to find a facet by ID\nexport const findFacetById = (id: string, facets: FacetProps[] | FacetPropsItems[]) =>\n  facets.find(facet => facet.id === id);\n\nexport const getFacetValueById = (\n  facets: FacetProps[],\n  id:\n    | EventFacetTypes\n    | ResourceFacetTypes\n    | ProgramsAndCertificatesFacetTypes\n    | ECommerceCoursesAndProductsFacetTypes\n    | PeopleDirectoryFacetTypes\n    | BlogFacetTypes\n): string[] | null => {\n  const facet = facets.find(facet => facet.id === id);\n  return facet?.value as string[] | null;\n};\n\nexport const getElementsWithSuffix = (obj: commonListTypesMerged, suffix: string) => {\n  const result: { [key: string]: string | object | object[] | null } = {};\n  const suffixLength = suffix.length;\n\n  for (const key in obj) {\n    if (key.endsWith(suffix)) {\n      // Extract the base key (excluding the suffix)\n      const baseKey = key.slice(0, -suffixLength);\n      result[baseKey] = obj[key as keyof ListingSlice_Event];\n    }\n  }\n\n  result['_from'] = suffix;\n\n  return result;\n};\n\n/**\n * This function is used to get the initial state of the application from the URL search parameters.\n * If the URL search parameters contain a '_from' key, the function will parse its value and use it to update the initial state.\n * The function will iterate over the keys of the initial state and update their values if a corresponding key is found in the URL search parameters.\n * If a key in the URL search parameters corresponds to the 'facets' key in the initial state, the function will update the 'facets' array in the initial state with the values from the URL search parameters.\n * If the URL search parameters do not contain a '_from' key, or if the URL search parameters are empty, the function will return the initial state as is.\n *\n * @param {commonListTypesMerged} initialState - The initial state of the application.\n * @returns {commonListTypesMerged} The updated initial state.\n */\nexport const getInitialState = (\n  initialState:\n    | ListingSlice_Event\n    | ListingSlice_Resource\n    | ListingSlice_Search\n    | ListingSlice_ECommerceCoursesAndProducts\n    | ListingSlice_PeopleDirectory\n    | ListingSlice_ProgramsAndCerts\n) => {\n  if (window.location.search.slice(1)) {\n    const searchParams = new URLSearchParams(window.location.search.slice(1));\n    const listing = JSON.parse(searchParams.get('_from') as string);\n    if (listing) {\n      const suffixLength = listing.length;\n\n      for (const key in initialState) {\n        const baseKey = key.slice(0, -suffixLength);\n        const queryParamValue = searchParams.get(baseKey);\n\n        if (queryParamValue) {\n          if (baseKey !== 'facets') {\n            initialState[key] = JSON.parse(queryParamValue as string);\n          } else {\n            const array2Map = new Map(\n              JSON.parse(queryParamValue as string).map((item: Partial<FacetProps>) => [\n                item.id,\n                item.value\n              ])\n            );\n\n            if (initialState?.[key] && Array.isArray(initialState[key])) {\n              // Iterate over array1 and update the value if found in array2Map\n              initialState[key] = (initialState[key] as FacetProps[])?.map((item: FacetProps) => {\n                if (array2Map.has(item.id)) {\n                  item.value = array2Map.get(item.id) as FacetProps['value'];\n                }\n                return item;\n              });\n            }\n          }\n        }\n      }\n\n      return initialState;\n    } else {\n      return initialState;\n    }\n  } else {\n    return initialState;\n  }\n};\n","import { useQuery } from '@tanstack/react-query';\nimport { GraphQLClient } from 'graphql-request';\nimport { useEffect, useMemo, useCallback, useState } from 'react';\nimport {\n  CourseListingDocument,\n  CourseListingQuery,\n  ProductListingDocument,\n  ProductListingQuery,\n  CourseProduct,\n  StandardProduct,\n  CourseProductOrderByInput,\n  StandardProductOrderByInput,\n  CourseProductFacet,\n  StandardProductFacet,\n  Ranking\n} from '../../../../../codegenGenerated/optigraphql/generated';\nimport { getEnvGQLUrl } from '../../../../helpers';\nimport { ListingParams } from '../types';\nimport { getFacetValueById } from '../utils';\n\nexport enum ECommerceCoursesAndProductsFacetTypes {\n  Categories = 'Categories',\n  AreaOfStudyFacet = 'AreaOfStudyFacet',\n  ProductTypeFacet = 'ProductTypeFacet'\n}\n\ntype CourseQueryParams = {\n  numberOfResults: number;\n  skip: number;\n  searchTerm: string | null;\n  searchTermBoost: string | null;\n  orderBy: CourseProductOrderByInput;\n  areaOfStudyFacet: string[] | null;\n};\n\ntype ProductQueryParams = {\n  numberOfResults: number;\n  skip: number;\n  searchTerm: string | null;\n  searchTermBoost: string | null;\n  orderBy: StandardProductOrderByInput;\n  productTypeFacet: string[] | null;\n};\n\ntype CombinedFacets = {\n  AreaOfStudyFacet?: CourseProductFacet['AreaOfStudyFacet'];\n  ProductTypeFacet?: StandardProductFacet['ProductTypeFacet'];\n};\n\nexport const useGetEcommerceCoursesAndProductsListing = (params?: ListingParams) => {\n  const graphQLClient = new GraphQLClient(getEnvGQLUrl());\n  const [accumulatedResults, setAccumulatedResults] = useState<\n    Array<CourseProduct | StandardProduct>\n  >([]);\n  const [combinedFacets, setCombinedFacets] = useState<CombinedFacets>({});\n\n  const { orderBy, pagination, searchTerm, facets = [] } = params || {};\n\n  // Add effect to handle resetting accumulated results\n  useEffect(() => {\n    // Reset accumulated results when any parameter except pagination.skip changes\n    setAccumulatedResults([]);\n  }, [orderBy, searchTerm, facets, pagination?.limit]);\n\n  const selectedType = getFacetValueById(facets, ECommerceCoursesAndProductsFacetTypes.Categories);\n  const isCourses = selectedType?.[0] === 'courses';\n  const isFirstLoad = !selectedType || selectedType.length === 0;\n\n  const orderByValue = useMemo(() => {\n    if (!orderBy) return {};\n    switch (orderBy) {\n      case 'RELEVANCE':\n        return { _ranking: 'SEMANTIC' as Ranking };\n      case 'ASC':\n        return { StartPublish: 'ASC' as const };\n      case 'DESC':\n        return { StartPublish: 'DESC' as const };\n      case 'A-Z':\n        return isCourses ? { CourseSubjectId: 'ASC' as const } : { DisplayName: 'ASC' as const };\n      default:\n        return { _ranking: 'SEMANTIC' as Ranking };\n    }\n  }, [orderBy, isCourses]);\n\n  const getQueryParams = useCallback(\n    (forCourses: boolean) => {\n      if (!pagination) return null;\n\n      const baseParams = {\n        numberOfResults: pagination.limit,\n        skip: pagination.skip,\n        searchTerm: searchTerm === '' ? null : (searchTerm ?? null),\n        searchTermBoost: searchTerm ? `%${searchTerm}%` : null,\n        orderBy: orderByValue\n      };\n\n      if (forCourses) {\n        return {\n          ...baseParams,\n          areaOfStudyFacet: facets\n            ? getFacetValueById(facets, ECommerceCoursesAndProductsFacetTypes.AreaOfStudyFacet)\n            : null\n        } as CourseQueryParams;\n      } else {\n        return {\n          ...baseParams,\n          productTypeFacet: facets\n            ? getFacetValueById(facets, ECommerceCoursesAndProductsFacetTypes.ProductTypeFacet)\n            : null\n        } as ProductQueryParams;\n      }\n    },\n    [pagination, searchTerm, orderByValue, facets]\n  );\n\n  // Query for courses\n  const coursesQuery = useQuery<CourseListingQuery, Error>({\n    queryKey: [\n      'ecommerceCourses',\n      orderBy,\n      pagination?.skip,\n      pagination?.limit,\n      searchTerm,\n      JSON.stringify(facets)\n    ],\n    queryFn: async () => {\n      const params = getQueryParams(true);\n      if (!params) throw new Error('Invalid params');\n      return graphQLClient.request(CourseListingDocument, params as CourseQueryParams);\n    },\n    refetchOnWindowFocus: false,\n    enabled: isFirstLoad || isCourses\n  });\n\n  // Query for products\n  const productsQuery = useQuery<ProductListingQuery, Error>({\n    queryKey: [\n      'ecommerceProducts',\n      orderBy,\n      pagination?.skip,\n      pagination?.limit,\n      searchTerm,\n      JSON.stringify(facets)\n    ],\n    queryFn: async () => {\n      const params = getQueryParams(false);\n      if (!params) throw new Error('Invalid params');\n      return graphQLClient.request(ProductListingDocument, params as ProductQueryParams);\n    },\n    refetchOnWindowFocus: false,\n    enabled: isFirstLoad || !isCourses\n  });\n\n  useEffect(() => {\n    if (isFirstLoad) {\n      // Combine facets from both queries\n      const coursesFacets = coursesQuery.data?.CourseProduct?.facets || {};\n      const productsFacets = productsQuery.data?.StandardProduct?.facets || {};\n\n      console.log('Initial Load Facets:', {\n        coursesFacets,\n        productsFacets\n      });\n\n      setCombinedFacets({\n        ...coursesFacets,\n        ...productsFacets\n      });\n    } else {\n      // Use facets from the active query\n      const currentData = isCourses\n        ? coursesQuery.data?.CourseProduct?.facets\n        : productsQuery.data?.StandardProduct?.facets;\n\n      console.log('Active Query Facets:', {\n        isCourses,\n        currentData\n      });\n\n      setCombinedFacets(currentData || {});\n    }\n  }, [isFirstLoad, isCourses, coursesQuery.data, productsQuery.data]);\n\n  useEffect(() => {\n    const currentData = isCourses\n      ? coursesQuery.data?.CourseProduct\n      : productsQuery.data?.StandardProduct;\n\n    if (currentData?.items && Array.isArray(currentData.items)) {\n      const newItems = currentData.items.filter(\n        (item: unknown): item is CourseProduct | StandardProduct => item !== null\n      );\n      if (!pagination?.skip || pagination.skip === 0) {\n        // Reset results if we're starting from the first page\n        setAccumulatedResults(newItems);\n      } else {\n        // Append new results to existing ones\n        setAccumulatedResults(prev => [...prev, ...newItems]);\n      }\n    }\n  }, [isCourses, coursesQuery.data, productsQuery.data, pagination?.skip]);\n\n  const isLoading = isFirstLoad\n    ? coursesQuery.isFetching || productsQuery.isFetching\n    : isCourses\n      ? coursesQuery.isFetching\n      : productsQuery.isFetching;\n\n  const error = isFirstLoad\n    ? coursesQuery.error || productsQuery.error\n    : isCourses\n      ? coursesQuery.error\n      : productsQuery.error;\n\n  const currentData = isCourses\n    ? coursesQuery.data?.CourseProduct\n    : productsQuery.data?.StandardProduct;\n\n  return {\n    status: error ? 'error' : isLoading ? 'loading' : 'success',\n    error: error as Error,\n    results: accumulatedResults,\n    total: currentData?.total || 0,\n    facets: combinedFacets\n  };\n};\n","import { useCallback } from 'react';\nimport { ECommerceCoursesAndProductsFacetTypes } from '../ECommerceCoursesAndProductsListing/useGetEcommerceCoursesAndProductsListing';\nimport { FacetProps } from '../types';\n\ntype OwnProps = {\n  facets: FacetProps[];\n  isEcommerceListing: boolean;\n  isProgramListing: boolean;\n  pagination: {\n    skip: number;\n    limit: number;\n    total: number;\n  };\n  setFilters: (filters: FacetProps[]) => void;\n  setPagination: (pagination: { skip: number; limit: number; total: number }) => void;\n};\n\nconst useFacetChangeHandler = ({\n  facets,\n  isEcommerceListing,\n  isProgramListing,\n  pagination,\n  setFilters,\n  setPagination\n}: OwnProps) => {\n  const onSelectionChangeHandler = useCallback(\n    (selectedFacetID: string, value: string | null) => {\n      if (\n        isEcommerceListing &&\n        selectedFacetID === ECommerceCoursesAndProductsFacetTypes.Categories\n      ) {\n        facets.forEach(facet => {\n          if (facet.id !== ECommerceCoursesAndProductsFacetTypes.Categories) {\n            facet.value = null;\n          }\n        });\n      }\n\n      let dateRangeType = '';\n      setFilters(\n        facets.map(facet => {\n          if (selectedFacetID === 'minDate' || selectedFacetID === 'maxDate') {\n            dateRangeType = selectedFacetID === 'minDate' ? 'minDate' : 'maxDate';\n            selectedFacetID = 'date-range';\n          }\n\n          if (facet.id !== selectedFacetID) {\n            return facet;\n          }\n\n          switch (facet.type) {\n            case 'accordion': {\n              let newValue = facet.value || [];\n              newValue = Array.isArray(newValue) ? newValue : [newValue];\n\n              if (newValue.includes(value as string)) {\n                newValue = newValue.filter(item => item !== value);\n                newValue = newValue.length > 0 ? newValue : [];\n              } else {\n                newValue = newValue.concat(value as string);\n              }\n\n              return { ...facet, value: newValue.length > 0 ? newValue : null };\n            }\n            case 'select':\n            case 'custom-radio': {\n              let newValue = facet.value && Array.isArray(facet.value) ? [...facet.value] : [];\n\n              if (isEcommerceListing || isProgramListing) {\n                newValue = [value as string];\n              } else {\n                if (newValue.includes(value as string) && value !== 'all') {\n                  newValue = newValue.filter(item => item !== value && item !== 'all');\n                } else if (value === 'all') {\n                  newValue = ['all'];\n                } else {\n                  newValue = newValue.filter(item => item !== 'all');\n                  newValue = [value as string];\n                }\n              }\n\n              newValue = newValue.filter(item => item !== '');\n              return { ...facet, value: newValue.length > 0 ? newValue : null };\n            }\n\n            case 'custom-select-search':\n            case 'custom-select': {\n              let newValue = facet.value && Array.isArray(facet.value) ? [...facet.value] : [];\n\n              newValue = value?.split(',') || [];\n              newValue = newValue.filter(item => item !== '');\n\n              return { ...facet, value: newValue.length > 0 ? newValue : null };\n            }\n\n            case 'date': {\n              const minDate = facet?.items?.find(f => f.id === 'minDate');\n              const maxDate = facet?.items?.find(f => f.id === 'maxDate');\n              if (dateRangeType === 'minDate' && minDate) {\n                minDate.value = value!;\n              } else {\n                maxDate!.value = value!;\n              }\n\n              return {\n                ...facet,\n                items: [\n                  { id: 'minDate', value: minDate!.value, title: minDate!.title },\n                  { id: 'maxDate', value: maxDate!.value, title: maxDate!.title }\n                ],\n                value: null\n              };\n            }\n\n            default:\n              return { ...facet, value: value };\n          }\n        })\n      );\n\n      // Reset the pagination\n      setPagination({ skip: 0, limit: pagination.limit, total: pagination.total });\n    },\n    [facets, isEcommerceListing, isProgramListing, pagination, setFilters, setPagination]\n  );\n\n  return onSelectionChangeHandler;\n};\n\nexport default useFacetChangeHandler;\n","import { useCallback } from 'react';\r\nimport { FacetProps, FacetPropsItems } from '../types';\r\ninterface OwnProps {\r\n  facets: FacetProps[];\r\n  isProgramListing: boolean;\r\n}\r\n\r\nconst useIsChecked = ({ facets, isProgramListing }: OwnProps) => {\r\n  const isChecked = useCallback(\r\n    (item: FacetPropsItems, id: string) => {\r\n      let facetID = id;\r\n      let facetItem = item.id;\r\n\r\n      if (isProgramListing && item.id && item.id.includes('on-campus')) {\r\n        facetID = 'CampusLocationFacet';\r\n        facetItem = item.id.replace('on-campus-', '');\r\n\r\n        if (facetItem === 'all') {\r\n          const facet = facets.find(facet => facet.id === facetID);\r\n\r\n          if (\r\n            (facet?.value && facet?.value?.length > 0) ||\r\n            facet?.value?.length === facet?.items.length\r\n          ) {\r\n            return true;\r\n          }\r\n\r\n          return false;\r\n        }\r\n      }\r\n\r\n      const facet = facets.find(facet => facet.id === facetID);\r\n      return facet?.value ? (facet.value as string[]).includes(facetItem) : false;\r\n    },\r\n    [facets, isProgramListing]\r\n  );\r\n\r\n  return isChecked;\r\n};\r\n\r\nexport default useIsChecked;\r\n","import React, { useEffect, useState } from 'react';\nimport { ListingTypes, SortOptions } from './types';\n\ninterface OwnProps {\n  searchPlaceholder: string;\n  searchTerm: string;\n  pagination: {\n    skip: number;\n    limit: number;\n    total: number;\n  };\n  ariaLabel?: string;\n  setStoreSearchTerm: (searchTerm: string) => void;\n  setPagination: (pagination: { skip: number; limit: number; total: number }) => void;\n  setSortBy?: (sort: string) => void;\n  listingType?: ListingTypes;\n}\n\nconst Search = ({\n  searchPlaceholder,\n  searchTerm,\n  pagination,\n  listingType,\n  setStoreSearchTerm,\n  setPagination,\n  setSortBy,\n  ariaLabel\n}: OwnProps) => {\n  const [searchText, setSearchText] = useState('');\n\n  const setRelevanceSort = () => {\n    if (\n      listingType === ListingTypes.RESOURCES_LISTING ||\n      listingType === ListingTypes.BLOG_AND_NEWS_LISTING ||\n      listingType === ListingTypes.SEARCH_LISTING ||\n      listingType === ListingTypes.ECOMMERCE_COURSES_LISTING\n    ) {\n      setSortBy && setSortBy(SortOptions.RELEVANCE);\n    }\n  };\n\n  useEffect(() => {\n    if (searchTerm) {\n      setSearchText(searchTerm);\n      setRelevanceSort();\n    }\n  }, [searchTerm]);\n\n  const doSearch = () => {\n    setRelevanceSort();\n    setStoreSearchTerm(searchText);\n\n    // Reset the pagination\n    setPagination({ skip: 0, limit: pagination.limit, total: pagination.total });\n\n    // raise event for search tracking\n    document.dispatchEvent(\n      new CustomEvent('uor_search_performed', {\n        bubbles: true,\n        detail: { text: searchText }\n      })\n    );\n  };\n\n  const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n    if (event.key === 'Enter') {\n      event.preventDefault();\n      doSearch();\n    } else {\n      setSearchText(event.currentTarget.value);\n    }\n  };\n\n  const handleXKeyDown = (event: React.KeyboardEvent<SVGElement>) => {\n    if (event.key === ' ' && svgSearch !== '#search') {\n      event.preventDefault();\n      clearSearch();\n    }\n  };\n\n  const clearSearch = () => {\n    setSearchText('');\n    setStoreSearchTerm('');\n    if (setSortBy) {\n      setSortBy('');\n\n      if (listingType === ListingTypes.SEARCH_LISTING) {\n        setSortBy(SortOptions.ASC);\n      }\n\n      if (\n        listingType === ListingTypes.RESOURCES_LISTING ||\n        listingType === ListingTypes.ECOMMERCE_COURSES_LISTING\n      ) {\n        setSortBy(SortOptions.AZ);\n      }\n    }\n  };\n\n  const svgSearch = searchText ? '#close' : '#search';\n\n  return (\n    <div className=\"listing__search-wrapper\">\n      <input\n        type=\"text\"\n        placeholder={searchPlaceholder}\n        onChange={event => setSearchText(event.currentTarget.value)}\n        onKeyDown={handleKeyDown}\n        value={searchText}\n        className=\"listing-input listing-input__search\"\n        aria-label={ariaLabel ? ariaLabel : 'Enter Keyword'}\n      />\n\n      <svg\n        onClick={svgSearch === '#search' ? doSearch : clearSearch}\n        onKeyDown={handleXKeyDown}\n        className=\"listing-input__search-icon\"\n        tabIndex={0}\n        role=\"button\"\n        viewBox={svgSearch === '#search' ? '0 0 24 24' : '0 0 32 32'}\n      >\n        <use xlinkHref={svgSearch}></use>\n      </svg>\n    </div>\n  );\n};\n\nexport default Search;\n","import { useCallback } from 'react';\nimport { FacetProps } from '../types';\n\ninterface OwnProps {\n  facets: FacetProps[];\n  isEcommerceListing: boolean;\n  isPeopleListing: boolean;\n}\n\nconst useClearAllFacets = ({ facets, isEcommerceListing, isPeopleListing }: OwnProps) => {\n  const filterFacets = useCallback(() => {\n    return facets.map(facet => {\n      // Always preserve ProgramTypeFacet value\n      if (facet.id === 'ProgramTypeFacet') {\n        return facet;\n      }\n\n      if (facet.value) {\n        if (isEcommerceListing || isPeopleListing) {\n          if (facet.type !== 'custom-radio') {\n            return { ...facet, value: null };\n          }\n        } else {\n          if (facet.id === 'date-range') {\n            // Reset date range items\n            const items = facet.items.map(item => {\n              return { ...item, value: '' };\n            });\n\n            return {\n              ...facet,\n              items,\n              value: null\n            };\n          }\n\n          return { ...facet, value: null };\n        }\n      }\n\n      return facet;\n    });\n  }, [facets, isEcommerceListing, isPeopleListing]);\n\n  return filterFacets;\n};\n\nexport default useClearAllFacets;\n","import React, { useEffect, useState } from 'react';\nimport { Checkbox } from '../../../../components/react-components/Checkbox';\n\nimport {\n  FacetProps,\n  FacetPropsItems,\n  FacetsCommonProps,\n  ListingTypes,\n  SortOptions\n} from '../types';\n// import SelectSort from './SelectSort';\nimport {\n  Accordion,\n  AccordionContent,\n  AccordionItem,\n  AccordionTrigger\n} from '../../../../components/react-components/Accordion';\nimport KeySearcher from '../../../../components/react-components/KeySearch';\nimport { ECommerceCoursesAndProductsFacetTypes } from '../ECommerceCoursesAndProductsListing/useGetEcommerceCoursesAndProductsListing';\nimport Search from '../Search';\nimport { findFacetById, getFacetValueById } from '../utils';\nimport FacetDate from './FacetDate';\nimport useClearAllFacets from './useClearAllFacets';\nimport useFacetChangeHandler from './useFacetChangeHandler';\nimport useIsChecked from './useIsChecked';\n// import FacetDate from './FacetDate';\n// import useFacetChangeHandler from './useFacetChangeHandler';\nimport { FacetData } from './FacetAccordion';\n\ntype OwnProps = {\n  sortOptions?:\n    | {\n        label: string;\n        value: string;\n      }[]\n    | null;\n  mobileShowResultsLabel: string;\n  clearAllLabel: string;\n  mobileFilterNarrowLabel: string;\n  mobileAppliedFiltersLabel: string;\n  minDatePlaceholder?: string;\n  maxDatePlaceholder?: string;\n  orderBy?: string;\n  defaultSortValue?: string;\n  setOrderBy?: (orderBy: string) => void;\n  dropdownSearchLabel?: string;\n  searchPlaceholder?: string;\n  setSearchTerm?: (searchTerm: string) => void;\n  searchTerm?: string;\n  unavailableLetters?: string[];\n  facetsData?: FacetData;\n  defaultFilter?: string;\n  isFirstLoad?: boolean;\n} & FacetsCommonProps;\n\nconst FacetsMobile = ({\n  sortOptions,\n  mobileShowResultsLabel,\n  clearAllLabel,\n  mobileFilterNarrowLabel,\n  mobileAppliedFiltersLabel,\n  facets,\n  orderBy,\n  pagination,\n  setPagination,\n  setOrderBy,\n  setFilters,\n  listingType,\n  searchPlaceholder,\n  setSearchTerm,\n  searchTerm,\n  unavailableLetters,\n  facetsData,\n  defaultFilter,\n  isFirstLoad = false\n}: OwnProps) => {\n  const [displayMobileFilter, setDisplayMobileFilter] = useState(false);\n  const [filtersApplied, setFiltersApplied] = useState(0);\n  const isProgramListing = listingType === ListingTypes.PROGRAMS_CERTS_LISTING;\n  const isEcommerceListing = listingType === ListingTypes.ECOMMERCE_COURSES_LISTING;\n  const isPeopleDirectoryListing = listingType === ListingTypes.PEOPLE_LISTING;\n  const isSearchListing = listingType === ListingTypes.SEARCH_LISTING;\n  const isPeopleListing = listingType === ListingTypes.PEOPLE_LISTING;\n  const [value, setValue] = useState('');\n  const [updatedFacets, setUpdatedFacets] = useState(facets);\n\n  const filterFacets = useClearAllFacets({ facets, isEcommerceListing, isPeopleListing });\n\n  const toggleMobileFilter = () => {\n    setDisplayMobileFilter(!displayMobileFilter);\n    document.body.classList.toggle('no-scroll');\n  };\n\n  useEffect(() => {\n    const handleKeyDown = (event: KeyboardEvent) => {\n      if (event.key === 'Escape') {\n        setDisplayMobileFilter(false);\n      }\n    };\n\n    window.addEventListener('keydown', handleKeyDown);\n\n    setValue(sortOptions && sortOptions.length > 1 ? 'sort' : facets[0].id);\n\n    return () => {\n      window.removeEventListener('keydown', handleKeyDown);\n    };\n  }, []);\n\n  useEffect(() => {\n    if (facets.length) {\n      calcSelectedFilters();\n    }\n  }, [facets]);\n\n  useEffect(() => {\n    if (facetsData) {\n      const newUpdatedFacets = facets.map(facet => ({\n        ...facet,\n        items: facet.items.map(item => ({\n          ...item,\n          count:\n            facetsData[facet.id]?.Categories.IdTitle?.find(f => f.name.split('|')[1] === item.value)\n              ?.count || 0\n        }))\n      }));\n\n      setUpdatedFacets(newUpdatedFacets);\n    }\n  }, [facetsData, facets]);\n\n  const onSelectionChangeHandler = useFacetChangeHandler({\n    facets,\n    isEcommerceListing,\n    isProgramListing,\n    pagination,\n    setFilters,\n    setPagination\n  });\n\n  const isChecked = useIsChecked({ facets, isProgramListing });\n\n  const showResults = () => {\n    calcSelectedFilters();\n    setDisplayMobileFilter(false);\n    document.body.classList.remove('no-scroll');\n  };\n\n  const calcSelectedFilters = () => {\n    let selectedFiltersLen = 0;\n    // we need to get the item.value of each on the facets that are filled (value is not empty)\n    const selectedFilters = facets.reduce((acc: string[], item: FacetProps) => {\n      if (item.value && Array.isArray(item.value)) {\n        (item.value as string[]).forEach((value: string) => {\n          acc.push(value);\n        });\n      } else if (item.value) {\n        acc.push(item.value as string);\n      }\n      return acc;\n    }, []);\n\n    selectedFiltersLen += selectedFilters.length;\n\n    if (searchTerm && searchTerm.length > 0) {\n      selectedFiltersLen += 1;\n    }\n\n    setFiltersApplied(selectedFiltersLen);\n  };\n\n  const clearResults = () => {\n    const filtered = filterFacets().map(facet => {\n      if (facet.id === 'ProgramTypeFacet' && defaultFilter && !isFirstLoad) {\n        return { ...facet, value: [defaultFilter] };\n      }\n      return facet;\n    });\n    setFilters(filtered);\n    document.body.classList.remove('no-scroll');\n    setDisplayMobileFilter(false);\n  };\n\n  const programsListingOnValueChange = (itemID: string, facetID: string) => {\n    const isOnCampusLocationFacet = itemID.includes('on-campus');\n    const tempID = isOnCampusLocationFacet ? 'CampusLocationFacet' : facetID;\n    const value = findFacetById(tempID, facets) as FacetPropsItems;\n    let selectedValues = Array.isArray(value?.value) ? (value?.value as string[]) : [];\n\n    if (isOnCampusLocationFacet && itemID.includes('all')) {\n      const onCampusItems = facets.find(facet => facet.id === 'CampusLocationFacet')?.items;\n\n      // if it includes on-campus-all, we select all the on-campus locations values from facet\n      if (selectedValues.length === onCampusItems?.length) {\n        selectedValues = [];\n      } else {\n        selectedValues = onCampusItems?.map(item => item.id) || [];\n      }\n    } else {\n      const tempID = isOnCampusLocationFacet ? itemID.replace('on-campus-', '') : itemID;\n      if (selectedValues.includes(tempID)) {\n        selectedValues = selectedValues.filter(item => item !== tempID);\n      } else {\n        selectedValues.push(tempID);\n      }\n    }\n\n    onSelectionChangeHandler(tempID, selectedValues.join(','));\n  };\n\n  const programsListingClassName = (itemID: string, type?: string) => {\n    if (itemID.includes('on-campus')) {\n      const facet = facets.find(facet => facet.id === 'CampusLocationFacet');\n      if (type === 'checkbox') {\n        if (itemID.includes('all')) {\n          return facet?.value?.length === facet?.items.length\n            ? 'check-item__all'\n            : 'check-item__partial';\n        }\n        return '';\n      }\n\n      return itemID.includes('all')\n        ? 'program-select__item program-select__item__all'\n        : 'program-select__item program-select__item__on-campus';\n    } else {\n      return 'program-select__item';\n    }\n  };\n\n  const handleCheckboxChange = (facetId: string, itemId: string, checked: boolean) => {\n    const updatedFacet = updatedFacets.find(facet => facet.id === facetId);\n    if (updatedFacet) {\n      let newValue: string[] = Array.isArray(updatedFacet.value) ? [...updatedFacet.value] : [];\n\n      if (checked) {\n        newValue.push(itemId);\n      } else {\n        newValue = newValue.filter(id => id !== itemId);\n      }\n\n      onSelectionChangeHandler(facetId, newValue.join(','));\n    }\n  };\n\n  const handleOrderByChange = (value: string) => {\n    if (setOrderBy) {\n      setOrderBy(value);\n    }\n  };\n\n  return (\n    <div\n      className={`listing__mobile ${listingType ? `listing__mobile--${listingType}` : ''} ${displayMobileFilter ? 'open' : ''}`}\n    >\n      <div className=\"listing__mobile-sticky-filter\">\n        <button className=\"listing__mobile-filter-button\" onClick={() => toggleMobileFilter()}>\n          <svg className=\"listing__mobile-filter-button-icon\" role=\"presentation\">\n            <use xlinkHref=\"#substract\"></use>\n          </svg>\n          <span>{mobileFilterNarrowLabel}</span>\n        </button>\n        {filtersApplied > 0 && (\n          <span className=\"listing__mobile-filter-tags\">\n            {mobileAppliedFiltersLabel.replace('{0}', filtersApplied.toString())}\n          </span>\n        )}\n      </div>\n\n      {(isProgramListing || isEcommerceListing) && (\n        <Search\n          searchPlaceholder={searchPlaceholder!}\n          setStoreSearchTerm={setSearchTerm!}\n          searchTerm={searchTerm!}\n          pagination={pagination}\n          setPagination={setPagination}\n        />\n      )}\n\n      <div\n        className={`listing__mobile-filters ${isSearchListing ? 'listing__mobile-filters--search' : ''}`}\n      >\n        <div className=\"listing__facet listing__facet--accordion accordion\">\n          <Accordion type=\"single\" value={value} onValueChange={setValue} collapsible>\n            {sortOptions && sortOptions.length > 1 && (\n              <AccordionItem key={'sort'} value={'sort'}>\n                <AccordionTrigger className=\"listing__mobile-facet\">Sort By</AccordionTrigger>\n                <AccordionContent>\n                  {sortOptions.map(({ label, value }) => (\n                    <div key={value} className=\"listing__sort__radio radio-container\">\n                      <input\n                        type=\"radio\"\n                        id={value}\n                        name=\"sort\"\n                        value={value}\n                        checked={orderBy === value}\n                        onChange={e => handleOrderByChange(e.target.value as SortOptions)}\n                      />\n                      <span className=\"checkmark\"></span>\n                      <label\n                        className={`${orderBy === value ? 'label-selected' : ''}`}\n                        htmlFor={value}\n                      >\n                        {label}\n                      </label>\n                    </div>\n                  ))}\n                </AccordionContent>\n              </AccordionItem>\n            )}\n\n            {updatedFacets.map((facet, index) => {\n              const { id: facetID, title, items: facetItems, type } = facet;\n              const isFacetItemsEmpty = !facetItems || facetItems.length === 0;\n\n              if (type === 'date') {\n                const minDate = facetItems?.find(item => item.id === 'minDate')?.value as string;\n                const maxDate = facetItems?.find(item => item.id === 'maxDate')?.value as string;\n\n                return (\n                  <AccordionItem key={index + 1} value={facet.id}>\n                    <AccordionTrigger className={`listing__mobile-facet`}>\n                      {'Event Date'}\n                    </AccordionTrigger>\n                    <AccordionContent className={'listing__facet-accordion-content--date'}>\n                      {facetItems &&\n                        facetItems.map(item => {\n                          return (\n                            <FacetDate\n                              key={item.id}\n                              id={item.id}\n                              title={item.title}\n                              value={item.value}\n                              onSelectionChange={onSelectionChangeHandler}\n                              selectedFilters={facets}\n                              minDate={minDate}\n                              maxDate={maxDate}\n                            />\n                          );\n                        })}\n                    </AccordionContent>\n                  </AccordionItem>\n                );\n              }\n\n              if (isPeopleDirectoryListing && facetID === 'LetterFacet') {\n                return (\n                  <AccordionItem key={index + 1} value={facetID}>\n                    <AccordionTrigger className={`listing__mobile-facet`}>{title}</AccordionTrigger>\n                    <AccordionContent className={'listing__facet-accordion-content'}>\n                      <KeySearcher\n                        selectedValue={findFacetById(facetID, facets)?.value as string}\n                        onChange={(value: string) => onSelectionChangeHandler(facetID, value)}\n                        disabledLetters={unavailableLetters}\n                      />\n                    </AccordionContent>\n                  </AccordionItem>\n                );\n              }\n\n              if (isFacetItemsEmpty || facetID === 'CampusLocationFacet') {\n                return null;\n              }\n\n              if (isEcommerceListing) {\n                let visibleDropdownFacet;\n                const selectedType = getFacetValueById(\n                  facets,\n                  ECommerceCoursesAndProductsFacetTypes.Categories\n                );\n\n                if (selectedType?.[0] === 'courses') {\n                  visibleDropdownFacet = ECommerceCoursesAndProductsFacetTypes.AreaOfStudyFacet;\n                } else {\n                  visibleDropdownFacet = ECommerceCoursesAndProductsFacetTypes.ProductTypeFacet;\n                }\n\n                // we return null if one of the facet is not the equal the  visibleDropdownFacet or 'Categories'\n\n                if (\n                  facetID !== visibleDropdownFacet &&\n                  facetID !== ECommerceCoursesAndProductsFacetTypes.Categories\n                ) {\n                  return null;\n                }\n              }\n\n              return (\n                <AccordionItem key={index + 1} value={facetID}>\n                  <AccordionTrigger className={`listing__mobile-facet`}>{title}</AccordionTrigger>\n\n                  <AccordionContent className={'listing__facet-accordion-content'}>\n                    {facetItems &&\n                      facetItems.map((item, index) => {\n                        let selectProgramClass = '';\n                        if (isProgramListing) {\n                          selectProgramClass = programsListingClassName(item.id);\n                        }\n\n                        // If the ID is 'categories' or 'programtypefacet', render a radio button\n                        if (\n                          facetID.toLowerCase() === 'categories' ||\n                          facetID.toLowerCase() === 'programtypefacet'\n                        ) {\n                          return (\n                            <div\n                              key={item.id}\n                              className={`listing__sort__radio radio-container ${selectProgramClass}`}\n                            >\n                              <input\n                                type=\"radio\"\n                                id={item.id}\n                                name=\"categories\"\n                                value={item.title}\n                                checked={isChecked(item, facetID)}\n                                onChange={() => onSelectionChangeHandler(facetID, item.id)}\n                              />\n                              <span className=\"checkmark\"></span>\n                              <label\n                                className={`${isChecked(item, facetID) ? 'label-selected' : ''}`}\n                                htmlFor={item.value}\n                              >\n                                {item.value}\n                              </label>\n                            </div>\n                          );\n                        }\n\n                        return (\n                          <div className={`checkbox__container ${selectProgramClass}`} key={index}>\n                            <Checkbox\n                              id={item.id}\n                              onCheckedChange={checked => {\n                                if (isProgramListing) {\n                                  programsListingOnValueChange(item.id, facetID);\n                                } else {\n                                  handleCheckboxChange(facetID, item.id, checked as boolean);\n                                }\n                              }}\n                              aria-label={item.value}\n                              checked={isChecked(item, facetID)}\n                            />\n\n                            <div className=\"checkbox__label-wrapper\">\n                              <label htmlFor={item.id} className=\"checkbox__label\">\n                                {item.value}\n                              </label>\n                              {type !== 'search' &&\n                                !isEcommerceListing &&\n                                !isPeopleDirectoryListing &&\n                                !isProgramListing && (\n                                  <span className=\"checkbox__label-number\">({item.count})</span>\n                                )}\n                            </div>\n                          </div>\n                        );\n                      })}\n                  </AccordionContent>\n                </AccordionItem>\n              );\n            })}\n          </Accordion>\n        </div>\n      </div>\n\n      <div className=\"listing__mobile-footer\">\n        <button\n          className=\"link link--primary listing__mobile-clear-filters\"\n          onClick={() => clearResults()}\n        >\n          {clearAllLabel}\n        </button>\n        <button\n          className=\"btn btn--primary  listing__mobile-show-results\"\n          onClick={() => showResults()}\n        >\n          {mobileShowResultsLabel.replace(\n            '{0}',\n            pagination.total ? pagination.total.toString() : ''\n          )}\n        </button>\n      </div>\n    </div>\n  );\n};\n\nexport default FacetsMobile;\n","import React from 'react';\r\nimport { ArticleDetailPage } from '../../../../../codegenGenerated/optigraphql/generated';\r\nimport { getDateThreeLetterMonth } from '../../../../helpers/getDateLetter';\r\n\r\ninterface OwnProps {\r\n  item: ArticleDetailPage;\r\n  imgFallback?: string;\r\n}\r\n\r\nexport const BlogAndNewsCard = ({ item }: OwnProps) => {\r\n  if (!item) return <></>;\r\n\r\n  const {\r\n    Name: title,\r\n    FeaturedDescription: description,\r\n    Date: minDate,\r\n    ReadTime: readTime,\r\n    BlogAndNewsImage: image,\r\n    Url: url\r\n  } = item;\r\n\r\n  return (\r\n    <a href={url ? url : ''} className=\"listing-card listing-card--blog listing-card--blog link\">\r\n      <span className=\"listing-card__border--line \"></span>\r\n      <div className=\"listing-card__content\">\r\n        {image && image?.Url && (\r\n          <div className=\"picture\">\r\n            <img\r\n              className=\"listing-card__image\"\r\n              src={`${image?.Url}?width=624&height=468}`}\r\n              srcSet={`${image?.Url}?width=624&height=468&format=webp 240w,\r\n              ${image?.Url}?width=624&height=428&format=webp 480w,\r\n              ${image?.Url}?width=312&height=234 240w,\r\n              ${image?.Url}?width=624&height=428 480w`}\r\n              alt={title ? title : ''}\r\n              loading=\"lazy\"\r\n              width=\"315\"\r\n              height=\"234\"\r\n            />\r\n          </div>\r\n        )}\r\n        <div className=\"listing-card__desc\">\r\n          <h4 className=\"listing-card__even-title-label\">\r\n            {title}\r\n            <div className=\"link-decorator\">\r\n              <span className=\"link-decorator-inner\"></span>\r\n              <span className=\"link-decorator-outer\"></span>\r\n            </div>\r\n          </h4>\r\n          <p className=\"listing-card__description rtf\">{description}</p>\r\n          <div className=\"listing-card__info\">\r\n            {minDate && (\r\n              <p className=\"listing-card__event-date\" key={minDate}>\r\n                {getDateThreeLetterMonth(minDate)} {minDate.split('-')[2].split('T')[0]},{' '}\r\n                {minDate.split('-')[0]}\r\n              </p>\r\n            )}\r\n\r\n            {readTime && (\r\n              <p className=\"listing-card__event-college\" key={readTime}>\r\n                {readTime}\r\n              </p>\r\n            )}\r\n          </div>\r\n        </div>\r\n      </div>\r\n      <span className=\"listing-card__border--line \"></span>\r\n    </a>\r\n  );\r\n};\r\n","import React from 'react';\nimport { CourseProduct } from '../../../../../codegenGenerated/optigraphql/generated';\n\nexport const EcommerceCoursesCard = (item: CourseProduct) => {\n  if (!item) return <></>;\n\n  const { Url, CourseSubjectId, CourseTitle, AreaOfStudyFacet } = item;\n\n  let areasOfStudy: string[] = [];\n  if (AreaOfStudyFacet?.AllCategoriesIds) {\n    areasOfStudy =\n      AreaOfStudyFacet?.Categories?.map(area => {\n        return area?.Title || '';\n      }) || [];\n  }\n\n  return (\n    <a href={Url ? Url : ''} className=\"listing-card listing-card--ecommerce-courses link\">\n      <span className=\"listing-card__border--line \"></span>\n      <div className=\"listing-card__content\">\n        <div className=\"listing-card__desc\">\n          <h4 className=\"listing-card__even-title-label\">\n            <span className=\"listing-card__even-title-label\">\n              {' '}\n              {`${CourseSubjectId}: ${CourseTitle}`}\n            </span>\n            <div className=\"link-decorator\">\n              <span className=\"link-decorator-inner\"></span>\n              <span className=\"link-decorator-outer\"></span>\n            </div>\n          </h4>\n          <div className=\"listing-card__info\">\n            <p className=\"listing-card__event-type\">{areasOfStudy.join(', ')}</p>\n          </div>\n        </div>\n      </div>\n      <span className=\"listing-card__border--line \"></span>\n    </a>\n  );\n};\n","import React from 'react';\nimport { StandardProduct } from '../../../../../codegenGenerated/optigraphql/generated';\n\nexport type ProductsCardProps = {\n  item: StandardProduct;\n  imgFallback?: string;\n};\n\nexport const EcommerceProductsCard = ({ item, imgFallback }: ProductsCardProps) => {\n  if (!item) return <></>;\n\n  const { Url, DefaultImageUrl, DefaultMarketPrice, DisplayName } = item;\n\n  return (\n    <a href={Url ? Url : ''} className=\"listing-card listing-card--ecommerce-products link\">\n      <div className=\"listing-card__content\">\n        <div className=\"picture\">\n          <img\n            className=\"listing-card__image\"\n            src={`${DefaultImageUrl && DefaultImageUrl !== '' ? DefaultImageUrl : imgFallback}?width=480&height=853`}\n            srcSet={`${DefaultImageUrl && DefaultImageUrl !== '' ? DefaultImageUrl : imgFallback} 240w, ${DefaultImageUrl && DefaultImageUrl !== '' ? DefaultImageUrl : imgFallback}?width=960&height=1706&format=webp 960w,\n              ${DefaultImageUrl && DefaultImageUrl !== '' ? DefaultImageUrl : imgFallback}?width=240&height=427 240w,\n              ${DefaultImageUrl && DefaultImageUrl !== '' ? DefaultImageUrl : imgFallback}?width=480&height=854 480w,\n              ${DefaultImageUrl && DefaultImageUrl !== '' ? DefaultImageUrl : imgFallback}?width=960&height=1706 960w`}\n            alt=\"about-card-image\"\n            loading=\"lazy\"\n            width=\"120\"\n            height=\"120\"\n          />\n        </div>\n        <div className=\"listing-card__desc\">\n          <h4 className=\"listing-card__even-title-label\">\n            <span className=\"listing-card__even-title-label\"> {DisplayName}</span>\n            <div className=\"link-decorator\">\n              <span className=\"link-decorator-inner\"></span>\n              <span className=\"link-decorator-outer\"></span>\n            </div>\n          </h4>\n          <div className=\"listing-card__info\">\n            <p className=\"listing-card__product-price\">{`$${DefaultMarketPrice?.toFixed(2)}`}</p>\n          </div>\n        </div>\n      </div>\n    </a>\n  );\n};\n","import React from 'react';\r\nimport {\r\n  EventDetailPage,\r\n  FilterCategoryItemModel\r\n} from '../../../../../codegenGenerated/optigraphql/generated';\r\nimport { getDateThreeLetterMonth, getDateDayNumber } from '../../../../helpers/getDateLetter';\r\n\r\nexport const EventsListingCard = (event: EventDetailPage) => {\r\n  if (!event) return <></>;\r\n\r\n  const {\r\n    EventTitle: title,\r\n    EventLocationFacet,\r\n    EventAudienceFacet,\r\n    EventTypeFacet,\r\n    Url: url,\r\n    InitialDateEvent,\r\n    EndDateEvent\r\n  } = event;\r\n\r\n  // As per specs, only one/first location, audience and type will be displayed\r\n  const [location, audience, type]: FilterCategoryItemModel[] = [\r\n    EventLocationFacet!.Categories?.[0] as FilterCategoryItemModel,\r\n    EventAudienceFacet?.Categories?.[0] as FilterCategoryItemModel,\r\n    EventTypeFacet?.Categories?.[0] as FilterCategoryItemModel\r\n  ];\r\n\r\n  return (\r\n    <>\r\n      <a href={url ? url : ''} className=\"listing-card link\">\r\n        <span className=\"listing-card__border--line \"></span>\r\n        <div className=\"listing-card__content\">\r\n          <div className=\"listing-card__desc\">\r\n            <h2 className=\"listing-card__even-title-label\">\r\n              <span className=\"listing-card__even-title-label\"> {title}</span>\r\n              <div className=\"link-decorator\">\r\n                <span className=\"link-decorator-inner\"></span>\r\n                <span className=\"link-decorator-outer\"></span>\r\n              </div>\r\n            </h2>\r\n            <div className=\"listing-card__info\">\r\n              {location && location.Title && (\r\n                <p className=\"listing-card__event-type\" key={location.Id}>\r\n                  {location.Title}\r\n                </p>\r\n              )}\r\n\r\n              {type && type.Title && (\r\n                <p className=\"listing-card__event-type\" key={type.Id}>\r\n                  {type.Title}\r\n                </p>\r\n              )}\r\n\r\n              {audience && audience.Title && (\r\n                <p className=\"listing-card__event-type\" key={audience.Id}>\r\n                  {audience.Title}\r\n                </p>\r\n              )}\r\n            </div>\r\n          </div>\r\n          <div className=\"listing-card__date\">\r\n            {getDateThreeLetterMonth(InitialDateEvent) === getDateThreeLetterMonth(EndDateEvent) ||\r\n            EndDateEvent === null ? (\r\n              <p className=\"listing-card__date-month\">\r\n                {getDateThreeLetterMonth(InitialDateEvent)}\r\n              </p>\r\n            ) : (\r\n              <p className=\"listing-card__date-month\">\r\n                {getDateThreeLetterMonth(InitialDateEvent)} -{' '}\r\n                {getDateThreeLetterMonth(EndDateEvent)}\r\n              </p>\r\n            )}\r\n            {EndDateEvent === null ||\r\n            getDateDayNumber(InitialDateEvent) === getDateDayNumber(EndDateEvent) ? (\r\n              <p className=\"listing-card__date-days\">{getDateDayNumber(InitialDateEvent)}</p>\r\n            ) : (\r\n              <p className=\"listing-card__date-days\">\r\n                {getDateDayNumber(InitialDateEvent)} - {getDateDayNumber(EndDateEvent)}\r\n              </p>\r\n            )}\r\n          </div>\r\n        </div>\r\n        <span className=\"listing-card__border--line \"></span>\r\n      </a>\r\n    </>\r\n  );\r\n};\r\n","import React from 'react';\nimport {\n  // FilterCategoryItemModel,\n  OfficesAndServicesDetailPage\n} from '../../../../../codegenGenerated/optigraphql/generated';\n\nexport const OfficesAndServicesCard = (item: OfficesAndServicesDetailPage) => {\n  if (!item) return <></>;\n\n  const {\n    OfficeAndServiceEmail: email,\n    OfficeAndServiceLocation: location,\n    OfficeAndServiceName: name,\n    OfficeAndServicePhone: phone,\n    Url: url,\n    _id: id\n  } = item;\n\n  // InfoItem Component\n  const InfoItem = ({ iconType, text }: { iconType: string; text: string }) => (\n    <div className={`listing-card__event-type listing-card__event-type--${iconType}`}>\n      {iconType && iconType !== 'empty' && (\n        <svg className={'listing-card__offices-icon'} role=\"presentation\">\n          <use xlinkHref={`#${iconType}`}></use>\n        </svg>\n      )}\n      {text}\n    </div>\n  );\n\n  return (\n    <>\n      <a href={url ? url : ''} className=\"listing-card  listing-card--offices link\" key={id}>\n        <span className=\"listing-card__border--line \"></span>\n        <div className=\"listing-card__content\">\n          <div className=\"listing-card__desc\">\n            <h4 className=\"listing-card__even-title-label\">\n              <span className=\"listing-card__even-title-label\"> {name}</span>\n              <div className=\"link-decorator\">\n                <span className=\"link-decorator-inner\"></span>\n                <span className=\"link-decorator-outer\"></span>\n              </div>\n            </h4>\n            <div className=\"listing-card__info\">\n              {email ? (\n                <InfoItem iconType=\"mail\" text={email} />\n              ) : (\n                <InfoItem iconType=\"empty\" text={''} />\n              )}\n              {phone ? (\n                <InfoItem iconType=\"phone\" text={phone} />\n              ) : (\n                <InfoItem iconType=\"empty\" text={''} />\n              )}\n              {location ? (\n                <InfoItem iconType=\"building\" text={location} />\n              ) : (\n                <InfoItem iconType=\"empty\" text={''} />\n              )}\n            </div>\n          </div>\n        </div>\n        <span className=\"listing-card__border--line \"></span>\n      </a>\n    </>\n  );\n};\n","import React, { memo, useMemo } from 'react';\nimport { PeopleDetailPage } from '../../../../../codegenGenerated/optigraphql/generated';\n\nexport type PeopleDirectoryCardProps = {\n  item: PeopleDetailPage;\n  imgFallback?: string;\n};\n\n// Separate InfoItem into its own memoized component\nconst InfoItem = memo(({ iconType, text }: { iconType: string; text: string | string[] }) => (\n  <div className={`listing-card__event-type listing-card__event-type--${iconType}`}>\n    {iconType && iconType !== 'empty' && (\n      <div className={'listing-card__icon-container'}>\n        <svg className={'listing-card__icon'} role=\"presentation\">\n          <use xlinkHref={`#${iconType}`}></use>\n        </svg>\n      </div>\n    )}\n    {Array.isArray(text) ? (\n      <div className={'listing-card__event-type__multiple-container'}>\n        {text.map((item, index) => (\n          <span key={`${item}-${index}`}>{item}</span>\n        ))}\n      </div>\n    ) : (\n      text\n    )}\n  </div>\n));\nInfoItem.displayName = 'InfoItem';\n\nexport const PeopleDirectoryCard = memo(({ item }: PeopleDirectoryCardProps) => {\n  if (!item) return null;\n\n  const {\n    Url,\n    FirstName,\n    LastName,\n    PersonTitle,\n    DepartmentFacet,\n    Email,\n    CampusLocationFacet,\n    PageImage\n  } = item;\n\n  // Memoize the processed arrays\n  const { campusLocations, departments } = useMemo(() => {\n    const campusLocs = CampusLocationFacet?.AllCategoriesIds\n      ? CampusLocationFacet?.Categories?.map(area => area?.Title || '') || []\n      : [];\n\n    const depts = DepartmentFacet?.AllCategoriesIds\n      ? DepartmentFacet?.Categories?.map(area => area?.Title || '') || []\n      : [];\n\n    return { campusLocations: campusLocs, departments: depts };\n  }, [CampusLocationFacet, DepartmentFacet]);\n\n  // Memoize the person info section\n  const personInfo = useMemo(\n    () => (\n      <div className=\"listing-card__info listing-card__info--people-info\">\n        <p>\n          {PersonTitle}\n          {PersonTitle && departments.length > 0 && (\n            <span className={'listing-card__separator'}>•</span>\n          )}\n          {departments.length > 0 && departments.join(', ')}\n        </p>\n      </div>\n    ),\n    [PersonTitle, departments]\n  );\n\n  // Memoize the contact info section\n  const contactInfo = useMemo(\n    () => (\n      <div className=\"listing-card__info\">\n        {Email ? (\n          <InfoItem iconType=\"mail\" text={Email} />\n        ) : (\n          <InfoItem iconType=\"empty\" text={''} />\n        )}\n        {campusLocations.length > 0 ? (\n          <InfoItem iconType=\"building\" text={campusLocations} />\n        ) : (\n          <InfoItem iconType=\"empty\" text={''} />\n        )}\n      </div>\n    ),\n    [Email, campusLocations]\n  );\n\n  // Memoize the image section\n  const imageSection = useMemo(() => {\n    if (!PageImage?.Url) return null;\n    return (\n      <div className=\"picture\">\n        <img\n          className=\"listing-card__image\"\n          src={`${PageImage.Url}?width=853&height=853}`}\n          srcSet={`${PageImage.Url}?width=427&height=427&format=webp 240w,\n            ${PageImage.Url}?width=854&height=854&format=webp 480w,\n            ${PageImage.Url}?width=427&height=427 240w,\n            ${PageImage.Url}?width=854&height=854 480w`}\n          alt=\"about-card-image\"\n          loading=\"lazy\"\n          width=\"120\"\n          height=\"120\"\n        />\n      </div>\n    );\n  }, [PageImage?.Url]);\n\n  return (\n    <a href={Url || ''} className=\"listing-card listing-card--people-directory link\">\n      <span className=\"listing-card__border--line\" />\n      <div className=\"listing-card__content\">\n        <div className=\"listing-card__desc\">\n          <div className={'listing-card__people-desc-container'}>\n            <h4 className=\"listing-card__even-title-label\">\n              <span className=\"listing-card__even-title-label\">{`${FirstName} ${LastName}`}</span>\n              <div className=\"link-decorator\">\n                <span className=\"link-decorator-inner\" />\n                <span className=\"link-decorator-outer\" />\n              </div>\n            </h4>\n            {personInfo}\n          </div>\n          {contactInfo}\n          {imageSection}\n        </div>\n      </div>\n      <span className=\"listing-card__border--line\" />\n    </a>\n  );\n});\n\nPeopleDirectoryCard.displayName = 'PeopleDirectoryCard';\n","import React, { useEffect } from 'react';\r\n\r\ntype OwnProps = {\r\n  barRect: DOMRect;\r\n};\r\n\r\nconst ScrollIndicator = ({ barRect }: OwnProps) => {\r\n  useEffect(() => {\r\n    // we listen for scroll events\r\n    window.addEventListener('scroll', () => {\r\n      // we get the scroll position\r\n      const scrollPosition = window.scrollY;\r\n      // we get the scroll height\r\n      const scrollHeight = document.body.scrollHeight - window.innerHeight;\r\n      // we calculate the scroll percentage\r\n      const scrollPercentage = (scrollPosition / scrollHeight) * 100;\r\n\r\n      // we set the dot position\r\n      const dot = document.querySelector('.scroll-indicator__dot') as HTMLElement;\r\n      if (dot) {\r\n        dot.style.top = scrollPercentage + '%';\r\n      }\r\n    });\r\n  }, []);\r\n\r\n  // we set the bar height to the bar rect.height\r\n  const barHeight = barRect.height - 90 + 'px';\r\n\r\n  return (\r\n    <div\r\n      role=\"presentation\"\r\n      className=\"scroll-indicator scroll-indicator--programs\"\r\n      aria-hidden=\"true\"\r\n      id=\"scroll-indicator\"\r\n    >\r\n      <div\r\n        className=\"scroll-indicator__bar scroll-indicator__bar--dark\"\r\n        style={{ blockSize: barHeight }}\r\n      ></div>\r\n      <div className=\"scroll-indicator__dot scroll-indicator__dot--dark\"></div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default ScrollIndicator;\r\n","import React, { useEffect, useRef } from 'react';\r\nimport {\r\n  FilterCategoryItemModel,\r\n  LinkItemNode,\r\n  Maybe,\r\n  ProgramDetailPage\r\n} from '../../../../../codegenGenerated/optigraphql/generated';\r\nimport {\r\n  AccordionContent,\r\n  AccordionItem,\r\n  AccordionTrigger\r\n} from '../../../../components/react-components/Accordion';\r\nimport ScrollIndicator from '../../../../components/react-components/ScrollIndicator';\r\n\r\ninterface OwnProps {\r\n  item: ProgramDetailPage;\r\n  additionalProps?: { [key: string]: string };\r\n  modeOfStudyLabel: string;\r\n  programTypeLabel: string;\r\n  degreesOfferLabel: string;\r\n  departmentOfferLabel: string;\r\n  schoolLabel: string;\r\n}\r\n\r\ntype CategoriesListProps = {\r\n  title: string;\r\n  isLink?: boolean;\r\n  categories:\r\n    | Maybe<Array<Maybe<FilterCategoryItemModel>>>\r\n    | Maybe<Array<Maybe<LinkItemNode | undefined>>>\r\n    | undefined;\r\n};\r\n\r\nexport const ProgramAndCertificatesCard = ({\r\n  item,\r\n  additionalProps,\r\n  modeOfStudyLabel,\r\n  programTypeLabel,\r\n  degreesOfferLabel,\r\n  departmentOfferLabel,\r\n  schoolLabel\r\n}: OwnProps) => {\r\n  if (!item) return <></>;\r\n  const elementRef = useRef(null);\r\n  const [barRect, setBarRect] = React.useState({} as DOMRect);\r\n  const nameEl = useRef<HTMLHeadingElement>(null);\r\n\r\n  const {\r\n    _id: id,\r\n    Url: url,\r\n    ProgramSortableName: name,\r\n    ProgramTypeFacet: programType,\r\n    LocationFacet: location,\r\n    ApplyCTALink: applyCTALink,\r\n    DegreesFacet: degrees,\r\n    SchoolCtaLink: schoolCTALink,\r\n    DepartmentCtaLink: departmentCTALink,\r\n    DepartmentFacet: department,\r\n    ProgramFinderDescription: description\r\n  } = item;\r\n\r\n  const isCertificate = additionalProps?.certificateId === programType?.Categories?.[0]?.Id;\r\n\r\n  const applyLink = () => {\r\n    if (isCertificate) {\r\n      if (!applyCTALink || !applyCTALink.Href || !applyCTALink.Text) {\r\n        return null;\r\n      }\r\n\r\n      return (\r\n        <a\r\n          href={applyCTALink.Href!}\r\n          target={applyCTALink.Target ?? '_blank'}\r\n          className=\"btn btn--secondary  on-dark\"\r\n        >\r\n          {applyCTALink.Text}\r\n          <span className=\"btn-decorator\">\r\n            <span className=\"btn-decorator-inner\"></span>\r\n            <span className=\"btn-decorator-outer\"></span>\r\n          </span>\r\n        </a>\r\n      );\r\n    }\r\n\r\n    return (\r\n      <a\r\n        href={applyCTALink?.Href ? applyCTALink.Href : additionalProps?.applyLinkFallback}\r\n        target={applyCTALink?.Target ?? '_blank'}\r\n        className=\"btn btn--secondary  on-dark\"\r\n      >\r\n        {applyCTALink?.Text ? applyCTALink?.Text : additionalProps?.applyLabelFallback}\r\n        <span className=\"btn-decorator\">\r\n          <span className=\"btn-decorator-inner\"></span>\r\n          <span className=\"btn-decorator-outer\"></span>\r\n        </span>\r\n      </a>\r\n    );\r\n  };\r\n\r\n  useEffect(() => {\r\n    const alertFunc = function () {\r\n      //console.log('Button clicked', nameEl.current);\r\n    };\r\n    const nameRef = nameEl.current;\r\n\r\n    if (!nameRef) return;\r\n\r\n    nameRef.addEventListener('click', alertFunc, false);\r\n    // Specify how to clean up after this effect:\r\n    return function cleanup() {\r\n      nameRef.removeEventListener('click', alertFunc, false);\r\n    };\r\n  });\r\n\r\n  // INFO: use this sample description for testing purposes\r\n  // const description =\r\n  //   '<h2> What is a GIS Degree?</h2><p>According to the US Department of Labor, geospatial technology is one of the high growth industries due to its diverse applications in</p><ul><li>urban planning</li><li>environmental management</li><li>transportation</li><li>telecommunications</li><li>and many other fields</li></ul><p>To respond to the rising demand in geospatial skills, the University of Redlands offers an internal GIS pathway program that allows the University undergraduates who want to pursue GIS as a future career path to earn a master’s degree in GIS within a year after they complete their undergraduate degree at Redlands. </p>';\r\n\r\n  // Define a reusable component for rendering the categories list\r\n  const CategoriesList = ({ title, categories, isLink }: CategoriesListProps) => {\r\n    if (!categories || categories.length === 0) return null;\r\n\r\n    // if categories is of type  Maybe<LinkItemNode>[]\r\n    if (isLink) {\r\n      return (\r\n        <li className=\"right-rail__programs-info--item\">\r\n          <h5 className=\"right-rail__programs-info--heading\">{title}</h5>\r\n          <ul className=\"right-rail__programs-info--list\">\r\n            {categories.map((category, index) => {\r\n              if (!category) return null;\r\n\r\n              const { Href, Target, Text } = category as LinkItemNode;\r\n\r\n              return (\r\n                <li key={index}>\r\n                  <a href={Href ?? '#'} target={Target ?? '_blank'}>\r\n                    {Text}\r\n                  </a>\r\n                </li>\r\n              );\r\n            })}\r\n          </ul>\r\n        </li>\r\n      );\r\n    }\r\n\r\n    return (\r\n      <li className=\"right-rail__programs-info--item\">\r\n        <h5 className=\"right-rail__programs-info--heading\">{title}</h5>\r\n        <ul className=\"right-rail__programs-info--list\">\r\n          {categories.map((category, index) => (\r\n            <li key={index}>{category?.Title}</li>\r\n          ))}\r\n        </ul>\r\n      </li>\r\n    );\r\n  };\r\n\r\n  const handleOnClick = () => {\r\n    if (!elementRef.current) return;\r\n\r\n    // Use setTimeout to ensure updates are done after a delay of 500ms\r\n    setTimeout(() => {\r\n      try {\r\n        const element = elementRef.current as unknown as HTMLElement;\r\n        const barRect = element.getBoundingClientRect();\r\n        setBarRect(barRect);\r\n      } catch (error) {\r\n        console.error('Failed to get bounding rectangle', error);\r\n      }\r\n    }, 400);\r\n  };\r\n\r\n  return (\r\n    <AccordionItem value={id!} className=\"program-accordion__item\">\r\n      <AccordionTrigger\r\n        className=\"program-accordion__heading\"\r\n        onClick={e => {\r\n          e.stopPropagation();\r\n          // if e.currentTarget is the program-accordion__name element, then we dont open the accordion\r\n          // and we redirect to the program detail page url\r\n\r\n          if (nameEl.current !== null && e.target === nameEl.current) {\r\n            // redirect to the program detail page url\r\n            e.preventDefault();\r\n            window.location.href = url ?? '#';\r\n            return;\r\n          }\r\n\r\n          handleOnClick();\r\n        }}\r\n      >\r\n        <div className=\"program-accordion__heading-program\">\r\n          <h4 className=\"program-accordion__name\" ref={nameEl}>\r\n            {name}\r\n          </h4>\r\n\r\n          {/* <h4>\r\n            <a href={url ?? '#'}>{programShortName ? programShortName : programFullName}</a>\r\n          </h4> */}\r\n          <div className=\"btn-decorator\">\r\n            <span className=\"btn-decorator-inner\"></span>\r\n            <span className=\"btn-decorator-outer\"></span>\r\n          </div>\r\n        </div>\r\n        <span className=\"program-accordion__titles\">\r\n          {programType?.Categories?.map(category => {\r\n            return category?.Title;\r\n          }).join(', ')}\r\n        </span>\r\n      </AccordionTrigger>\r\n      <AccordionContent className=\"program-accordion__content\" ref={elementRef}>\r\n        <div className=\"program-accordion__content--left-rail\">\r\n          <div className=\"rtf \" dangerouslySetInnerHTML={{ __html: description! }} />\r\n\r\n          <div className=\"left-rail__ctas\">\r\n            {url && (\r\n              <a className=\"btn btn--primary  on-dark \" href={url}>\r\n                {additionalProps?.learnMore ?? ''}\r\n                <span className=\"btn-decorator\">\r\n                  <span className=\"btn-decorator-inner\"></span>\r\n                  <span className=\"btn-decorator-outer\"></span>\r\n                </span>\r\n              </a>\r\n            )}\r\n            {applyLink()}\r\n          </div>\r\n        </div>\r\n\r\n        <ScrollIndicator barRect={barRect} />\r\n\r\n        <div className=\"rtf program-accordion__content--right-rail\">\r\n          <ul className=\"right-rail__programs-info\">\r\n            <CategoriesList title={programTypeLabel} categories={programType?.Categories} />\r\n            <CategoriesList title={degreesOfferLabel} categories={degrees?.Categories} />\r\n            <CategoriesList title={departmentOfferLabel} categories={department?.Categories} />\r\n            <CategoriesList title={modeOfStudyLabel} categories={location?.Categories} />\r\n            <CategoriesList\r\n              title={schoolLabel}\r\n              categories={[departmentCTALink, schoolCTALink]}\r\n              isLink={true}\r\n            />\r\n          </ul>\r\n        </div>\r\n      </AccordionContent>\r\n    </AccordionItem>\r\n  );\r\n};\r\n","import React from 'react';\nimport {\n  FilterCategoryItemModel,\n  ResourceDetailPage\n} from '../../../../../codegenGenerated/optigraphql/generated';\n\nexport const ResourceListingCard = (item: ResourceDetailPage) => {\n  if (!item) return <></>;\n\n  const {\n    ResourceName: title,\n    ResourceOfficesAndServicesFacet,\n    ResourceTypeFacet,\n    ResourceAudienceFacet,\n    ResourceDescription: description,\n    Url: url\n  } = item;\n\n  // As per specs, only one/first location, audience and type will be displayed\n  const [office, audience, type]: FilterCategoryItemModel[] = [\n    ResourceOfficesAndServicesFacet!.Categories?.[0] as FilterCategoryItemModel,\n    ResourceTypeFacet?.Categories?.[0] as FilterCategoryItemModel,\n    ResourceAudienceFacet?.Categories?.[0] as FilterCategoryItemModel\n  ];\n\n  return (\n    <>\n      <a href={url ? url : ''} className=\"listing-card  listing-card--resource link\">\n        <span className=\"listing-card__border--line \"></span>\n        <div className=\"listing-card__content\">\n          <div className=\"listing-card__desc\">\n            <h4 className=\"listing-card__even-title-label\">\n              <span className=\"listing-card__even-title-label\"> {title}</span>\n              {/* <div className=\"link-decorator\">\n                <span className=\"link-decorator-inner\"></span>\n                <span className=\"link-decorator-outer\"></span>\n              </div> */}\n            </h4>\n            <p className=\"listing-card__description rtf\">{description}</p>\n            <div className=\"listing-card__info\">\n              {office && office.Title && (\n                <p className=\"listing-card__event-type\" key={office.Id}>\n                  {office.Title}\n                </p>\n              )}\n\n              {type && type.Title && (\n                <p className=\"listing-card__event-type\" key={type.Id}>\n                  {type.Title}\n                </p>\n              )}\n\n              {audience && audience.Title && (\n                <p className=\"listing-card__event-type\" key={audience.Id}>\n                  {audience.Title}\n                </p>\n              )}\n            </div>\n          </div>\n        </div>\n        <span className=\"listing-card__border--line \"></span>\n      </a>\n    </>\n  );\n};\n","import React from 'react';\r\n\r\nexport type SearchCardItem = {\r\n  _id: string;\r\n  Name: string;\r\n  ContentType: string;\r\n  NavigationTitle: string;\r\n  PageFeaturedDescription: string;\r\n  PageImageUrl?: string;\r\n  Url: string;\r\n};\r\n\r\nexport type SearchCardProps = {\r\n  item: SearchCardItem;\r\n};\r\n\r\nexport const SearchCard = ({ item }: SearchCardProps) => {\r\n  if (!item) return <></>;\r\n\r\n  const {\r\n    Name: title,\r\n    // ContentType: type,\r\n    // NavigationTitle: navTitle,\r\n    PageFeaturedDescription: description,\r\n    PageImageUrl: image,\r\n    Url: url\r\n  } = item;\r\n\r\n  // As per specs, only one/first location, audience and type will be displayed\r\n  //   const [office, audience, type]: FilterCategoryItemModel[] = [\r\n  //     ResourceOfficesAndServicesFacet!.Categories?.[0] as FilterCategoryItemModel,\r\n  //     ResourceTypeFacet?.Categories?.[0] as FilterCategoryItemModel,\r\n  //     ResourceAudienceFacet?.Categories?.[0] as FilterCategoryItemModel\r\n  //   ];\r\n\r\n  return (\r\n    <a href={url ? url : ''} className=\"listing-card listing-card--search link\">\r\n      <span className=\"listing-card__border--line \"></span>\r\n      <div className=\"listing-card__content\">\r\n        {image && (\r\n          <div className=\"picture\">\r\n            <img\r\n              className=\"listing-card__image\"\r\n              src={image}\r\n              alt=\"about-card-image\"\r\n              loading=\"lazy\"\r\n              width=\"208\"\r\n              height=\"150\"\r\n            />\r\n          </div>\r\n        )}\r\n\r\n        <div className=\"listing-card__desc\">\r\n          <h4 className=\"listing-card__even-title-label\">{title}</h4>\r\n\r\n          {description && <p className=\"listing-card__description rtf\">{description}</p>}\r\n        </div>\r\n      </div>\r\n      <span className=\"listing-card__border--line \"></span>\r\n    </a>\r\n  );\r\n};\r\n","import React, { useEffect } from 'react';\nimport {\n  ArticleDetailPage,\n  CourseProduct,\n  EventDetailPage,\n  OfficesAndServicesDetailPage,\n  PeopleDetailPage,\n  ProgramDetailPage,\n  ResourceDetailPage,\n  StandardProduct\n} from '../../../../codegenGenerated/optigraphql/generated';\nimport { Accordion } from '../../../components/react-components/Accordion';\nimport Pagination, { PaginationType } from '../../../components/react-components/Pagination';\nimport Loader from '../Loader';\nimport { BlogAndNewsCard } from './BlogAndNewsListing/BlogAndNewsCard';\nimport { EcommerceCoursesCard } from './ECommerceCoursesAndProductsListing/EcommerceCoursesCard';\nimport { EcommerceProductsCard } from './ECommerceCoursesAndProductsListing/EcommerceProductsCard';\nimport { EventsListingCard } from './EventListing/EventListingCard';\nimport { OfficesAndServicesCard } from './OfficeAndServicesListing/OfficesAndServicesCard';\nimport { PeopleDirectoryCard } from './PeopleDirectoryListing/PeopleDirectoryCard';\nimport { ProgramAndCertificatesCard } from './ProgramsAndCertificatesListing/ProgramAndCertificatesCard';\nimport { ResourceListingCard } from './ResourcesListing/ResourcesListingCard';\nimport { SearchCard, SearchCardItem } from './SearchListing/SearchCard';\nimport { ListingResultTypes, ListingTypes } from './types';\n\ntype OwnProps = {\n  id?: string;\n  noResultsLabel: string;\n  resultsNumber: string;\n  status: string;\n  results: ListingResultTypes;\n  error: Error | null;\n  searchTerm: string;\n  pagination: {\n    skip: number;\n    limit: number;\n    total: number;\n  };\n  paginationType: PaginationType;\n  imgFallback?: string;\n  showAllPaginationLabel?: string;\n  setPagination?: (pagination: { skip: number; limit: number; total: number }) => void;\n  additionalProps?: { [key: string]: string };\n  modeOfStudyLabel?: string;\n  programTypeLabel?: string;\n  degreesOfferLabel?: string;\n  departmentOfferLabel?: string;\n  schoolLabel?: string;\n  listingType?: string;\n};\n\nexport const Listing = ({\n  id,\n  noResultsLabel,\n  resultsNumber,\n  status,\n  results,\n  searchTerm,\n  imgFallback,\n  showAllPaginationLabel,\n  pagination,\n  paginationType,\n  additionalProps,\n  setPagination,\n  modeOfStudyLabel,\n  programTypeLabel,\n  degreesOfferLabel,\n  departmentOfferLabel,\n  schoolLabel,\n  listingType\n}: OwnProps) => {\n  const hasNoResults = results?.length === 0 && status !== 'loading';\n  const showMoreRef = React.createRef<HTMLDivElement>();\n  const paginationTypeShowMore = paginationType === PaginationType.ShowMore;\n  const isProgramListing = listingType === ListingTypes.PROGRAMS_CERTS_LISTING;\n  const isLoading = status === 'loading';\n  const [pageChanged, setPageChanged] = React.useState(false);\n\n  useEffect(() => {\n    if (!paginationTypeShowMore) {\n      window.scrollTo({ top: 0, behavior: 'smooth' });\n    } else {\n      // the user should stay where they where when they click on the pagination show more\n      if (pageChanged) {\n        setPageChanged(false);\n        showMoreRef.current?.scrollIntoView({ behavior: 'smooth' });\n        return;\n      }\n    }\n  }, [results]);\n\n  const onPageChange = (page: number | string) => {\n    setPageChanged(true);\n    setPagination!({\n      ...pagination,\n      skip: ((page as number) - 1) * +resultsNumber,\n      limit: +resultsNumber\n    });\n  };\n\n  const genericError = document.querySelector('body')?.dataset.listErrorMessage;\n\n  const noResultsLabelReplaced =\n    hasNoResults && searchTerm\n      ? noResultsLabel.replace('{0}', searchTerm)\n      : noResultsLabel.replace(' for {0}', '');\n\n  if (isProgramListing) {\n    return (\n      <div\n        className={`listing__content ${hasNoResults || status === 'error' ? 'listing__content--no-results' : ''}`}\n      >\n        {additionalProps && additionalProps['listingHeadingTitle'] && (\n          <h2 className=\"listing__heading--title listing__heading--title-programs\">\n            {additionalProps['listingHeadingTitle']}\n          </h2>\n        )}\n        {status === 'loading' && <Loader />}\n        {status === 'error' && <p className=\"listing__error\">{genericError}</p>}\n        {hasNoResults && status !== 'error' && (\n          <div className=\"rtf\" dangerouslySetInnerHTML={{ __html: noResultsLabelReplaced }}></div>\n        )}\n\n        <div className=\"accordion accordion--react\">\n          <Accordion className=\"program-accordion\" type=\"single\" collapsible>\n            {status === 'success' &&\n              results!.length > 0 &&\n              results!.map((result, index) => {\n                if (!result) return null;\n                return (\n                  <ProgramAndCertificatesCard\n                    key={index}\n                    item={result as ProgramDetailPage}\n                    additionalProps={additionalProps}\n                    modeOfStudyLabel={modeOfStudyLabel ? modeOfStudyLabel : 'Mode of Study'}\n                    programTypeLabel={programTypeLabel ? programTypeLabel : 'Program'}\n                    degreesOfferLabel={degreesOfferLabel ? degreesOfferLabel : 'Degrees Offered'}\n                    departmentOfferLabel={\n                      departmentOfferLabel ? departmentOfferLabel : 'Department'\n                    }\n                    schoolLabel={schoolLabel ? schoolLabel : 'School'}\n                  />\n                );\n              })}\n          </Accordion>\n        </div>\n\n        {!isLoading && results && results.length > 0 && (\n          <Pagination\n            type={paginationType || PaginationType.Pagination}\n            pagination={pagination}\n            onPageChange={onPageChange}\n            showAllPaginationLabel={showAllPaginationLabel}\n          />\n        )}\n      </div>\n    );\n  }\n\n  return (\n    <div\n      className={`listing__content ${hasNoResults || status === 'error' ? 'listing__content--no-results' : ''} listing__content--${id}`}\n    >\n      <ul className={`listing__list listing__list--${id}`}>\n        {isLoading && <Loader />}\n        {status === 'error' && <p className=\"listing__error\">{genericError}</p>}\n        {hasNoResults && status !== 'error' && (\n          <div className=\"rtf\" dangerouslySetInnerHTML={{ __html: noResultsLabelReplaced }}></div>\n        )}\n\n        {status === 'success' &&\n          results &&\n          results.length > 0 &&\n          results.map(\n            (\n              result:\n                | EventDetailPage\n                | ResourceDetailPage\n                | ArticleDetailPage\n                | SearchCardItem\n                | OfficesAndServicesDetailPage\n                | ProgramDetailPage\n                | CourseProduct\n                | StandardProduct\n                | PeopleDetailPage\n                | null,\n              index: number\n            ) => {\n              if (!result) return null;\n\n              return (\n                <li key={result._id ?? index} className=\"listing-card__container\">\n                  {id === 'events-listing' && (\n                    <EventsListingCard {...(result as EventDetailPage)} />\n                  )}\n                  {id === 'resources-listing' && (\n                    <ResourceListingCard {...(result as ResourceDetailPage)} />\n                  )}\n                  {id === 'blog-and-news-listing' && (\n                    <BlogAndNewsCard\n                      item={result as ArticleDetailPage}\n                      imgFallback={imgFallback as string}\n                    />\n                  )}\n                  {id === 'search-listing' && <SearchCard item={result as SearchCardItem} />}\n                  {id === 'offices-services-listing' && (\n                    <OfficesAndServicesCard {...(result as OfficesAndServicesDetailPage)} />\n                  )}\n                  {id === 'ecommerce-courses-listing' && (\n                    <EcommerceCoursesCard {...(result as CourseProduct)} />\n                  )}\n                  {id === 'ecommerce-products-listing' && (\n                    <EcommerceProductsCard\n                      item={{ ...(result as StandardProduct) }}\n                      imgFallback={imgFallback as string}\n                    />\n                  )}\n                  {id === 'people-directory-listing' && (\n                    <PeopleDirectoryCard\n                      item={{ ...(result as PeopleDetailPage) }}\n                      imgFallback={imgFallback as string}\n                    />\n                  )}\n                </li>\n              );\n            }\n          )}\n      </ul>\n      {!isLoading && results && results.length > 0 && (\n        <Pagination\n          type={paginationType || PaginationType.Pagination}\n          pagination={pagination}\n          onPageChange={onPageChange}\n          showAllPaginationLabel={showAllPaginationLabel}\n        />\n      )}\n      <div ref={showMoreRef} />\n    </div>\n  );\n};\n","import React, { useEffect } from 'react';\nimport { ECommerceCoursesAndProductsFacetTypes } from './ECommerceCoursesAndProductsListing/useGetEcommerceCoursesAndProductsListing';\nimport useClearAllFacets from './Facets/useClearAllFacets';\nimport { FacetProps, FacetPropsItems, ListingTypes } from './types';\nimport { getFacetValueById } from './utils';\n\ninterface OwnProps {\n  resultsNumberLabel: string;\n  clearAllLabel: string;\n  resultsNumber: number;\n  facets: FacetProps[];\n  pagination: {\n    skip: number;\n    limit: number;\n    total: number;\n  };\n  tagsNoResultsLabel: string;\n  setFilters: (filters: FacetProps[]) => void;\n  setPagination: (pagination: { skip: number; limit: number; total: number }) => void;\n  className?: string;\n  listingType?: string;\n  defaultFilter?: string;\n  isFirstLoad?: boolean;\n}\n\nconst SearchTags = ({\n  resultsNumber,\n  resultsNumberLabel,\n  tagsNoResultsLabel,\n  clearAllLabel,\n  facets,\n  pagination: { limit, skip, total },\n  setFilters,\n  setPagination,\n  className,\n  listingType,\n  defaultFilter,\n  isFirstLoad = false\n}: OwnProps) => {\n  if (!resultsNumberLabel) return null;\n\n  const [tagsSelected, setTagSelected] = React.useState<FacetPropsItems[]>([]);\n  const isOfficeAndServicesListing = listingType === ListingTypes.OFFICES_SERVICES_LISTING;\n  const isEcommerceListing = listingType === ListingTypes.ECOMMERCE_COURSES_LISTING;\n  const isPeopleListing = listingType === ListingTypes.PEOPLE_LISTING;\n\n  const filterFacets = useClearAllFacets({ facets, isEcommerceListing, isPeopleListing });\n\n  const clearResults = () => {\n    const filtered = filterFacets().map(facet => {\n      if (facet.id === 'ProgramTypeFacet' && defaultFilter && !isFirstLoad) {\n        return { ...facet, value: [defaultFilter] };\n      }\n      return facet;\n    });\n    setFilters(filtered);\n    setTagSelected([]);\n    setPagination({ skip: 0, limit: limit, total: total });\n  };\n\n  useEffect(() => {\n    if (facets) {\n      const selectedValues = facets\n        .filter(facet => {\n          if (facet.type === 'custom-radio' || facet.id === 'Categories') {\n            return false;\n          } else {\n            if (facet.id === 'date-range') {\n              const values: string[] = [];\n\n              facet.items.forEach(item => {\n                if (!values.includes(item.id) && item.value !== '') {\n                  values.push(item.id);\n                }\n              });\n\n              facet.value = values.length > 0 ? values : null;\n            }\n\n            return facet.value;\n          }\n        })\n        .map(facet => facet.value)\n        .flat();\n\n      if (selectedValues.includes('all')) {\n        setTagSelected([]);\n        return;\n      }\n\n      const selectedItemsValues = facets.flatMap(facet =>\n        facet.items ? facet.items.filter(item => selectedValues.includes(item.id)) : []\n      );\n\n      setTagSelected(selectedItemsValues as FacetPropsItems[]);\n    }\n  }, [facets]);\n\n  const initialItems = skip + 1;\n\n  if (resultsNumber === 0) {\n    return (\n      <div className={`listing__tags ${className ? className : ''}`}>\n        <div className=\"listing__tags-result\">{tagsNoResultsLabel}</div>\n        {!isFirstLoad && (\n          <ul className=\"listing__tags-list\">\n            <li>\n              <button className=\"listing__tags-list--clear\" onClick={clearResults}>\n                {clearAllLabel}\n              </button>\n            </li>\n          </ul>\n        )}\n      </div>\n    );\n  }\n\n  const resultsNumberLabelWithTotal = () => {\n    const terms = ['results', 'courses', 'products'];\n    let label = resultsNumberLabel;\n\n    if (\n      className === 'listing__tags--ecommerce-courses-and-products' ||\n      className === 'listing__tags--people-directory'\n    ) {\n      const selectedTypeValue = getFacetValueById(\n        facets,\n        ECommerceCoursesAndProductsFacetTypes.Categories\n      );\n      const facetInfo = facets.find(facet => facet.value === selectedTypeValue);\n      const selectedTypeName = facetInfo?.items?.find(\n        item => item.id === selectedTypeValue?.[0]\n      )?.value;\n\n      label = label\n        .replace('{0}', total.toString())\n        .replace('{1}', selectedTypeName?.toLowerCase() || '');\n    } else if (isOfficeAndServicesListing) {\n      label = label.replace('{0}', total.toString());\n    } else {\n      label =\n        total <= initialItems\n          ? label\n              .replace('{0} -', '')\n              .replace('{1}', total.toString())\n              .replace('{2}', total.toString())\n          : label\n              .replace('{0}', initialItems.toString())\n              .replace('{1}', total < limit + skip ? total.toString() : (limit + skip).toString())\n              .replace('{2}', total.toString());\n    }\n\n    terms.forEach(term => {\n      if (label.includes(term) && total === 1) {\n        label = label.replace(term, term.slice(0, -1)); // Remove the last character to make it singular\n      }\n    });\n\n    return label;\n  };\n\n  const handleRemoveTag = (tag: string) => {\n    const newTags = tagsSelected.filter(t => t.id !== tag);\n\n    setFilters(\n      facets.map(facet => {\n        if (facet.value) {\n          // if array facet value already includes value, remove it\n          if (Array.isArray(facet.value) && facet.value.includes(tag)) {\n            if (facet.id === 'date-range') {\n              // we need to remove the value from the items array, and then update the facet value\n              const items = facet.items.map(item => {\n                if (item.id === tag) {\n                  return { ...item, value: '' };\n                }\n                return item;\n              });\n\n              return {\n                ...facet,\n                items,\n                value: items.filter(item => item.value !== '').map(item => item.id)\n              };\n            }\n\n            return {\n              ...facet,\n              value:\n                facet.value.length === 1 ? null : facet.value.filter((item: string) => item !== tag)\n            };\n          }\n        }\n\n        return facet;\n      })\n    );\n\n    setTagSelected(newTags);\n  };\n\n  if (limit === 0) {\n    return (\n      <div className=\"listing__tags\">\n        <div className=\"listing__tags-result\">{tagsNoResultsLabel}</div>\n      </div>\n    );\n  }\n\n  return (\n    <div className={`listing__tags ${className ? className : ''}`}>\n      <div className=\"listing__tags-result\">{resultsNumberLabelWithTotal()}</div>\n      {tagsSelected.length > 0 && (\n        <ul className=\"listing__tags-list\">\n          {tagsSelected &&\n            tagsSelected.map(tag => (\n              <li key={tag.id}>\n                <button\n                  className=\"listing__tags-list--item\"\n                  onClick={() => handleRemoveTag(tag.id)}\n                >\n                  {tag.id === 'minDate' || tag.id === 'maxDate' ? `${tag.title}: ` : ''}\n\n                  {tag.value}\n\n                  <svg\n                    // className=\"listing-input__search-icon\"\n                    viewBox=\"0 0 32 32\"\n                    role=\"presentation\"\n                  >\n                    <use xlinkHref=\"#close\"></use>\n                  </svg>\n                </button>\n              </li>\n            ))}\n\n          <li>\n            <button className=\"listing__tags-list--clear\" onClick={clearResults}>\n              {clearAllLabel}\n            </button>\n          </li>\n        </ul>\n      )}\n    </div>\n  );\n};\n\nexport default SearchTags;\n"],"names":["PaginationType","Pagination","onPageChange","type","showAllPaginationLabel","pagination","currentPage","totalPages","showBtns","generatePages","pages","i","handlePageClick","page","React","index","SortOptions","ListingTypes","FacetDate","id","title","value","onSelectionChange","minDate","maxDate","tempValue","setTempValue","useState","isTabletMobileiOS","setIsTabletOrLess","inputType","setInputType","inputRef","useRef","useEffect","setFormattedDate","format","date","day","month","handleChange","e","rawValue","formattedDate","isTablet","isMobile","iOS","handleFocus","error","transformToFacetPropsItems","data","Categories","item","name","_a","a","b","items","idItem","titleItem","findFacetById","facets","facet","getFacetValueById","ECommerceCoursesAndProductsFacetTypes","useGetEcommerceCoursesAndProductsListing","params","graphQLClient","GraphQLClient","getEnvGQLUrl","accumulatedResults","setAccumulatedResults","combinedFacets","setCombinedFacets","orderBy","searchTerm","selectedType","isCourses","isFirstLoad","orderByValue","useMemo","getQueryParams","useCallback","forCourses","baseParams","coursesQuery","useQuery","CourseListingDocument","productsQuery","ProductListingDocument","coursesFacets","_b","productsFacets","_d","_c","currentData","_f","_e","_h","_g","newItems","prev","isLoading","useFacetChangeHandler","isEcommerceListing","isProgramListing","setFilters","setPagination","selectedFacetID","dateRangeType","newValue","f","useIsChecked","facetID","facetItem","Search","searchPlaceholder","listingType","setStoreSearchTerm","setSortBy","ariaLabel","searchText","setSearchText","setRelevanceSort","doSearch","handleKeyDown","event","handleXKeyDown","svgSearch","clearSearch","useClearAllFacets","isPeopleListing","FacetsMobile","sortOptions","mobileShowResultsLabel","clearAllLabel","mobileFilterNarrowLabel","mobileAppliedFiltersLabel","setOrderBy","setSearchTerm","unavailableLetters","facetsData","defaultFilter","displayMobileFilter","setDisplayMobileFilter","filtersApplied","setFiltersApplied","isPeopleDirectoryListing","isSearchListing","setValue","updatedFacets","setUpdatedFacets","filterFacets","toggleMobileFilter","calcSelectedFilters","newUpdatedFacets","onSelectionChangeHandler","isChecked","showResults","selectedFiltersLen","selectedFilters","acc","clearResults","filtered","programsListingOnValueChange","itemID","isOnCampusLocationFacet","tempID","selectedValues","onCampusItems","programsListingClassName","handleCheckboxChange","facetId","itemId","checked","updatedFacet","handleOrderByChange","Accordion","AccordionItem","AccordionTrigger","AccordionContent","label","facetItems","isFacetItemsEmpty","KeySearcher","visibleDropdownFacet","selectProgramClass","Checkbox","BlogAndNewsCard","description","readTime","image","url","getDateThreeLetterMonth","EcommerceCoursesCard","Url","CourseSubjectId","CourseTitle","AreaOfStudyFacet","areasOfStudy","area","EcommerceProductsCard","imgFallback","DefaultImageUrl","DefaultMarketPrice","DisplayName","EventsListingCard","EventLocationFacet","EventAudienceFacet","EventTypeFacet","InitialDateEvent","EndDateEvent","location","audience","getDateDayNumber","OfficesAndServicesCard","email","phone","InfoItem","iconType","text","memo","PeopleDirectoryCard","FirstName","LastName","PersonTitle","DepartmentFacet","Email","CampusLocationFacet","PageImage","campusLocations","departments","campusLocs","depts","personInfo","contactInfo","imageSection","ScrollIndicator","barRect","scrollPosition","scrollHeight","scrollPercentage","dot","barHeight","ProgramAndCertificatesCard","additionalProps","modeOfStudyLabel","programTypeLabel","degreesOfferLabel","departmentOfferLabel","schoolLabel","elementRef","setBarRect","nameEl","programType","applyCTALink","degrees","schoolCTALink","departmentCTALink","department","isCertificate","applyLink","alertFunc","nameRef","CategoriesList","categories","isLink","category","Href","Target","Text","handleOnClick","ResourceListingCard","ResourceOfficesAndServicesFacet","ResourceTypeFacet","ResourceAudienceFacet","office","SearchCard","Listing","noResultsLabel","resultsNumber","status","results","paginationType","hasNoResults","showMoreRef","paginationTypeShowMore","pageChanged","setPageChanged","genericError","noResultsLabelReplaced","Loader","result","SearchTags","resultsNumberLabel","tagsNoResultsLabel","limit","skip","total","className","tagsSelected","setTagSelected","isOfficeAndServicesListing","values","selectedItemsValues","initialItems","resultsNumberLabelWithTotal","terms","selectedTypeValue","facetInfo","selectedTypeName","term","handleRemoveTag","tag","newTags","t"],"mappings":"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"}