From 36cb74050a4d48a1755c360b4bf87eafa9bf3153 Mon Sep 17 00:00:00 2001 From: Lukas Olson Date: Tue, 10 Mar 2026 14:12:08 -0700 Subject: [PATCH] preserve data view references for by-value panels on dashboard save --- .../common/embeddable/get_transform_in.ts | 6 +-- .../search_embeddable_transforms.test.ts | 50 +++++++++++++++++++ 2 files changed, 53 insertions(+), 3 deletions(-) diff --git a/src/platform/plugins/shared/discover/common/embeddable/get_transform_in.ts b/src/platform/plugins/shared/discover/common/embeddable/get_transform_in.ts index ff66dce2fd9b9..68761d3ec75f5 100644 --- a/src/platform/plugins/shared/discover/common/embeddable/get_transform_in.ts +++ b/src/platform/plugins/shared/discover/common/embeddable/get_transform_in.ts @@ -7,7 +7,6 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import { omit } from 'lodash'; import { SavedSearchType } from '@kbn/saved-search-plugin/common'; import type { SavedObjectReference } from '@kbn/core/server'; import { extractReferences, parseSearchSourceJSON } from '@kbn/data-plugin/common'; @@ -71,15 +70,16 @@ export function getTransformIn(transformDrilldownsIn: DrilldownTransforms['trans } }); + const { references = [], ...otherAttrs } = storedState.attributes; return { state: { ...storedState, attributes: { - ...omit(storedState.attributes, 'references'), + ...otherAttrs, tabs, }, }, - references: [...tabReferences, ...drilldownReferences], + references: [...references, ...tabReferences, ...drilldownReferences], }; } return transformIn; diff --git a/src/platform/plugins/shared/discover/common/embeddable/search_embeddable_transforms.test.ts b/src/platform/plugins/shared/discover/common/embeddable/search_embeddable_transforms.test.ts index 78140e4f0bca6..5c685a400dac7 100644 --- a/src/platform/plugins/shared/discover/common/embeddable/search_embeddable_transforms.test.ts +++ b/src/platform/plugins/shared/discover/common/embeddable/search_embeddable_transforms.test.ts @@ -228,6 +228,56 @@ describe('searchEmbeddableTransforms', () => { expect(result.references).toEqual([]); expect(mockDrilldownTransforms.transformIn).toHaveBeenCalledWith(serializedState); }); + + it('includes attributes.references so data view ref is stored on dashboard (by-value Classic mode)', () => { + const dataViewRef = { + name: 'kibanaSavedObjectMeta.searchSourceJSON.index', + id: 'data-view-id-123', + type: 'index-pattern', + }; + const serializedState: SearchEmbeddableByValueState = { + attributes: { + title: 'Test Search', + description: '', + columns: ['_source'], + sort: [], + grid: {}, + hideChart: false, + isTextBasedQuery: false, + kibanaSavedObjectMeta: { + searchSourceJSON: '{"indexRefName":"kibanaSavedObjectMeta.searchSourceJSON.index"}', + }, + tabs: [ + { + id: 'tab-1', + label: 'Tab 1', + attributes: { + kibanaSavedObjectMeta: { + searchSourceJSON: + '{"indexRefName":"kibanaSavedObjectMeta.searchSourceJSON.index"}', + }, + sort: [], + columns: ['_source'], + grid: {}, + hideChart: false, + sampleSize: 100, + isTextBasedQuery: false, + }, + }, + ], + references: [dataViewRef], + }, + title: 'Panel Title', + }; + + const result = + getSearchEmbeddableTransforms(mockDrilldownTransforms).transformIn!(serializedState); + + expect(result.references).toContainEqual(dataViewRef); + expect((result.state as StoredSearchEmbeddableByValueState).attributes).not.toHaveProperty( + 'references' + ); + }); }); }); });