diff --git a/static/app/views/explore/logs/useSaveAsItems.tsx b/static/app/views/explore/logs/useSaveAsItems.tsx index ad07fe9b68dfd0..040042e7ac438f 100644 --- a/static/app/views/explore/logs/useSaveAsItems.tsx +++ b/static/app/views/explore/logs/useSaveAsItems.tsx @@ -1,6 +1,12 @@ import {useMemo} from 'react'; import styled from '@emotion/styled'; +import * as Sentry from '@sentry/react'; +import { + addErrorMessage, + addLoadingMessage, + addSuccessMessage, +} from 'sentry/actionCreators/indicator'; import {openSaveQueryModal} from 'sentry/actionCreators/modal'; import Feature from 'sentry/components/acl/feature'; import {t} from 'sentry/locale'; @@ -27,7 +33,9 @@ import { import {handleAddQueryToDashboard} from 'sentry/views/discover/utils'; import {Mode} from 'sentry/views/explore/contexts/pageParamsContext/mode'; import {formatSort} from 'sentry/views/explore/contexts/pageParamsContext/sortBys'; +import {useGetSavedQuery} from 'sentry/views/explore/hooks/useGetSavedQueries'; import {useLogsSaveQuery} from 'sentry/views/explore/hooks/useSaveQuery'; +import {useQueryParamsId} from 'sentry/views/explore/queryParams/context'; import type {Visualize} from 'sentry/views/explore/queryParams/visualize'; import {TraceItemDataset} from 'sentry/views/explore/types'; import {getAlertsUrl} from 'sentry/views/insights/common/utils/getAlertsUrl'; @@ -56,7 +64,9 @@ export function useSaveAsItems({ const organization = useOrganization(); const {projects} = useProjects(); const pageFilters = usePageFilters(); - const {saveQuery} = useLogsSaveQuery(); + const {saveQuery, updateQuery} = useLogsSaveQuery(); + const id = useQueryParamsId(); + const {data: savedQuery} = useGetSavedQuery(id); const project = projects.length === 1 @@ -69,6 +79,30 @@ export function useSaveAsItems({ ); const saveAsQuery = useMemo(() => { + // Show "Existing Query" if we have a non-prebuilt saved query, otherwise "A New Query" + if (defined(id) && savedQuery?.isPrebuilt === false) { + return { + key: 'update-query', + textValue: t('Existing Query'), + label: {t('Existing Query')}, + onAction: async () => { + try { + addLoadingMessage(t('Updating query...')); + await updateQuery(); + addSuccessMessage(t('Query updated successfully')); + trackAnalytics('logs.save_as', { + save_type: 'update_query', + ui_source: 'searchbar', + organization, + }); + } catch (error) { + addErrorMessage(t('Failed to update query')); + Sentry.captureException(error); + } + }, + }; + } + return { key: 'save-query', label: {t('A New Query')}, @@ -88,7 +122,7 @@ export function useSaveAsItems({ }); }, }; - }, [organization, saveQuery]); + }, [id, savedQuery?.isPrebuilt, updateQuery, saveQuery, organization]); const saveAsAlert = useMemo(() => { const alertsUrls = aggregates.map((yAxis: string, index: number) => {