{"version":3,"file":"index-D3pGBGqy.js","sources":["../../src/scripts/modules/react-modules/Listings/OfficeAndServicesListing/useGetOfficeServicesListing.ts","../../src/scripts/modules/react-modules/Listings/OfficeAndServicesListing/index.tsx"],"sourcesContent":["import { useQuery } from '@tanstack/react-query';\nimport { GraphQLClient } from 'graphql-request';\nimport { useEffect, useState, useMemo } from 'react';\nimport {\n  OfficeAndServicesListingDocument,\n  OfficeAndServicesListingQuery\n} from '../../../../../codegenGenerated/optigraphql/generated';\nimport { getEnvGQLUrl } from '../../../../helpers';\nimport { ListingParams } from '../types';\n\nconst graphQLClient = new GraphQLClient(getEnvGQLUrl());\n\nexport const useGetOfficeServicesListing = (params?: ListingParams) => {\n  const [resultsData, setResultsData] = useState<\n    OfficeAndServicesListingQuery['OfficesAndServicesDetailPage'] | null\n  >(null);\n\n  const { orderBy, pagination, searchTerm, facets } =\n    params ??\n    ({\n      orderBy: 'ASC',\n      filters: [],\n      searchTerm: '',\n      facets: [],\n      pagination: { skip: 0, limit: 10, total: 0 }\n    } as ListingParams);\n\n  const orderByValue = useMemo(() => {\n    if (searchTerm !== '') return { _ranking: 'SEMANTIC' };\n    switch (orderBy) {\n      case 'RELEVANCE':\n        return { _ranking: 'SEMANTIC' };\n      case 'ASC':\n        return { StartPublish: 'ASC', _ranking: 'SEMANTIC' };\n      case 'DESC':\n        return { StartPublish: 'DESC', _ranking: 'SEMANTIC' };\n      case 'A-Z':\n        return { OfficeAndServiceName: 'ASC', _ranking: 'SEMANTIC' };\n      default:\n        return {};\n    }\n  }, [orderBy, searchTerm]);\n\n  const queryKey = useMemo(\n    () => [\n      'officeServices',\n      {\n        orderBy: params?.orderBy,\n        skip: params?.pagination?.skip ?? 0,\n        limit: params?.pagination?.limit ?? 10,\n        searchTerm: params?.searchTerm,\n        tag: facets && facets.length > 0 && facets[0].value ? facets[0].value : null\n      }\n    ],\n    [\n      params?.orderBy,\n      params?.pagination?.skip,\n      params?.pagination?.limit,\n      params?.searchTerm,\n      facets && facets.length > 0 ? facets[0].value : null\n    ]\n  );\n\n  const queryFn = useMemo(\n    () => async () =>\n      graphQLClient.request(OfficeAndServicesListingDocument, {\n        orderBy: orderByValue,\n        numberOfResults: pagination!.limit,\n        skip: pagination!.skip,\n        searchTerm: searchTerm === '' ? null : searchTerm,\n        searchTermBoost: searchTerm ? `%${searchTerm}%` : null,\n        tag: facets && facets.length > 0 && facets[0].value ? facets[0].value : null\n      }) as OfficeAndServicesListingQuery,\n    [orderByValue, pagination?.limit, pagination?.skip, searchTerm, facets]\n  );\n\n  const { isError, error, isFetching, data } = useQuery({\n    queryKey,\n    queryFn,\n    refetchOnWindowFocus: false,\n    staleTime: 300\n  });\n\n  useEffect(() => {\n    if (data?.OfficesAndServicesDetailPage) {\n      const { total } = data.OfficesAndServicesDetailPage;\n      if (total !== undefined && pagination) {\n        if (pagination?.skip > 0) {\n          setResultsData(prevData => ({\n            ...data.OfficesAndServicesDetailPage,\n            items: prevData?.items\n              ? [...prevData.items, ...(data.OfficesAndServicesDetailPage?.items ?? [])]\n              : data.OfficesAndServicesDetailPage?.items,\n            total\n          }));\n        } else {\n          setResultsData(data.OfficesAndServicesDetailPage);\n        }\n      }\n    }\n  }, [data, pagination]);\n\n  return {\n    status: isError ? 'error' : isFetching ? 'loading' : 'success',\n    error: error as Error,\n    results: resultsData?.items ?? [],\n    facets: data?.OfficesAndServicesDetailPage?.facets ?? [],\n    total: resultsData?.total ?? data?.OfficesAndServicesDetailPage?.total ?? 0\n  };\n};\n","import React, { useEffect, useState } from 'react';\nimport {\n  FilterCategoryModelFacet,\n  ResourceDetailPage\n} from '../../../../../codegenGenerated/optigraphql/generated';\nimport { PaginationType } from '../../../../components/react-components/Pagination';\nimport Facets from '../Facets/Facets';\nimport FacetsMobile from '../Facets/FacetsMobile';\nimport { Listing } from '../Listing';\nimport Search from '../Search';\nimport SearchTags from '../SearchTags';\nimport { ListingCommonProps, ListingTypes, SortOptions } from '../types';\nimport useResetPagination from '../usePaginationShowMoreReset';\nimport { transformToFacetPropsItems } from '../utils';\nimport { useGetOfficeServicesListing } from './useGetOfficeServicesListing';\nimport { FacetData } from '../Facets/FacetAccordion';\nimport { useListingUrlState } from '../hooks/useListingUrlState';\n\nenum OfficeServicesTypes {\n  ServiceTypeFacet = 'ServiceTypeFacet'\n}\ninterface OwnProps extends ListingCommonProps {\n  servicesFacetLabel: string;\n  showAllPaginationLabel: string;\n}\n\nconst OfficeAndServicesListingModule = ({\n  noResultsLabel,\n  clearAllLabel,\n  tagsNoResultsLabel,\n  searchPlaceholder,\n  resultsNumberLabel,\n  resultsNumber,\n  mobileShowResultsLabel,\n  mobileFilterNarrowLabel,\n  mobileAppliedFiltersLabel,\n  servicesFacetLabel,\n  showAllPaginationLabel\n}: OwnProps) => {\n  const [isFirstLoad, setIsFirstLoad] = useState(true);\n\n  const initialFacets = [\n    {\n      id: OfficeServicesTypes.ServiceTypeFacet,\n      type: 'custom-select',\n      title: servicesFacetLabel,\n      items: [],\n      value: null\n    }\n  ];\n\n  const {\n    searchTerm,\n    orderBy,\n    pagination,\n    facets,\n    setFacets,\n    handleSearchTermChange,\n    handleFacetsChange,\n    handleOrderByChange,\n    handlePaginationChange\n  } = useListingUrlState({\n    defaultLimit: +resultsNumber || 10,\n    initialFacets\n  });\n\n  const {\n    status,\n    results,\n    error,\n    facets: facetsData,\n    total\n  } = useGetOfficeServicesListing({\n    pagination: isFirstLoad ? { skip: 0, limit: 0, total: 0 } : pagination,\n    orderBy: !isFirstLoad ? orderBy : undefined,\n    searchTerm: !isFirstLoad ? searchTerm : '',\n    facets: !isFirstLoad ? facets : []\n  });\n\n  useResetPagination({\n    pagination,\n    resultsLength: results && results.length ? results.length : 0,\n    resultsNumber: +resultsNumber,\n    setPagination: handlePaginationChange\n  });\n\n  useEffect(() => {\n    if (total !== undefined && total !== pagination.total) {\n      handlePaginationChange({\n        ...pagination,\n        total\n      });\n    }\n  }, [total, pagination, handlePaginationChange]);\n\n  useEffect(() => {\n    if (!facetsData) return;\n\n    const updatedFacets = facets.map(facet => {\n      const facetData = facetsData[facet.id as keyof typeof facetsData];\n      if (facetData) {\n        const items = transformToFacetPropsItems(facetData as FilterCategoryModelFacet);\n\n        // Validate existing selections against new items\n        let validatedValue = facet.value;\n        if (facet.value && Array.isArray(facet.value)) {\n          const validValues = facet.value.filter(val =>\n            items.some(item => item.id === val || item.value === val)\n          );\n          validatedValue = validValues.length ? validValues : null;\n        } else if (\n          facet.value &&\n          !items.some(item => item.id === facet.value || item.value === facet.value)\n        ) {\n          validatedValue = null;\n        }\n\n        return { ...facet, items, value: validatedValue };\n      }\n      return facet;\n    });\n\n    if (JSON.stringify(updatedFacets) !== JSON.stringify(facets)) {\n      setFacets(updatedFacets);\n      handlePaginationChange({ ...pagination, skip: 0, limit: +resultsNumber });\n      setIsFirstLoad(false);\n    }\n  }, [facetsData, facets, pagination, resultsNumber, setFacets, handlePaginationChange]);\n\n  return (\n    <>\n      <div className=\"listing-heading\">\n        <div className=\"listing-heading__single-row\">\n          <Search\n            searchPlaceholder={searchPlaceholder}\n            setStoreSearchTerm={handleSearchTermChange}\n            searchTerm={searchTerm}\n            pagination={pagination}\n            setPagination={handlePaginationChange}\n            ariaLabel=\"Search for Office and Services\"\n          />\n          <div className=\"listing__facets\">\n            {facets.map(({ id, type, items, title }) => {\n              return (\n                <Facets\n                  key={id}\n                  id={id}\n                  type={type}\n                  items={items}\n                  title={title}\n                  isMobile={false}\n                  facets={facets}\n                  setFilters={handleFacetsChange}\n                  pagination={pagination}\n                  setPagination={handlePaginationChange}\n                />\n              );\n            })}\n          </div>\n        </div>\n\n        <div className=\"listing-heading__results\">\n          <SearchTags\n            resultsNumberLabel={resultsNumberLabel}\n            tagsNoResultsLabel={tagsNoResultsLabel}\n            resultsNumber={total || 0}\n            pagination={{ ...pagination, total: total || 0 }}\n            facets={facets}\n            setFilters={handleFacetsChange}\n            clearAllLabel={clearAllLabel}\n            setPagination={handlePaginationChange}\n            listingType={ListingTypes.OFFICES_SERVICES_LISTING}\n          />\n        </div>\n      </div>\n\n      <Listing\n        id=\"offices-services-listing\"\n        noResultsLabel={noResultsLabel}\n        resultsNumber={resultsNumber}\n        status={status}\n        results={results as ResourceDetailPage[]}\n        error={error}\n        searchTerm={searchTerm}\n        imgFallback=\"\"\n        showAllPaginationLabel={showAllPaginationLabel}\n        setPagination={handlePaginationChange}\n        pagination={pagination}\n        paginationType={PaginationType.ShowMore}\n      />\n\n      <FacetsMobile\n        facetsData={facetsData as FacetData}\n        mobileFilterNarrowLabel={mobileFilterNarrowLabel}\n        mobileAppliedFiltersLabel={mobileAppliedFiltersLabel}\n        mobileShowResultsLabel={mobileShowResultsLabel}\n        facets={facets}\n        setFilters={handleFacetsChange}\n        setOrderBy={handleOrderByChange}\n        orderBy={orderBy}\n        pagination={pagination}\n        sortOptions={null}\n        defaultSortValue={SortOptions.AZ}\n        clearAllLabel={clearAllLabel}\n        setPagination={handlePaginationChange}\n        listingType={ListingTypes.OFFICES_SERVICES_LISTING}\n      />\n    </>\n  );\n};\n\nexport default OfficeAndServicesListingModule;\n"],"names":["graphQLClient","GraphQLClient","getEnvGQLUrl","useGetOfficeServicesListing","params","resultsData","setResultsData","useState","orderBy","pagination","searchTerm","facets","orderByValue","useMemo","queryKey","_a","_b","queryFn","OfficeAndServicesListingDocument","isError","error","isFetching","data","useQuery","useEffect","total","prevData","_c","_d","OfficeAndServicesListingModule","noResultsLabel","clearAllLabel","tagsNoResultsLabel","searchPlaceholder","resultsNumberLabel","resultsNumber","mobileShowResultsLabel","mobileFilterNarrowLabel","mobileAppliedFiltersLabel","servicesFacetLabel","showAllPaginationLabel","isFirstLoad","setIsFirstLoad","initialFacets","setFacets","handleSearchTermChange","handleFacetsChange","handleOrderByChange","handlePaginationChange","useListingUrlState","status","results","facetsData","useResetPagination","updatedFacets","facet","facetData","items","transformToFacetPropsItems","validatedValue","validValues","val","item","React","Search","id","type","title","Facets","SearchTags","ListingTypes","Listing","PaginationType","FacetsMobile","SortOptions"],"mappings":"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"}