{"version":3,"file":"index-BMW1qoKc.js","sources":["../../src/scripts/modules/react-modules/Listings/PeopleDirectoryListing/useGetPeopleDirectoryListing.ts","../../src/scripts/modules/react-modules/Listings/PeopleDirectoryListing/index.tsx"],"sourcesContent":["import { useQuery } from '@tanstack/react-query';\nimport { GraphQLClient } from 'graphql-request';\nimport { useEffect, useState, useMemo } from 'react';\nimport {\n PeopleDetailPage,\n PeopleDirectoryListingDocument,\n PeopleDirectoryListingQuery\n} from '../../../../../codegenGenerated/optigraphql/generated';\nimport { getEnvGQLUrl } from '../../../../helpers';\nimport { ListingParams } from '../types';\nimport { getFacetValueById } from '../utils';\n\nexport enum PeopleDirectoryFacetTypes {\n Categories = 'Categories',\n DepartmentFacet = 'DepartmentFacet',\n LetterFacet = 'LetterFacet'\n}\n\nexport type LastNameFacet = {\n name: string;\n count: number;\n};\n\nconst graphQLClient = new GraphQLClient(getEnvGQLUrl());\n\nexport const useGetPeopleDirectoryListing = (params?: ListingParams) => {\n const [accumulatedResults, setAccumulatedResults] = useState<PeopleDetailPage[]>([]);\n const [totalCount, setTotalCount] = useState(0);\n\n const { orderBy, pagination, searchTerm, facets = [] } = params || {};\n\n const orderByValue = useMemo(() => {\n if (!orderBy) return {};\n if (searchTerm !== '') return { _ranking: 'SEMANTIC' };\n\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 { LastName: 'ASC', FirstName: 'ASC', _ranking: 'SEMANTIC' };\n default:\n return {};\n }\n }, [orderBy, searchTerm]);\n\n const queryParams = useMemo(\n () => ({\n numberOfResults: pagination?.limit || 10,\n skip: pagination?.skip || 0,\n searchTerm: searchTerm === '' ? null : searchTerm,\n searchTermBoost: searchTerm ? `%${searchTerm}%` : null,\n peopleGroup:\n facets?.[0]?.value?.includes('all') || facets?.[0]?.value?.includes('')\n ? null\n : facets?.[0]?.value?.[0],\n departmentFacet: facets\n ? getFacetValueById(facets, PeopleDirectoryFacetTypes.DepartmentFacet)\n : null,\n letter: facets ? getFacetValueById(facets, PeopleDirectoryFacetTypes.LetterFacet) : null,\n orderBy: orderByValue\n }),\n [pagination?.limit, pagination?.skip, searchTerm, facets, orderByValue]\n );\n\n const queryKey = useMemo(() => ['peopleDirectory', queryParams], [queryParams]);\n\n const { isLoading, error, data } = useQuery({\n queryKey,\n queryFn: async () => {\n return graphQLClient.request(\n PeopleDirectoryListingDocument,\n queryParams\n ) as PeopleDirectoryListingQuery;\n },\n refetchOnWindowFocus: false\n });\n\n useEffect(() => {\n if (data?.PeopleDetailPage?.items) {\n const newItems = (data.PeopleDetailPage.items as PeopleDetailPage[]).filter(\n (item): item is PeopleDetailPage => item !== null\n );\n\n // Reset results if any parameter except pagination.skip has changed\n const shouldReset = !pagination?.skip || pagination.skip === 0;\n\n if (shouldReset) {\n setAccumulatedResults(newItems);\n } else {\n setAccumulatedResults(prev => [...prev, ...newItems]);\n }\n\n // Update total count when we get new data\n const total = data.PeopleDetailPage.total;\n if (typeof total === 'number') {\n setTotalCount(total);\n }\n }\n }, [data, pagination?.skip]);\n\n return {\n status: error ? 'error' : isLoading ? 'loading' : 'success',\n error: error as Error,\n results: accumulatedResults,\n total: totalCount,\n facets: data?.PeopleDetailPage?.facets ?? {}\n };\n};\n","import React, { useState, useRef, useEffect } from 'react';\nimport {\n FilterCategoryModelFacet,\n PeopleDetailPage,\n PeopleDetailPageFacet\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 { FacetPropsItems, ListingCommonProps, ListingTypes, SortOptions } from '../types';\nimport useResetPagination from '../usePaginationShowMoreReset';\nimport { transformToFacetPropsItems } from '../utils';\nimport { LastNameFacet } from './useGetPeopleDirectoryListing';\nimport { useGetPeopleDirectoryListing } from './useGetPeopleDirectoryListing';\nimport { FacetData } from '../Facets/FacetAccordion';\nimport { useListingUrlState } from '../hooks/useListingUrlState';\n\ninterface OwnProps extends ListingCommonProps {\n facets: string;\n departmentFacetLabel: string;\n departmentFacetSearchLabel: string;\n letterFacetLabel: string;\n peopleGroupFacetLabel: string;\n showAllPaginationLabel: string;\n}\n\nconst PeopleDirectoryListingModule = ({\n noResultsLabel,\n facets,\n departmentFacetLabel,\n departmentFacetSearchLabel,\n peopleGroupFacetLabel,\n letterFacetLabel,\n resultsNumberLabel,\n showAllPaginationLabel,\n resultsNumber,\n clearAllLabel,\n imgFallback,\n tagsNoResultsLabel,\n searchPlaceholder,\n mobileShowResultsLabel,\n mobileFilterNarrowLabel,\n mobileAppliedFiltersLabel\n}: OwnProps) => {\n const [isFirstLoad, setIsFirstLoad] = useState(true);\n const [unavailableLetters, setUnavailableLetters] = useState<string[]>([]);\n\n const [facetsLabel] = useState<FacetPropsItems[]>(JSON.parse(facets));\n\n const initialFacets = [\n {\n id: 'Categories',\n type: 'custom-radio',\n title: peopleGroupFacetLabel,\n items: facetsLabel,\n value: ['all']\n },\n {\n id: 'DepartmentFacet',\n type: 'custom-select-search',\n title: departmentFacetLabel,\n items: [],\n value: null\n },\n {\n id: 'LetterFacet',\n type: 'custom-select-key-search',\n title: letterFacetLabel,\n items: [],\n value: null\n }\n ];\n\n const {\n searchTerm,\n orderBy,\n pagination,\n facets: facetsStore,\n setFacets,\n handleSearchTermChange,\n handleFacetsChange,\n handleOrderByChange,\n handlePaginationChange\n } = useListingUrlState({\n defaultLimit: +resultsNumber || 10,\n initialFacets\n });\n\n const facetTitles: { [key: string]: string } = {\n Categories: peopleGroupFacetLabel,\n DepartmentFacet: departmentFacetLabel,\n LetterFacet: letterFacetLabel\n };\n\n const {\n status,\n results,\n error,\n facets: facetsData,\n total\n } = useGetPeopleDirectoryListing({\n pagination: isFirstLoad ? { skip: 0, limit: +resultsNumber, total: 0 } : pagination,\n orderBy: !isFirstLoad ? orderBy : undefined,\n searchTerm: !isFirstLoad ? searchTerm : '',\n facets: !isFirstLoad ? facetsStore : []\n });\n\n useEffect(() => {\n if (total !== pagination.total) {\n handlePaginationChange({\n ...pagination,\n total\n });\n }\n }, [total, pagination, handlePaginationChange]);\n\n useResetPagination({\n pagination,\n resultsLength: results?.length || 0,\n resultsNumber: +resultsNumber,\n setPagination: handlePaginationChange\n });\n\n const getMissingLetters = (data: LastNameFacet[]) => {\n const alphabet = Array.from({ length: 26 }, (_, i) => String.fromCharCode(65 + i));\n const usedLetters = new Set(data.map(item => item?.name?.charAt(0).toUpperCase()));\n return alphabet.filter(letter => !usedLetters.has(letter));\n };\n\n const initialLoadRef = useRef(true);\n\n useEffect(() => {\n if (!facetsData) return;\n\n const facetLastName = facetsData as PeopleDetailPageFacet;\n\n if (facetLastName?.['LastName']) {\n setUnavailableLetters(getMissingLetters(facetLastName?.['LastName'] as LastNameFacet[]));\n }\n\n const updatedFacets = facetsStore.map(facet => {\n // Handle custom-radio type first\n if (facet.type === 'custom-radio') {\n const items = facetsLabel;\n const value = Array.isArray(facet.value) ? facet.value : [items[0]?.id || 'all'];\n\n // Validate if the value exists in items\n const isValidValue =\n Array.isArray(value) &&\n value.every(v => items.some(item => item.id === v || item.value === v));\n\n return {\n ...facet,\n items,\n value: isValidValue ? value : [items[0]?.id || 'all'],\n title: facetTitles[facet.id]\n };\n }\n\n // Handle other facet types\n const facetData = facetsData[facet.id as keyof typeof facetsData];\n if (facetData) {\n const items = transformToFacetPropsItems(facetData as FilterCategoryModelFacet);\n\n let validatedValue = facet.value;\n if (facet.value && Array.isArray(facet.value)) {\n const validValues = facet.value.filter((val: string) =>\n items.some(item => item.id === val || item.value === val)\n );\n validatedValue = validValues.length ? validValues : null;\n }\n\n return {\n ...facet,\n items,\n value: validatedValue,\n title: facetTitles[facet.id]\n };\n }\n\n return facet;\n });\n\n if (initialLoadRef.current || JSON.stringify(updatedFacets) !== JSON.stringify(facetsStore)) {\n setFacets(updatedFacets);\n handlePaginationChange({ ...pagination, skip: 0, limit: +resultsNumber });\n setIsFirstLoad(false);\n initialLoadRef.current = false;\n }\n }, [\n facetsData,\n facets,\n facetsStore,\n facetsLabel,\n facetTitles,\n pagination,\n resultsNumber,\n setFacets,\n handlePaginationChange\n ]);\n\n return (\n <>\n <div className=\"listing-heading listing-heading--people-directory\">\n <div className=\"listing__facets__people-directory-filters-container\">\n <div className=\"listing__facets listing__facets--people-directory-filters\">\n {facetsStore\n .filter(facet => facet.type === 'custom-radio')\n .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={facetsStore}\n setFilters={handleFacetsChange}\n pagination={pagination}\n setPagination={handlePaginationChange}\n />\n );\n })}\n </div>\n\n <Search\n searchPlaceholder={searchPlaceholder}\n setStoreSearchTerm={handleSearchTermChange}\n searchTerm={searchTerm}\n pagination={pagination}\n setPagination={handlePaginationChange}\n ariaLabel=\"Search for People Directory\"\n />\n <div className=\"listing__facets--dropdowns\">\n {facetsStore\n .filter(facet => facet.type === 'custom-select-search')\n .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={facetsStore}\n setFilters={handleFacetsChange}\n pagination={pagination}\n setPagination={handlePaginationChange}\n listingType={ListingTypes.PEOPLE_LISTING}\n dropdownSearchLabel={departmentFacetSearchLabel}\n />\n );\n })}\n </div>\n <div className=\"listing__facets--dropdowns listing__facets--dropdowns-key-search\">\n {facetsStore\n .filter(facet => facet.type === 'custom-select-key-search')\n .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={facetsStore}\n setFilters={handleFacetsChange}\n pagination={pagination}\n setPagination={handlePaginationChange}\n unavailableLetters={unavailableLetters}\n />\n );\n })}\n </div>\n </div>\n <div className=\"listing-heading__results\">\n <SearchTags\n resultsNumberLabel={resultsNumberLabel}\n tagsNoResultsLabel={tagsNoResultsLabel}\n resultsNumber={total}\n pagination={{ ...pagination, total }}\n facets={facetsStore}\n setFilters={handleFacetsChange}\n clearAllLabel={clearAllLabel}\n setPagination={handlePaginationChange}\n className={'listing__tags--people-directory'}\n listingType={ListingTypes.PEOPLE_LISTING}\n />\n </div>\n </div>\n\n <Listing\n id={'people-directory-listing'}\n noResultsLabel={noResultsLabel}\n resultsNumber={resultsNumber}\n status={status}\n results={results as PeopleDetailPage[]}\n error={error}\n searchTerm={searchTerm}\n imgFallback={imgFallback}\n showAllPaginationLabel={showAllPaginationLabel}\n setPagination={handlePaginationChange}\n pagination={{ ...pagination, total }}\n paginationType={PaginationType.ShowMore}\n />\n\n <FacetsMobile\n facetsData={facetsData as FacetData}\n mobileFilterNarrowLabel={mobileFilterNarrowLabel}\n mobileAppliedFiltersLabel={mobileAppliedFiltersLabel}\n mobileShowResultsLabel={mobileShowResultsLabel}\n facets={facetsStore}\n setFilters={handleFacetsChange}\n setOrderBy={handleOrderByChange}\n orderBy={orderBy}\n pagination={pagination}\n defaultSortValue={SortOptions.AZ}\n clearAllLabel={clearAllLabel}\n sortOptions={[]}\n setPagination={handlePaginationChange}\n listingType={ListingTypes.PEOPLE_LISTING}\n dropdownSearchLabel={departmentFacetSearchLabel}\n unavailableLetters={unavailableLetters}\n />\n </>\n );\n};\n\nexport default PeopleDirectoryListingModule;\n"],"names":["graphQLClient","GraphQLClient","getEnvGQLUrl","useGetPeopleDirectoryListing","params","accumulatedResults","setAccumulatedResults","useState","totalCount","setTotalCount","orderBy","pagination","searchTerm","facets","orderByValue","useMemo","queryParams","_b","_a","_d","_c","_f","_e","getFacetValueById","queryKey","isLoading","error","data","useQuery","PeopleDirectoryListingDocument","useEffect","newItems","item","shouldReset","prev","total","PeopleDirectoryListingModule","noResultsLabel","departmentFacetLabel","departmentFacetSearchLabel","peopleGroupFacetLabel","letterFacetLabel","resultsNumberLabel","showAllPaginationLabel","resultsNumber","clearAllLabel","imgFallback","tagsNoResultsLabel","searchPlaceholder","mobileShowResultsLabel","mobileFilterNarrowLabel","mobileAppliedFiltersLabel","isFirstLoad","setIsFirstLoad","unavailableLetters","setUnavailableLetters","facetsLabel","initialFacets","facetsStore","setFacets","handleSearchTermChange","handleFacetsChange","handleOrderByChange","handlePaginationChange","useListingUrlState","facetTitles","status","results","facetsData","useResetPagination","getMissingLetters","alphabet","_","i","usedLetters","letter","initialLoadRef","useRef","facetLastName","updatedFacets","facet","items","value","isValidValue","v","facetData","transformToFacetPropsItems","validatedValue","validValues","val","React","id","type","title","Facets","Search","ListingTypes","SearchTags","Listing","PaginationType","FacetsMobile","SortOptions"],"mappings":"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"}