From 4da17eff1e9e83405e81a714682d84c9962ccee1 Mon Sep 17 00:00:00 2001 From: Michael Dokolin Date: Thu, 3 Nov 2022 21:27:40 +0100 Subject: [PATCH] Fix missing data view error in the visualization embeddable --- ...isualization_missed_saved_object_error.tsx | 35 ++----------------- .../embeddable/visualize_embeddable.tsx | 23 ++++++++++-- .../group6/dashboard_error_handling.ts | 8 ++--- .../translations/translations/fr-FR.json | 1 - .../translations/translations/ja-JP.json | 1 - .../translations/translations/zh-CN.json | 1 - 6 files changed, 27 insertions(+), 42 deletions(-) diff --git a/src/plugins/visualizations/public/components/visualization_missed_saved_object_error.tsx b/src/plugins/visualizations/public/components/visualization_missed_saved_object_error.tsx index 767a2d38f85819..338a8f6fe72015 100644 --- a/src/plugins/visualizations/public/components/visualization_missed_saved_object_error.tsx +++ b/src/plugins/visualizations/public/components/visualization_missed_saved_object_error.tsx @@ -12,28 +12,25 @@ import React from 'react'; import { RedirectAppLinks } from '@kbn/shared-ux-link-redirect-app'; import type { ApplicationStart } from '@kbn/core/public'; import { DATA_VIEW_SAVED_OBJECT_TYPE } from '@kbn/data-plugin/common'; -import type { ViewMode } from '@kbn/embeddable-plugin/common'; import type { RenderMode } from '@kbn/expressions-plugin/common'; interface VisualizationMissedSavedObjectErrorProps { savedObjectMeta: { savedObjectType: typeof DATA_VIEW_SAVED_OBJECT_TYPE | 'search'; - savedObjectId?: string; }; application: ApplicationStart; - viewMode: ViewMode; + message: string; renderMode: RenderMode; } export const VisualizationMissedSavedObjectError = ({ savedObjectMeta, application, - viewMode, + message, renderMode, }: VisualizationMissedSavedObjectErrorProps) => { const { management: isManagementEnabled } = application.capabilities.navLinks; const isIndexPatternManagementEnabled = application.capabilities.management.kibana.indexPatterns; - const isEditVisEnabled = application.capabilities.visualize?.save; return ( ) : null } - body={ - <> -

- {i18n.translate('visualizations.missedDataView.errorMessage', { - defaultMessage: `Could not find the {type}: {id}`, - values: { - id: savedObjectMeta.savedObjectId ?? '-', - type: - savedObjectMeta.savedObjectType === 'search' - ? i18n.translate('visualizations.noSearch.label', { - defaultMessage: 'search', - }) - : i18n.translate('visualizations.noDataView.label', { - defaultMessage: 'data view', - }), - }, - })} -

- {viewMode === 'edit' && renderMode !== 'edit' && isEditVisEnabled ? ( -

- {i18n.translate('visualizations.missedDataView.editInVisualizeEditor', { - defaultMessage: `Edit in Visualize editor to fix the error`, - })} -

- ) : null} - - } + body={

{message}

} /> ); }; diff --git a/src/plugins/visualizations/public/embeddable/visualize_embeddable.tsx b/src/plugins/visualizations/public/embeddable/visualize_embeddable.tsx index 085fa2101851d4..663d015c429de3 100644 --- a/src/plugins/visualizations/public/embeddable/visualize_embeddable.tsx +++ b/src/plugins/visualizations/public/embeddable/visualize_embeddable.tsx @@ -29,7 +29,6 @@ import { IContainer, ReferenceOrValueEmbeddable, SavedObjectEmbeddableInput, - ViewMode, } from '@kbn/embeddable-plugin/public'; import { ExpressionAstExpression, @@ -401,6 +400,25 @@ export class VisualizeEmbeddable this.abortController.abort(); } this.renderComplete.dispatchError(); + + if (isFallbackDataView(this.vis.data.indexPattern)) { + error = new Error( + i18n.translate('visualizations.missedDataView.errorMessage', { + defaultMessage: `Could not find the {type}: {id}`, + values: { + id: this.vis.data.indexPattern.id ?? '-', + type: this.vis.data.savedSearchId + ? i18n.translate('visualizations.noSearch.label', { + defaultMessage: 'search', + }) + : i18n.translate('visualizations.noDataView.label', { + defaultMessage: 'data view', + }), + }, + }) + ); + } + this.updateOutput({ ...this.getOutput(), rendered: true, @@ -515,13 +533,12 @@ export class VisualizeEmbeddable if (isFallbackDataView(this.vis.data.indexPattern)) { return ( ); } diff --git a/test/functional/apps/dashboard/group6/dashboard_error_handling.ts b/test/functional/apps/dashboard/group6/dashboard_error_handling.ts index b3f1f1259ee5e5..b00aec24809cc1 100644 --- a/test/functional/apps/dashboard/group6/dashboard_error_handling.ts +++ b/test/functional/apps/dashboard/group6/dashboard_error_handling.ts @@ -51,15 +51,15 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { // wrapping into own describe to make sure new tab is cleaned up even if test failed // see: https://github.com/elastic/kibana/pull/67280#discussion_r430528122 - describe('recreate index pattern link works', () => { - it('recreate index pattern link works', async () => { + describe('when the saved object is missing', () => { + it('shows the missing data view error message', async () => { await PageObjects.dashboard.gotoDashboardLandingPage(); await PageObjects.dashboard.loadSavedDashboard('dashboard with missing index pattern'); await PageObjects.header.waitUntilLoadingHasFinished(); const embeddableError = await testSubjects.find('embeddableError'); - const link = await embeddableError.findByPartialLinkText('click here to re-create it'); + const errorMessage = await embeddableError.getVisibleText(); - expect(await link.isDisplayed()).to.be(true); + expect(errorMessage).to.contain('Could not find the data view'); }); }); }); diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index b1f6775c73f47d..0a57b7c651d192 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -6175,7 +6175,6 @@ "visualizations.listing.table.typeColumnName": "Type", "visualizations.listingPageTitle": "Bibliothèque Visualize", "visualizations.missedDataView.dataViewReconfigure": "Recréez-la dans la page de gestion des vues de données.", - "visualizations.missedDataView.editInVisualizeEditor": "Effectuer des modifications dans l'éditeur Visualize pour corriger l'erreur", "visualizations.newChart.conditionalMessage.advancedSettingsLink": "Paramètres avancés.", "visualizations.newChart.libraryMode.new": "nouveau", "visualizations.newChart.libraryMode.old": "âge", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 3ed2387f36680c..0b4d191d99bcf1 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -6169,7 +6169,6 @@ "visualizations.listing.table.typeColumnName": "型", "visualizations.listingPageTitle": "Visualizeライブラリ", "visualizations.missedDataView.dataViewReconfigure": "データビュー管理ページで再作成", - "visualizations.missedDataView.editInVisualizeEditor": "Visualizeエディターで編集し、エラーを修正", "visualizations.newChart.conditionalMessage.advancedSettingsLink": "高度な設定", "visualizations.newChart.libraryMode.new": "新規", "visualizations.newChart.libraryMode.old": "古", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index cacc955d4bf9d6..a44380c72b813a 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -6176,7 +6176,6 @@ "visualizations.listing.table.typeColumnName": "类型", "visualizations.listingPageTitle": "Visualize 库", "visualizations.missedDataView.dataViewReconfigure": "在数据视图管理页面中重新创建", - "visualizations.missedDataView.editInVisualizeEditor": "在 Visualize 编辑器中编辑以修复该错误", "visualizations.newChart.conditionalMessage.advancedSettingsLink": "免费的 API 密钥。", "visualizations.newChart.libraryMode.new": "新", "visualizations.newChart.libraryMode.old": "以前",