From 696f6841cb4907020058e3ba355789da5bcb15b7 Mon Sep 17 00:00:00 2001 From: Charles Gagnon Date: Thu, 24 Oct 2019 13:05:07 -0700 Subject: [PATCH] Change BDC view errors to use modal dialog instead of error toast (#7985) * Change BDC view errors to use modal dialog instead of error toast * Move to common control --- .../dialog/bdcDashboardOverviewPage.ts | 9 ++++----- .../dialog/bdcDashboardResourceStatusPage.ts | 8 ++------ .../bigDataCluster/dialog/commonControls.ts | 18 ++++++++++++++++++ 3 files changed, 24 insertions(+), 11 deletions(-) create mode 100644 extensions/big-data-cluster/src/bigDataCluster/dialog/commonControls.ts diff --git a/extensions/big-data-cluster/src/bigDataCluster/dialog/bdcDashboardOverviewPage.ts b/extensions/big-data-cluster/src/bigDataCluster/dialog/bdcDashboardOverviewPage.ts index 3f04c75875..ef11862b49 100644 --- a/extensions/big-data-cluster/src/bigDataCluster/dialog/bdcDashboardOverviewPage.ts +++ b/extensions/big-data-cluster/src/bigDataCluster/dialog/bdcDashboardOverviewPage.ts @@ -13,6 +13,7 @@ import { IconPathHelper, cssStyles } from '../constants'; import { getStateDisplayText, getHealthStatusDisplayText, getEndpointDisplayText, getHealthStatusIcon, getServiceNameDisplayText, Endpoint } from '../utils'; import { EndpointModel, ServiceStatusModel, BdcStatusModel } from '../controller/apiGenerated'; import { BdcDashboard } from './bdcDashboard'; +import { createViewDetailsButton } from './commonControls'; const localize = nls.loadMessageBundle(); @@ -29,6 +30,8 @@ const serviceEndpointRowEndpointCellWidth = 350; const hyperlinkedEndpoints = [Endpoint.metricsui, Endpoint.logsui, Endpoint.sparkHistory, Endpoint.yarnUi]; +type ActionItem = (vscode.MessageItem & { execute: () => void; }); + export class BdcDashboardOverviewPage { private initialized: boolean = false; @@ -236,11 +239,7 @@ export class BdcDashboardOverviewPage { serviceStatusRow.addItem(healthStatusCell, { CSSStyles: { 'width': `${overviewHealthStatusCellWidthPx}px`, 'min-width': `${overviewHealthStatusCellWidthPx}px` } }); if (serviceStatus.healthStatus !== 'healthy' && serviceStatus.details && serviceStatus.details.length > 0) { - const viewDetailsButton = this.modelBuilder.button().withProperties({ label: localize('bdc.dashboard.viewDetails', "View Details") }).component(); - viewDetailsButton.onDidClick(() => { - vscode.window.showErrorMessage(serviceStatus.details); - }); - serviceStatusRow.addItem(viewDetailsButton, { flex: '0 0 auto' }); + serviceStatusRow.addItem(createViewDetailsButton(this.modelBuilder, serviceStatus.details), { flex: '0 0 auto' }); } container.addItem(serviceStatusRow, { CSSStyles: { 'padding-left': '10px', 'border-top': 'solid 1px #ccc', 'border-bottom': isLastRow ? 'solid 1px #ccc' : '', 'box-sizing': 'border-box', 'user-select': 'text' } }); diff --git a/extensions/big-data-cluster/src/bigDataCluster/dialog/bdcDashboardResourceStatusPage.ts b/extensions/big-data-cluster/src/bigDataCluster/dialog/bdcDashboardResourceStatusPage.ts index cdf2bf67fc..a63ae7d5c5 100644 --- a/extensions/big-data-cluster/src/bigDataCluster/dialog/bdcDashboardResourceStatusPage.ts +++ b/extensions/big-data-cluster/src/bigDataCluster/dialog/bdcDashboardResourceStatusPage.ts @@ -5,13 +5,13 @@ 'use strict'; import * as azdata from 'azdata'; -import * as vscode from 'vscode'; import * as nls from 'vscode-nls'; import { BdcDashboardModel } from './bdcDashboardModel'; import { BdcStatusModel, InstanceStatusModel } from '../controller/apiGenerated'; import { getHealthStatusDisplayText, getHealthStatusIcon, getStateDisplayText } from '../utils'; import { cssStyles } from '../constants'; import { isNullOrUndefined } from 'util'; +import { createViewDetailsButton } from './commonControls'; const localize = nls.loadMessageBundle(); @@ -181,11 +181,7 @@ function createInstanceHealthStatusRow(modelBuilder: azdata.ModelBuilder, instan instanceHealthStatusRow.addItem(healthStatusCell, { CSSStyles: { 'width': `${healthAndStatusHealthColumnWidth}px`, 'min-width': `${healthAndStatusHealthColumnWidth}px` } }); if (instanceStatus.healthStatus !== 'healthy' && instanceStatus.details && instanceStatus.details.length > 0) { - const viewDetailsButton = modelBuilder.button().withProperties({ label: localize('bdc.dashboard.viewDetails', "View Details") }).component(); - viewDetailsButton.onDidClick(() => { - vscode.window.showErrorMessage(instanceStatus.details); - }); - instanceHealthStatusRow.addItem(viewDetailsButton, { flex: '0 0 auto' }); + instanceHealthStatusRow.addItem(createViewDetailsButton(modelBuilder, instanceStatus.details), { flex: '0 0 auto' }); } return instanceHealthStatusRow; } diff --git a/extensions/big-data-cluster/src/bigDataCluster/dialog/commonControls.ts b/extensions/big-data-cluster/src/bigDataCluster/dialog/commonControls.ts new file mode 100644 index 0000000000..d1b9dc85ec --- /dev/null +++ b/extensions/big-data-cluster/src/bigDataCluster/dialog/commonControls.ts @@ -0,0 +1,18 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the Source EULA. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as azdata from 'azdata'; +import * as vscode from 'vscode'; +import * as nls from 'vscode-nls'; + +const localize = nls.loadMessageBundle(); + +export function createViewDetailsButton(modelBuilder: azdata.ModelBuilder, text: string): azdata.ButtonComponent { + const viewDetailsButton = modelBuilder.button().withProperties({ label: localize('bdc.dashboard.viewDetails', "View Details") }).component(); + viewDetailsButton.onDidClick(() => { + vscode.window.showErrorMessage(text, { modal: true }); + }); + return viewDetailsButton; +}