UNPKG

@itwin/presentation-components

Version:

React components based on iTwin.js Presentation library

183 lines 6.87 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. *--------------------------------------------------------------------------------------------*/ /* eslint-disable @typescript-eslint/no-deprecated */ /** @packageDocumentation * @module Tree */ Object.defineProperty(exports, "__esModule", { value: true }); exports.createTreeNodeItems = createTreeNodeItems; exports.createTreeNodeItem = createTreeNodeItem; exports.createPartialTreeNodeItem = createPartialTreeNodeItem; exports.createTreeNodeId = createTreeNodeId; exports.customizeTreeNodeItem = customizeTreeNodeItem; exports.pageOptionsUiToPresentation = pageOptionsUiToPresentation; exports.toRxjsObservable = toRxjsObservable; exports.createInfoNode = createInfoNode; const Observable_1 = require("rxjs/internal/Observable"); const appui_abstract_1 = require("@itwin/appui-abstract"); const core_react_1 = require("@itwin/core-react"); const presentation_common_1 = require("@itwin/presentation-common"); const StyleHelper_js_1 = require("../common/StyleHelper.js"); const Utils_js_1 = require("../common/Utils.js"); const PresentationTreeNodeItem_js_1 = require("./PresentationTreeNodeItem.js"); /** @internal */ function createTreeNodeItems(nodes, parentId, props) { const list = new Array(); for (const node of nodes) { list.push(createTreeNodeItem(node, parentId, props)); } return list; } /** @internal */ function createTreeNodeItem(node, parentId, props) { const item = { id: createTreeNodeId(node.key), label: createNodeLabelRecord(node, !!props?.appendChildrenCountForGroupingNodes), key: node.key, }; assignOptionalTreeNodeItemFields(item, node, parentId); const customizeItemCallback = props?.customizeTreeNodeItem ?? customizeTreeNodeItem; customizeItemCallback(item, node); return item; } /** @internal */ function createPartialTreeNodeItem(node, parentId, props) { const item = {}; if (node.key !== undefined) { item.id = createTreeNodeId(node.key); item.label = createNodeLabelRecord(node, !!props.appendChildrenCountForGroupingNodes); } assignOptionalTreeNodeItemFields(item, node, parentId); const customizeItemCallback = props.customizeTreeNodeItem ?? customizeTreeNodeItem; customizeItemCallback(item, node); return item; } /** @internal */ function createTreeNodeId(key) { return [...key.pathFromRoot].reverse().join("/"); } function assignOptionalTreeNodeItemFields(item, node, parentId) { if (node.key !== undefined) { item.key = node.key; } if (parentId) { item.parentId = parentId; } if (node.description) { item.description = node.description; } if (node.hasChildren) { item.hasChildren = true; } if (node.isExpanded) { item.autoExpand = true; } if (node.extendedData) { item.extendedData = node.extendedData; } } /** * Applies customization from [Node]($presentation-common) to [TreeNodeItem]($components-react). * @public * @deprecated in 3.x. This is a temporary function to apply deprecated [Node]($presentation-common) customization attributes on a [TreeNodeItem]($components-react). * The recommendation is to switch to using a custom customization function that looks at node's [Node.extendedData]($presentation-common) and applies * [TreeNodeItem]($components-react) customization based on values in extended data. * See [extended data usage page]($docs/presentation/customization/ExtendedDataUsage.md) for more details. */ /* c8 ignore start */ function customizeTreeNodeItem(item, node) { if (node.imageId) { item.icon = node.imageId; } if (hasCheckboxVisible(node) && node.isCheckboxVisible) { item.isCheckboxVisible = true; if (hasIsChecked(node) && node.isChecked) { item.checkBoxState = core_react_1.CheckBoxState.On; } if (hasIsCheckboxEnabled(node) && !node.isCheckboxEnabled) { item.isCheckboxDisabled = true; } } const style = createTreeNodeItemStyle(node); if (Object.keys(style).length > 0) { item.style = style; } } function createTreeNodeItemStyle(node) { const style = {}; if (StyleHelper_js_1.StyleHelper.isBold(node)) { style.isBold = true; } if (StyleHelper_js_1.StyleHelper.isItalic(node)) { style.isItalic = true; } const colorOverrides = {}; const foreColor = StyleHelper_js_1.StyleHelper.getForeColor(node); if (foreColor) { colorOverrides.color = foreColor; } const backColor = StyleHelper_js_1.StyleHelper.getBackColor(node); if (backColor) { colorOverrides.backgroundColor = backColor; } if (Object.keys(colorOverrides).length > 0) { style.colorOverrides = colorOverrides; } return style; } /* c8 ignore end */ /** @internal */ function pageOptionsUiToPresentation(pageOptions) { if (pageOptions) { return { ...pageOptions }; } return undefined; } function createNodeLabelRecord(node, appendChildrenCountForGroupingNodes) { let labelDefinition = node.label; if (appendChildrenCountForGroupingNodes && presentation_common_1.NodeKey.isGroupingNodeKey(node.key)) { const countDefinition = { displayValue: `(${node.key.groupedInstancesCount})`, rawValue: `(${node.key.groupedInstancesCount})`, typeName: "string", }; labelDefinition = { displayValue: `${labelDefinition.displayValue} ${countDefinition.displayValue}`, rawValue: { separator: " ", values: [labelDefinition, countDefinition], }, typeName: "composite", }; } return (0, Utils_js_1.createLabelRecord)(labelDefinition, "node_label"); } /** @internal */ function toRxjsObservable(source) { return new Observable_1.Observable((subscriber) => source.subscribe(subscriber)); } function createInfoNode(parentNode, message, type) { const id = parentNode ? `${parentNode.id}/info-node` : `/info-node/${message}`; return { id, parentId: parentNode?.id, label: appui_abstract_1.PropertyRecord.fromString(message), message, isSelectionDisabled: true, children: undefined, type: type ?? PresentationTreeNodeItem_js_1.InfoTreeNodeItemType.Unset, }; } function hasCheckboxVisible(node) { return "isCheckboxVisible" in node; } function hasIsChecked(node) { return "isChecked" in node; } function hasIsCheckboxEnabled(node) { return "isCheckboxEnabled" in node; } //# sourceMappingURL=Utils.js.map