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