From b05d853a39744431a5a492efb83bd7cdbe4e6485 Mon Sep 17 00:00:00 2001 From: Matthias Wilhelm Date: Wed, 12 Feb 2025 17:24:43 +0100 Subject: [PATCH] [Discover Session] Fix "Untitled" export title when exporting CSV on a dashboard (#210143) - Fixes "Untitled" CSV exports when an export of a Discover session CSV is triggered on a Dashboard - Switches to make use of the embeddable title when exporting CSV of Discover session embeddables on a Dashboard. (cherry picked from commit 7a72b14fd5a032f6bcf5ad5d68f84d7e092a23c8) --- .../panel_actions/get_csv_panel_action.test.ts | 9 +++++---- .../panel_actions/get_csv_panel_action.tsx | 14 ++++++++++---- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.test.ts b/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.test.ts index 72da136ba9223..940a298bead6d 100644 --- a/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.test.ts +++ b/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.test.ts @@ -94,7 +94,6 @@ describe('GetCsvReportPanelAction', () => { embeddable: { type: 'search', savedSearch$: new BehaviorSubject({ searchSource: mockSearchSource }), - getTitle: () => `The Dude`, getInspectorAdapters: () => null, getInput: () => ({ viewMode: 'list', @@ -104,6 +103,8 @@ describe('GetCsvReportPanelAction', () => { }, }), hasTimeRange: () => true, + title$: new BehaviorSubject('embeddable title'), + hideTitle$: new BehaviorSubject(false), parentApi: { viewMode: new BehaviorSubject('view'), }, @@ -133,7 +134,7 @@ describe('GetCsvReportPanelAction', () => { columns: [], objectType: 'search', searchSource: {}, - title: '', + title: 'embeddable title', version: '7.15.0', }); }); @@ -168,7 +169,7 @@ describe('GetCsvReportPanelAction', () => { columns: ['column_a', 'column_b'], objectType: 'search', searchSource: { testData: 'testDataValue' }, - title: '', + title: 'embeddable title', version: '7.15.0', }); }); @@ -187,7 +188,7 @@ describe('GetCsvReportPanelAction', () => { await panel.execute(context); expect(core.http.post).toHaveBeenCalledWith('/internal/reporting/generate/csv_searchsource', { - body: '{"jobParams":"(columns:!(),objectType:search,searchSource:(),title:\'\',version:\'7.15.0\')"}', + body: '{"jobParams":"(columns:!(),objectType:search,searchSource:(),title:\'embeddable title\',version:\'7.15.0\')"}', method: 'POST', }); }); diff --git a/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx b/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx index 7be14579523bd..f327c26a441b5 100644 --- a/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx +++ b/packages/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx @@ -31,10 +31,12 @@ import { apiCanAccessViewMode, apiHasType, apiIsOfType, + apiPublishesTitle, CanAccessViewMode, EmbeddableApiContext, getInheritedViewMode, HasType, + PublishesTitle, } from '@kbn/presentation-publishing'; import { toMountPoint } from '@kbn/react-kibana-mount'; import { CSV_REPORTING_ACTION, JobAppParamsCSV } from '@kbn/reporting-export-types-csv-common'; @@ -44,7 +46,6 @@ import { IncompatibleActionError } from '@kbn/ui-actions-plugin/public'; import type { ClientConfigType } from '@kbn/reporting-public/types'; import { checkLicense } from '@kbn/reporting-public/license_check'; import type { ReportingAPIClient } from '@kbn/reporting-public/reporting_api_client'; - import { getI18nStrings } from './strings'; export interface PanelActionDependencies { @@ -83,7 +84,11 @@ interface ExecutionParams { i18nStart: I18nStart; } -type GetCsvActionApi = HasType & PublishesSavedSearch & CanAccessViewMode & HasTimeRange; +type GetCsvActionApi = HasType & + PublishesSavedSearch & + CanAccessViewMode & + HasTimeRange & + PublishesTitle; const compatibilityCheck = (api: EmbeddableApiContext['embeddable']): api is GetCsvActionApi => { return ( @@ -91,7 +96,8 @@ const compatibilityCheck = (api: EmbeddableApiContext['embeddable']): api is Get apiIsOfType(api, SEARCH_EMBEDDABLE_TYPE) && apiPublishesSavedSearch(api) && apiCanAccessViewMode(api) && - Boolean((api as unknown as HasTimeRange).hasTimeRange) + Boolean((api as unknown as HasTimeRange).hasTimeRange) && + apiPublishesTitle(api) ); }; @@ -275,7 +281,7 @@ export class ReportingCsvPanelAction implements ActionDefinition