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