From 34994f816c79854efb26c91df045a79915d89383 Mon Sep 17 00:00:00 2001 From: Qiwen Li Date: Thu, 21 Dec 2023 14:06:21 -0800 Subject: [PATCH] [osci23] implmented advance setting in Dicover: MODIFY_COLUMN_ON_SWITCH (#5508) * Revert "[Data Explorer][Discover 2.0] Fix issues when change index pattern (#4875) (#4885)" This reverts commit 0102a32dd007f90a85a140b80be8d1fb312f30cb. try revert: * [osci23] implmented advance setting in Dicover: MODIFY_COLUMN_ON_SWITCH Signed-off-by: qiwen li * fix deps Signed-off-by: qiwen li * Update CHANGELOG.md Signed-off-by: Qiwen Li * modify to match discover legacy behavior, columns from previous column are only shown in canvas area Signed-off-by: qiwen li * Update CHANGELOG.md Co-authored-by: Anan Zhuang Signed-off-by: Qiwen Li * removed unused variables, added comments and @param Signed-off-by: Qiwen Li --------- Signed-off-by: qiwen li Signed-off-by: Qiwen Li Signed-off-by: Anan Zhuang Signed-off-by: Ashwin P Chandran Co-authored-by: Anan Zhuang Co-authored-by: Ashwin P Chandran --- CHANGELOG.md | 1 + .../view_components/canvas/index.tsx | 5 +++-- .../utils/filter_columns.test.ts | 21 ++++++++++++++----- .../view_components/utils/filter_columns.ts | 13 ++++++++++-- 4 files changed, 31 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e4b91b6282..dbecc4ce3cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,7 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) - [BUG][Data] Support for custom filters with heterogeneous data fields ([5577](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/5577)) - [BUG][Data] Fix empty suggestion history when querying in search bar [#5349](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/5349) - [BUG][Discover] Fix what is displayed in `selected fields` when removing columns from canvas [#5537](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/5537) +- [BUG][Discover] Fix advanced setting `discover:modifyColumnsOnSwitch` ([#5508](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/5508)) - [Discover] Fix missing index pattern field from breaking Discover [#5626](https://github.com/opensearch-project/OpenSearch-Dashboards/pull/5626) ### 🚞 Infrastructure diff --git a/src/plugins/discover/public/application/view_components/canvas/index.tsx b/src/plugins/discover/public/application/view_components/canvas/index.tsx index fabe2373bfe..d5c54158e99 100644 --- a/src/plugins/discover/public/application/view_components/canvas/index.tsx +++ b/src/plugins/discover/public/application/view_components/canvas/index.tsx @@ -18,7 +18,7 @@ import { setColumns, useDispatch, useSelector } from '../../utils/state_manageme import { DiscoverViewServices } from '../../../build_services'; import { useOpenSearchDashboards } from '../../../../../opensearch_dashboards_react/public'; import { filterColumns } from '../utils/filter_columns'; -import { DEFAULT_COLUMNS_SETTING } from '../../../../common'; +import { DEFAULT_COLUMNS_SETTING, MODIFY_COLUMNS_ON_SWITCH } from '../../../../common'; import { OpenSearchSearchHit } from '../../../application/doc_views/doc_views_types'; import './discover_canvas.scss'; @@ -32,7 +32,8 @@ export default function DiscoverCanvas({ setHeaderActionMenu, history }: ViewPro const filteredColumns = filterColumns( columns, indexPattern, - uiSettings.get(DEFAULT_COLUMNS_SETTING) + uiSettings.get(DEFAULT_COLUMNS_SETTING), + uiSettings.get(MODIFY_COLUMNS_ON_SWITCH) ); const dispatch = useDispatch(); const prevIndexPattern = useRef(indexPattern); 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 c6694e14100..fe9f143cb03 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 @@ -13,21 +13,32 @@ describe('filterColumns', () => { }, } as IndexPattern; - it('should return columns that exist in the index pattern fields', () => { + it('should return columns that exist in the index pattern fields when MODIFY_COLUMN_ON_SWITCH is true', () => { const columns = ['a', 'b']; - const result = filterColumns(columns, indexPatternMock, ['a']); + const result = filterColumns(columns, indexPatternMock, ['a'], true); expect(result).toEqual(['a']); }); - it('should return defaultColumns if no columns exist in the index pattern fields', () => { + it('should return all of the columns when MODIFY_COLUMN_ON_SWITCH is false', () => { + const columns = ['a', 'b']; + const result = filterColumns(columns, indexPatternMock, ['a'], false); + expect(result).toEqual(['a', 'b']); + }); + + it('should return defualt columns if columns are empty', () => { + const result = filterColumns([], indexPatternMock, ['a'], false); + expect(result).toEqual(['_source']); + }); + + it('should return defaultColumns if no columns exist in the index pattern fields when MODIFY_COLUMN_ON_SWITCH is true', () => { const columns = ['b', 'e']; - const result = filterColumns(columns, indexPatternMock, ['e']); + const result = filterColumns(columns, indexPatternMock, ['e'], true); expect(result).toEqual(['_source']); }); it('should return defaultColumns if no columns and indexPattern is undefined', () => { const columns = ['b', 'e']; - const result = filterColumns(columns, undefined, ['a']); + const result = filterColumns(columns, undefined, ['a'], true); 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 f9776eb0151..604a1bfdce3 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 @@ -4,6 +4,7 @@ */ import { IndexPattern } from '../../../opensearch_dashboards_services'; +import { buildColumns } from '../../utils/columns'; /** * Helper function to filter columns based on the fields of the index pattern. @@ -13,15 +14,23 @@ import { IndexPattern } from '../../../opensearch_dashboards_services'; * @param columns Array of column names * @param indexPattern Index pattern object * @param defaultColumns Array of default columns + * @param modifyColumn Booelan of 'discover:modifyColumnsOnSwitch' */ export function filterColumns( columns: string[], indexPattern: IndexPattern | undefined, - defaultColumns: string[] + defaultColumns: string[], + modifyColumn: boolean ) { + // if false, we keep all the chosen columns + if (!modifyColumn) { + return columns.length > 0 ? columns : ['_source']; + } + // if true, we keep columns that exist in the new index pattern const fieldsName = indexPattern?.fields.getAll().map((fld) => fld.name) || []; // 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']; + const adjustedColumns = buildColumns(filteredColumns); + return adjustedColumns.length > 0 ? adjustedColumns : ['_source']; }