From 2a318876c694b0607844b49f3e8597690452b857 Mon Sep 17 00:00:00 2001 From: "opensearch-trigger-bot[bot]" <98922864+opensearch-trigger-bot[bot]@users.noreply.github.com> Date: Tue, 10 Oct 2023 13:52:11 -0700 Subject: [PATCH] [BUG][Discover] Allow default columns settings (#5261) (#5270) * [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 https://github.com/opensearch-project/OpenSearch-Dashboards/issues/5246 * fix unit test --------- (cherry picked from commit b3104ce6ca1af405426f59a447effd15ab2a6d4c) Signed-off-by: ananzh Signed-off-by: github-actions[bot] Co-authored-by: github-actions[bot] --- .../utils/state_management/discover_slice.tsx | 5 ++++- .../view_components/utils/filter_columns.test.ts | 13 ++++++------- .../view_components/utils/filter_columns.ts | 6 ++++-- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/plugins/discover/public/application/utils/state_management/discover_slice.tsx b/src/plugins/discover/public/application/utils/state_management/discover_slice.tsx index 270198149e6..f90d400ff3d 100644 --- a/src/plugins/discover/public/application/utils/state_management/discover_slice.tsx +++ b/src/plugins/discover/public/application/utils/state_management/discover_slice.tsx @@ -11,7 +11,7 @@ import { RootState, DefaultViewState } from '../../../../../data_explorer/public import { buildColumns } from '../columns'; import * as utils from './common'; import { SortOrder } from '../../../saved_searches/types'; -import { PLUGIN_ID } from '../../../../common'; +import { DEFAULT_COLUMNS_SETTING, PLUGIN_ID } from '../../../../common'; export interface DiscoverState { /** @@ -57,6 +57,7 @@ const initialState: DiscoverState = { export const getPreloadedState = async ({ getSavedSearchById, + uiSettings: config, }: DiscoverServices): Promise> => { const preloadedState: DefaultViewState = { state: { @@ -86,6 +87,8 @@ export const getPreloadedState = async ({ savedSearchInstance.destroy(); // this instance is no longer needed, will create another one later } + } else if (config.get(DEFAULT_COLUMNS_SETTING)) { + preloadedState.state.columns = config.get(DEFAULT_COLUMNS_SETTING); } return preloadedState; diff --git a/src/plugins/discover/public/application/view_components/utils/filter_columns.test.ts b/src/plugins/discover/public/application/view_components/utils/filter_columns.test.ts index 5ab22f5fa36..c6694e14100 100644 --- a/src/plugins/discover/public/application/view_components/utils/filter_columns.test.ts +++ b/src/plugins/discover/public/application/view_components/utils/filter_columns.test.ts @@ -12,23 +12,22 @@ describe('filterColumns', () => { getAll: () => [{ name: 'a' }, { name: 'c' }, { name: 'd' }], }, } as IndexPattern; - const defaultColumns = ['_defaultColumn']; it('should return columns that exist in the index pattern fields', () => { const columns = ['a', 'b']; - const result = filterColumns(columns, indexPatternMock, defaultColumns); + const result = filterColumns(columns, indexPatternMock, ['a']); expect(result).toEqual(['a']); }); it('should return defaultColumns if no columns exist in the index pattern fields', () => { const columns = ['b', 'e']; - const result = filterColumns(columns, indexPatternMock, defaultColumns); - expect(result).toEqual(defaultColumns); + const result = filterColumns(columns, indexPatternMock, ['e']); + expect(result).toEqual(['_source']); }); - it('should return defaultColumns if no columns and indexPattern is null', () => { + it('should return defaultColumns if no columns and indexPattern is undefined', () => { const columns = ['b', 'e']; - const result = filterColumns(columns, null, defaultColumns); - expect(result).toEqual(defaultColumns); + const result = filterColumns(columns, undefined, ['a']); + expect(result).toEqual(['_source']); }); }); diff --git a/src/plugins/discover/public/application/view_components/utils/filter_columns.ts b/src/plugins/discover/public/application/view_components/utils/filter_columns.ts index 1b2c7554910..f9776eb0151 100644 --- a/src/plugins/discover/public/application/view_components/utils/filter_columns.ts +++ b/src/plugins/discover/public/application/view_components/utils/filter_columns.ts @@ -20,6 +20,8 @@ export function filterColumns( defaultColumns: string[] ) { const fieldsName = indexPattern?.fields.getAll().map((fld) => fld.name) || []; - const filteredColumns = columns.filter((column) => fieldsName.includes(column)); - return filteredColumns.length > 0 ? filteredColumns : defaultColumns; + // combine columns and defaultColumns without duplicates + const combinedColumns = [...new Set([...columns, ...defaultColumns])]; + const filteredColumns = combinedColumns.filter((column) => fieldsName.includes(column)); + return filteredColumns.length > 0 ? filteredColumns : ['_source']; }