diff --git a/src/platform/packages/shared/kbn-saved-search-component/src/components/saved_search.tsx b/src/platform/packages/shared/kbn-saved-search-component/src/components/saved_search.tsx index beec37f32ccfc..59241ea24f147 100644 --- a/src/platform/packages/shared/kbn-saved-search-component/src/components/saved_search.tsx +++ b/src/platform/packages/shared/kbn-saved-search-component/src/components/saved_search.tsx @@ -16,6 +16,7 @@ import type { } from '@kbn/discover-plugin/public'; import { SerializedPanelState } from '@kbn/presentation-publishing'; import { css } from '@emotion/react'; +import { SavedSearchAttributes } from '@kbn/saved-search-plugin/common'; import { SavedSearchComponentProps } from '../types'; import { SavedSearchComponentErrorContent } from './error'; @@ -36,6 +37,7 @@ export const SavedSearchComponent: React.FC = (props) filters, index, timestampField, + columns, height, } = props; @@ -65,10 +67,11 @@ export const SavedSearchComponent: React.FC = (props) searchSource.setField('filter', filters); const { searchSourceJSON, references } = searchSource.serialize(); // By-value saved object structure - const attributes = { + const attributes: Partial = { kibanaSavedObjectMeta: { searchSourceJSON, }, + columns, }; setInitialSerializedState({ rawState: { @@ -94,6 +97,7 @@ export const SavedSearchComponent: React.FC = (props) abortController.abort(); }; }, [ + columns, dataViews, documentViewerEnabled, filters, @@ -137,6 +141,7 @@ const SavedSearchComponentTable: React.FC< timeRange, timestampField, index, + columns, } = props; const embeddableApi = useRef(undefined); @@ -198,6 +203,14 @@ const SavedSearchComponentTable: React.FC< [timeRange] ); + useEffect( + function syncColumns() { + if (!embeddableApi.current) return; + embeddableApi.current.setColumns(columns); + }, + [columns] + ); + return ( maybeId={undefined} diff --git a/src/platform/packages/shared/kbn-saved-search-component/src/types.ts b/src/platform/packages/shared/kbn-saved-search-component/src/types.ts index 23823506a08e2..5abd32f310e9d 100644 --- a/src/platform/packages/shared/kbn-saved-search-component/src/types.ts +++ b/src/platform/packages/shared/kbn-saved-search-component/src/types.ts @@ -26,6 +26,7 @@ export interface SavedSearchComponentProps { query?: Query; filters?: Filter[]; timestampField?: string; + columns?: string[]; height?: CSSProperties['height']; displayOptions?: NonPersistedDisplayOptions; } diff --git a/src/platform/packages/shared/kbn-saved-search-component/tsconfig.json b/src/platform/packages/shared/kbn-saved-search-component/tsconfig.json index 5850d6fcf9b81..3ddd1ef7a79aa 100644 --- a/src/platform/packages/shared/kbn-saved-search-component/tsconfig.json +++ b/src/platform/packages/shared/kbn-saved-search-component/tsconfig.json @@ -25,5 +25,6 @@ "@kbn/discover-plugin", "@kbn/i18n", "@kbn/presentation-publishing", + "@kbn/saved-search-plugin", ] } diff --git a/src/platform/plugins/shared/discover/public/embeddable/initialize_search_embeddable_api.tsx b/src/platform/plugins/shared/discover/public/embeddable/initialize_search_embeddable_api.tsx index bf970a0d26ee3..be09d6861c6eb 100644 --- a/src/platform/plugins/shared/discover/public/embeddable/initialize_search_embeddable_api.tsx +++ b/src/platform/plugins/shared/discover/public/embeddable/initialize_search_embeddable_api.tsx @@ -29,7 +29,7 @@ import type { DiscoverServices } from '../build_services'; import { EDITABLE_SAVED_SEARCH_KEYS } from './constants'; import { getSearchEmbeddableDefaults } from './get_search_embeddable_defaults'; import type { - PublishesSavedSearch, + PublishesWritableSavedSearch, SearchEmbeddableRuntimeState, SearchEmbeddableSerializedAttributes, SearchEmbeddableSerializedState, @@ -73,7 +73,9 @@ export const initializeSearchEmbeddableApi = async ( discoverServices: DiscoverServices; } ): Promise<{ - api: PublishesSavedSearch & PublishesWritableDataViews & Partial; + api: PublishesWritableSavedSearch & + PublishesWritableDataViews & + Partial; stateManager: SearchEmbeddableStateManager; anyStateChange$: Observable; comparators: StateComparators; @@ -170,6 +172,10 @@ export const initializeSearchEmbeddableApi = async ( searchSource$.next(searchSource); }; + const setColumns = (columns: string[] | undefined) => { + stateManager.columns.next(columns); + }; + /** Keep the saved search in sync with any state changes */ const syncSavedSearch = combineLatest([onAnyStateChange, searchSource$]) .pipe( @@ -197,6 +203,7 @@ export const initializeSearchEmbeddableApi = async ( query$, setQuery, canEditUnifiedSearch, + setColumns, }, stateManager, anyStateChange$: onAnyStateChange.pipe(map(() => undefined)), diff --git a/src/platform/plugins/shared/discover/public/embeddable/types.ts b/src/platform/plugins/shared/discover/public/embeddable/types.ts index bcf259e317ac1..a243d6e4ff6bd 100644 --- a/src/platform/plugins/shared/discover/public/embeddable/types.ts +++ b/src/platform/plugins/shared/discover/public/embeddable/types.ts @@ -105,7 +105,7 @@ export type SearchEmbeddableApi = DefaultEmbeddableApi & Required & - PublishesSavedSearch & + PublishesWritableSavedSearch & PublishesWritableDataViews & PublishesWritableUnifiedSearch & HasLibraryTransforms & @@ -119,6 +119,10 @@ export interface PublishesSavedSearch { savedSearch$: PublishingSubject; } +export interface PublishesWritableSavedSearch extends PublishesSavedSearch { + setColumns: (columns: string[] | undefined) => void; +} + export const apiPublishesSavedSearch = ( api: EmbeddableApiContext['embeddable'] ): api is PublishesSavedSearch => { diff --git a/src/platform/plugins/shared/discover/public/index.ts b/src/platform/plugins/shared/discover/public/index.ts index a99fe3aeef332..76ae55b560b1a 100644 --- a/src/platform/plugins/shared/discover/public/index.ts +++ b/src/platform/plugins/shared/discover/public/index.ts @@ -33,6 +33,7 @@ export { SEARCH_EMBEDDABLE_CELL_ACTIONS_TRIGGER_ID, apiPublishesSavedSearch, type PublishesSavedSearch, + type PublishesWritableSavedSearch, type HasTimeRange, type SearchEmbeddableSerializedState, type SearchEmbeddableRuntimeState,