UNPKG

@itwin/presentation-hierarchies

Version:

A package for creating hierarchies based on data in iTwin.js iModels.

40 lines 2.19 kB
/*--------------------------------------------------------------------------------------------- * 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 { 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", ...(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