Files
azuredatastudio/src/sql/workbench/services/tableDesigner/browser/tableDesignerPublishDialog.ts
Karl Burtram 8a3d08f0de Merge vscode 1.67 (#20883)
* Fix initial build breaks from 1.67 merge (#2514)

* Update yarn lock files

* Update build scripts

* Fix tsconfig

* Build breaks

* WIP

* Update yarn lock files

* Misc breaks

* Updates to package.json

* Breaks

* Update yarn

* Fix breaks

* Breaks

* Build breaks

* Breaks

* Breaks

* Breaks

* Breaks

* Breaks

* Missing file

* Breaks

* Breaks

* Breaks

* Breaks

* Breaks

* Fix several runtime breaks (#2515)

* Missing files

* Runtime breaks

* Fix proxy ordering issue

* Remove commented code

* Fix breaks with opening query editor

* Fix post merge break

* Updates related to setup build and other breaks (#2516)

* Fix bundle build issues

* Update distro

* Fix distro merge and update build JS files

* Disable pipeline steps

* Remove stats call

* Update license name

* Make new RPM dependencies a warning

* Fix extension manager version checks

* Update JS file

* Fix a few runtime breaks

* Fixes

* Fix runtime issues

* Fix build breaks

* Update notebook tests (part 1)

* Fix broken tests

* Linting errors

* Fix hygiene

* Disable lint rules

* Bump distro

* Turn off smoke tests

* Disable integration tests

* Remove failing "activate" test

* Remove failed test assertion

* Disable other broken test

* Disable query history tests

* Disable extension unit tests

* Disable failing tasks
2022-10-19 19:13:18 -07:00

139 lines
6.1 KiB
TypeScript

/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import 'vs/css!./media/tableDesignerPublishDialog';
import { Button } from 'sql/base/browser/ui/button/button';
import { Modal } from 'sql/workbench/browser/modal/modal';
import * as TelemetryKeys from 'sql/platform/telemetry/common/telemetryKeys';
import { IThemeService } from 'vs/platform/theme/common/themeService';
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService';
import { localize } from 'vs/nls';
import { attachButtonStyler } from 'vs/platform/theme/common/styler';
import * as DOM from 'vs/base/browser/dom';
import { ILogService } from 'vs/platform/log/common/log';
import { IAdsTelemetryService } from 'sql/platform/telemetry/common/telemetry';
import { attachModalDialogStyler } from 'sql/workbench/common/styler';
import { ILayoutService } from 'vs/platform/layout/browser/layoutService';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { Mimes } from 'vs/base/common/mime';
import { Checkbox } from 'sql/base/browser/ui/checkbox/checkbox';
import * as azdata from 'azdata';
import { attachCheckboxStyler } from 'sql/platform/theme/common/styler';
import { ITextResourcePropertiesService } from 'vs/editor/common/services/textResourceConfiguration';
import { MarkdownRenderer } from 'vs/editor/contrib/markdownRenderer/browser/markdownRenderer';
const OkText: string = localize('tableDesigner.UpdateDatabase', "Update Database");
const CancelText: string = localize('tableDesigner.cancel', "Cancel");
const GenerateScriptText: string = localize('tableDesigner.generateScript', "Generate Script");
export enum TableDesignerPublishDialogResult {
UpdateDatabase,
GenerateScript,
Cancel
}
export class TableDesignerPublishDialog extends Modal {
private _report?: azdata.designers.GeneratePreviewReportResult;
private _okButton?: Button;
private _generateScriptButton?: Button;
private _cancelButton?: Button;
private _promiseResolver: (value: TableDesignerPublishDialogResult) => void;
private readonly _markdownRenderer: MarkdownRenderer;
constructor(
@IThemeService themeService: IThemeService,
@IClipboardService clipboardService: IClipboardService,
@ILayoutService layoutService: ILayoutService,
@IAdsTelemetryService telemetryService: IAdsTelemetryService,
@IContextKeyService contextKeyService: IContextKeyService,
@ILogService logService: ILogService,
@ITextResourcePropertiesService textResourcePropertiesService: ITextResourcePropertiesService,
@IInstantiationService instantiationService: IInstantiationService
) {
super('', TelemetryKeys.ModalDialogName.TableDesignerPublishDialog, telemetryService, layoutService, clipboardService, themeService, logService, textResourcePropertiesService, contextKeyService, { dialogStyle: 'normal', hasTitleIcon: false });
this._markdownRenderer = instantiationService.createInstance(MarkdownRenderer, {});
}
public open(report: azdata.designers.GeneratePreviewReportResult): Promise<TableDesignerPublishDialogResult> {
this._report = report;
this.render();
this.show();
const promise = new Promise<TableDesignerPublishDialogResult>((resolve) => {
this._promiseResolver = resolve;
});
return promise;
}
public override render() {
super.render();
this.title = localize('tableDesigner.previewDatabaseUpdates', "Preview Database Updates");
this._register(attachModalDialogStyler(this, this._themeService));
this._okButton = this.addFooterButton(OkText, () => this.handleOkButtonClick());
this._generateScriptButton = this.addFooterButton(GenerateScriptText, () => this.handleGenerateScriptButtonClick(), 'right', true);
this._cancelButton = this.addFooterButton(CancelText, () => this.handleCancelButtonClick(), 'right', true);
const requireConfirmation = this._report.requireConfirmation === true;
this._okButton.enabled = !requireConfirmation;
this._generateScriptButton.enabled = !requireConfirmation;
this._register(attachButtonStyler(this._okButton, this._themeService));
this._register(attachButtonStyler(this._generateScriptButton, this._themeService));
this._register(attachButtonStyler(this._cancelButton, this._themeService));
}
protected renderBody(container: HTMLElement) {
const body = DOM.append(container, DOM.$('.table-designer-publish-dialog'));
const reportContainer = DOM.append(body, DOM.$('.report-container'));
if (this._report.mimeType === Mimes.markdown) {
const markdownElement = this._markdownRenderer.render({ value: this._report.report }).element;
DOM.append(reportContainer, markdownElement);
} else {
// default to plain text
reportContainer.innerText = this._report.report;
}
if (this._report.requireConfirmation && this._report.confirmationText) {
const checkboxContainer = DOM.append(body, DOM.$('div'));
const checkbox = new Checkbox(checkboxContainer, {
label: this._report.confirmationText,
checked: false
});
this._register(checkbox.onChange((checked) => {
this._okButton.enabled = checked;
this._generateScriptButton.enabled = checked;
}));
this._register(attachCheckboxStyler(checkbox, this._themeService));
}
}
protected layout(height?: number): void {
// Nothing to re-layout
}
/* espace key */
protected override onClose() {
this.handleCancelButtonClick();
}
/* enter key */
protected override onAccept() {
this.handleOkButtonClick();
}
private handleOkButtonClick(): void {
this.hide('ok');
this._promiseResolver(TableDesignerPublishDialogResult.UpdateDatabase);
}
private handleGenerateScriptButtonClick(): void {
this.hide('ok');
this._promiseResolver(TableDesignerPublishDialogResult.GenerateScript);
}
private handleCancelButtonClick(): void {
this.hide('cancel');
this._promiseResolver(TableDesignerPublishDialogResult.Cancel);
}
}