export async function selectSubscriptions()

in src/login/commands/selectSubscriptions.ts [17:69]


export async function selectSubscriptions(): Promise<unknown> {
	return await callWithTelemetryAndErrorHandling('azure-account.selectSubscriptions', async (context: IActionContext) => {
		if (!(await ext.loginHelper.api.waitForSubscriptions())) {
			context.telemetry.properties.outcome = 'notLoggedIn';
			return commands.executeCommand('azure-account.askForLogin');
		}

		try {
			const azureConfig: WorkspaceConfiguration = workspace.getConfiguration(extensionPrefix);
			const resourceFilter: string[] = (azureConfig.get<string[]>(resourceFilterSetting) || ['all']).slice();
			let filtersChanged: boolean = false;

			const subscriptions = ext.loginHelper.subscriptionsTask
				.then(list => getSubscriptionItems(list, resourceFilter));
			const source: CancellationTokenSource = new CancellationTokenSource();
			const cancellable: Promise<ISubscriptionItem[]> = subscriptions.then(s => {
				if (!s.length) {
					context.telemetry.properties.outcome = 'noSubscriptionsFound';
					source.cancel();
					showNoSubscriptionsFoundNotification(context);
				}
				return s;
			});
			const picks: QuickPickItem[] | undefined = await window.showQuickPick(cancellable, { canPickMany: true, placeHolder: 'Select Subscriptions' }, source.token);
			if (picks) {
				if (resourceFilter[0] === 'all') {
					resourceFilter.splice(0, 1);
					for (const subscription of await subscriptions) {
						addFilter(resourceFilter, subscription);
					}
				}
				for (const subscription of await subscriptions) {
					if (subscription.picked !== (picks.indexOf(subscription) !== -1)) {
						filtersChanged = true;
						if (subscription.picked) {
							removeFilter(resourceFilter, subscription);
						} else {
							addFilter(resourceFilter, subscription);
						}
					}
				}
			}

			if (filtersChanged) {
				await updateConfiguration(azureConfig, resourceFilter);
			}
			context.telemetry.properties.outcome = 'success';
		} catch (error) {
			context.telemetry.properties.outcome = 'error';
			throw error;
		}
	});
}