in ui/src/tree/AzureAccountTreeItemBase.ts [136:199]
subscriptionDisplayName: nonNullProp(filter.subscription, 'displayName'),
subscriptionId,
subscriptionPath: nonNullProp(filter.subscription, 'id'),
tenantId: filter.session.tenantId,
userId: filter.session.userId,
environment: filter.session.environment,
isCustomCloud: filter.session.environment.name === 'AzureCustomCloud'
});
}
}));
return this._subscriptionTreeItems;
}
}
public async getIsLoggedIn(): Promise<boolean> {
const azureAccount: AzureAccountResult = await this._azureAccountTask;
return typeof azureAccount !== 'string' && azureAccount.status === 'LoggedIn';
}
public async getSubscriptionPromptStep(context: Partial<types.ISubscriptionActionContext> & types.IActionContext): Promise<types.AzureWizardPromptStep<types.ISubscriptionActionContext> | undefined> {
const subscriptionNodes: SubscriptionTreeItemBase[] = await this.ensureSubscriptionTreeItems(context);
if (subscriptionNodes.length === 1) {
Object.assign(context, subscriptionNodes[0].subscription);
return undefined;
} else {
// eslint-disable-next-line @typescript-eslint/no-this-alias
const me: AzureAccountTreeItemBase = this;
class SubscriptionPromptStep extends AzureWizardPromptStep<types.ISubscriptionActionContext> {
public async prompt(): Promise<void> {
const ti: SubscriptionTreeItemBase = <SubscriptionTreeItemBase>await me.treeDataProvider.showTreeItemPicker(SubscriptionTreeItemBase.contextValue, context, me);
Object.assign(context, ti.subscription);
}
public shouldPrompt(): boolean { return !(<types.ISubscriptionActionContext>context).subscriptionId; }
}
return new SubscriptionPromptStep();
}
}
public async pickTreeItemImpl(_expectedContextValues: (string | RegExp)[]): Promise<AzExtTreeItem | undefined> {
const azureAccount: AzureAccountResult = await this._azureAccountTask;
if (typeof azureAccount !== 'string' && (azureAccount.status === 'LoggingIn' || azureAccount.status === 'Initializing')) {
const title: string = localize('waitingForAzureSignin', 'Waiting for Azure sign-in...');
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
await window.withProgress({ location: ProgressLocation.Notification, title }, async (): Promise<boolean> => await azureAccount!.waitForSubscriptions());
}
return undefined;
}
public compareChildrenImpl(item1: AzExtTreeItem, item2: AzExtTreeItem): number {
if (item1 instanceof GenericTreeItem && item2 instanceof GenericTreeItem) {
return 0; // already sorted
} else {
return super.compareChildrenImpl(item1, item2);
}
}
private async loadAzureAccount(azureAccount: AzureAccount | undefined): Promise<AzureAccountResult> {
if (!azureAccount) {
const extension: Extension<AzureAccount> | undefined = extensions.getExtension<AzureAccount>(azureAccountExtensionId);
if (extension) {
try {
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
if (semver.lt(extension.packageJSON.version, minAccountExtensionVersion)) {