diff --git a/changelogs/fragments/8883.yml b/changelogs/fragments/8883.yml new file mode 100644 index 000000000000..d9254d81c3cf --- /dev/null +++ b/changelogs/fragments/8883.yml @@ -0,0 +1,2 @@ +fix: +- Retain currently selected dataset when opening saved query without dataset info ([#8883](/~https://github.com/opensearch-project/OpenSearch-Dashboards/pull/8883)) \ No newline at end of file diff --git a/src/plugins/data/public/ui/saved_query_flyouts/open_saved_query_flyout.tsx b/src/plugins/data/public/ui/saved_query_flyouts/open_saved_query_flyout.tsx index 212e0228e626..099f3e1f0420 100644 --- a/src/plugins/data/public/ui/saved_query_flyouts/open_saved_query_flyout.tsx +++ b/src/plugins/data/public/ui/saved_query_flyouts/open_saved_query_flyout.tsx @@ -26,7 +26,6 @@ import React, { useCallback, useEffect, useRef, useState } from 'react'; import { i18n } from '@osd/i18n'; import { SavedQuery, SavedQueryService } from '../../query'; import { SavedQueryCard } from './saved_query_card'; -import { Query } from '../../../common'; import { getQueryService } from '../../services'; export interface OpenSavedQueryFlyoutProps { @@ -306,19 +305,16 @@ export function OpenSavedQueryFlyout({ fill onClick={() => { if (selectedQuery) { - if ( - // Template queries are not associated with data sources. Apply data source from current query - selectedQuery.attributes.isTemplate - ) { - const updatedQuery: Query = { - ...queryStringManager?.getQuery(), - query: selectedQuery.attributes.query.query, - language: selectedQuery.attributes.query.language, - }; - queryStringManager.setQuery(updatedQuery); - } else { - onQueryOpen(selectedQuery); - } + onQueryOpen({ + ...selectedQuery, + attributes: { + ...selectedQuery.attributes, + query: { + ...selectedQuery.attributes.query, + dataset: queryStringManager.getQuery().dataset, + }, + }, + }); onClose(); } }} diff --git a/src/plugins/data/public/ui/saved_query_flyouts/save_query_flyout.tsx b/src/plugins/data/public/ui/saved_query_flyouts/save_query_flyout.tsx index c0356b864485..f62a60f7e9c7 100644 --- a/src/plugins/data/public/ui/saved_query_flyouts/save_query_flyout.tsx +++ b/src/plugins/data/public/ui/saved_query_flyouts/save_query_flyout.tsx @@ -43,7 +43,6 @@ export function SaveQueryFlyout({ savedQueryService={savedQueryService} showFilterOption={showFilterOption} showTimeFilterOption={showTimeFilterOption} - showDataSourceOption={true} setSaveAsNew={(shouldSaveAsNew) => setSaveAsNew(shouldSaveAsNew)} savedQuery={saveAsNew ? undefined : savedQuery} saveAsNew={saveAsNew} diff --git a/src/plugins/data/public/ui/saved_query_form/helpers.tsx b/src/plugins/data/public/ui/saved_query_form/helpers.tsx index 467eac2de475..ad3de3acde3f 100644 --- a/src/plugins/data/public/ui/saved_query_form/helpers.tsx +++ b/src/plugins/data/public/ui/saved_query_form/helpers.tsx @@ -57,7 +57,6 @@ interface Props { formUiType: 'Modal' | 'Flyout'; showFilterOption?: boolean; showTimeFilterOption?: boolean; - showDataSourceOption?: boolean; saveAsNew?: boolean; setSaveAsNew?: (shouldSaveAsNew: boolean) => void; cannotBeOverwritten?: boolean; @@ -70,7 +69,6 @@ export function useSaveQueryFormContent({ onClose, showFilterOption = true, showTimeFilterOption = true, - showDataSourceOption = false, formUiType, saveAsNew, setSaveAsNew, @@ -81,7 +79,6 @@ export function useSaveQueryFormContent({ const [description, setDescription] = useState(''); const [savedQueries, setSavedQueries] = useState([]); const [shouldIncludeFilters, setShouldIncludeFilters] = useState(true); - const [shouldIncludeDataSource, setShouldIncludeDataSource] = useState(true); // Defaults to false because saved queries are meant to be as portable as possible and loading // a saved query with a time filter will override whatever the current value of the global timepicker // is. We expect this option to be used rarely and only when the user knows they want this behavior. @@ -96,7 +93,6 @@ export function useSaveQueryFormContent({ setDescription(savedQuery?.description || ''); setShouldIncludeFilters(savedQuery ? !!savedQuery.filters : true); setIncludeTimefilter(!!savedQuery?.timefilter); - setShouldIncludeDataSource(savedQuery ? !!savedQuery.query.dataset : true); setFormErrors([]); }, [savedQuery]); @@ -147,18 +143,9 @@ export function useSaveQueryFormContent({ description, shouldIncludeFilters, shouldIncludeTimeFilter, - shouldIncludeDataSource, }); } - }, [ - validate, - onSave, - title, - description, - shouldIncludeFilters, - shouldIncludeTimeFilter, - shouldIncludeDataSource, - ]); + }, [validate, onSave, title, description, shouldIncludeFilters, shouldIncludeTimeFilter]); const onInputChange = useCallback((event) => { setEnabledSaveButton(Boolean(event.target.value)); @@ -229,21 +216,6 @@ export function useSaveQueryFormContent({ data-test-subj="saveQueryFormDescription" /> - {showDataSourceOption && ( - - { - setShouldIncludeDataSource(!shouldIncludeDataSource); - }} - data-test-subj="saveQueryFormIncludeDataSourceOption" - /> - - )} {showFilterOption && ( void; showFilterOption?: boolean; showTimeFilterOption?: boolean; - showDataSourceOption?: boolean; saveAsNew?: boolean; cannotBeOverwritten?: boolean; } @@ -63,7 +62,6 @@ export interface SavedQueryMeta { description: string; shouldIncludeFilters: boolean; shouldIncludeTimeFilter: boolean; - shouldIncludeDataSource: boolean; } export function SaveQueryForm({ @@ -74,7 +72,6 @@ export function SaveQueryForm({ onClose, showFilterOption = true, showTimeFilterOption = true, - showDataSourceOption = false, saveAsNew, setSaveAsNew, cannotBeOverwritten, @@ -87,7 +84,6 @@ export function SaveQueryForm({ onClose, showFilterOption, showTimeFilterOption, - showDataSourceOption, saveAsNew, setSaveAsNew, cannotBeOverwritten, diff --git a/src/plugins/data/public/ui/search_bar/lib/populate_state_from_saved_query.test.ts b/src/plugins/data/public/ui/search_bar/lib/populate_state_from_saved_query.test.ts index 52c3f981296b..b172d8c42a76 100644 --- a/src/plugins/data/public/ui/search_bar/lib/populate_state_from_saved_query.test.ts +++ b/src/plugins/data/public/ui/search_bar/lib/populate_state_from_saved_query.test.ts @@ -47,6 +47,11 @@ describe('populateStateFromSavedQuery', () => { query: { query: 'test', language: 'kuery', + dataset: { + id: 'saved-query-dataset', + title: 'saved-query-dataset', + type: 'INDEX', + }, }, }, }; @@ -57,12 +62,15 @@ describe('populateStateFromSavedQuery', () => { dataMock.query.filterManager.getGlobalFilters = jest.fn().mockReturnValue([]); }); - it('should set query', async () => { + it('should set query with current dataset', async () => { const savedQuery: SavedQuery = { ...baseSavedQuery, }; populateStateFromSavedQuery(dataMock.query, savedQuery); - expect(dataMock.query.queryString.setQuery).toHaveBeenCalled(); + expect(dataMock.query.queryString.setQuery).toHaveBeenCalledWith({ + ...savedQuery.attributes.query, + dataset: dataMock.query.queryString.getQuery().dataset, + }); }); it('should set filters', async () => { diff --git a/src/plugins/data/public/ui/search_bar/lib/populate_state_from_saved_query.ts b/src/plugins/data/public/ui/search_bar/lib/populate_state_from_saved_query.ts index 382fd382ac01..abab61dfe82e 100644 --- a/src/plugins/data/public/ui/search_bar/lib/populate_state_from_saved_query.ts +++ b/src/plugins/data/public/ui/search_bar/lib/populate_state_from_saved_query.ts @@ -48,7 +48,11 @@ export const populateStateFromSavedQuery = (queryService: QueryStart, savedQuery } // query string - queryString.setQuery(savedQuery.attributes.query); + queryString.setQuery({ + ...savedQuery.attributes.query, + // We should keep the currently selected dataset intact + dataset: queryString.getQuery().dataset, + }); // filters const savedQueryFilters = savedQuery.attributes.filters || []; diff --git a/src/plugins/data/public/ui/search_bar/search_bar.tsx b/src/plugins/data/public/ui/search_bar/search_bar.tsx index 1f1b20b8c952..251a0dc86fa0 100644 --- a/src/plugins/data/public/ui/search_bar/search_bar.tsx +++ b/src/plugins/data/public/ui/search_bar/search_bar.tsx @@ -45,7 +45,6 @@ import { QueryEditorTopRow } from '../query_editor'; import QueryBarTopRow from '../query_string_input/query_bar_top_row'; import { SavedQueryMeta, SaveQueryForm } from '../saved_query_form'; import { FilterOptions } from '../filter_bar/filter_options'; -import { getUseNewSavedQueriesUI } from '../../services'; interface SearchBarInjectedDeps { opensearchDashboards: OpenSearchDashboardsReactContextValue; @@ -285,11 +284,8 @@ class SearchBarUI extends Component { public onSave = async (savedQueryMeta: SavedQueryMeta, saveAsNew = false) => { if (!this.state.query) return; - const query = cloneDeep(this.state.query); - if (getUseNewSavedQueriesUI() && !savedQueryMeta.shouldIncludeDataSource) { - delete query.dataset; - } + delete query.dataset; const savedQueryAttributes: SavedQueryAttributes = { title: savedQueryMeta.title,