@itwin/presentation-hierarchies
Version:
A package for creating hierarchies based on data in iTwin.js iModels.
42 lines • 2.29 kB
JavaScript
/*---------------------------------------------------------------------------------------------
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
* See LICENSE.md in the project root for license terms and full copyright notice.
*--------------------------------------------------------------------------------------------*/
import { from, mergeMap, of } from "rxjs";
import { Guid } from "@itwin/core-bentley";
import { parseInstanceLabel } from "@itwin/presentation-shared";
import { NodeSelectClauseColumnNames } from "./NodeSelectQueryFactory.js";
/** @internal */
export function readNodes(props) {
const { queryExecutor, query, limit } = props;
const parser = props?.parser ?? ((row) => of(defaultNodesParser(row)));
const config = {
rowFormat: "ECSqlPropertyNames",
restartToken: `readNodes/${Guid.createValue()}`,
...(limit !== undefined ? { limit } : undefined),
};
return from(queryExecutor.createQueryReader(query, config)).pipe(mergeMap((row) => parser(row)));
}
/** @internal */
export function defaultNodesParser(row) {
const typedRow = row;
const processingParams = {
...(typedRow.HideIfNoChildren ? { hideIfNoChildren: true } : undefined),
...(typedRow.HideNodeInHierarchy ? { hideInHierarchy: true } : undefined),
...(typedRow.Grouping ? { grouping: JSON.parse(typedRow.Grouping) } : undefined),
};
return {
// don't format the label here - we're going to do that at node pre-processing step to handle both - instance and generic nodes
label: parseInstanceLabel(typedRow.DisplayLabel),
key: {
type: "instances",
instanceKeys: [{ className: typedRow.FullClassName.replace(":", "."), id: typedRow.ECInstanceId }],
},
...(typedRow.HasChildren !== undefined ? { children: !!typedRow.HasChildren } : undefined),
...(typedRow.AutoExpand ? { autoExpand: true } : undefined),
...(typedRow.SupportsFiltering ? { supportsFiltering: true } : undefined),
...(typedRow.ExtendedData ? { extendedData: JSON.parse(typedRow.ExtendedData) } : undefined),
...(Object.keys(processingParams).length > 0 ? { processingParams } : undefined),
};
}
//# sourceMappingURL=TreeNodesReader.js.map