Skip to content

Commit 3c83816

Browse files
[BUG][Discover] Allow default columns settings (#5261) (#5271)
* [BUG][Discover] Allow default columns settings This is a missing functionality * When user sets up `Default columns` in advanced settings, discover should display default columns if the selected idp has the columns. * If selected idp has no such columns, display `_source` column. Issue Resolve #5246 --------- (cherry picked from commit b3104ce) Signed-off-by: ananzh <[email protected]> Signed-off-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 parent 27f0834 commit 3c83816

File tree

3 files changed

+14
-10
lines changed

3 files changed

+14
-10
lines changed

src/plugins/discover/public/application/utils/state_management/discover_slice.tsx

+4-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { RootState, DefaultViewState } from '../../../../../data_explorer/public
1111
import { buildColumns } from '../columns';
1212
import * as utils from './common';
1313
import { SortOrder } from '../../../saved_searches/types';
14-
import { PLUGIN_ID } from '../../../../common';
14+
import { DEFAULT_COLUMNS_SETTING, PLUGIN_ID } from '../../../../common';
1515

1616
export interface DiscoverState {
1717
/**
@@ -57,6 +57,7 @@ const initialState: DiscoverState = {
5757

5858
export const getPreloadedState = async ({
5959
getSavedSearchById,
60+
uiSettings: config,
6061
}: DiscoverServices): Promise<DefaultViewState<DiscoverState>> => {
6162
const preloadedState: DefaultViewState<DiscoverState> = {
6263
state: {
@@ -86,6 +87,8 @@ export const getPreloadedState = async ({
8687

8788
savedSearchInstance.destroy(); // this instance is no longer needed, will create another one later
8889
}
90+
} else if (config.get(DEFAULT_COLUMNS_SETTING)) {
91+
preloadedState.state.columns = config.get(DEFAULT_COLUMNS_SETTING);
8992
}
9093

9194
return preloadedState;

src/plugins/discover/public/application/view_components/utils/filter_columns.test.ts

+6-7
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,22 @@ describe('filterColumns', () => {
1212
getAll: () => [{ name: 'a' }, { name: 'c' }, { name: 'd' }],
1313
},
1414
} as IndexPattern;
15-
const defaultColumns = ['_defaultColumn'];
1615

1716
it('should return columns that exist in the index pattern fields', () => {
1817
const columns = ['a', 'b'];
19-
const result = filterColumns(columns, indexPatternMock, defaultColumns);
18+
const result = filterColumns(columns, indexPatternMock, ['a']);
2019
expect(result).toEqual(['a']);
2120
});
2221

2322
it('should return defaultColumns if no columns exist in the index pattern fields', () => {
2423
const columns = ['b', 'e'];
25-
const result = filterColumns(columns, indexPatternMock, defaultColumns);
26-
expect(result).toEqual(defaultColumns);
24+
const result = filterColumns(columns, indexPatternMock, ['e']);
25+
expect(result).toEqual(['_source']);
2726
});
2827

29-
it('should return defaultColumns if no columns and indexPattern is null', () => {
28+
it('should return defaultColumns if no columns and indexPattern is undefined', () => {
3029
const columns = ['b', 'e'];
31-
const result = filterColumns(columns, null, defaultColumns);
32-
expect(result).toEqual(defaultColumns);
30+
const result = filterColumns(columns, undefined, ['a']);
31+
expect(result).toEqual(['_source']);
3332
});
3433
});

src/plugins/discover/public/application/view_components/utils/filter_columns.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ export function filterColumns(
2020
defaultColumns: string[]
2121
) {
2222
const fieldsName = indexPattern?.fields.getAll().map((fld) => fld.name) || [];
23-
const filteredColumns = columns.filter((column) => fieldsName.includes(column));
24-
return filteredColumns.length > 0 ? filteredColumns : defaultColumns;
23+
// combine columns and defaultColumns without duplicates
24+
const combinedColumns = [...new Set([...columns, ...defaultColumns])];
25+
const filteredColumns = combinedColumns.filter((column) => fieldsName.includes(column));
26+
return filteredColumns.length > 0 ? filteredColumns : ['_source'];
2527
}

0 commit comments

Comments
 (0)