Files
2024-02-15 17:01:50 +00:00

45 lines
1.5 KiB
TypeScript

import {useMemo} from 'react';
import {t} from 'sentry/locale';
import type {SavedSearch} from 'sentry/types';
import {useLocation} from 'sentry/utils/useLocation';
import useOrganization from 'sentry/utils/useOrganization';
import {useParams} from 'sentry/utils/useParams';
import {useFetchSavedSearchesForOrg} from 'sentry/views/issueList/queries/useFetchSavedSearchesForOrg';
const PINNED_SEARCH_NAME = t('My Default Search');
// Uses the saved search ID in the URL and the cached response to return
// the selected saved search object
export const useSelectedSavedSearch = (): SavedSearch | null => {
const organization = useOrganization();
const location = useLocation();
const params = useParams();
const {data: savedSearches} = useFetchSavedSearchesForOrg(
{orgSlug: organization.slug},
{notifyOnChangeProps: ['data']}
);
const selectedSearchId: string | undefined = params.searchId;
// If there's no direct saved search being requested (via URL route)
// *AND* there's no query in URL, then check if there is pinned search
const selectedSavedSearch =
!selectedSearchId &&
(location.query.query === null || location.query.query === undefined)
? savedSearches?.find(search => search.isPinned)
: savedSearches?.find(({id}) => id === selectedSearchId);
return useMemo(
() =>
selectedSavedSearch?.isPinned
? {
...selectedSavedSearch,
name: PINNED_SEARCH_NAME,
}
: selectedSavedSearch ?? null,
[selectedSavedSearch]
);
};