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) => {