UNPKG

@itwin/presentation-components

Version:

React components based on iTwin.js Presentation library

62 lines 2.17 kB
/*--------------------------------------------------------------------------------------------- * 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 */ import { useEffect, useState } from "react"; import { DefaultContentDisplayTypes, KeySet } from "@itwin/presentation-common"; import { Presentation } from "@itwin/presentation-frontend"; import { useErrorState } from "../common/Utils.js"; /** @internal */ export function useColumns(props) { const { imodel, ruleset, keys } = props; const [columns, setColumns] = useState(); const setErrorState = useErrorState(); 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.presentation.getContentDescriptor({ imodel, rulesetOrId: ruleset, displayType: DefaultContentDisplayTypes.Grid, keys: new 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