{"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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"}