@coreui/react-pro
Version:
UI Components Library for React.js
84 lines (81 loc) • 5.05 kB
JavaScript
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