UNPKG

@awsui/components-react

Version:

On July 19th, 2022, we launched [Cloudscape Design System](https://cloudscape.design). Cloudscape is an evolution of AWS-UI. It consists of user interface guidelines, front-end components, design resources, and development tools for building intuitive, en

58 lines 3.53 kB
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 import { useInternalI18n } from '../../i18n/context'; import { fireNonCancelableEvent } from '../../internal/events'; import { ItemSet } from '../selection/utils'; export function useExpandableTableProps({ items, expandableRows, trackBy, ariaLabels, }) { var _a; const i18n = useInternalI18n('table'); const isExpandable = !!expandableRows; const expandedSet = new ItemSet(trackBy, (_a = expandableRows === null || expandableRows === void 0 ? void 0 : expandableRows.expandedItems) !== null && _a !== void 0 ? _a : []); let allItems = items; const itemToDetail = new Map(); const getItemLevel = (item) => { var _a, _b; return (_b = (_a = itemToDetail.get(item)) === null || _a === void 0 ? void 0 : _a.level) !== null && _b !== void 0 ? _b : 0; }; if (isExpandable) { const visibleItems = new Array(); const traverse = (item, detail) => { const children = expandableRows.getItemChildren(item); itemToDetail.set(item, Object.assign(Object.assign({}, detail), { children })); visibleItems.push(item); if (expandedSet.has(item)) { children.forEach((child, index) => traverse(child, { level: detail.level + 1, setSize: children.length, posInSet: index + 1, parent: item })); } }; items.forEach((item, index) => traverse(item, { level: 1, setSize: items.length, posInSet: index + 1, parent: null })); for (let index = 0; index < visibleItems.length; index++) { const item = visibleItems[index]; if (expandedSet.has(item)) { let insertionIndex = index + 1; for (insertionIndex; insertionIndex < visibleItems.length; insertionIndex++) { const insertionItem = visibleItems[insertionIndex]; if (getItemLevel(item) >= getItemLevel(insertionItem)) { break; } } insertionIndex--; } } allItems = visibleItems; } const getExpandableItemProps = (item) => { var _a, _b, _c, _d; const { level = 1, setSize = 1, posInSet = 1, parent = null, children = [] } = (_a = itemToDetail.get(item)) !== null && _a !== void 0 ? _a : {}; return { level, setSize, posInSet, isExpandable: (_b = expandableRows === null || expandableRows === void 0 ? void 0 : expandableRows.isItemExpandable(item)) !== null && _b !== void 0 ? _b : true, isExpanded: expandedSet.has(item), onExpandableItemToggle: () => fireNonCancelableEvent(expandableRows === null || expandableRows === void 0 ? void 0 : expandableRows.onExpandableItemToggle, { item, expanded: !expandedSet.has(item) }), expandButtonLabel: i18n('ariaLabels.expandButtonLabel', (_c = ariaLabels === null || ariaLabels === void 0 ? void 0 : ariaLabels.expandButtonLabel) === null || _c === void 0 ? void 0 : _c.call(ariaLabels, item)), collapseButtonLabel: i18n('ariaLabels.collapseButtonLabel', (_d = ariaLabels === null || ariaLabels === void 0 ? void 0 : ariaLabels.collapseButtonLabel) === null || _d === void 0 ? void 0 : _d.call(ariaLabels, item)), parent, children, }; }; return { isExpandable, allItems, getExpandableItemProps }; } //# sourceMappingURL=expandable-rows-utils.js.map