1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- 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]
- );
- };
|