From 9eb319f39236b4e32b4bde38f529b17bd71c5cbe Mon Sep 17 00:00:00 2001 From: Alex Ma Date: Wed, 30 Oct 2019 14:48:12 -0700 Subject: [PATCH] ImageInsight Image Error Notification (#8086) * image visualization printout (needs localization) * Add error image and log error * "added alert error for invalid image" * removed unnecessary spaces * removed spaces on 61 and 66 * Added image and used notification service * Removed unused import * Changed wording for error --- .../parts/charts/browser/imageInsight.ts | 10 ++++++++-- .../charts/browser/media/images/invalidImage.png | Bin 0 -> 3332 bytes 2 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 src/sql/workbench/parts/charts/browser/media/images/invalidImage.png diff --git a/src/sql/workbench/parts/charts/browser/imageInsight.ts b/src/sql/workbench/parts/charts/browser/imageInsight.ts index 92658eae23..971f7e01ce 100644 --- a/src/sql/workbench/parts/charts/browser/imageInsight.ts +++ b/src/sql/workbench/parts/charts/browser/imageInsight.ts @@ -4,10 +4,11 @@ *--------------------------------------------------------------------------------------------*/ import { IInsight, IInsightData } from './interfaces'; - +import { INotificationService } from 'vs/platform/notification/common/notification'; import { $ } from 'vs/base/browser/dom'; import { mixin } from 'vs/base/common/objects'; import { IInsightOptions, InsightType } from 'sql/workbench/parts/charts/common/interfaces'; +import * as nls from 'vs/nls'; export interface IConfig extends IInsightOptions { encoding?: string; @@ -29,7 +30,7 @@ export class ImageInsight implements IInsight { private imageEle: HTMLImageElement; - constructor(container: HTMLElement, options: IConfig) { + constructor(container: HTMLElement, options: IConfig, @INotificationService private _notificationService: INotificationService) { this._options = mixin(options, defaultConfig, false); this.imageEle = $('img'); container.appendChild(this.imageEle); @@ -52,11 +53,16 @@ export class ImageInsight implements IInsight { } set data(data: IInsightData) { + const that = this; if (data.rows && data.rows.length > 0 && data.rows[0].length > 0) { let img = data.rows[0][0]; if (this._options.encoding === 'hex') { img = ImageInsight._hexToBase64(img); } + this.imageEle.onerror = function () { + this.src = require.toUrl(`./media/images/invalidImage.png`); + that._notificationService.error(nls.localize('invalidImage', "Table does not contain a valid image")); + }; this.imageEle.src = `data:image/${this._options.imageFormat};base64,${img}`; } } diff --git a/src/sql/workbench/parts/charts/browser/media/images/invalidImage.png b/src/sql/workbench/parts/charts/browser/media/images/invalidImage.png new file mode 100644 index 0000000000000000000000000000000000000000..20be91d5589dd1099e8e9864fe75dc07429618b2 GIT binary patch literal 3332 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