export async function pickTreeItem()

in src/commands/api/pickTreeItem.ts [63:118]


export async function pickTreeItem(options: PickTreeItemOptions): Promise<DatabaseTreeItem | DatabaseAccountTreeItem | undefined> {
    return await callWithTelemetryAndErrorHandling('api.pickTreeItem', async (context: IActionContext) => {
        context.errorHandling.suppressDisplay = true;
        context.errorHandling.rethrow = true;

        let contextValuesToFind;
        switch (options.resourceType) {
            case 'Database':
                contextValuesToFind = options.apiType ? options.apiType.map(getDatabaseContextValue) : databaseContextValues;
                break;
            case 'DatabaseAccount':
                contextValuesToFind = options.apiType ? options.apiType.map(getAccountContextValue) : accountContextValues;
                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
                contextValuesToFind = contextValuesToFind.concat(contextValuesToFind.map((val: string) => val + AttachedAccountSuffix));
                break;
            default:
                throw new RangeError(`Unsupported resource type "${options.resourceType}".`);
        }

        const pickedItem = await ext.tree.showTreeItemPicker(contextValuesToFind, context);

        let parsedCS: ParsedConnectionString;
        let accountNode: MongoAccountTreeItem | DocDBAccountTreeItemBase | PostgresServerTreeItem;
        let databaseNode: MongoDatabaseTreeItem | DocDBDatabaseTreeItemBase | PostgresDatabaseTreeItem | undefined;
        if (pickedItem instanceof MongoAccountTreeItem) {
            parsedCS = await parseMongoConnectionString(pickedItem.connectionString);
            accountNode = pickedItem;
        } else if (pickedItem instanceof DocDBAccountTreeItemBase) {
            parsedCS = parseDocDBConnectionString(pickedItem.connectionString);
            accountNode = pickedItem;
        } else if (pickedItem instanceof PostgresServerTreeItem) {
            parsedCS = await pickedItem.getFullConnectionString();
            accountNode = pickedItem;
        } else if (pickedItem instanceof MongoDatabaseTreeItem) {
            parsedCS = await parseMongoConnectionString(pickedItem.connectionString);
            accountNode = pickedItem.parent;
            databaseNode = pickedItem;
        } else if (pickedItem instanceof DocDBDatabaseTreeItemBase) {
            parsedCS = parseDocDBConnectionString(pickedItem.connectionString);
            accountNode = pickedItem.parent;
            databaseNode = pickedItem;
        } else if (pickedItem instanceof PostgresDatabaseTreeItem) {
            parsedCS = await pickedItem.parent.getFullConnectionString();
            accountNode = pickedItem.parent;
            databaseNode = pickedItem;
        } else {
            throw new RangeError(localize('invalidItem', 'Invalid item "{0}".', pickedItem.constructor.name));
        }

        const result = databaseNode ?
            new DatabaseTreeItemInternal(parsedCS, databaseNode.databaseName, accountNode, databaseNode) :
            new DatabaseAccountTreeItemInternal(parsedCS, accountNode);
        cacheTreeItem(parsedCS, result);
        return result;
    });
}