From e79389012b7894b35c8e1b87ae33b44729d6c6c7 Mon Sep 17 00:00:00 2001 From: Devon Thomson Date: Wed, 2 Jul 2025 15:45:45 -0400 Subject: [PATCH 1/2] [Dashboard][Controls] Do not recommend adhoc dataviews (#225705) Stops the Dashboard from placing adhoc data views into its published data views list. This fixes a bug where Dashboard would recommend an adhoc data view as the most relevant data view when creating a control. (cherry picked from commit f48e8142750669651933711e87f57ff26bb8210b) # Conflicts: # src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/get_options_list_control_factory.tsx --- .../interfaces/publishes_data_views.ts | 4 ++++ .../get_options_list_control_factory.tsx | 7 ++++++- .../dashboard/public/dashboard_api/data_views_manager.ts | 5 ++++- .../data_views/common/data_views/abstract_data_views.ts | 3 +++ 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_data_views.ts b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_data_views.ts index b3a9da716d6be..0518e1d6c2892 100644 --- a/src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_data_views.ts +++ b/src/platform/packages/shared/presentation/presentation_publishing/interfaces/publishes_data_views.ts @@ -10,6 +10,10 @@ import { DataView } from '@kbn/data-views-plugin/common'; import { PublishingSubject } from '../publishing_subject'; +/** + * This API publishes a list of data views that it uses. Note that this should not contain any + * ad-hoc data views. + */ export interface PublishesDataViews { dataViews$: PublishingSubject; } diff --git a/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/get_options_list_control_factory.tsx b/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/get_options_list_control_factory.tsx index f5e7ac2d5da80..0718623afd6c1 100644 --- a/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/get_options_list_control_factory.tsx +++ b/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/get_options_list_control_factory.tsx @@ -189,7 +189,7 @@ export const getOptionsListControlFactory = (): DataControlFactory< stateManager, controlFetch$: (onReload: () => void) => controlGroupApi.controlFetch$(uuid, onReload), }).subscribe((result) => { - // if there was an error during fetch, set blocking error and return early + // if there was an error during fetch, set suggestion load error and return early if (Object.hasOwn(result, 'error')) { dataControl.api.setBlockingError((result as { error: Error }).error); return; @@ -413,6 +413,11 @@ export const getOptionsListControlFactory = (): DataControlFactory< singleSelectSubscription.unsubscribe(); validSearchStringSubscription.unsubscribe(); hasSelectionsSubscription.unsubscribe(); +<<<<<<< HEAD +======= + selectionsSubscription.unsubscribe(); + errorsSubscription.unsubscribe(); +>>>>>>> f48e8142750 ([Dashboard][Controls] Do not recommend adhoc dataviews (#225705)) }; }, []); diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_api/data_views_manager.ts b/src/platform/plugins/shared/dashboard/public/dashboard_api/data_views_manager.ts index ba3032c656c0d..bf09042708bd6 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_api/data_views_manager.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_api/data_views_manager.ts @@ -43,7 +43,10 @@ export function initializeDataViewsManager( const dataViewsSubscription = combineLatest([controlGroupDataViewsPipe, childDataViewsPipe]) .pipe( switchMap(async ([controlGroupDataViews, childDataViews]) => { - const allDataViews = [...(controlGroupDataViews ?? []), ...childDataViews]; + const allDataViews = [...(controlGroupDataViews ?? []), ...childDataViews].filter( + (dataView) => dataView.isPersisted() + ); + if (allDataViews.length === 0) { try { const defaultDataView = await dataService.dataViews.getDefaultDataView(); diff --git a/src/platform/plugins/shared/data_views/common/data_views/abstract_data_views.ts b/src/platform/plugins/shared/data_views/common/data_views/abstract_data_views.ts index 6da94426c960d..ffb7c86f63c23 100644 --- a/src/platform/plugins/shared/data_views/common/data_views/abstract_data_views.ts +++ b/src/platform/plugins/shared/data_views/common/data_views/abstract_data_views.ts @@ -235,6 +235,9 @@ export abstract class AbstractDataView { this.originalSavedObjectBody = this.getAsSavedObjectBody(); }; + /** + * Returns true if the data view is persisted, and false if the dataview is adhoc. + */ isPersisted() { return typeof this.version === 'string'; } From 402707c3dc085d7fa4a29c395f55f3120f2d91a9 Mon Sep 17 00:00:00 2001 From: Devon Thomson Date: Thu, 3 Jul 2025 10:49:28 -0400 Subject: [PATCH 2/2] resolve additional conflict --- .../get_options_list_control_factory.tsx | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/get_options_list_control_factory.tsx b/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/get_options_list_control_factory.tsx index 0718623afd6c1..8a6326203c3b3 100644 --- a/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/get_options_list_control_factory.tsx +++ b/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/get_options_list_control_factory.tsx @@ -413,11 +413,6 @@ export const getOptionsListControlFactory = (): DataControlFactory< singleSelectSubscription.unsubscribe(); validSearchStringSubscription.unsubscribe(); hasSelectionsSubscription.unsubscribe(); -<<<<<<< HEAD -======= - selectionsSubscription.unsubscribe(); - errorsSubscription.unsubscribe(); ->>>>>>> f48e8142750 ([Dashboard][Controls] Do not recommend adhoc dataviews (#225705)) }; }, []);