UNPKG

@carbon/react

Version:

React components for the Carbon Design System

117 lines (111 loc) 3.99 kB
/** * 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. */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelpers.js'); var PropTypes = require('prop-types'); var React = require('react'); var cx = require('classnames'); var usePrefix = require('../../internal/usePrefix.js'); var _span, _span2; const DataTableSkeleton = ({ headers, rowCount = 5, columnCount = 5, zebra = false, compact = false, className, showHeader = true, showToolbar = true, size = 'lg', ...rest }) => { const prefix = usePrefix.usePrefix(); const dataTableSkeletonClasses = cx(className, { [`${prefix}--skeleton`]: true, [`${prefix}--data-table`]: true, [`${prefix}--data-table--${size}`]: size, [`${prefix}--data-table--zebra`]: zebra, [`${prefix}--data-table--compact`]: compact }); const rowRepeat = rowCount; const rows = Array(rowRepeat); const columnsArray = Array.from({ length: columnCount }, (_, index) => index); for (let i = 0; i < rowRepeat; i++) { rows[i] = /*#__PURE__*/React.createElement("tr", { key: i }, columnsArray.map(j => /*#__PURE__*/React.createElement("td", { key: j }, _span || (_span = /*#__PURE__*/React.createElement("span", null))))); } return /*#__PURE__*/React.createElement("div", { className: `${prefix}--skeleton ${prefix}--data-table-container` }, showHeader ? /*#__PURE__*/React.createElement("div", { className: `${prefix}--data-table-header` }, /*#__PURE__*/React.createElement("div", { className: `${prefix}--data-table-header__title` }), /*#__PURE__*/React.createElement("div", { className: `${prefix}--data-table-header__description` })) : null, showToolbar ? /*#__PURE__*/React.createElement("section", { "aria-label": "data table toolbar", className: `${prefix}--table-toolbar` }, /*#__PURE__*/React.createElement("div", { className: `${prefix}--toolbar-content` }, /*#__PURE__*/React.createElement("span", { className: `${prefix}--skeleton ${prefix}--btn ${prefix}--btn--sm` }))) : null, /*#__PURE__*/React.createElement("table", _rollupPluginBabelHelpers.extends({ className: dataTableSkeletonClasses }, rest), /*#__PURE__*/React.createElement("thead", null, /*#__PURE__*/React.createElement("tr", null, columnsArray.map(i => /*#__PURE__*/React.createElement("th", { key: i }, headers ? /*#__PURE__*/React.createElement("div", { className: `${prefix}--table-header-label` }, headers[i]?.header) : _span2 || (_span2 = /*#__PURE__*/React.createElement("span", null)))))), /*#__PURE__*/React.createElement("tbody", null, rows))); }; DataTableSkeleton.propTypes = { /** * Specify an optional className to add. */ className: PropTypes.string, /** * Specify the number of columns that you want to render in the skeleton state */ columnCount: PropTypes.number, /** * Optionally specify whether you want the Skeleton to be rendered as a * compact DataTable */ compact: PropTypes.bool, /** * Optionally specify the displayed headers */ headers: PropTypes.arrayOf(PropTypes.shape({ header: PropTypes.node.isRequired }).isRequired), /** * Specify the number of rows that you want to render in the skeleton state */ rowCount: PropTypes.number, /** * Specify if the table header should be rendered as part of the skeleton. */ showHeader: PropTypes.bool, /** * Specify if the table toolbar should be rendered as part of the skeleton. */ showToolbar: PropTypes.bool, /** * Changes the row height of table. */ size: PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl']), /** * Optionally specify whether you want the DataTable to be zebra striped */ zebra: PropTypes.bool }; exports.default = DataTableSkeleton;