@carbon/react
Version:
React components for the Carbon Design System
86 lines (78 loc) • 3.1 kB
JavaScript
/**
* Copyright IBM Corp. 2016, 2023
*
* This source code is licensed under the Apache-2.0 license found in the
* LICENSE file in the root directory of this source tree.
*/
;
Object.defineProperty(exports, '__esModule', { value: true });
var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelpers.js');
var cx = require('classnames');
var PropTypes = require('prop-types');
var React = require('react');
var usePrefix = require('../../internal/usePrefix.js');
var useId = require('../../internal/useId.js');
var TableContext = require('./TableContext.js');
var index = require('../Heading/index.js');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
const TableContainer = ({
className,
children,
title,
description,
stickyHeader,
useStaticWidth,
...rest
}) => {
const baseId = useId.useId('tc');
const titleId = `${baseId}-title`;
const descriptionId = `${baseId}-description`;
const prefix = usePrefix.usePrefix();
const tableContainerClasses = cx__default["default"](className, `${prefix}--data-table-container`, {
[`${prefix}--data-table--max-width`]: stickyHeader,
[`${prefix}--data-table-container--static`]: useStaticWidth
});
const value = React.useMemo(() => {
return {
titleId: title ? titleId : undefined,
descriptionId: description ? descriptionId : undefined
};
}, [title, description, titleId, descriptionId]);
return /*#__PURE__*/React__default["default"].createElement(TableContext.TableContext.Provider, {
value: value
}, /*#__PURE__*/React__default["default"].createElement(index.Section, _rollupPluginBabelHelpers["extends"]({}, rest, {
className: tableContainerClasses
}), (title || description) && /*#__PURE__*/React__default["default"].createElement("div", {
className: `${prefix}--data-table-header`
}, title && /*#__PURE__*/React__default["default"].createElement(index.Heading, {
className: `${prefix}--data-table-header__title`,
id: titleId
}, title), description && /*#__PURE__*/React__default["default"].createElement("p", {
className: `${prefix}--data-table-header__description`,
id: descriptionId
}, description)), children));
};
TableContainer.propTypes = {
children: PropTypes__default["default"].node,
className: PropTypes__default["default"].string,
/**
* Optional description text for the Table
*/
description: PropTypes__default["default"].node,
/**
* Specify whether the table should have a sticky header
*/
stickyHeader: PropTypes__default["default"].bool,
/**
* Provide a title for the Table
*/
title: PropTypes__default["default"].node,
/**
* If true, will use a width of 'fit-content' to match the inner table width
*/
useStaticWidth: PropTypes__default["default"].bool
};
exports["default"] = TableContainer;