UNPKG

@itwin/presentation-hierarchies

Version:

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

44 lines 2.59 kB
"use strict"; /*--------------------------------------------------------------------------------------------- * Copyright (c) Bentley Systems, Incorporated. All rights reserved. * See LICENSE.md in the project root for license terms and full copyright notice. *--------------------------------------------------------------------------------------------*/ Object.defineProperty(exports, "__esModule", { value: true }); exports.mergeProviders = mergeProviders; require("./internal/DisposePolyfill.js"); const rxjs_1 = require("rxjs"); const core_bentley_1 = require("@itwin/core-bentley"); const Common_js_1 = require("./internal/Common.js"); const EachValueFrom_js_1 = require("./internal/EachValueFrom.js"); const Sorting_js_1 = require("./internal/operators/Sorting.js"); /** * Creates a single, merged, hierarchy provider from multiple given providers. * @public */ function mergeProviders({ providers }) { const hierarchyChanged = new core_bentley_1.BeEvent(); providers.forEach((p) => { p.hierarchyChanged.addListener(() => hierarchyChanged.raiseEvent()); }); const dispose = () => { hierarchyChanged.clear(); providers.forEach((p) => (0, Common_js_1.safeDispose)(p)); }; return { hierarchyChanged, getNodes: (props) => (0, EachValueFrom_js_1.eachValueFrom)((0, rxjs_1.from)(providers).pipe((0, rxjs_1.mergeMap)((provider) => (0, rxjs_1.from)(provider.getNodes(props)).pipe((0, rxjs_1.mergeMap)((node) => { if (node.children) { return (0, rxjs_1.of)(node); } // each provider only considers its own data when determining node's children - in case it says // the node has no children, we have to check against the other providers too return (0, rxjs_1.from)(providers).pipe((0, rxjs_1.filter)((p) => p !== provider), (0, rxjs_1.mergeMap)((p) => p.getNodes({ parentNode: node })), (0, rxjs_1.map)(() => true), (0, rxjs_1.first)(undefined, false), (0, rxjs_1.map)((hasChildren) => ({ ...node, children: hasChildren }))); }))), Sorting_js_1.sortNodesByLabelOperator)), getNodeInstanceKeys: (props) => (0, EachValueFrom_js_1.eachValueFrom)((0, rxjs_1.from)(providers).pipe((0, rxjs_1.mergeMap)((p) => p.getNodeInstanceKeys(props)))), setFormatter: (formatter) => providers.forEach((p) => p.setFormatter(formatter)), setHierarchyFilter: (props) => providers.forEach((p) => p.setHierarchyFilter(props)), [Symbol.dispose]: dispose, dispose, }; } //# sourceMappingURL=HierarchyProvider.js.map