@itwin/presentation-components
Version:
React components based on iTwin.js Presentation library
62 lines • 2.17 kB
JavaScript
/*---------------------------------------------------------------------------------------------
* 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