public async getChildren()

in ui/src/tree/AzExtTreeDataProvider.ts [67:122]


    public async getChildren(arg?: AzExtParentTreeItem): Promise<AzExtTreeItem[]> {
        try {
            return <AzExtTreeItem[]>await callWithTelemetryAndErrorHandling('AzureTreeDataProvider.getChildren', async (context: types.IActionContext) => {
                context.errorHandling.suppressDisplay = true;
                context.errorHandling.rethrow = true;
                context.errorHandling.forceIncludeInReportIssueCommand = true;

                let treeItem: AzExtParentTreeItem;
                if (arg) {
                    treeItem = arg;
                } else {
                    context.telemetry.properties.isActivationEvent = 'true';
                    treeItem = this._rootTreeItem;
                }
                addTreeItemValuesToMask(context, treeItem, 'getChildren');

                context.telemetry.properties.contextValue = treeItem.contextValue;

                const children: AzExtTreeItem[] = [...treeItem.creatingTreeItems, ...await treeItem.getCachedChildren(context)];
                const hasMoreChildren: boolean = treeItem.hasMoreChildrenImpl();
                context.telemetry.properties.hasMoreChildren = String(hasMoreChildren);

                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
                const resultMap: Map<string, AzExtTreeItem> = new Map();
                const duplicateChildren: AzExtTreeItem[] = [];
                for (const child of children) {
                    this.isDuplicateChild(child, resultMap) ? duplicateChildren.push(child) : resultMap.set(child.fullIdWithContext || child.fullId, child);
                }

                const result: AzExtTreeItem[] = Array.from(resultMap.values());
                result.push(...duplicateChildren.map(c => {
                    const message: string = localize('elementWithId', 'An element with the following id already exists: {0}', c.fullId);
                    return new InvalidTreeItem(treeItem, new Error(message), { contextValue: 'azureextensionui.duplicate', label: c.label });
                }));

                if (hasMoreChildren && !treeItem.isLoadingMore) {
                    const loadMoreTI: GenericTreeItem = new GenericTreeItem(treeItem, {
                        label: loadMoreLabel,
                        iconPath: new ThemeIcon('refresh'),
                        contextValue: 'azureextensionui.loadMore',
                        commandId: this._loadMoreCommandId
                    });
                    loadMoreTI.commandArgs = [treeItem];
                    result.push(loadMoreTI);
                }

                context.telemetry.measurements.childCount = result.length;
                return result;
            });
        } catch (error) {
            return [new GenericTreeItem(arg, {
                label: localize('errorTreeItem', 'Error: {0}', parseError(error).message),
                contextValue: 'azureextensionui.error'
            })];
        }
    }