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;
}
});
}