Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 14 additions & 8 deletions src/common/hooks/useLoadSearchResults.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,6 @@ export const useLoadSearchResults = (
setQuery(queryParam);
}

await fetchData({
query: queryParam,
searchBy: searchByParam as SearchIdentifiers,
offset: offsetParam ? parseInt(offsetParam) * SEARCH_RESULTS_LIMIT : 0,
});

setForceRefresh(false);
prevSearchParams.current = { query: queryParam, searchBy: searchByParam, offset: offsetParam };
}
Expand All @@ -66,8 +60,20 @@ export const useLoadSearchResults = (
await getSearchSourceData?.();
await getSearchFacetsData?.();

if (defaultSearchBy && defaultQuery) {
await fetchData({ query: defaultQuery, searchBy: defaultSearchBy, offset: 0 });
const query = hasSearchParams ? queryParam : defaultQuery;
const searchBy = hasSearchParams ? searchByParam : defaultSearchBy;
const offset = offsetParam ? parseInt(offsetParam) * SEARCH_RESULTS_LIMIT : 0;

if (searchByParam) {
setSearchBy(searchByParam);
}

if (searchByParam && queryParam) {
setQuery(queryParam);
}

if (query) {
await fetchData({ query, searchBy, offset });
}

setIsLoading(false);
Expand Down
75 changes: 39 additions & 36 deletions src/common/hooks/useSearch.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { useCallback, useEffect } from 'react';
import { useSearchParams } from 'react-router-dom';
import { SearchableIndexQuerySelector } from '@common/constants/complexLookup.constants';
import { DEFAULT_PAGES_METADATA } from '@common/constants/api.constants';
import { SearchIdentifiers, SearchSegment } from '@common/constants/search.constants';
import { SEARCH_RESULTS_LIMIT, SearchIdentifiers, SearchSegment } from '@common/constants/search.constants';
import { generateSearchParamsState } from '@common/helpers/search.helper';
import { usePagination } from '@common/hooks/usePagination';
import { useSearchContext } from '@common/hooks/useSearchContext';
Expand Down Expand Up @@ -78,10 +78,10 @@ export const useSearch = () => {

if (hasSearchParams) {
setSearchParams(generateSearchParamsState(query, searchBy) as unknown as URLSearchParams);
} else {
fetchData({ query, searchBy });
}

fetchData({ query, searchBy, offset: 0 });

setForceRefreshSearch(true);
}, [fetchData, hasSearchParams, query, searchBy, selectedNavigationSegment, facets]);

Expand Down Expand Up @@ -161,39 +161,42 @@ export const useSearch = () => {
});
};

const onPrevPageClick = hasCustomPagination
? async () => {
const pageNumber = onPrevPageClickBase();

await handlePaginationClick({
pageNumber,
query,
pageMetadata,
isBrowseSearch,
searchBy,
navigationSegment,
baseQuerySelectorType: SearchableIndexQuerySelector.Prev,
pageMetadataSelectorType: 'prev',
});
}
: onPrevPageClickBase;

const onNextPageClick = hasCustomPagination
? async () => {
const pageNumber = onNextPageClickBase();

await handlePaginationClick({
pageNumber,
query,
pageMetadata,
isBrowseSearch,
searchBy,
navigationSegment,
baseQuerySelectorType: SearchableIndexQuerySelector.Next,
pageMetadataSelectorType: 'next',
});
}
: onNextPageClickBase;
const handlePageChange = async (
pageNumber: number,
querySelector: SearchableIndexQuerySelector,
metadataSelector: 'prev' | 'next',
) => {
if (hasCustomPagination) {
await handlePaginationClick({
pageNumber,
query,
pageMetadata,
isBrowseSearch,
searchBy,
navigationSegment,
baseQuerySelectorType: querySelector,
pageMetadataSelectorType: metadataSelector,
});
} else {
await fetchData({
query,
searchBy,
offset: pageNumber * SEARCH_RESULTS_LIMIT,
});
}
};

const onPrevPageClick = async () => {
const pageNumber = onPrevPageClickBase();

await handlePageChange(pageNumber, SearchableIndexQuerySelector.Prev, 'prev');
};

const onNextPageClick = async () => {
const pageNumber = onNextPageClickBase();

await handlePageChange(pageNumber, SearchableIndexQuerySelector.Next, 'next');
};

useEffect(() => {
setSearchBy(defaultSearchBy);
Expand Down
14 changes: 12 additions & 2 deletions src/components/AdvancedSearchModal/AdvancedSearchModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import {
SELECT_QUALIFIERS,
} from '@common/constants/search.constants';
import { formatRawQuery, generateSearchParamsState } from '@common/helpers/search.helper';
import { useFetchSearchData } from '@common/hooks/useFetchSearchData';
import { Select } from '@components/Select';
import { useSearchState, useUIState } from '@src/store';
import { AriaModalKind } from '@common/constants/uiElements.constants';
Expand All @@ -31,6 +32,7 @@ export const AdvancedSearchModal: FC<Props> = memo(({ clearValues }) => {
const { formatMessage } = useIntl();
const { isAdvancedSearchOpen: isOpen, setIsAdvancedSearchOpen: setIsOpen } = useUIState();
const { setForceRefresh: setForceRefreshSearch } = useSearchState();
const { fetchData } = useFetchSearchData();
const [rawQuery, setRawQuery] = useState(DEFAULT_ADVANCED_SEARCH_QUERY);

const closeModal = () => {
Expand All @@ -52,10 +54,18 @@ export const AdvancedSearchModal: FC<Props> = memo(({ clearValues }) => {
);
};

const onDoSearch = () => {
const onDoSearch = async () => {
clearValues();
setSearchParams(generateSearchParamsState(formatRawQuery(rawQuery)) as unknown as URLSearchParams);

const formattedQuery = formatRawQuery(rawQuery);
setSearchParams(generateSearchParamsState(formattedQuery) as unknown as URLSearchParams);
setForceRefreshSearch(true);

await fetchData({
query: formattedQuery,
searchBy: undefined,
});

closeModal();
};

Expand Down
4 changes: 1 addition & 3 deletions src/test/__tests__/common/hooks/useLoadSearchResults.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,14 @@ describe('useLoadSearchResults', () => {
]);
});

it('fetches data and updates state with query and searchBy', async () => {
it('updates state with query and searchBy', async () => {
Object.defineProperty(window, 'location', {
value: {
search: '?query=test%20query&searchBy=title',
},
writable: true,
});

fetchData.mockResolvedValue([{ test: ['test value'] }]);
act(() =>
setUpdatedGlobalState([
{
Expand All @@ -53,7 +52,6 @@ describe('useLoadSearchResults', () => {

expect(setSearchBy).toHaveBeenCalledWith('title');
expect(setQuery).toHaveBeenCalledWith('test query');
expect(fetchData).toHaveBeenCalledWith({ query: 'test query', searchBy: 'title', offset: 0 });
});

it('clears data when no query param', () => {
Expand Down
Loading