Skip to content

Commit

Permalink
[bug] set saved search instance for Discover based on dataset (#8689)
Browse files Browse the repository at this point in the history
* [bug] set saved search instance for Discover based on dataset

Preventing any errors being thrown because of the index pattern
not existing in the case of saved search was created with
a dataset.

Also fix issue that prevented saved search instance not being
set even though loaded properly.

The original fix that was removed fixed a previous issue but
subsequent updates and refactors required an update that was uncaught.

Issue:
n/a

Signed-off-by: Kawika Avilla <[email protected]>

* set saved search order

Signed-off-by: Kawika Avilla <[email protected]>

---------

Signed-off-by: Kawika Avilla <[email protected]>
(cherry picked from commit e4281e4)
Signed-off-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
  • Loading branch information
github-actions[bot] committed Oct 23, 2024
1 parent 50a714f commit 22841e4
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import { migrateLegacyQuery } from './migrate_legacy_query';
import { SearchSource, SearchSourceDependencies } from './search_source';
import { IndexPatternsContract } from '../../index_patterns/index_patterns';
import { SearchSourceFields } from './types';
import { DEFAULT_DATA } from '../../constants';

/**
* Deserializes a json string and a set of referenced objects to a `SearchSource` instance.
Expand All @@ -57,8 +58,13 @@ export const createSearchSource = (
const fields = { ...searchSourceFields };

// hydrating index pattern
if (fields.index && typeof fields.index === 'string') {
fields.index = await indexPatterns.get(searchSourceFields.index as any);
if (
fields.index &&
typeof fields.index === 'string' &&
(!fields.query?.dataset?.type ||
fields.query.dataset.type === DEFAULT_DATA.SET_TYPES.INDEX_PATTERN)
) {
fields.index = await indexPatterns.get(fields.index as string);

Check warning on line 67 in src/plugins/data/common/search/search_source/create_search_source.ts

View check run for this annotation

Codecov / codecov/patch

src/plugins/data/common/search/search_source/create_search_source.ts#L67

Added line #L67 was not covered by tests
}

const searchSource = new SearchSource(fields, searchSourceDependencies);
Expand Down
2 changes: 0 additions & 2 deletions src/plugins/data/public/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,6 @@ export {
DQLBody,
SingleLineInput,
DatasetSelector,
AdvancedSelector,
NoIndexPatternsPanel,
DatasetSelectorAppearance,
} from './ui';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,11 @@ import { RootState, DefaultViewState } from '../../../../../data_explorer/public
import { buildColumns } from '../columns';
import * as utils from './common';
import { SortOrder } from '../../../saved_searches/types';
import { DEFAULT_COLUMNS_SETTING, PLUGIN_ID } from '../../../../common';
import {
DEFAULT_COLUMNS_SETTING,
PLUGIN_ID,
QUERY_ENHANCEMENT_ENABLED_SETTING,
} from '../../../../common';

export interface DiscoverState {
/**
Expand Down Expand Up @@ -90,7 +94,8 @@ export const getPreloadedState = async ({
const indexPatternId = savedSearchInstance.searchSource.getField('index')?.id;
preloadedState.root = {
metadata: {
indexPattern: indexPatternId,
...(indexPatternId &&
!config.get(QUERY_ENHANCEMENT_ENABLED_SETTING) && { indexPattern: indexPatternId }),
view: PLUGIN_ID,
},
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -352,18 +352,35 @@ export const useSearch = (services: DiscoverViewServices) => {
useEffect(() => {
(async () => {
const savedSearchInstance = await getSavedSearchById(savedSearchId);
setSavedSearch(savedSearchInstance);

// if saved search does not exist, do not atempt to sync filters and query from savedObject
if (!savedSearch) {
return;
const query =
savedSearchInstance.searchSource.getField('query') ||
data.query.queryString.getDefaultQuery();

const isEnhancementsEnabled = await uiSettings.get('query:enhancements:enabled');

Check warning on line 360 in src/plugins/discover/public/application/view_components/utils/use_search.ts

View check run for this annotation

Codecov / codecov/patch

src/plugins/discover/public/application/view_components/utils/use_search.ts#L360

Added line #L360 was not covered by tests
if (isEnhancementsEnabled && query.dataset) {
let pattern = await data.indexPatterns.get(

Check warning on line 362 in src/plugins/discover/public/application/view_components/utils/use_search.ts

View check run for this annotation

Codecov / codecov/patch

src/plugins/discover/public/application/view_components/utils/use_search.ts#L362

Added line #L362 was not covered by tests
query.dataset.id,
query.dataset.type !== 'INDEX_PATTERN'
);
if (!pattern) {
await data.query.queryString.getDatasetService().cacheDataset(query.dataset, {

Check warning on line 367 in src/plugins/discover/public/application/view_components/utils/use_search.ts

View check run for this annotation

Codecov / codecov/patch

src/plugins/discover/public/application/view_components/utils/use_search.ts#L367

Added line #L367 was not covered by tests
uiSettings: services.uiSettings,
savedObjects: services.savedObjects,
notifications: services.notifications,
http: services.http,
data: services.data,
});
pattern = await data.indexPatterns.get(

Check warning on line 374 in src/plugins/discover/public/application/view_components/utils/use_search.ts

View check run for this annotation

Codecov / codecov/patch

src/plugins/discover/public/application/view_components/utils/use_search.ts#L374

Added line #L374 was not covered by tests
query.dataset.id,
query.dataset.type !== 'INDEX_PATTERN'
);
savedSearchInstance.searchSource.setField('index', pattern);

Check warning on line 378 in src/plugins/discover/public/application/view_components/utils/use_search.ts

View check run for this annotation

Codecov / codecov/patch

src/plugins/discover/public/application/view_components/utils/use_search.ts#L378

Added line #L378 was not covered by tests
}
}

// sync initial app filters from savedObject to filterManager
const filters = cloneDeep(savedSearchInstance.searchSource.getOwnField('filter'));
const query =
savedSearchInstance.searchSource.getField('query') ||
data.query.queryString.getDefaultQuery();
const actualFilters = [];

if (filters !== undefined) {
Expand All @@ -375,6 +392,7 @@ export const useSearch = (services: DiscoverViewServices) => {

filterManager.setAppFilters(actualFilters);
data.query.queryString.setQuery(query);
setSavedSearch(savedSearchInstance);

Check warning on line 395 in src/plugins/discover/public/application/view_components/utils/use_search.ts

View check run for this annotation

Codecov / codecov/patch

src/plugins/discover/public/application/view_components/utils/use_search.ts#L395

Added line #L395 was not covered by tests

if (savedSearchInstance?.id) {
chrome.recentlyAccessed.add(
Expand All @@ -387,8 +405,6 @@ export const useSearch = (services: DiscoverViewServices) => {
);
}
})();

return () => {};
// This effect will only run when getSavedSearchById is called, which is
// only called when the component is first mounted.
// eslint-disable-next-line react-hooks/exhaustive-deps
Expand Down
2 changes: 1 addition & 1 deletion src/plugins/query_enhancements/public/plugin.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ export class QueryEnhancementsPlugin
title: 'SQL',
search: sqlSearchInterceptor,
getQueryString: (query: Query) => {
return `SELECT * FROM ${queryString.getQuery().dataset?.title} LIMIT 10`;
return `SELECT * FROM ${query.dataset?.title} LIMIT 10`;
},
fields: {
filterable: false,
Expand Down

0 comments on commit 22841e4

Please sign in to comment.