mirror of
https://github.com/elastic/kibana.git
synced 2025-06-28 11:05:39 -04:00
[Saved Search Embeddable] Do not set source field when reading fields from source (#109069)
* [Saved Search Embeddable] Do not set source if reading fields from source enabled * Extract functionality to a helper function and added unit tests * Fix unit test Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
This commit is contained in:
parent
5c5e191364
commit
6711005db2
3 changed files with 77 additions and 20 deletions
|
@ -0,0 +1,33 @@
|
||||||
|
/*
|
||||||
|
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||||
|
* or more contributor license agreements. Licensed under the Elastic License
|
||||||
|
* 2.0 and the Server Side Public License, v 1; you may not use this file except
|
||||||
|
* in compliance with, at your election, the Elastic License 2.0 or the Server
|
||||||
|
* Side Public License, v 1.
|
||||||
|
*/
|
||||||
|
import { createSearchSourceMock } from '../../../../../data/common/search/search_source/mocks';
|
||||||
|
import { updateSearchSource } from './update_search_source';
|
||||||
|
import { indexPatternMock } from '../../../__mocks__/index_pattern';
|
||||||
|
import { SortOrder } from '../../../saved_searches/types';
|
||||||
|
|
||||||
|
describe('updateSearchSource', () => {
|
||||||
|
const defaults = {
|
||||||
|
sampleSize: 50,
|
||||||
|
defaultSort: 'asc',
|
||||||
|
};
|
||||||
|
|
||||||
|
it('updates a given search source', async () => {
|
||||||
|
const searchSource = createSearchSourceMock({});
|
||||||
|
updateSearchSource(searchSource, indexPatternMock, [] as SortOrder[], false, defaults);
|
||||||
|
expect(searchSource.getField('fields')).toBe(undefined);
|
||||||
|
// does not explicitly request fieldsFromSource when not using fields API
|
||||||
|
expect(searchSource.getField('fieldsFromSource')).toBe(undefined);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('updates a given search source with the usage of the new fields api', async () => {
|
||||||
|
const searchSource = createSearchSourceMock({});
|
||||||
|
updateSearchSource(searchSource, indexPatternMock, [] as SortOrder[], true, defaults);
|
||||||
|
expect(searchSource.getField('fields')).toEqual([{ field: '*', include_unmapped: 'true' }]);
|
||||||
|
expect(searchSource.getField('fieldsFromSource')).toBe(undefined);
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,33 @@
|
||||||
|
/*
|
||||||
|
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||||
|
* or more contributor license agreements. Licensed under the Elastic License
|
||||||
|
* 2.0 and the Server Side Public License, v 1; you may not use this file except
|
||||||
|
* in compliance with, at your election, the Elastic License 2.0 or the Server
|
||||||
|
* Side Public License, v 1.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { IndexPattern, ISearchSource } from '../../../../../data/common';
|
||||||
|
import { getSortForSearchSource } from '../../apps/main/components/doc_table';
|
||||||
|
import { SortPairArr } from '../../apps/main/components/doc_table/lib/get_sort';
|
||||||
|
|
||||||
|
export const updateSearchSource = (
|
||||||
|
searchSource: ISearchSource,
|
||||||
|
indexPattern: IndexPattern | undefined,
|
||||||
|
sort: (SortPairArr[] & string[][]) | undefined,
|
||||||
|
useNewFieldsApi: boolean,
|
||||||
|
defaults: {
|
||||||
|
sampleSize: number;
|
||||||
|
defaultSort: string;
|
||||||
|
}
|
||||||
|
) => {
|
||||||
|
const { sampleSize, defaultSort } = defaults;
|
||||||
|
searchSource.setField('size', sampleSize);
|
||||||
|
searchSource.setField('sort', getSortForSearchSource(sort, indexPattern, defaultSort));
|
||||||
|
if (useNewFieldsApi) {
|
||||||
|
searchSource.removeField('fieldsFromSource');
|
||||||
|
const fields: Record<string, string> = { field: '*', include_unmapped: 'true' };
|
||||||
|
searchSource.setField('fields', [fields]);
|
||||||
|
} else {
|
||||||
|
searchSource.removeField('fields');
|
||||||
|
}
|
||||||
|
};
|
|
@ -42,8 +42,9 @@ import { handleSourceColumnState } from '../angular/helpers';
|
||||||
import { DiscoverGridProps } from '../components/discover_grid/discover_grid';
|
import { DiscoverGridProps } from '../components/discover_grid/discover_grid';
|
||||||
import { DiscoverGridSettings } from '../components/discover_grid/types';
|
import { DiscoverGridSettings } from '../components/discover_grid/types';
|
||||||
import { DocTableProps } from '../apps/main/components/doc_table/doc_table_wrapper';
|
import { DocTableProps } from '../apps/main/components/doc_table/doc_table_wrapper';
|
||||||
import { getDefaultSort, getSortForSearchSource } from '../apps/main/components/doc_table';
|
import { getDefaultSort } from '../apps/main/components/doc_table';
|
||||||
import { SortOrder } from '../apps/main/components/doc_table/components/table_header/helpers';
|
import { SortOrder } from '../apps/main/components/doc_table/components/table_header/helpers';
|
||||||
|
import { updateSearchSource } from './helpers/update_search_source';
|
||||||
|
|
||||||
export type SearchProps = Partial<DiscoverGridProps> &
|
export type SearchProps = Partial<DiscoverGridProps> &
|
||||||
Partial<DocTableProps> & {
|
Partial<DocTableProps> & {
|
||||||
|
@ -143,26 +144,16 @@ export class SavedSearchEmbeddable
|
||||||
if (this.abortController) this.abortController.abort();
|
if (this.abortController) this.abortController.abort();
|
||||||
this.abortController = new AbortController();
|
this.abortController = new AbortController();
|
||||||
|
|
||||||
searchSource.setField('size', this.services.uiSettings.get(SAMPLE_SIZE_SETTING));
|
updateSearchSource(
|
||||||
searchSource.setField(
|
searchSource,
|
||||||
'sort',
|
|
||||||
getSortForSearchSource(
|
|
||||||
this.searchProps!.sort,
|
|
||||||
this.searchProps!.indexPattern,
|
this.searchProps!.indexPattern,
|
||||||
this.services.uiSettings.get(SORT_DEFAULT_ORDER_SETTING)
|
this.searchProps!.sort,
|
||||||
)
|
useNewFieldsApi,
|
||||||
|
{
|
||||||
|
sampleSize: this.services.uiSettings.get(SAMPLE_SIZE_SETTING),
|
||||||
|
defaultSort: this.services.uiSettings.get(SORT_DEFAULT_ORDER_SETTING),
|
||||||
|
}
|
||||||
);
|
);
|
||||||
if (useNewFieldsApi) {
|
|
||||||
searchSource.removeField('fieldsFromSource');
|
|
||||||
const fields: Record<string, string> = { field: '*', include_unmapped: 'true' };
|
|
||||||
searchSource.setField('fields', [fields]);
|
|
||||||
} else {
|
|
||||||
searchSource.removeField('fields');
|
|
||||||
if (this.searchProps.indexPattern) {
|
|
||||||
const fieldNames = this.searchProps.indexPattern.fields.map((field) => field.name);
|
|
||||||
searchSource.setField('fieldsFromSource', fieldNames);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Log request to inspector
|
// Log request to inspector
|
||||||
this.inspectorAdapters.requests!.reset();
|
this.inspectorAdapters.requests!.reset();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue