UNPKG

@itwin/presentation-components

Version:

React components based on iTwin.js Presentation library

65 lines 2.37 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. *--------------------------------------------------------------------------------------------*/ /** @packageDocumentation * @module Internal */ Object.defineProperty(exports, "__esModule", { value: true }); exports.useColumns = useColumns; const react_1 = require("react"); const presentation_common_1 = require("@itwin/presentation-common"); const presentation_frontend_1 = require("@itwin/presentation-frontend"); const Utils_js_1 = require("../common/Utils.js"); /** @internal */ function useColumns(props) { const { imodel, ruleset, keys } = props; const [columns, setColumns] = (0, react_1.useState)(); const setErrorState = (0, Utils_js_1.useErrorState)(); (0, react_1.useEffect)(() => { let disposed = false; if (keys.isEmpty) { setColumns([]); return; } void (async () => { try { const columnDefinitions = await loadColumns(imodel, ruleset, keys); if (!disposed) { setColumns(columnDefinitions ?? []); } } catch (err) { setErrorState(err); } })(); return () => { disposed = true; }; }, [imodel, ruleset, keys, setErrorState]); return columns; } async function loadColumns(imodel, ruleset, keys) { const descriptor = await presentation_frontend_1.Presentation.presentation.getContentDescriptor({ imodel, rulesetOrId: ruleset, displayType: presentation_common_1.DefaultContentDisplayTypes.Grid, keys: new presentation_common_1.KeySet(keys), }); return descriptor ? createColumns(descriptor) : undefined; } function createColumns(descriptor) { return descriptor.fields.flatMap(convertFieldToColumns); } function convertFieldToColumns(field) { return field.isPropertiesField() ? [createTableColumnDefinition(field)] : []; } function createTableColumnDefinition(field) { return { name: field.name, label: field.label, field, }; } //# sourceMappingURL=UseColumns.js.map