From acc27d0829c8fa3a58d52bf7135a0938bcfe5c90 Mon Sep 17 00:00:00 2001 From: Anthony Dresser Date: Mon, 8 Apr 2019 14:45:30 -0700 Subject: [PATCH] Code Layering Accounts (#4882) * code layering for accounts * formatting * formatting * formatting --- .../accounts/browser}/accountDialog.ts | 32 ++++---- .../browser}/accountDialogController.ts | 10 +-- .../accounts/browser}/accountListRenderer.ts | 16 ++-- .../browser}/accountListStatusbarItem.ts | 5 +- .../accountManagement.contribution.ts | 10 +-- .../browser/accountPicker.ts | 29 ++++--- .../browser/accountPickerService.ts | 5 +- .../accounts/browser}/autoOAuthDialog.ts | 1 - .../browser}/autoOAuthDialogController.ts | 7 +- .../accounts/browser}/firewallRuleDialog.ts | 12 ++- .../browser}/firewallRuleDialogController.ts | 7 +- .../browser}/media/accountActions.css | 0 .../accounts/browser}/media/accountDialog.css | 5 +- .../browser}/media/accountListRenderer.css | 0 .../media/accountListStatusbarItem.css | 0 .../browser/media/accountPicker.css | 0 .../media/accounts_statusbar_inverse.svg | 0 .../browser}/media/autoOAuthDialog.css | 0 .../browser}/media/firewallRuleDialog.css | 0 .../accounts/browser}/media/new_account.svg | 0 .../browser}/media/new_account_inverse.svg | 0 .../accounts/browser}/media/secure.svg | 0 .../accounts}/common/accountActions.ts | 77 +++++++------------ .../common/accountPicker.ts | 2 - .../common/accountPickerViewModel.ts | 13 ++-- .../common/accountStore.ts | 53 +++++-------- .../accounts/common}/accountViewModel.ts | 50 +++++------- .../common/eventTypes.ts | 2 - .../accounts/common}/firewallRuleViewModel.ts | 3 +- .../common/interfaces.ts | 4 +- .../common/connectionManagementService.ts | 2 +- .../api/node/mainThreadAccountManagement.ts | 4 +- .../browser/accountManagementService.ts | 18 ++--- .../connection/browser/connectionWidget.ts | 2 +- .../browser/resourceProviderService.ts | 6 +- .../accountManagement/accountActions.test.ts | 2 +- .../accountDialogController.test.ts | 10 +-- .../accountPickerService.test.ts | 8 +- .../accountPickerViewModel.test.ts | 12 +-- .../accountViewModel.test.ts | 18 ++--- .../autoOAuthDialogController.test.ts | 6 +- .../firewallRuleDialogController.test.ts | 8 +- .../firewallRuleViewModel.test.ts | 4 +- .../accountManagementService.test.ts | 68 ++++++++-------- .../accountManagement/accountStore.test.ts | 66 ++++++++-------- src/sqltest/stubs/accountManagementStubs.ts | 4 +- .../api/extHostAccountManagement.test.ts | 2 +- src/vs/workbench/workbench.main.ts | 8 +- 48 files changed, 258 insertions(+), 333 deletions(-) rename src/sql/{parts/accountManagement/accountDialog => platform/accounts/browser}/accountDialog.ts (90%) rename src/sql/{parts/accountManagement/accountDialog => platform/accounts/browser}/accountDialogController.ts (85%) rename src/sql/{parts/accountManagement/common => platform/accounts/browser}/accountListRenderer.ts (90%) rename src/sql/{parts/accountManagement/accountListStatusbar => platform/accounts/browser}/accountListStatusbarItem.ts (93%) rename src/sql/{parts/accountManagement/common => platform/accounts/browser}/accountManagement.contribution.ts (94%) rename src/sql/platform/{accountManagement => accounts}/browser/accountPicker.ts (90%) rename src/sql/platform/{accountManagement => accounts}/browser/accountPickerService.ts (93%) rename src/sql/{parts/accountManagement/autoOAuthDialog => platform/accounts/browser}/autoOAuthDialog.ts (99%) rename src/sql/{parts/accountManagement/autoOAuthDialog => platform/accounts/browser}/autoOAuthDialogController.ts (89%) rename src/sql/{parts/accountManagement/firewallRuleDialog => platform/accounts/browser}/firewallRuleDialog.ts (97%) rename src/sql/{parts/accountManagement/firewallRuleDialog => platform/accounts/browser}/firewallRuleDialogController.ts (95%) rename src/sql/{parts/accountManagement/common => platform/accounts/browser}/media/accountActions.css (100%) rename src/sql/{parts/accountManagement/accountDialog => platform/accounts/browser}/media/accountDialog.css (98%) rename src/sql/{parts/accountManagement/common => platform/accounts/browser}/media/accountListRenderer.css (100%) rename src/sql/{parts/accountManagement/accountListStatusbar => platform/accounts/browser}/media/accountListStatusbarItem.css (100%) rename src/sql/platform/{accountManagement => accounts}/browser/media/accountPicker.css (100%) rename src/sql/{parts/accountManagement/accountListStatusbar => platform/accounts/browser}/media/accounts_statusbar_inverse.svg (100%) rename src/sql/{parts/accountManagement/autoOAuthDialog => platform/accounts/browser}/media/autoOAuthDialog.css (100%) rename src/sql/{parts/accountManagement/firewallRuleDialog => platform/accounts/browser}/media/firewallRuleDialog.css (100%) rename src/sql/{parts/accountManagement/common => platform/accounts/browser}/media/new_account.svg (100%) rename src/sql/{parts/accountManagement/common => platform/accounts/browser}/media/new_account_inverse.svg (100%) rename src/sql/{parts/accountManagement/firewallRuleDialog => platform/accounts/browser}/media/secure.svg (100%) rename src/sql/{parts/accountManagement => platform/accounts}/common/accountActions.ts (75%) rename src/sql/platform/{accountManagement => accounts}/common/accountPicker.ts (98%) rename src/sql/platform/{accountManagement => accounts}/common/accountPickerViewModel.ts (85%) rename src/sql/platform/{accountManagement => accounts}/common/accountStore.ts (78%) rename src/sql/{parts/accountManagement/accountDialog => platform/accounts/common}/accountViewModel.ts (68%) rename src/sql/platform/{accountManagement => accounts}/common/eventTypes.ts (98%) rename src/sql/{parts/accountManagement/firewallRuleDialog => platform/accounts/common}/firewallRuleViewModel.ts (99%) rename src/sql/platform/{accountManagement => accounts}/common/interfaces.ts (97%) diff --git a/src/sql/parts/accountManagement/accountDialog/accountDialog.ts b/src/sql/platform/accounts/browser/accountDialog.ts similarity index 90% rename from src/sql/parts/accountManagement/accountDialog/accountDialog.ts rename to src/sql/platform/accounts/browser/accountDialog.ts index c3801a4c2d..fafe8a316d 100644 --- a/src/sql/parts/accountManagement/accountDialog/accountDialog.ts +++ b/src/sql/platform/accounts/browser/accountDialog.ts @@ -3,10 +3,8 @@ * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -'use strict'; - import 'vs/css!./media/accountDialog'; -import 'vs/css!sql/parts/accountManagement/common/media/accountActions'; +import 'vs/css!./media/accountActions'; import * as DOM from 'vs/base/browser/dom'; import { List } from 'vs/base/browser/ui/list/listWidget'; import { Event, Emitter } from 'vs/base/common/event'; @@ -29,10 +27,10 @@ import * as azdata from 'azdata'; import { Button } from 'sql/base/browser/ui/button/button'; import { Modal } from 'sql/workbench/browser/modal/modal'; import { attachModalDialogStyler, attachButtonStyler, attachPanelStyler } from 'sql/platform/theme/common/styler'; -import { AccountViewModel } from 'sql/parts/accountManagement/accountDialog/accountViewModel'; -import { AddAccountAction } from 'sql/parts/accountManagement/common/accountActions'; -import { AccountListRenderer, AccountListDelegate } from 'sql/parts/accountManagement/common/accountListRenderer'; -import { AccountProviderAddedEventParams, UpdateAccountListEventParams } from 'sql/platform/accountManagement/common/eventTypes'; +import { AccountViewModel } from 'sql/platform/accounts/common/accountViewModel'; +import { AddAccountAction } from 'sql/platform/accounts/common/accountActions'; +import { AccountListRenderer, AccountListDelegate } from 'sql/platform/accounts/browser/accountListRenderer'; +import { AccountProviderAddedEventParams, UpdateAccountListEventParams } from 'sql/platform/accounts/common/eventTypes'; import { IClipboardService } from 'sql/platform/clipboard/common/clipboardService'; import * as TelemetryKeys from 'sql/common/telemetryKeys'; import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService'; @@ -149,7 +147,7 @@ export class AccountDialog extends Modal { // Load the initial contents of the view model this.viewModel.initialize() .then(addedProviders => { - for (let addedProvider of addedProviders) { + for (const addedProvider of addedProviders) { this.addProvider(addedProvider); } }); @@ -174,13 +172,13 @@ export class AccountDialog extends Modal { this._splitView = new SplitView(this._splitViewContainer); this._noaccountViewContainer = DOM.$('div.no-account-view'); - let noAccountTitle = DOM.append(this._noaccountViewContainer, DOM.$('.no-account-view-label')); - let noAccountLabel = localize('accountDialog.noAccountLabel', 'There is no linked account. Please add an account.'); + const noAccountTitle = DOM.append(this._noaccountViewContainer, DOM.$('.no-account-view-label')); + const noAccountLabel = localize('accountDialog.noAccountLabel', 'There is no linked account. Please add an account.'); noAccountTitle.innerText = noAccountLabel; // Show the add account button for the first provider // Todo: If we have more than 1 provider, need to show all add account buttons for all providers - let buttonSection = DOM.append(this._noaccountViewContainer, DOM.$('div.button-section')); + const buttonSection = DOM.append(this._noaccountViewContainer, DOM.$('div.button-section')); this._addAccountButton = new Button(buttonSection); this._addAccountButton.label = localize('accountDialog.addConnection', 'Add an account'); this._register(this._addAccountButton.onDidClick(() => { @@ -231,7 +229,7 @@ export class AccountDialog extends Modal { this._splitViewContainer.hidden = false; this._noaccountViewContainer.hidden = true; if (values(this._providerViewsMap).length > 0) { - let firstView = values(this._providerViewsMap)[0]; + const firstView = values(this._providerViewsMap)[0]; if (firstView instanceof AccountPanel) { firstView.setSelection([0]); firstView.focus(); @@ -240,8 +238,8 @@ export class AccountDialog extends Modal { } private isEmptyLinkedAccount(): boolean { - for (let provider of values(this._providerViewsMap)) { - let listView = provider.view; + for (const provider of values(this._providerViewsMap)) { + const listView = provider.view; if (listView && listView.length > 0) { return false; } @@ -251,7 +249,7 @@ export class AccountDialog extends Modal { public dispose(): void { super.dispose(); - for (let provider of values(this._providerViewsMap)) { + for (const provider of values(this._providerViewsMap)) { if (provider.addAccountAction) { provider.addAccountAction.dispose(); } @@ -317,7 +315,7 @@ export class AccountDialog extends Modal { private removeProvider(removedProvider: azdata.AccountProviderMetadata) { // Skip removing the provider if it doesn't exist - let providerView = this._providerViewsMap.get(removedProvider.id); + const providerView = this._providerViewsMap.get(removedProvider.id); if (!providerView || !providerView.view) { return; } @@ -332,7 +330,7 @@ export class AccountDialog extends Modal { } private updateProviderAccounts(args: UpdateAccountListEventParams) { - let providerMapping = this._providerViewsMap.get(args.providerId); + const providerMapping = this._providerViewsMap.get(args.providerId); if (!providerMapping || !providerMapping.view) { return; } diff --git a/src/sql/parts/accountManagement/accountDialog/accountDialogController.ts b/src/sql/platform/accounts/browser/accountDialogController.ts similarity index 85% rename from src/sql/parts/accountManagement/accountDialog/accountDialogController.ts rename to src/sql/platform/accounts/browser/accountDialogController.ts index 41211542f4..8356617e69 100644 --- a/src/sql/parts/accountManagement/accountDialog/accountDialogController.ts +++ b/src/sql/platform/accounts/browser/accountDialogController.ts @@ -3,10 +3,8 @@ * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -'use strict'; - import Severity from 'vs/base/common/severity'; -import { AccountDialog } from 'sql/parts/accountManagement/accountDialog/accountDialog'; +import { AccountDialog } from 'sql/platform/accounts/browser/accountDialog'; import { localize } from 'vs/nls'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IErrorMessageService } from 'sql/platform/errorMessage/common/errorMessageService'; @@ -28,13 +26,11 @@ export class AccountDialogController { * Open account dialog */ public openAccountDialog(): void { - let self = this; - // Create a new dialog if one doesn't exist if (!this._accountDialog) { this._accountDialog = this._instantiationService.createInstance(AccountDialog); - this._accountDialog.onAddAccountErrorEvent(msg => { self.handleOnAddAccountError(msg); }); - this._accountDialog.onCloseEvent(() => { self.handleOnClose(); }); + this._accountDialog.onAddAccountErrorEvent(msg => this.handleOnAddAccountError(msg)); + this._accountDialog.onCloseEvent(() => this.handleOnClose()); this._accountDialog.render(); } diff --git a/src/sql/parts/accountManagement/common/accountListRenderer.ts b/src/sql/platform/accounts/browser/accountListRenderer.ts similarity index 90% rename from src/sql/parts/accountManagement/common/accountListRenderer.ts rename to src/sql/platform/accounts/browser/accountListRenderer.ts index d1ebf7c292..14ae74b698 100644 --- a/src/sql/parts/accountManagement/common/accountListRenderer.ts +++ b/src/sql/platform/accounts/browser/accountListRenderer.ts @@ -3,17 +3,17 @@ * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -'use strict'; -import 'vs/css!sql/parts/accountManagement/common/media/accountListRenderer'; -import 'vs/css!sql/parts/accountManagement/common/media/accountActions'; +import 'vs/css!./media/accountListRenderer'; +import 'vs/css!./media/accountActions'; import 'vs/css!sql/media/icons/common-icons'; + import * as DOM from 'vs/base/browser/dom'; import { IListRenderer, IListVirtualDelegate } from 'vs/base/browser/ui/list/list'; import { ActionBar, IActionOptions } from 'vs/base/browser/ui/actionbar/actionbar'; import { localize } from 'vs/nls'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; -import { RemoveAccountAction, RefreshAccountAction } from 'sql/parts/accountManagement/common/accountActions'; +import { RemoveAccountAction, RefreshAccountAction } from 'sql/platform/accounts/common/accountActions'; import * as azdata from 'azdata'; @@ -114,9 +114,9 @@ export class AccountListRenderer extends AccountPickerListRenderer { } templateData.actions.clear(); - let actionOptions: IActionOptions = { icon: true, label: false }; + const actionOptions: IActionOptions = { icon: true, label: false }; if (account.isStale) { - let refreshAction = this._instantiationService.createInstance(RefreshAccountAction); + const refreshAction = this._instantiationService.createInstance(RefreshAccountAction); refreshAction.account = account; templateData.actions.push(refreshAction, actionOptions); } else { @@ -124,7 +124,7 @@ export class AccountListRenderer extends AccountPickerListRenderer { // templateData.actions.push(new ApplyFilterAction(ApplyFilterAction.ID, ApplyFilterAction.LABEL), actionOptions); } - let removeAction = this._instantiationService.createInstance(RemoveAccountAction, account); + const removeAction = this._instantiationService.createInstance(RemoveAccountAction, account); templateData.actions.push(removeAction, actionOptions); } -} \ No newline at end of file +} diff --git a/src/sql/parts/accountManagement/accountListStatusbar/accountListStatusbarItem.ts b/src/sql/platform/accounts/browser/accountListStatusbarItem.ts similarity index 93% rename from src/sql/parts/accountManagement/accountListStatusbar/accountListStatusbarItem.ts rename to src/sql/platform/accounts/browser/accountListStatusbarItem.ts index 40eba3a042..34f49544a0 100644 --- a/src/sql/parts/accountManagement/accountListStatusbar/accountListStatusbarItem.ts +++ b/src/sql/platform/accounts/browser/accountListStatusbarItem.ts @@ -3,8 +3,6 @@ * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -'use strict'; - import 'vs/css!./media/accountListStatusbarItem'; import { Action, IAction } from 'vs/base/common/actions'; import { IDisposable } from 'vs/base/common/lifecycle'; @@ -16,7 +14,7 @@ import { IStatusbarItem } from 'vs/workbench/browser/parts/statusbar/statusbar'; import { Themable, STATUS_BAR_FOREGROUND } from 'vs/workbench/common/theme'; import { IThemeService } from 'vs/platform/theme/common/themeService'; -import { IAccountManagementService } from 'sql/platform/accountManagement/common/interfaces'; +import { IAccountManagementService } from 'sql/platform/accounts/common/interfaces'; export class AccountListStatusbarItem extends Themable implements IStatusbarItem { private _manageLinkedAccountAction: IAction; @@ -24,7 +22,6 @@ export class AccountListStatusbarItem extends Themable implements IStatusbarItem constructor( @IInstantiationService private _instantiationService: IInstantiationService, - @IAccountManagementService private _accountManagementService: IAccountManagementService, @IThemeService themeService: IThemeService ) { super(themeService); diff --git a/src/sql/parts/accountManagement/common/accountManagement.contribution.ts b/src/sql/platform/accounts/browser/accountManagement.contribution.ts similarity index 94% rename from src/sql/parts/accountManagement/common/accountManagement.contribution.ts rename to src/sql/platform/accounts/browser/accountManagement.contribution.ts index 1b812b59bd..bb90aa7915 100644 --- a/src/sql/parts/accountManagement/common/accountManagement.contribution.ts +++ b/src/sql/platform/accounts/browser/accountManagement.contribution.ts @@ -3,8 +3,6 @@ * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -'use strict'; - import { Registry } from 'vs/platform/registry/common/platform'; import { IWorkbenchActionRegistry, Extensions } from 'vs/workbench/common/actions'; import { SyncActionDescriptor } from 'vs/platform/actions/common/actions'; @@ -15,7 +13,7 @@ import { join } from 'path'; import { createCSSRule } from 'vs/base/browser/dom'; import { URI } from 'vs/base/common/uri'; -import { ManageLinkedAccountAction } from 'sql/parts/accountManagement/accountListStatusbar/accountListStatusbarItem'; +import { ManageLinkedAccountAction } from 'sql/platform/accounts/browser/accountListStatusbarItem'; let actionRegistry = Registry.as(Extensions.WorkbenchActions); @@ -78,10 +76,9 @@ export const accountsContribution: IJSONSchema = { ExtensionsRegistry.registerExtensionPoint({ extensionPoint: 'account-type', jsonSchema: accountsContribution }).setHandler(extensions => { function handleCommand(account: IAccountContrib, extension: IExtensionPointUser) { - let { icon, id } = account; - let iconClass: string; + const { icon, id } = account; if (icon) { - iconClass = id; + const iconClass = id; if (typeof icon === 'string') { const path = join(extension.description.extensionLocation.fsPath, icon); createCSSRule(`.icon.${iconClass}`, `background-image: url("${URI.file(path).toString()}")`); @@ -106,4 +103,3 @@ ExtensionsRegistry.registerExtensionPoint({ } }); - diff --git a/src/sql/platform/accountManagement/browser/accountPicker.ts b/src/sql/platform/accounts/browser/accountPicker.ts similarity index 90% rename from src/sql/platform/accountManagement/browser/accountPicker.ts rename to src/sql/platform/accounts/browser/accountPicker.ts index 1a7fbec55a..91a62a62dd 100644 --- a/src/sql/platform/accountManagement/browser/accountPicker.ts +++ b/src/sql/platform/accounts/browser/accountPicker.ts @@ -3,7 +3,6 @@ * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -'use strict'; import 'vs/css!./media/accountPicker'; import * as DOM from 'vs/base/browser/dom'; import { Event, Emitter } from 'vs/base/common/event'; @@ -21,9 +20,9 @@ import { IThemeService, ITheme } from 'vs/platform/theme/common/themeService'; import * as azdata from 'azdata'; import { DropdownList } from 'sql/base/browser/ui/dropdownList/dropdownList'; import { attachDropdownStyler } from 'sql/platform/theme/common/styler'; -import { AddAccountAction, RefreshAccountAction } from 'sql/parts/accountManagement/common/accountActions'; -import { AccountPickerListRenderer, AccountListDelegate } from 'sql/parts/accountManagement/common/accountListRenderer'; -import { AccountPickerViewModel } from 'sql/platform/accountManagement/common/accountPickerViewModel'; +import { AddAccountAction, RefreshAccountAction } from 'sql/platform/accounts/common/accountActions'; +import { AccountPickerListRenderer, AccountListDelegate } from 'sql/platform/accounts/browser/accountListRenderer'; +import { AccountPickerViewModel } from 'sql/platform/accounts/common/accountPickerViewModel'; export class AccountPicker extends Disposable { public static ACCOUNTPICKERLIST_HEIGHT = 47; @@ -85,8 +84,8 @@ export class AccountPicker extends Disposable { */ public createAccountPickerComponent() { // Create an account list - let delegate = new AccountListDelegate(AccountPicker.ACCOUNTPICKERLIST_HEIGHT); - let accountRenderer = new AccountPickerListRenderer(); + const delegate = new AccountListDelegate(AccountPicker.ACCOUNTPICKERLIST_HEIGHT); + const accountRenderer = new AccountPickerListRenderer(); this._listContainer = DOM.$('div.account-list-container'); this._accountList = new List(this._listContainer, delegate, [accountRenderer]); this._register(attachListStyler(this._accountList, this._themeService)); @@ -94,13 +93,13 @@ export class AccountPicker extends Disposable { this._rootElement = DOM.$('div.account-picker-container'); // Create a dropdown for account picker - let option: IDropdownOptions = { + const option: IDropdownOptions = { contextViewProvider: this._contextViewService, labelRenderer: (container) => this.renderLabel(container) }; // Create the add account action - let addAccountAction = this._instantiationService.createInstance(AddAccountAction, this._providerId); + const addAccountAction = this._instantiationService.createInstance(AddAccountAction, this._providerId); addAccountAction.addAccountCompleteEvent(() => this._addAccountCompleteEmitter.fire()); addAccountAction.addAccountErrorEvent((msg) => this._addAccountErrorEmitter.fire(msg)); addAccountAction.addAccountStartEvent(() => this._addAccountStartEmitter.fire()); @@ -117,7 +116,7 @@ export class AccountPicker extends Disposable { // Create refresh account action this._refreshContainer = DOM.append(this._rootElement, DOM.$('div.refresh-container')); DOM.append(this._refreshContainer, DOM.$('div.sql icon warning')); - let actionBar = new ActionBar(this._refreshContainer, { animated: false }); + const actionBar = new ActionBar(this._refreshContainer, { animated: false }); this._refreshAccountAction = this._instantiationService.createInstance(RefreshAccountAction); actionBar.push(this._refreshAccountAction, { icon: false, label: true }); @@ -165,8 +164,8 @@ export class AccountPicker extends Disposable { } } - let selectedAccounts = this._accountList.getSelectedElements(); - let account = selectedAccounts ? selectedAccounts[0] : null; + const selectedAccounts = this._accountList.getSelectedElements(); + const account = selectedAccounts ? selectedAccounts[0] : undefined; if (account) { const badge = DOM.$('div.badge'); const row = DOM.append(container, DOM.$('div.selected-account-container')); @@ -190,12 +189,12 @@ export class AccountPicker extends Disposable { const row = DOM.append(container, DOM.$('div.no-account-container')); row.innerText = AddAccountAction.LABEL + '...'; } - return null; + return undefined; } private updateAccountList(accounts: azdata.Account[]): void { // keep the selection to the current one - let selectedElements = this._accountList.getSelectedElements(); + const selectedElements = this._accountList.getSelectedElements(); // find selected index let selectedIndex: number; @@ -227,8 +226,8 @@ export class AccountPicker extends Disposable { * Update theming that is specific to account picker */ private updateTheme(theme: ITheme): void { - let linkColor = theme.getColor(buttonBackground); - let link = linkColor ? linkColor.toString() : null; + const linkColor = theme.getColor(buttonBackground); + const link = linkColor ? linkColor.toString() : null; this._refreshContainer.style.color = link; if (this._refreshContainer) { this._refreshContainer.style.color = link; diff --git a/src/sql/platform/accountManagement/browser/accountPickerService.ts b/src/sql/platform/accounts/browser/accountPickerService.ts similarity index 93% rename from src/sql/platform/accountManagement/browser/accountPickerService.ts rename to src/sql/platform/accounts/browser/accountPickerService.ts index c7dbb7f1e9..cc18130b23 100644 --- a/src/sql/platform/accountManagement/browser/accountPickerService.ts +++ b/src/sql/platform/accounts/browser/accountPickerService.ts @@ -3,13 +3,12 @@ * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -'use strict'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { Event, Emitter } from 'vs/base/common/event'; import * as azdata from 'azdata'; -import { IAccountPickerService } from 'sql/platform/accountManagement/common/accountPicker'; -import { AccountPicker } from 'sql/platform/accountManagement/browser/accountPicker'; +import { IAccountPickerService } from 'sql/platform/accounts/common/accountPicker'; +import { AccountPicker } from 'sql/platform/accounts/browser/accountPicker'; export class AccountPickerService implements IAccountPickerService { _serviceBrand: any; diff --git a/src/sql/parts/accountManagement/autoOAuthDialog/autoOAuthDialog.ts b/src/sql/platform/accounts/browser/autoOAuthDialog.ts similarity index 99% rename from src/sql/parts/accountManagement/autoOAuthDialog/autoOAuthDialog.ts rename to src/sql/platform/accounts/browser/autoOAuthDialog.ts index 5889ab59b9..3a9a227e32 100644 --- a/src/sql/parts/accountManagement/autoOAuthDialog/autoOAuthDialog.ts +++ b/src/sql/platform/accounts/browser/autoOAuthDialog.ts @@ -3,7 +3,6 @@ * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -'use strict'; import 'vs/css!./media/autoOAuthDialog'; import { Builder, $ } from 'sql/base/browser/builder'; import { IThemeService } from 'vs/platform/theme/common/themeService'; diff --git a/src/sql/parts/accountManagement/autoOAuthDialog/autoOAuthDialogController.ts b/src/sql/platform/accounts/browser/autoOAuthDialogController.ts similarity index 89% rename from src/sql/parts/accountManagement/autoOAuthDialog/autoOAuthDialogController.ts rename to src/sql/platform/accounts/browser/autoOAuthDialogController.ts index 35cccc629b..f494c1f57f 100644 --- a/src/sql/parts/accountManagement/autoOAuthDialog/autoOAuthDialogController.ts +++ b/src/sql/platform/accounts/browser/autoOAuthDialogController.ts @@ -3,13 +3,12 @@ * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -'use strict'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import Severity from 'vs/base/common/severity'; import { localize } from 'vs/nls'; -import { AutoOAuthDialog } from 'sql/parts/accountManagement/autoOAuthDialog/autoOAuthDialog'; -import { IAccountManagementService } from 'sql/platform/accountManagement/common/interfaces'; +import { AutoOAuthDialog } from 'sql/platform/accounts/browser/autoOAuthDialog'; +import { IAccountManagementService } from 'sql/platform/accounts/common/interfaces'; import { IErrorMessageService } from 'sql/platform/errorMessage/common/errorMessageService'; export class AutoOAuthDialogController { @@ -33,7 +32,7 @@ export class AutoOAuthDialogController { public openAutoOAuthDialog(providerId: string, title: string, message: string, userCode: string, uri: string): Thenable { if (this._providerId !== null) { // If a oauth flyout is already open, return an error - let errorMessage = localize('oauthFlyoutIsAlreadyOpen', 'Cannot start auto OAuth. An auto OAuth is already in progress.'); + const errorMessage = localize('oauthFlyoutIsAlreadyOpen', 'Cannot start auto OAuth. An auto OAuth is already in progress.'); this._errorMessageService.showDialog(Severity.Error, '', errorMessage); return Promise.reject(new Error('Auto OAuth dialog already open')); } diff --git a/src/sql/parts/accountManagement/firewallRuleDialog/firewallRuleDialog.ts b/src/sql/platform/accounts/browser/firewallRuleDialog.ts similarity index 97% rename from src/sql/parts/accountManagement/firewallRuleDialog/firewallRuleDialog.ts rename to src/sql/platform/accounts/browser/firewallRuleDialog.ts index 806adeb43a..ee4052c7ba 100644 --- a/src/sql/parts/accountManagement/firewallRuleDialog/firewallRuleDialog.ts +++ b/src/sql/platform/accounts/browser/firewallRuleDialog.ts @@ -3,8 +3,6 @@ * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -'use strict'; - import 'vs/css!./media/firewallRuleDialog'; import { Builder, $ } from 'sql/base/browser/builder'; import * as DOM from 'vs/base/browser/dom'; @@ -24,10 +22,10 @@ import { IThemeService, ITheme } from 'vs/platform/theme/common/themeService'; import * as azdata from 'azdata'; import { Button } from 'sql/base/browser/ui/button/button'; import { Modal } from 'sql/workbench/browser/modal/modal'; -import { FirewallRuleViewModel } from 'sql/parts/accountManagement/firewallRuleDialog/firewallRuleViewModel'; +import { FirewallRuleViewModel } from 'sql/platform/accounts/common/firewallRuleViewModel'; import { attachModalDialogStyler, attachButtonStyler } from 'sql/platform/theme/common/styler'; import { InputBox } from 'sql/base/browser/ui/inputBox/inputBox'; -import { IAccountPickerService } from 'sql/platform/accountManagement/common/accountPicker'; +import { IAccountPickerService } from 'sql/platform/accounts/common/accountPicker'; import * as TelemetryKeys from 'sql/common/telemetryKeys'; import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService'; @@ -173,7 +171,7 @@ export class FirewallRuleDialog extends Modal { let firewallRuleSection; $().div({ 'class': 'firewall-rule-section new-section' }, (firewallRuleContainer) => { firewallRuleSection = firewallRuleContainer.getHTMLElement(); - let firewallRuleLabel = localize('filewallRule', 'Firewall rule'); + const firewallRuleLabel = localize('filewallRule', 'Firewall rule'); this.createLabelElement(firewallRuleContainer, firewallRuleLabel, true); firewallRuleContainer.div({ 'class': 'radio-section' }, (radioContainer) => { const form = DOM.append(radioContainer.getHTMLElement(), DOM.$('form.firewall-rule')); @@ -244,8 +242,8 @@ export class FirewallRuleDialog extends Modal { // Update theming that is specific to firewall rule flyout body private updateTheme(theme: ITheme): void { - let linkColor = theme.getColor(buttonBackground); - let link = linkColor ? linkColor.toString() : null; + const linkColor = theme.getColor(buttonBackground); + const link = linkColor ? linkColor.toString() : null; if (this._helpLink) { this._helpLink.style.color = link; } diff --git a/src/sql/parts/accountManagement/firewallRuleDialog/firewallRuleDialogController.ts b/src/sql/platform/accounts/browser/firewallRuleDialogController.ts similarity index 95% rename from src/sql/parts/accountManagement/firewallRuleDialog/firewallRuleDialogController.ts rename to src/sql/platform/accounts/browser/firewallRuleDialogController.ts index 2942d5d756..6276e05695 100644 --- a/src/sql/parts/accountManagement/firewallRuleDialog/firewallRuleDialogController.ts +++ b/src/sql/platform/accounts/browser/firewallRuleDialogController.ts @@ -3,15 +3,14 @@ * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -'use strict'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import Severity from 'vs/base/common/severity'; import { localize } from 'vs/nls'; import * as azdata from 'azdata'; import { IConnectionProfile } from 'sql/platform/connection/common/interfaces'; -import { FirewallRuleDialog } from 'sql/parts/accountManagement/firewallRuleDialog/firewallRuleDialog'; -import { IAccountManagementService, AzureResource } from 'sql/platform/accountManagement/common/interfaces'; +import { FirewallRuleDialog } from 'sql/platform/accounts/browser/firewallRuleDialog'; +import { IAccountManagementService, AzureResource } from 'sql/platform/accounts/common/interfaces'; import { IResourceProviderService } from 'sql/workbench/services/resourceProvider/common/resourceProviderService'; import { Deferred } from 'sql/base/common/promise'; import { IErrorMessageService } from 'sql/platform/errorMessage/common/errorMessageService'; @@ -59,7 +58,7 @@ export class FirewallRuleDialogController { } private handleOnCreateFirewallRule(): void { - let resourceProviderId = this._resourceProviderId; + const resourceProviderId = this._resourceProviderId; this._accountManagementService.getSecurityToken(this._firewallRuleDialog.viewModel.selectedAccount, AzureResource.ResourceManagement).then(tokenMappings => { let firewallRuleInfo: azdata.FirewallRuleInfo = { diff --git a/src/sql/parts/accountManagement/common/media/accountActions.css b/src/sql/platform/accounts/browser/media/accountActions.css similarity index 100% rename from src/sql/parts/accountManagement/common/media/accountActions.css rename to src/sql/platform/accounts/browser/media/accountActions.css diff --git a/src/sql/parts/accountManagement/accountDialog/media/accountDialog.css b/src/sql/platform/accounts/browser/media/accountDialog.css similarity index 98% rename from src/sql/parts/accountManagement/accountDialog/media/accountDialog.css rename to src/sql/platform/accounts/browser/media/accountDialog.css index d1c4e2d327..19334d9ba3 100644 --- a/src/sql/parts/accountManagement/accountDialog/media/accountDialog.css +++ b/src/sql/platform/accounts/browser/media/accountDialog.css @@ -2,6 +2,7 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ + .no-account-view { font-size: 12px; padding: 15px; @@ -102,7 +103,3 @@ .account-view .monaco-list .monaco-list-row.focused .list-row .actions-container{ display: block; } - -.account-view .monaco-list .monaco-list-row { - -} diff --git a/src/sql/parts/accountManagement/common/media/accountListRenderer.css b/src/sql/platform/accounts/browser/media/accountListRenderer.css similarity index 100% rename from src/sql/parts/accountManagement/common/media/accountListRenderer.css rename to src/sql/platform/accounts/browser/media/accountListRenderer.css diff --git a/src/sql/parts/accountManagement/accountListStatusbar/media/accountListStatusbarItem.css b/src/sql/platform/accounts/browser/media/accountListStatusbarItem.css similarity index 100% rename from src/sql/parts/accountManagement/accountListStatusbar/media/accountListStatusbarItem.css rename to src/sql/platform/accounts/browser/media/accountListStatusbarItem.css diff --git a/src/sql/platform/accountManagement/browser/media/accountPicker.css b/src/sql/platform/accounts/browser/media/accountPicker.css similarity index 100% rename from src/sql/platform/accountManagement/browser/media/accountPicker.css rename to src/sql/platform/accounts/browser/media/accountPicker.css diff --git a/src/sql/parts/accountManagement/accountListStatusbar/media/accounts_statusbar_inverse.svg b/src/sql/platform/accounts/browser/media/accounts_statusbar_inverse.svg similarity index 100% rename from src/sql/parts/accountManagement/accountListStatusbar/media/accounts_statusbar_inverse.svg rename to src/sql/platform/accounts/browser/media/accounts_statusbar_inverse.svg diff --git a/src/sql/parts/accountManagement/autoOAuthDialog/media/autoOAuthDialog.css b/src/sql/platform/accounts/browser/media/autoOAuthDialog.css similarity index 100% rename from src/sql/parts/accountManagement/autoOAuthDialog/media/autoOAuthDialog.css rename to src/sql/platform/accounts/browser/media/autoOAuthDialog.css diff --git a/src/sql/parts/accountManagement/firewallRuleDialog/media/firewallRuleDialog.css b/src/sql/platform/accounts/browser/media/firewallRuleDialog.css similarity index 100% rename from src/sql/parts/accountManagement/firewallRuleDialog/media/firewallRuleDialog.css rename to src/sql/platform/accounts/browser/media/firewallRuleDialog.css diff --git a/src/sql/parts/accountManagement/common/media/new_account.svg b/src/sql/platform/accounts/browser/media/new_account.svg similarity index 100% rename from src/sql/parts/accountManagement/common/media/new_account.svg rename to src/sql/platform/accounts/browser/media/new_account.svg diff --git a/src/sql/parts/accountManagement/common/media/new_account_inverse.svg b/src/sql/platform/accounts/browser/media/new_account_inverse.svg similarity index 100% rename from src/sql/parts/accountManagement/common/media/new_account_inverse.svg rename to src/sql/platform/accounts/browser/media/new_account_inverse.svg diff --git a/src/sql/parts/accountManagement/firewallRuleDialog/media/secure.svg b/src/sql/platform/accounts/browser/media/secure.svg similarity index 100% rename from src/sql/parts/accountManagement/firewallRuleDialog/media/secure.svg rename to src/sql/platform/accounts/browser/media/secure.svg diff --git a/src/sql/parts/accountManagement/common/accountActions.ts b/src/sql/platform/accounts/common/accountActions.ts similarity index 75% rename from src/sql/parts/accountManagement/common/accountActions.ts rename to src/sql/platform/accounts/common/accountActions.ts index ae374db361..90af8499ef 100644 --- a/src/sql/parts/accountManagement/common/accountActions.ts +++ b/src/sql/platform/accounts/common/accountActions.ts @@ -3,15 +3,13 @@ * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -'use strict'; - import * as azdata from 'azdata'; import { Event, Emitter } from 'vs/base/common/event'; import { localize } from 'vs/nls'; import { Action } from 'vs/base/common/actions'; import { error } from 'sql/base/common/log'; -import { IAccountManagementService } from 'sql/platform/accountManagement/common/interfaces'; +import { IAccountManagementService } from 'sql/platform/accounts/common/interfaces'; import { IDialogService, IConfirmation } from 'vs/platform/dialogs/common/dialogs'; import { INotificationService } from 'vs/platform/notification/common/notification'; import Severity from 'vs/base/common/severity'; @@ -47,26 +45,19 @@ export class AddAccountAction extends Action { } public run(): Promise { - let self = this; // Fire the event that we've started adding accounts this._addAccountStartEmitter.fire(); - return new Promise((resolve, reject) => { - self._accountManagementService.addAccount(self._providerId) - .then( - () => { - self._addAccountCompleteEmitter.fire(); - resolve(true); - }, - err => { - error(`Error while adding account: ${err}`); - self._addAccountErrorEmitter.fire(err); - self._addAccountCompleteEmitter.fire(); - reject(err); - } - ); - }); + return Promise.resolve(this._accountManagementService.addAccount(this._providerId) + .then(() => { + this._addAccountCompleteEmitter.fire(); + return true; + }, err => { + error(`Error while adding account: ${err}`); + this._addAccountErrorEmitter.fire(err); + this._addAccountCompleteEmitter.fire(); + })); } } @@ -87,10 +78,8 @@ export class RemoveAccountAction extends Action { } public run(): Promise { - let self = this; - // Ask for Confirm - let confirm: IConfirmation = { + const confirm: IConfirmation = { message: localize('confirmRemoveUserAccountMessage', "Are you sure you want to remove '{0}'?", this._account.displayInfo.displayName), primaryButton: localize('accountActions.yes', 'Yes'), secondaryButton: localize('accountActions.no', 'No'), @@ -101,19 +90,13 @@ export class RemoveAccountAction extends Action { if (!result) { return Promise.resolve(false); } else { - return new Promise((resolve, reject) => { - self._accountManagementService.removeAccount(self._account.key) - .then( - (result) => { resolve(result); }, - (err) => { - // Must handle here as this is an independent action - self._notificationService.notify({ - severity: Severity.Error, - message: localize('removeAccountFailed', 'Failed to remove account') - }); - resolve(false); - } - ); + return Promise.resolve(this._accountManagementService.removeAccount(this._account.key)).catch(err => { + // Must handle here as this is an independent action + this._notificationService.notify({ + severity: Severity.Error, + message: localize('removeAccountFailed', 'Failed to remove account') + }); + return false; }); } }); @@ -154,23 +137,17 @@ export class RefreshAccountAction extends Action { super(RefreshAccountAction.ID, RefreshAccountAction.LABEL, 'refresh-account-action icon refresh'); } public run(): Promise { - let self = this; - return new Promise((resolve, reject) => { - if (self.account) { - self._accountManagementService.refreshAccount(self.account) - .then( - () => { - resolve(true); - }, + if (this.account) { + return Promise.resolve(this._accountManagementService.refreshAccount(this.account) + .then(() => true, err => { error(`Error while refreshing account: ${err}`); - reject(err); + return Promise.reject(err); } - ); - } else { - let errorMessage = localize('NoAccountToRefresh', 'There is no account to refresh'); - reject(errorMessage); - } - }); + )); + } else { + const errorMessage = localize('NoAccountToRefresh', 'There is no account to refresh'); + return Promise.reject(errorMessage); + } } } diff --git a/src/sql/platform/accountManagement/common/accountPicker.ts b/src/sql/platform/accounts/common/accountPicker.ts similarity index 98% rename from src/sql/platform/accountManagement/common/accountPicker.ts rename to src/sql/platform/accounts/common/accountPicker.ts index 99bd9a43d4..160fce0727 100644 --- a/src/sql/platform/accountManagement/common/accountPicker.ts +++ b/src/sql/platform/accounts/common/accountPicker.ts @@ -3,8 +3,6 @@ * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -'use strict'; - import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; import { Event } from 'vs/base/common/event'; diff --git a/src/sql/platform/accountManagement/common/accountPickerViewModel.ts b/src/sql/platform/accounts/common/accountPickerViewModel.ts similarity index 85% rename from src/sql/platform/accountManagement/common/accountPickerViewModel.ts rename to src/sql/platform/accounts/common/accountPickerViewModel.ts index 3cf37ec88f..3268d59c18 100644 --- a/src/sql/platform/accountManagement/common/accountPickerViewModel.ts +++ b/src/sql/platform/accounts/common/accountPickerViewModel.ts @@ -3,12 +3,11 @@ * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -'use strict'; import * as azdata from 'azdata'; import { Event, Emitter } from 'vs/base/common/event'; -import { IAccountManagementService } from 'sql/platform/accountManagement/common/interfaces'; -import { UpdateAccountListEventParams } from 'sql/platform/accountManagement/common/eventTypes'; +import { IAccountManagementService } from 'sql/platform/accounts/common/interfaces'; +import { UpdateAccountListEventParams } from 'sql/platform/accounts/common/eventTypes'; /** * View model for account picker @@ -24,13 +23,11 @@ export class AccountPickerViewModel { private _providerId: string, @IAccountManagementService private _accountManagementService: IAccountManagementService ) { - let self = this; - // Create our event emitters this._updateAccountListEmitter = new Emitter(); // Register handlers for any changes to the accounts - this._accountManagementService.updateAccountListEvent(arg => self._updateAccountListEmitter.fire(arg)); + this._accountManagementService.updateAccountListEvent(arg => this._updateAccountListEmitter.fire(arg)); } // PUBLIC METHODS ////////////////////////////////////////////////////// @@ -41,10 +38,10 @@ export class AccountPickerViewModel { public initialize(): Thenable { // Load a baseline of the accounts for the provider return this._accountManagementService.getAccountsForProvider(this._providerId) - .then(null, () => { + .then(undefined, () => { // In the event we failed to lookup accounts for the provider, just send // back an empty collection return []; }); } -} \ No newline at end of file +} diff --git a/src/sql/platform/accountManagement/common/accountStore.ts b/src/sql/platform/accounts/common/accountStore.ts similarity index 78% rename from src/sql/platform/accountManagement/common/accountStore.ts rename to src/sql/platform/accounts/common/accountStore.ts index 8f1a03f73f..91c3bddf64 100644 --- a/src/sql/platform/accountManagement/common/accountStore.ts +++ b/src/sql/platform/accounts/common/accountStore.ts @@ -3,11 +3,10 @@ * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -'use strict'; - import * as azdata from 'azdata'; -import { AccountAdditionResult } from 'sql/platform/accountManagement/common/eventTypes'; -import { IAccountStore } from 'sql/platform/accountManagement/common/interfaces'; +import { AccountAdditionResult } from 'sql/platform/accounts/common/eventTypes'; +import { IAccountStore } from 'sql/platform/accounts/common/interfaces'; +import { deepClone } from 'vs/base/common/objects'; export default class AccountStore implements IAccountStore { // CONSTANTS /////////////////////////////////////////////////////////// @@ -20,57 +19,47 @@ export default class AccountStore implements IAccountStore { // PUBLIC METHODS ////////////////////////////////////////////////////// public addOrUpdate(newAccount: azdata.Account): Thenable { - let self = this; - return this.doOperation(() => { - return self.readFromMemento() + return this.readFromMemento() .then(accounts => { // Determine if account exists and proceed accordingly - let match = accounts.findIndex(account => AccountStore.findAccountByKey(account.key, newAccount.key)); + const match = accounts.findIndex(account => AccountStore.findAccountByKey(account.key, newAccount.key)); return match < 0 - ? self.addToAccountList(accounts, newAccount) - : self.updateAccountList(accounts, newAccount.key, (matchAccount) => { AccountStore.mergeAccounts(newAccount, matchAccount); }); + ? this.addToAccountList(accounts, newAccount) + : this.updateAccountList(accounts, newAccount.key, matchAccount => AccountStore.mergeAccounts(newAccount, matchAccount)); }) - .then(result => self.writeToMemento(result.updatedAccounts).then(() => result)) + .then(result => this.writeToMemento(result.updatedAccounts).then(() => result)) .then(result => result); }); } public getAccountsByProvider(providerId: string): Thenable { - let self = this; - return this.doOperation(() => { - return self.readFromMemento() + return this.readFromMemento() .then(accounts => accounts.filter(account => account.key.providerId === providerId)); }); } public getAllAccounts(): Thenable { - let self = this; - return this.doOperation(() => { - return self.readFromMemento(); + return this.readFromMemento(); }); } public remove(key: azdata.AccountKey): Thenable { - let self = this; - return this.doOperation(() => { - return self.readFromMemento() - .then(accounts => self.removeFromAccountList(accounts, key)) - .then(result => self.writeToMemento(result.updatedAccounts).then(() => result)) + return this.readFromMemento() + .then(accounts => this.removeFromAccountList(accounts, key)) + .then(result => this.writeToMemento(result.updatedAccounts).then(() => result)) .then(result => result.accountRemoved); }); } public update(key: azdata.AccountKey, updateOperation: (account: azdata.Account) => void): Thenable { - let self = this; - return this.doOperation(() => { - return self.readFromMemento() - .then(accounts => self.updateAccountList(accounts, key, updateOperation)) - .then(result => self.writeToMemento(result.updatedAccounts).then(() => result)) + return this.readFromMemento() + .then(accounts => this.updateAccountList(accounts, key, updateOperation)) + .then(result => this.writeToMemento(result.updatedAccounts).then(() => result)) .then(result => result.accountModified); }); } @@ -111,7 +100,7 @@ export default class AccountStore implements IAccountStore { private addToAccountList(accounts: azdata.Account[], accountToAdd: azdata.Account): AccountListOperationResult { // Check if the entry already exists - let match = accounts.findIndex(account => AccountStore.findAccountByKey(account.key, accountToAdd.key)); + const match = accounts.findIndex(account => AccountStore.findAccountByKey(account.key, accountToAdd.key)); if (match >= 0) { // Account already exists, we won't do anything return { @@ -136,7 +125,7 @@ export default class AccountStore implements IAccountStore { private removeFromAccountList(accounts: azdata.Account[], accountToRemove: azdata.AccountKey): AccountListOperationResult { // Check if the entry exists - let match = accounts.findIndex(account => AccountStore.findAccountByKey(account.key, accountToRemove)); + const match = accounts.findIndex(account => AccountStore.findAccountByKey(account.key, accountToRemove)); if (match >= 0) { // Account exists, remove it from the account list accounts.splice(match, 1); @@ -153,7 +142,7 @@ export default class AccountStore implements IAccountStore { private updateAccountList(accounts: azdata.Account[], accountToUpdate: azdata.AccountKey, updateOperation: (account: azdata.Account) => void): AccountListOperationResult { // Check if the entry exists - let match = accounts.findIndex(account => AccountStore.findAccountByKey(account.key, accountToUpdate)); + const match = accounts.findIndex(account => AccountStore.findAccountByKey(account.key, accountToUpdate)); if (match < 0) { // Account doesn't exist, we won't do anything return { @@ -186,14 +175,14 @@ export default class AccountStore implements IAccountStore { } // Make a deep copy of the account list to ensure that the memento list isn't obliterated - accounts = JSON.parse(JSON.stringify(accounts)); + accounts = deepClone(accounts); return Promise.resolve(accounts); } private writeToMemento(accounts: azdata.Account[]): Thenable { // Store a shallow copy of the account list to disconnect the memento list from the active list - this._memento[AccountStore.MEMENTO_KEY] = JSON.parse(JSON.stringify(accounts)); + this._memento[AccountStore.MEMENTO_KEY] = deepClone(accounts); return Promise.resolve(); } } diff --git a/src/sql/parts/accountManagement/accountDialog/accountViewModel.ts b/src/sql/platform/accounts/common/accountViewModel.ts similarity index 68% rename from src/sql/parts/accountManagement/accountDialog/accountViewModel.ts rename to src/sql/platform/accounts/common/accountViewModel.ts index e7be093161..9b8f028a4a 100644 --- a/src/sql/parts/accountManagement/accountDialog/accountViewModel.ts +++ b/src/sql/platform/accounts/common/accountViewModel.ts @@ -3,12 +3,10 @@ * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -'use strict'; - import * as azdata from 'azdata'; import { Event, Emitter } from 'vs/base/common/event'; -import { IAccountManagementService } from 'sql/platform/accountManagement/common/interfaces'; -import { AccountProviderAddedEventParams, UpdateAccountListEventParams } from 'sql/platform/accountManagement/common/eventTypes'; +import { IAccountManagementService } from 'sql/platform/accounts/common/interfaces'; +import { AccountProviderAddedEventParams, UpdateAccountListEventParams } from 'sql/platform/accounts/common/eventTypes'; /** * View model for account dialog @@ -24,18 +22,16 @@ export class AccountViewModel { private _updateAccountListEmitter: Emitter; public get updateAccountListEvent(): Event { return this._updateAccountListEmitter.event; } - constructor( @IAccountManagementService private _accountManagementService: IAccountManagementService) { - let self = this; - + constructor(@IAccountManagementService private _accountManagementService: IAccountManagementService) { // Create our event emitters this._addProviderEmitter = new Emitter(); this._removeProviderEmitter = new Emitter(); this._updateAccountListEmitter = new Emitter(); // Register handlers for any changes to the providers or accounts - this._accountManagementService.addAccountProviderEvent(arg => self._addProviderEmitter.fire(arg)); - this._accountManagementService.removeAccountProviderEvent(arg => self._removeProviderEmitter.fire(arg)); - this._accountManagementService.updateAccountListEvent(arg => self._updateAccountListEmitter.fire(arg)); + this._accountManagementService.addAccountProviderEvent(arg => this._addProviderEmitter.fire(arg)); + this._accountManagementService.removeAccountProviderEvent(arg => this._removeProviderEmitter.fire(arg)); + this._accountManagementService.updateAccountListEvent(arg => this._updateAccountListEmitter.fire(arg)); } // PUBLIC METHODS ////////////////////////////////////////////////////// @@ -45,30 +41,26 @@ export class AccountViewModel { * */ public initialize(): Thenable { - let self = this; - // Load a baseline of the account provider metadata and accounts // 1) Get all the providers from the account management service // 2) For each provider, get the accounts // 3) Build parameters to add a provider and return it return this._accountManagementService.getAccountProviderMetadata() .then( - (providers: azdata.AccountProviderMetadata[]) => { - let promises = providers.map(provider => { - return self._accountManagementService.getAccountsForProvider(provider.id) - .then( - accounts => { - addedProvider: provider, - initialAccounts: accounts - }, - () => { /* Swallow failures at getting accounts, we'll just hide that provider */ }); + (providers: azdata.AccountProviderMetadata[]) => { + const promises = providers.map(provider => { + return this._accountManagementService.getAccountsForProvider(provider.id) + .then( + accounts => { + addedProvider: provider, + initialAccounts: accounts + }, + () => { /* Swallow failures at getting accounts, we'll just hide that provider */ }); + }); + return Promise.all(promises); + }, () => { + /* Swallow failures and just pretend we don't have any providers */ + return []; }); - return Promise.all(promises); - }, - () => { - /* Swallow failures and just pretend we don't have any providers */ - return []; - } - ); } -} \ No newline at end of file +} diff --git a/src/sql/platform/accountManagement/common/eventTypes.ts b/src/sql/platform/accounts/common/eventTypes.ts similarity index 98% rename from src/sql/platform/accountManagement/common/eventTypes.ts rename to src/sql/platform/accounts/common/eventTypes.ts index a9d42a221f..2736a8fc29 100644 --- a/src/sql/platform/accountManagement/common/eventTypes.ts +++ b/src/sql/platform/accounts/common/eventTypes.ts @@ -3,8 +3,6 @@ * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -'use strict'; - import * as azdata from 'azdata'; /** diff --git a/src/sql/parts/accountManagement/firewallRuleDialog/firewallRuleViewModel.ts b/src/sql/platform/accounts/common/firewallRuleViewModel.ts similarity index 99% rename from src/sql/parts/accountManagement/firewallRuleDialog/firewallRuleViewModel.ts rename to src/sql/platform/accounts/common/firewallRuleViewModel.ts index b588f07a3a..9fdd40ab2d 100644 --- a/src/sql/parts/accountManagement/firewallRuleDialog/firewallRuleViewModel.ts +++ b/src/sql/platform/accounts/common/firewallRuleViewModel.ts @@ -3,7 +3,6 @@ * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -'use strict'; import * as azdata from 'azdata'; /** @@ -64,4 +63,4 @@ export class FirewallRuleViewModel { this._defaultFromSubnetIPRange = ipAddress.replace(/\.[0-9]+$/g, '.0'); this._defaultToSubnetIPRange = ipAddress.replace(/\.[0-9]+$/g, '.255'); } -} \ No newline at end of file +} diff --git a/src/sql/platform/accountManagement/common/interfaces.ts b/src/sql/platform/accounts/common/interfaces.ts similarity index 97% rename from src/sql/platform/accountManagement/common/interfaces.ts rename to src/sql/platform/accounts/common/interfaces.ts index 195d2a0983..e151f6f799 100644 --- a/src/sql/platform/accountManagement/common/interfaces.ts +++ b/src/sql/platform/accounts/common/interfaces.ts @@ -3,11 +3,9 @@ * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -'use strict'; - import * as azdata from 'azdata'; import { Event } from 'vs/base/common/event'; -import { AccountAdditionResult, AccountProviderAddedEventParams, UpdateAccountListEventParams } from 'sql/platform/accountManagement/common/eventTypes'; +import { AccountAdditionResult, AccountProviderAddedEventParams, UpdateAccountListEventParams } from 'sql/platform/accounts/common/eventTypes'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; export const SERVICE_ID = 'accountManagementService'; diff --git a/src/sql/platform/connection/common/connectionManagementService.ts b/src/sql/platform/connection/common/connectionManagementService.ts index 07f3d11ec6..24bbb082bc 100644 --- a/src/sql/platform/connection/common/connectionManagementService.ts +++ b/src/sql/platform/connection/common/connectionManagementService.ts @@ -33,7 +33,7 @@ import { Deferred } from 'sql/base/common/promise'; import { ConnectionOptionSpecialType } from 'sql/workbench/api/common/sqlExtHostTypes'; import { values, entries } from 'sql/base/common/objects'; import { ConnectionProviderProperties, IConnectionProviderRegistry, Extensions as ConnectionProviderExtensions } from 'sql/workbench/parts/connection/common/connectionProviderExtension'; -import { IAccountManagementService, AzureResource } from 'sql/platform/accountManagement/common/interfaces'; +import { IAccountManagementService, AzureResource } from 'sql/platform/accounts/common/interfaces'; import { IServerGroupController, IServerGroupDialogCallbacks } from 'sql/platform/serverGroup/common/serverGroupController'; import * as azdata from 'azdata'; diff --git a/src/sql/workbench/api/node/mainThreadAccountManagement.ts b/src/sql/workbench/api/node/mainThreadAccountManagement.ts index ecb5f405c0..b759539ae4 100644 --- a/src/sql/workbench/api/node/mainThreadAccountManagement.ts +++ b/src/sql/workbench/api/node/mainThreadAccountManagement.ts @@ -5,7 +5,7 @@ 'use strict'; import * as azdata from 'azdata'; -import { IAccountManagementService } from 'sql/platform/accountManagement/common/interfaces'; +import { IAccountManagementService } from 'sql/platform/accounts/common/interfaces'; import { dispose, IDisposable } from 'vs/base/common/lifecycle'; import { ExtHostAccountManagementShape, @@ -15,7 +15,7 @@ import { } from 'sql/workbench/api/node/sqlExtHost.protocol'; import { IExtHostContext } from 'vs/workbench/api/common/extHost.protocol'; import { extHostNamedCustomer } from 'vs/workbench/api/common/extHostCustomers'; -import { UpdateAccountListEventParams } from 'sql/platform/accountManagement/common/eventTypes'; +import { UpdateAccountListEventParams } from 'sql/platform/accounts/common/eventTypes'; @extHostNamedCustomer(SqlMainContext.MainThreadAccountManagement) export class MainThreadAccountManagement implements MainThreadAccountManagementShape { diff --git a/src/sql/workbench/services/accountManagement/browser/accountManagementService.ts b/src/sql/workbench/services/accountManagement/browser/accountManagementService.ts index f2a9769e6c..45430d82b0 100644 --- a/src/sql/workbench/services/accountManagement/browser/accountManagementService.ts +++ b/src/sql/workbench/services/accountManagement/browser/accountManagementService.ts @@ -16,12 +16,12 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage'; import { Memento } from 'vs/workbench/common/memento'; -import AccountStore from 'sql/platform/accountManagement/common/accountStore'; -import { AccountDialogController } from 'sql/parts/accountManagement/accountDialog/accountDialogController'; -import { AutoOAuthDialogController } from 'sql/parts/accountManagement/autoOAuthDialog/autoOAuthDialogController'; -import { AccountListStatusbarItem } from 'sql/parts/accountManagement/accountListStatusbar/accountListStatusbarItem'; -import { AccountProviderAddedEventParams, UpdateAccountListEventParams } from 'sql/platform/accountManagement/common/eventTypes'; -import { IAccountManagementService } from 'sql/platform/accountManagement/common/interfaces'; +import AccountStore from 'sql/platform/accounts/common/accountStore'; +import { AccountDialogController } from 'sql/platform/accounts/browser/accountDialogController'; +import { AutoOAuthDialogController } from 'sql/platform/accounts/browser/autoOAuthDialogController'; +import { AccountListStatusbarItem } from 'sql/platform/accounts/browser/accountListStatusbarItem'; +import { AccountProviderAddedEventParams, UpdateAccountListEventParams } from 'sql/platform/accounts/common/eventTypes'; +import { IAccountManagementService } from 'sql/platform/accounts/common/interfaces'; import { Deferred } from 'sql/base/common/promise'; export class AccountManagementService implements IAccountManagementService { @@ -117,7 +117,7 @@ export class AccountManagementService implements IAccountManagementService { reason => { console.warn(`Account update handler encountered error: ${reason}`); } - ); + ); } @@ -308,8 +308,8 @@ export class AccountManagementService implements IAccountManagementService { public cancelAutoOAuthDeviceCode(providerId: string): void { this.doWithProvider(providerId, provider => provider.provider.autoOAuthCancelled()) .then( // Swallow errors - null, - err => { console.warn(`Error when cancelling auto OAuth: ${err}`); } + null, + err => { console.warn(`Error when cancelling auto OAuth: ${err}`); } ) .then(() => this.autoOAuthDialogController.closeAutoOAuthDialog()); } diff --git a/src/sql/workbench/services/connection/browser/connectionWidget.ts b/src/sql/workbench/services/connection/browser/connectionWidget.ts index b4e1e810c0..c5eac58251 100644 --- a/src/sql/workbench/services/connection/browser/connectionWidget.ts +++ b/src/sql/workbench/services/connection/browser/connectionWidget.ts @@ -22,7 +22,7 @@ import { IConnectionManagementService } from 'sql/platform/connection/common/con import { ICapabilitiesService } from 'sql/platform/capabilities/common/capabilitiesService'; import { ConnectionProfile } from 'sql/platform/connection/common/connectionProfile'; import * as styler from 'sql/platform/theme/common/styler'; -import { IAccountManagementService } from 'sql/platform/accountManagement/common/interfaces'; +import { IAccountManagementService } from 'sql/platform/accounts/common/interfaces'; import * as azdata from 'azdata'; diff --git a/src/sql/workbench/services/resourceProvider/browser/resourceProviderService.ts b/src/sql/workbench/services/resourceProvider/browser/resourceProviderService.ts index a126e6bdb5..2e8405e1bf 100644 --- a/src/sql/workbench/services/resourceProvider/browser/resourceProviderService.ts +++ b/src/sql/workbench/services/resourceProvider/browser/resourceProviderService.ts @@ -12,7 +12,7 @@ import { IResourceProviderService, IHandleFirewallRuleResult } from 'sql/workben import * as Constants from 'sql/common/constants'; import * as TelemetryKeys from 'sql/common/telemetryKeys'; import * as TelemetryUtils from 'sql/common/telemetryUtilities'; -import { FirewallRuleDialogController } from 'sql/parts/accountManagement/firewallRuleDialog/firewallRuleDialogController'; +import { FirewallRuleDialogController } from 'sql/platform/accounts/browser/firewallRuleDialogController'; import * as azdata from 'azdata'; @@ -77,8 +77,8 @@ export class ResourceProviderService implements IResourceProviderService { handleFirewallRuleResult = { canHandleFirewallRule: response.result, ipAddress: response.ipAddress, resourceProviderId: key }; } }, - () => { /* Swallow failures at getting accounts, we'll just hide that provider */ - })); + () => { /* Swallow failures at getting accounts, we'll just hide that provider */ + })); } } diff --git a/src/sqltest/parts/accountManagement/accountActions.test.ts b/src/sqltest/parts/accountManagement/accountActions.test.ts index cb29ff384d..62bd0d8b5d 100644 --- a/src/sqltest/parts/accountManagement/accountActions.test.ts +++ b/src/sqltest/parts/accountManagement/accountActions.test.ts @@ -8,7 +8,7 @@ import * as assert from 'assert'; import * as azdata from 'azdata'; import * as TypeMoq from 'typemoq'; -import { AddAccountAction, RemoveAccountAction } from 'sql/parts/accountManagement/common/accountActions'; +import { AddAccountAction, RemoveAccountAction } from 'sql/platform/accounts/common/accountActions'; import { AccountManagementTestService } from 'sqltest/stubs/accountManagementStubs'; // import { MessageServiceStub } from 'sqltest/stubs/messageServiceStub'; import { ErrorMessageServiceStub } from 'sqltest/stubs/errorMessageServiceStub'; diff --git a/src/sqltest/parts/accountManagement/accountDialogController.test.ts b/src/sqltest/parts/accountManagement/accountDialogController.test.ts index 9571eb2d66..ea23d259ea 100644 --- a/src/sqltest/parts/accountManagement/accountDialogController.test.ts +++ b/src/sqltest/parts/accountManagement/accountDialogController.test.ts @@ -8,13 +8,13 @@ import * as assert from 'assert'; import * as TypeMoq from 'typemoq'; import { Emitter } from 'vs/base/common/event'; -import { AccountDialog } from 'sql/parts/accountManagement/accountDialog/accountDialog'; -import { AccountDialogController } from 'sql/parts/accountManagement/accountDialog/accountDialogController'; -import { AccountViewModel } from 'sql/parts/accountManagement/accountDialog/accountViewModel'; +import { AccountDialog } from 'sql/platform/accounts/browser/accountDialog'; +import { AccountDialogController } from 'sql/platform/accounts/browser/accountDialogController'; +import { AccountViewModel } from 'sql/platform/accounts/common/accountViewModel'; import { AccountManagementTestService } from 'sqltest/stubs/accountManagementStubs'; import { ErrorMessageServiceStub } from 'sqltest/stubs/errorMessageServiceStub'; import { InstantiationService } from 'vs/platform/instantiation/common/instantiationService'; -import { AccountListRenderer } from 'sql/parts/accountManagement/common/accountListRenderer'; +import { AccountListRenderer } from 'sql/platform/accounts/browser/accountListRenderer'; import { ContextKeyServiceStub } from 'sqltest/stubs/contextKeyServiceStub'; // TESTS /////////////////////////////////////////////////////////////////// @@ -102,4 +102,4 @@ function createInstantiationService(addAccountFailureEmitter?: Emitter): .returns(() => mockAccountDialog.object); return instantiationService.object; -} \ No newline at end of file +} diff --git a/src/sqltest/parts/accountManagement/accountPickerService.test.ts b/src/sqltest/parts/accountManagement/accountPickerService.test.ts index addfc1917a..3159aefa8c 100644 --- a/src/sqltest/parts/accountManagement/accountPickerService.test.ts +++ b/src/sqltest/parts/accountManagement/accountPickerService.test.ts @@ -9,9 +9,9 @@ import * as assert from 'assert'; import * as TypeMoq from 'typemoq'; import { EventVerifierSingle } from 'sqltest/utils/eventVerifier'; import { Emitter } from 'vs/base/common/event'; -import { AccountPicker } from 'sql/platform/accountManagement/browser/accountPicker'; -import { AccountPickerService } from 'sql/platform/accountManagement/browser/accountPickerService'; -import { AccountPickerViewModel } from 'sql/platform/accountManagement/common/accountPickerViewModel'; +import { AccountPicker } from 'sql/platform/accounts/browser/accountPicker'; +import { AccountPickerService } from 'sql/platform/accounts/browser/accountPickerService'; +import { AccountPickerViewModel } from 'sql/platform/accounts/common/accountPickerViewModel'; import { AccountManagementTestService } from 'sqltest/stubs/accountManagementStubs'; import { InstantiationService } from 'vs/platform/instantiation/common/instantiationService'; @@ -117,4 +117,4 @@ function createInstantiationService(): InstantiationService { .returns(() => mockAccountDialog.object); return instantiationService.object; -} \ No newline at end of file +} diff --git a/src/sqltest/parts/accountManagement/accountPickerViewModel.test.ts b/src/sqltest/parts/accountManagement/accountPickerViewModel.test.ts index ed66d2f6c8..2ce96dc263 100644 --- a/src/sqltest/parts/accountManagement/accountPickerViewModel.test.ts +++ b/src/sqltest/parts/accountManagement/accountPickerViewModel.test.ts @@ -9,8 +9,8 @@ import * as assert from 'assert'; import * as TypeMoq from 'typemoq'; import { EventVerifierSingle } from 'sqltest/utils/eventVerifier'; import { Emitter } from 'vs/base/common/event'; -import { AccountPickerViewModel } from 'sql/platform/accountManagement/common/accountPickerViewModel'; -import { UpdateAccountListEventParams } from 'sql/platform/accountManagement/common/eventTypes'; +import { AccountPickerViewModel } from 'sql/platform/accounts/common/accountPickerViewModel'; +import { UpdateAccountListEventParams } from 'sql/platform/accounts/common/eventTypes'; import { AccountManagementTestService } from 'sqltest/stubs/accountManagementStubs'; // SUITE STATE ///////////////////////////////////////////////////////////// @@ -91,8 +91,8 @@ suite('Account picker view model tests', () => { assert.equal(results.length, 2); assert.equal(results, accounts); }).then( - () => done(), - err => done(err) + () => done(), + err => done(err) ); }); @@ -117,8 +117,8 @@ suite('Account picker view model tests', () => { assert.equal(result.length, 0); assert.equal(result, []); }).then( - () => done(), - err => done() + () => done(), + err => done() ); }); }); diff --git a/src/sqltest/parts/accountManagement/accountViewModel.test.ts b/src/sqltest/parts/accountManagement/accountViewModel.test.ts index 5b3d936573..c78d5f0a54 100644 --- a/src/sqltest/parts/accountManagement/accountViewModel.test.ts +++ b/src/sqltest/parts/accountManagement/accountViewModel.test.ts @@ -10,8 +10,8 @@ import * as azdata from 'azdata'; import * as TypeMoq from 'typemoq'; import { EventVerifierSingle } from 'sqltest/utils/eventVerifier'; import { Emitter } from 'vs/base/common/event'; -import { AccountViewModel } from 'sql/parts/accountManagement/accountDialog/accountViewModel'; -import { AccountProviderAddedEventParams, UpdateAccountListEventParams } from 'sql/platform/accountManagement/common/eventTypes'; +import { AccountViewModel } from 'sql/platform/accounts/common/accountViewModel'; +import { AccountProviderAddedEventParams, UpdateAccountListEventParams } from 'sql/platform/accounts/common/eventTypes'; import { AccountManagementTestService } from 'sqltest/stubs/accountManagementStubs'; // SUITE STATE ///////////////////////////////////////////////////////////// @@ -116,8 +116,8 @@ suite('Account Management Dialog ViewModel Tests', () => { assert.equal(results[0].addedProvider, providers[0]); assert.equal(results[0].initialAccounts, accounts); }).then( - () => done(), - err => done(err) + () => done(), + err => done(err) ); }); @@ -145,8 +145,8 @@ suite('Account Management Dialog ViewModel Tests', () => { assert.equal(results.length, 0); }) .then( - () => done(), - err => done(err) + () => done(), + err => done(err) ); }); @@ -175,8 +175,8 @@ suite('Account Management Dialog ViewModel Tests', () => { assert.equal(result[0].addedProvider, providers[0]); assert.equal(result[0].initialAccounts, accounts); }).then( - () => done(), - err => done() + () => done(), + err => done() ); }); }); @@ -221,4 +221,4 @@ function assertNoEventsFired( evAdd.assertNotFired(); evRemove.assertNotFired(); evUpdate.assertNotFired(); -} \ No newline at end of file +} diff --git a/src/sqltest/parts/accountManagement/autoOAuthDialogController.test.ts b/src/sqltest/parts/accountManagement/autoOAuthDialogController.test.ts index f925634038..a3dafe1383 100644 --- a/src/sqltest/parts/accountManagement/autoOAuthDialogController.test.ts +++ b/src/sqltest/parts/accountManagement/autoOAuthDialogController.test.ts @@ -8,8 +8,8 @@ import * as TypeMoq from 'typemoq'; import { Emitter } from 'vs/base/common/event'; import { InstantiationService } from 'vs/platform/instantiation/common/instantiationService'; -import { AutoOAuthDialog } from 'sql/parts/accountManagement/autoOAuthDialog/autoOAuthDialog'; -import { AutoOAuthDialogController } from 'sql/parts/accountManagement/autoOAuthDialog/autoOAuthDialogController'; +import { AutoOAuthDialog } from 'sql/platform/accounts/browser/autoOAuthDialog'; +import { AutoOAuthDialogController } from 'sql/platform/accounts/browser/autoOAuthDialogController'; import { AccountManagementTestService } from 'sqltest/stubs/accountManagementStubs'; import { ErrorMessageServiceStub } from 'sqltest/stubs/errorMessageServiceStub'; import { ContextKeyServiceStub } from 'sqltest/stubs/contextKeyServiceStub'; @@ -82,7 +82,7 @@ suite('auto OAuth dialog controller tests', () => { // If: a oauth flyout is already open autoOAuthDialogController.openAutoOAuthDialog(providerId, title, message, userCode, uri) - .then(success => done('Failure: Expected error on 2nd dialog open'), error => done()); + .then(success => done('Failure: Expected error on 2nd dialog open'), error => done()); // Then: An error dialog should have been opened mockErrorMessageService.verify(x => x.showDialog(TypeMoq.It.isAny(), TypeMoq.It.isAny(), TypeMoq.It.isAny()), TypeMoq.Times.once()); diff --git a/src/sqltest/parts/accountManagement/firewallRuleDialogController.test.ts b/src/sqltest/parts/accountManagement/firewallRuleDialogController.test.ts index 62a648cc56..d605586c7a 100644 --- a/src/sqltest/parts/accountManagement/firewallRuleDialogController.test.ts +++ b/src/sqltest/parts/accountManagement/firewallRuleDialogController.test.ts @@ -8,9 +8,9 @@ import * as azdata from 'azdata'; import * as TypeMoq from 'typemoq'; import { Emitter } from 'vs/base/common/event'; import { IConnectionProfile } from 'sql/platform/connection/common/interfaces'; -import { FirewallRuleDialog } from 'sql/parts/accountManagement/firewallRuleDialog/firewallRuleDialog'; -import { FirewallRuleViewModel } from 'sql/parts/accountManagement/firewallRuleDialog/firewallRuleViewModel'; -import { FirewallRuleDialogController } from 'sql/parts/accountManagement/firewallRuleDialog/firewallRuleDialogController'; +import { FirewallRuleDialog } from 'sql/platform/accounts/browser/firewallRuleDialog'; +import { FirewallRuleViewModel } from 'sql/platform/accounts/common/firewallRuleViewModel'; +import { FirewallRuleDialogController } from 'sql/platform/accounts/browser/firewallRuleDialogController'; import { AccountManagementTestService } from 'sqltest/stubs/accountManagementStubs'; import { ResourceProviderStub } from 'sqltest/stubs/resourceProviderServiceStub'; import { ErrorMessageServiceStub } from 'sqltest/stubs/errorMessageServiceStub'; @@ -252,4 +252,4 @@ function getMockErrorMessageService(deferredPromise: Deferred<{}>): TypeMoq.Mock deferredPromise.resolve(true); }); return mockErrorMessageService; -} \ No newline at end of file +} diff --git a/src/sqltest/parts/accountManagement/firewallRuleViewModel.test.ts b/src/sqltest/parts/accountManagement/firewallRuleViewModel.test.ts index 7881dbf4a8..63353d5002 100644 --- a/src/sqltest/parts/accountManagement/firewallRuleViewModel.test.ts +++ b/src/sqltest/parts/accountManagement/firewallRuleViewModel.test.ts @@ -5,7 +5,7 @@ 'use strict'; import * as assert from 'assert'; -import { FirewallRuleViewModel } from 'sql/parts/accountManagement/firewallRuleDialog/firewallRuleViewModel'; +import { FirewallRuleViewModel } from 'sql/platform/accounts/common/firewallRuleViewModel'; suite('Firewall rule view model tests', () => { let viewModel: FirewallRuleViewModel; @@ -41,4 +41,4 @@ suite('Firewall rule view model tests', () => { assert.equal('250.222.155.100', viewModel.fromSubnetIPRange); assert.equal('250.222.155.220', viewModel.toSubnetIPRange); }); -}); \ No newline at end of file +}); diff --git a/src/sqltest/services/accountManagement/accountManagementService.test.ts b/src/sqltest/services/accountManagement/accountManagementService.test.ts index cfa2026991..a0568ec4d8 100644 --- a/src/sqltest/services/accountManagement/accountManagementService.test.ts +++ b/src/sqltest/services/accountManagement/accountManagementService.test.ts @@ -8,11 +8,11 @@ import * as assert from 'assert'; import * as azdata from 'azdata'; import * as TypeMoq from 'typemoq'; -import AccountStore from 'sql/platform/accountManagement/common/accountStore'; -import { AccountDialogController } from 'sql/parts/accountManagement/accountDialog/accountDialogController'; +import AccountStore from 'sql/platform/accounts/common/accountStore'; +import { AccountDialogController } from 'sql/platform/accounts/browser/accountDialogController'; import { AccountManagementService } from 'sql/workbench/services/accountManagement/browser/accountManagementService'; -import { AccountAdditionResult, AccountProviderAddedEventParams, UpdateAccountListEventParams } from 'sql/platform/accountManagement/common/eventTypes'; -import { IAccountStore } from 'sql/platform/accountManagement/common/interfaces'; +import { AccountAdditionResult, AccountProviderAddedEventParams, UpdateAccountListEventParams } from 'sql/platform/accounts/common/eventTypes'; +import { IAccountStore } from 'sql/platform/accounts/common/interfaces'; import { AccountProviderStub } from 'sqltest/stubs/accountManagementStubs'; import { EventVerifierSingle } from 'sqltest/utils/eventVerifier'; import { InstantiationService } from 'vs/platform/instantiation/common/instantiationService'; @@ -86,8 +86,8 @@ suite('Account Management Service Tests:', () => { state.mockAccountStore.verify(x => x.remove(TypeMoq.It.isAny()), TypeMoq.Times.once()); }) .then( - () => done(), - err => done(err) + () => done(), + err => done(err) ); }); @@ -125,8 +125,8 @@ suite('Account Management Service Tests:', () => { }); }) .then( - () => done(), - err => done(err) + () => done(), + err => done(err) ); }); @@ -168,8 +168,8 @@ suite('Account Management Service Tests:', () => { }); }) .then( - () => done(), - err => done(err) + () => done(), + err => done(err) ); }); @@ -211,8 +211,8 @@ suite('Account Management Service Tests:', () => { }); }) .then( - () => done(), - err => done(err) + () => done(), + err => done(err) ); }); @@ -240,8 +240,8 @@ suite('Account Management Service Tests:', () => { // Then: Nothing should have happened and the promise should be resolved return state.accountManagementService.addAccount(noAccountProvider.id) .then( - () => done('Add account promise resolved when it should have rejected'), - () => done() + () => done('Add account promise resolved when it should have rejected'), + () => done() ); }); @@ -255,8 +255,8 @@ suite('Account Management Service Tests:', () => { // Then: Nothing should have happened and the promise should be resolved return state.accountManagementService.addAccount(noAccountProvider.id) .then( - () => done(), - err => done(err) + () => done(), + err => done(err) ); }); @@ -278,8 +278,8 @@ suite('Account Management Service Tests:', () => { assert.equal(result[0], noAccountProvider); }) .then( - () => done(), - err => done(err) + () => done(), + err => done(err) ); }); @@ -295,8 +295,8 @@ suite('Account Management Service Tests:', () => { assert.equal(result.length, 0); }) .then( - () => done(), - err => done(err) + () => done(), + err => done(err) ); }); @@ -331,8 +331,8 @@ suite('Account Management Service Tests:', () => { assert.equal(result.length, 0); }) .then( - () => done(), - err => done(err) + () => done(), + err => done(err) ); }); @@ -352,8 +352,8 @@ suite('Account Management Service Tests:', () => { assert.equal(result, accountList); }) .then( - () => done(), - err => done(err) + () => done(), + err => done(err) ); }); @@ -394,8 +394,8 @@ suite('Account Management Service Tests:', () => { }); }) .then( - () => done(), - err => done(err) + () => done(), + err => done(err) ); }); @@ -433,8 +433,8 @@ suite('Account Management Service Tests:', () => { state.eventVerifierUpdate.assertNotFired(); }) .then( - () => done(), - err => done(err) + () => done(), + err => done(err) ); }); @@ -460,8 +460,8 @@ suite('Account Management Service Tests:', () => { mockDialogController.verify(x => x.openAccountDialog(), TypeMoq.Times.once()); }) .then( - () => done(), - err => done(err) + () => done(), + err => done(err) ); }); @@ -488,8 +488,8 @@ suite('Account Management Service Tests:', () => { mockDialogController.verify(x => x.openAccountDialog(), TypeMoq.Times.exactly(2)); }) .then( - () => done(), - err => done(err) + () => done(), + err => done(err) ); }); @@ -525,8 +525,8 @@ suite('Account Management Service Tests:', () => { }); }) .then( - () => done(), - err => done(err) + () => done(), + err => done(err) ); }); diff --git a/src/sqltest/services/accountManagement/accountStore.test.ts b/src/sqltest/services/accountManagement/accountStore.test.ts index 8b9136a4f0..2b525ff702 100644 --- a/src/sqltest/services/accountManagement/accountStore.test.ts +++ b/src/sqltest/services/accountManagement/accountStore.test.ts @@ -7,7 +7,7 @@ import * as assert from 'assert'; import * as azdata from 'azdata'; -import AccountStore from 'sql/platform/accountManagement/common/accountStore'; +import AccountStore from 'sql/platform/accounts/common/accountStore'; import { EventVerifierSingle } from 'sqltest/utils/eventVerifier'; suite('Account Store Tests', () => { @@ -31,8 +31,8 @@ suite('Account Store Tests', () => { assertAccountEqual(memento[AccountStore.MEMENTO_KEY][0], account1); }) .then( - () => done(), - e => done(e) + () => done(), + e => done(e) ); }); @@ -57,8 +57,8 @@ suite('Account Store Tests', () => { assertAccountEqual(memento[AccountStore.MEMENTO_KEY][0], account1); }) .then( - () => done(), - e => done(e) + () => done(), + e => done(e) ); }); @@ -88,8 +88,8 @@ suite('Account Store Tests', () => { assertAccountEqual(memento[AccountStore.MEMENTO_KEY][1], param); }) .then( - () => done(), - e => done(e) + () => done(), + e => done(e) ); }); @@ -110,8 +110,8 @@ suite('Account Store Tests', () => { assert.equal(Object.keys(memento).length, 0); }) .then( - () => done(), - e => done(e) + () => done(), + e => done(e) ); }); @@ -129,8 +129,8 @@ suite('Account Store Tests', () => { assert.equal(result.length, 0); }) .then( - () => done(), - e => done(e) + () => done(), + e => done(e) ); }); @@ -147,8 +147,8 @@ suite('Account Store Tests', () => { assert.equal(result.length, 0); }) .then( - () => done(), - e => done(e) + () => done(), + e => done(e) ); }); @@ -167,8 +167,8 @@ suite('Account Store Tests', () => { assertAccountEqual(result[1], memento[AccountStore.MEMENTO_KEY][1]); }) .then( - () => done(), - e => done(e) + () => done(), + e => done(e) ); }); @@ -189,8 +189,8 @@ suite('Account Store Tests', () => { assert.equal(Object.keys(memento).length, 0); }) .then( - () => done(), - e => done(e) + () => done(), + e => done(e) ); }); @@ -208,8 +208,8 @@ suite('Account Store Tests', () => { assert.equal(result.length, 0); }) .then( - () => done(), - e => done(e) + () => done(), + e => done(e) ); }); @@ -228,8 +228,8 @@ suite('Account Store Tests', () => { assertAccountEqual(result[1], memento[AccountStore.MEMENTO_KEY][1]); }) .then( - () => done(), - e => done(e) + () => done(), + e => done(e) ); }); @@ -250,8 +250,8 @@ suite('Account Store Tests', () => { assert.equal(memento[AccountStore.MEMENTO_KEY].length, 0); }) .then( - () => done(), - e => done(e) + () => done(), + e => done(e) ); }); @@ -273,8 +273,8 @@ suite('Account Store Tests', () => { assert.equal(memento[AccountStore.MEMENTO_KEY].length, 0); }) .then( - () => done(), - e => done(e) + () => done(), + e => done(e) ); }); @@ -296,8 +296,8 @@ suite('Account Store Tests', () => { assertAccountEqual(memento[AccountStore.MEMENTO_KEY][0], account2); }) .then( - () => done(), - e => done(e) + () => done(), + e => done(e) ); }); @@ -325,8 +325,8 @@ suite('Account Store Tests', () => { updateCallback.assertNotFired(); }) .then( - () => done(), - e => done(e) + () => done(), + e => done(e) ); }); @@ -354,8 +354,8 @@ suite('Account Store Tests', () => { updateCallback.assertNotFired(); }) .then( - () => done(), - e => done(e) + () => done(), + e => done(e) ); }); @@ -388,8 +388,8 @@ suite('Account Store Tests', () => { assertAccountEqual(memento[AccountStore.MEMENTO_KEY][1], account2); }) .then( - () => done(), - e => done(e) + () => done(), + e => done(e) ); }); diff --git a/src/sqltest/stubs/accountManagementStubs.ts b/src/sqltest/stubs/accountManagementStubs.ts index f4cf82e5df..3dd1c7ae05 100644 --- a/src/sqltest/stubs/accountManagementStubs.ts +++ b/src/sqltest/stubs/accountManagementStubs.ts @@ -7,8 +7,8 @@ import * as azdata from 'azdata'; import { Event } from 'vs/base/common/event'; -import { IAccountManagementService } from 'sql/platform/accountManagement/common/interfaces'; -import { AccountProviderAddedEventParams, UpdateAccountListEventParams } from 'sql/platform/accountManagement/common/eventTypes'; +import { IAccountManagementService } from 'sql/platform/accounts/common/interfaces'; +import { AccountProviderAddedEventParams, UpdateAccountListEventParams } from 'sql/platform/accounts/common/eventTypes'; export class AccountManagementTestService implements IAccountManagementService { _serviceBrand: any; diff --git a/src/sqltest/workbench/api/extHostAccountManagement.test.ts b/src/sqltest/workbench/api/extHostAccountManagement.test.ts index ecf35f77bf..b51f61d946 100644 --- a/src/sqltest/workbench/api/extHostAccountManagement.test.ts +++ b/src/sqltest/workbench/api/extHostAccountManagement.test.ts @@ -15,7 +15,7 @@ import { TestInstantiationService } from 'vs/platform/instantiation/test/common/ import { IRPCProtocol } from 'vs/workbench/services/extensions/common/proxyIdentifier'; import { SqlMainContext } from 'sql/workbench/api/node/sqlExtHost.protocol'; import { MainThreadAccountManagement } from 'sql/workbench/api/node/mainThreadAccountManagement'; -import { IAccountManagementService, AzureResource } from 'sql/platform/accountManagement/common/interfaces'; +import { IAccountManagementService, AzureResource } from 'sql/platform/accounts/common/interfaces'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; const IRPCProtocol = createDecorator('rpcProtocol'); diff --git a/src/vs/workbench/workbench.main.ts b/src/vs/workbench/workbench.main.ts index f63c5d5748..15cde4f4d6 100644 --- a/src/vs/workbench/workbench.main.ts +++ b/src/vs/workbench/workbench.main.ts @@ -203,7 +203,7 @@ import { IFileBrowserDialogController } from 'sql/workbench/services/fileBrowser import { FileBrowserDialogController } from 'sql/workbench/services/fileBrowser/browser/fileBrowserDialogController'; import { IInsightsDialogService } from 'sql/workbench/services/insights/common/insightsDialogService'; import { InsightsDialogService } from 'sql/workbench/services/insights/browser/insightsDialogService'; -import { IAccountManagementService } from 'sql/platform/accountManagement/common/interfaces'; +import { IAccountManagementService } from 'sql/platform/accounts/common/interfaces'; import { AccountManagementService } from 'sql/workbench/services/accountManagement/browser/accountManagementService'; import { IProfilerService } from 'sql/workbench/services/profiler/common/interfaces'; import { ProfilerService } from 'sql/workbench/services/profiler/common/profilerService'; @@ -211,8 +211,8 @@ import { ISqlOAuthService } from 'sql/platform/oAuth/common/sqlOAuthService'; import { SqlOAuthService } from 'sql/platform/oAuth/electron-browser/sqlOAuthServiceImpl'; import { IClipboardService as sqlIClipboardService } from 'sql/platform/clipboard/common/clipboardService'; import { ClipboardService as sqlClipboardService } from 'sql/platform/clipboard/electron-browser/clipboardService'; -import { AccountPickerService } from 'sql/platform/accountManagement/browser/accountPickerService'; -import { IAccountPickerService } from 'sql/platform/accountManagement/common/accountPicker'; +import { AccountPickerService } from 'sql/platform/accounts/browser/accountPickerService'; +import { IAccountPickerService } from 'sql/platform/accounts/common/accountPicker'; import { IResourceProviderService } from 'sql/workbench/services/resourceProvider/common/resourceProviderService'; import { ResourceProviderService } from 'sql/workbench/services/resourceProvider/browser/resourceProviderService'; import { IDashboardViewService } from 'sql/platform/dashboard/common/dashboardViewService'; @@ -450,7 +450,7 @@ import 'sql/parts/query/editor/resultsGridContribution'; import 'sql/parts/profiler/contrib/profiler.contribution'; import 'sql/parts/profiler/contrib/profilerActions.contribution'; import 'sql/parts/objectExplorer/serverGroupDialog/serverGroup.contribution'; -import 'sql/parts/accountManagement/common/accountManagement.contribution'; +import 'sql/platform/accounts/browser/accountManagement.contribution'; /* Insights */ import 'sql/parts/dashboard/widgets/insights/views/charts/types/barChart.contribution'; import 'sql/parts/dashboard/widgets/insights/views/charts/types/doughnutChart.contribution';