UNPKG

@coreui/react-pro

Version:

UI Components Library for React.js

84 lines (81 loc) 5.05 kB
import { __rest } from '../../node_modules/tslib/tslib.es6.js'; import React, { forwardRef, useMemo } from 'react'; import PropTypes from 'prop-types'; import { CTableBody } from '../table/CTableBody.js'; import '../form/CForm.js'; import { CFormCheck } from '../form/CFormCheck.js'; import '../form/CFormControlValidation.js'; import '../form/CFormControlWrapper.js'; import '../form/CFormFeedback.js'; import '../form/CFormFloating.js'; import '../form/CFormInput.js'; import '../form/CFormLabel.js'; import '../form/CFormRange.js'; import '../form/CFormSelect.js'; import '../form/CFormSwitch.js'; import '../form/CFormText.js'; import '../form/CFormTextarea.js'; import '../form/CInputGroup.js'; import '../form/CInputGroupText.js'; import '../table/CTable.js'; import '../table/CTableCaption.js'; import { CTableDataCell } from '../table/CTableDataCell.js'; import '../table/CTableFoot.js'; import '../table/CTableHead.js'; import '../table/CTableHeaderCell.js'; import { CTableRow } from '../table/CTableRow.js'; import isObjectInArray from '../../utils/isObjectInArray.js'; import { ITEM_INTERNAL_KEYS } from './consts.js'; import { getColumns, getClickedColumnName, getColumnName, getTableDataCellProps, getTableDataCellStyles } from './utils.js'; const CSmartTableBody = forwardRef((_a, ref) => { var { clickableRows, columnNames, columns, currentItems, firstItemOnActivePageIndex, noItemsLabel, onRowChecked, onRowClick, scopedColumns, selectable, selected } = _a, rest = __rest(_a, ["clickableRows", "columnNames", "columns", "currentItems", "firstItemOnActivePageIndex", "noItemsLabel", "onRowChecked", "onRowClick", "scopedColumns", "selectable", "selected"]); const colspan = selectable ? columns.length + 1 : columns.length; const _columns = useMemo(() => getColumns(columns), [columns]); return (React.createElement(CTableBody, Object.assign({}, (clickableRows && { style: { cursor: 'pointer' }, }), rest, { ref: ref }), currentItems.length > 0 ? (currentItems.map((item, trIndex) => { return (React.createElement(React.Fragment, { key: trIndex }, React.createElement(CTableRow, Object.assign({}, (item._props && Object.assign({}, item._props)), (clickableRows && { tabIndex: 0 }), { onClick: (event) => onRowClick && onRowClick(item, trIndex + firstItemOnActivePageIndex, getClickedColumnName(event.target, columnNames, selectable), event) }), selectable && (React.createElement(CTableDataCell, null, React.createElement(CFormCheck, { checked: selected && isObjectInArray(selected, item, ITEM_INTERNAL_KEYS), disabled: item._selectable === false, onChange: (event) => { const _item = Object.assign({}, item); for (const key of ITEM_INTERNAL_KEYS) { delete _item[key]; } onRowChecked && onRowChecked(_item, event.target.checked); } }))), _columns.map((column, index) => { const colName = getColumnName(column); return ((scopedColumns && scopedColumns[colName] && React.cloneElement(scopedColumns[colName](item, trIndex + firstItemOnActivePageIndex), { key: index, })) || (item[colName] !== undefined && (React.createElement(CTableDataCell, Object.assign({}, getTableDataCellProps(column, item, colName), { style: getTableDataCellStyles(column, item, colName), key: index }), item[colName])))); })), scopedColumns && scopedColumns.details && (React.createElement(React.Fragment, null, React.createElement(CTableRow, null, React.createElement(CTableDataCell, { colSpan: colspan, className: "p-0", style: { borderBottomWidth: 0 }, tabIndex: -1 })), React.createElement(CTableRow, { className: "p-0", key: `details${trIndex}` }, React.createElement(CTableDataCell, { colSpan: colspan, className: "p-0", style: { border: 0 } }, scopedColumns.details(item, trIndex + firstItemOnActivePageIndex))))))); })) : (React.createElement(CTableRow, null, React.createElement(CTableDataCell, { colSpan: colspan }, noItemsLabel))))); }); CSmartTableBody.propTypes = { clickableRows: PropTypes.bool, columns: PropTypes.array.isRequired, currentItems: PropTypes.array.isRequired, firstItemOnActivePageIndex: PropTypes.number.isRequired, noItemsLabel: PropTypes.oneOfType([PropTypes.string, PropTypes.node]), onRowChecked: PropTypes.func, onRowClick: PropTypes.func, columnNames: PropTypes.array.isRequired, scopedColumns: PropTypes.object, selectable: PropTypes.bool, selected: PropTypes.array, }; CSmartTableBody.displayName = 'CSmartTableBody'; export { CSmartTableBody }; //# sourceMappingURL=CSmartTableBody.js.map