From abbdcf43f4e89f6fc085360252514aed7c032b4b Mon Sep 17 00:00:00 2001 From: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> Date: Tue, 21 Feb 2023 06:55:49 -0500 Subject: [PATCH] [8.7] [Discover] Remove table column after that field was deleted (#150980) (#151684) # Backport This will backport the following commits from `main` to `8.7`: - [[Discover] Remove table column after that field was deleted (#150980)](https://github.com/elastic/kibana/pull/150980) ### Questions ? Please refer to the [Backport tool documentation](https://github.com/sqren/backport) Co-authored-by: Julia Rechkunova --- .../components/layout/discover_layout.tsx | 18 ++++++---- .../components/sidebar/discover_field.tsx | 2 +- .../components/sidebar/discover_sidebar.tsx | 2 +- .../sidebar/discover_sidebar_responsive.tsx | 4 +-- .../apps/discover/group1/_sidebar.ts | 35 +++++++++++++++++++ 5 files changed, 51 insertions(+), 10 deletions(-) diff --git a/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx b/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx index cb7f9c64ff625b..da47f1c1e96262 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx @@ -156,12 +156,18 @@ export function DiscoverLayout({ [filterManager, dataView, dataViews, trackUiMetric, capabilities] ); - const onFieldEdited = useCallback(async () => { - if (!dataView.isPersisted()) { - await updateAdHocDataViewId(dataView); - } - stateContainer.dataState.refetch$.next('reset'); - }, [dataView, stateContainer, updateAdHocDataViewId]); + const onFieldEdited = useCallback( + async ({ removedFieldName }: { removedFieldName?: string } = {}) => { + if (removedFieldName && currentColumns.includes(removedFieldName)) { + onRemoveColumn(removedFieldName); + } + if (!dataView.isPersisted()) { + await updateAdHocDataViewId(dataView); + } + stateContainer.dataState.refetch$.next('reset'); + }, + [dataView, stateContainer, updateAdHocDataViewId, currentColumns, onRemoveColumn] + ); const onDisableFilters = useCallback(() => { const disabledFilters = filterManager diff --git a/src/plugins/discover/public/application/main/components/sidebar/discover_field.tsx b/src/plugins/discover/public/application/main/components/sidebar/discover_field.tsx index 4c45500a84c600..9c6ae0a292d80e 100644 --- a/src/plugins/discover/public/application/main/components/sidebar/discover_field.tsx +++ b/src/plugins/discover/public/application/main/components/sidebar/discover_field.tsx @@ -232,7 +232,7 @@ export interface DiscoverFieldProps { */ onAddFilter?: (field: DataViewField | string, value: unknown, type: '+' | '-') => void; /** - * Callback to remove/deselect a the field + * Callback to remove a field column from the table * @param fieldName */ onRemoveField: (fieldName: string) => void; diff --git a/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar.tsx b/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar.tsx index 72bfc8f24dcd4a..92cc33852ebc0f 100644 --- a/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar.tsx +++ b/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar.tsx @@ -173,7 +173,7 @@ export function DiscoverSidebarComponent({ }, fieldName, onDelete: async () => { - await onFieldEdited(); + await onFieldEdited({ removedFieldName: fieldName }); }, }); if (setFieldEditorRef) { diff --git a/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.tsx b/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.tsx index b2b2715067d8ce..10876cf8aaabc3 100644 --- a/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.tsx +++ b/src/plugins/discover/public/application/main/components/sidebar/discover_sidebar_responsive.tsx @@ -79,7 +79,7 @@ export interface DiscoverSidebarResponsiveProps { */ onChangeDataView: (id: string) => void; /** - * Callback function when removing a field + * Callback to remove a field column from the table * @param fieldName */ onRemoveField: (fieldName: string) => void; @@ -100,7 +100,7 @@ export interface DiscoverSidebarResponsiveProps { /** * callback to execute on edit runtime field */ - onFieldEdited: () => Promise; + onFieldEdited: (options?: { removedFieldName?: string }) => Promise; /** * callback to execute on create dataview */ diff --git a/test/functional/apps/discover/group1/_sidebar.ts b/test/functional/apps/discover/group1/_sidebar.ts index d57b3edfe83e0f..9842cc3df554ae 100644 --- a/test/functional/apps/discover/group1/_sidebar.ts +++ b/test/functional/apps/discover/group1/_sidebar.ts @@ -26,6 +26,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const filterBar = getService('filterBar'); const fieldEditor = getService('fieldEditor'); const retry = getService('retry'); + const dataGrid = getService('dataGrid'); const INITIAL_FIELD_LIST_SUMMARY = '53 available fields. 0 empty fields. 3 meta fields.'; describe('discover sidebar', function describeIndexTests() { @@ -715,6 +716,40 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'test/functional/fixtures/es_archiver/index_pattern_without_timefield' ); }); + + it('should remove the table column after a field was deleted', async () => { + const newField = '_test_field_and_column_removal'; + await PageObjects.discover.addRuntimeField(newField, `emit("hi there")`); + + await retry.waitFor('form to close', async () => { + return !(await testSubjects.exists('fieldEditor')); + }); + + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSidebarHasLoaded(); + + let selectedFields = await PageObjects.discover.getSidebarSectionFieldNames('selected'); + expect(selectedFields.includes(newField)).to.be(false); + expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', 'Document']); + + await PageObjects.discover.clickFieldListItemAdd(newField); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSidebarHasLoaded(); + + selectedFields = await PageObjects.discover.getSidebarSectionFieldNames('selected'); + expect(selectedFields.includes(newField)).to.be(true); + expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', newField]); + + await PageObjects.discover.removeField(newField); + await PageObjects.header.waitUntilLoadingHasFinished(); + await PageObjects.discover.waitUntilSidebarHasLoaded(); + + await retry.waitFor('sidebar to update', async () => { + return !(await PageObjects.discover.getAllFieldNames()).includes(newField); + }); + + expect(await dataGrid.getHeaderFields()).to.eql(['@timestamp', 'Document']); + }); }); }); }