choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
250 lines (205 loc) • 8.56 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _react = _interopRequireWildcard(require("react"));
var _miniStore = require("mini-store");
var _classnames = _interopRequireDefault(require("classnames"));
var _isNumber = _interopRequireDefault(require("lodash/isNumber"));
var _ColGroup = _interopRequireDefault(require("./ColGroup"));
var _TableHeader = _interopRequireDefault(require("./TableHeader"));
var _TableFooter = _interopRequireDefault(require("./TableFooter"));
var _TableRow = _interopRequireDefault(require("./TableRow"));
var _ExpandableRow = _interopRequireDefault(require("./ExpandableRow"));
var _TableContext = _interopRequireDefault(require("./TableContext"));
var _measureScrollbar = _interopRequireDefault(require("../../_util/measureScrollbar"));
var _isStickySupport = _interopRequireDefault(require("../../_util/isStickySupport"));
var _utils = require("./utils");
var BaseTable = function BaseTable(props) {
var table = (0, _react.useContext)(_TableContext["default"]);
var columnManager = table.columnManager,
components = table.components;
var _table$props = table.props,
prefixCls = _table$props.prefixCls,
scroll = _table$props.scroll,
data = _table$props.data,
getBodyWrapper = _table$props.getBodyWrapper,
childrenColumnName = _table$props.childrenColumnName,
rowClassName = _table$props.rowClassName,
rowRef = _table$props.rowRef,
onRowClick = _table$props.onRowClick,
onRowDoubleClick = _table$props.onRowDoubleClick,
onRowContextMenu = _table$props.onRowContextMenu,
onRowMouseEnter = _table$props.onRowMouseEnter,
onRowMouseLeave = _table$props.onRowMouseLeave,
onRow = _table$props.onRow;
var store = props.store,
expander = props.expander,
tableClassName = props.tableClassName,
hasHead = props.hasHead,
hasBody = props.hasBody,
hasFoot = props.hasFoot,
fixed = props.fixed,
getRowKey = props.getRowKey,
isAnyColumnsFixed = props.isAnyColumnsFixed;
var tableStyle = {};
var getColumns = function getColumns() {
var cols = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : props.columns || [];
var isBody = arguments.length > 1 ? arguments[1] : undefined;
var sticky = {
stickyLeft: 0,
stickyRight: !isBody && scroll && scroll.y ? (0, _measureScrollbar["default"])() : 0
};
if ((0, _isStickySupport["default"])()) {
sticky.stickyRight = cols.reduce(function (right, col) {
if (col.fixed === 'right') {
return right + (0, _utils.columnWidth)(col);
}
return right;
}, sticky.stickyRight);
}
return cols.map(function (column) {
var newColumn = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, column), {}, {
className: !!column.fixed && !fixed ? (0, _classnames["default"])((0, _isStickySupport["default"])() ? "".concat(prefixCls, "-sticky-column") : "".concat(prefixCls, "-fixed-columns-in-body"), column.className) : column.className
});
if ((0, _isStickySupport["default"])()) {
if (column.fixed === 'right') {
sticky.stickyRight -= (0, _utils.columnWidth)(column);
newColumn.style = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, newColumn.style), {}, {
right: sticky.stickyRight
});
} else if (column.fixed) {
newColumn.style = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, newColumn.style), {}, {
left: sticky.stickyLeft
});
sticky.stickyLeft += (0, _utils.columnWidth)(column);
}
}
return newColumn;
});
};
var handleRowHover = (0, _react.useCallback)(function (isHover, key) {
store.setState({
currentHoverKey: isHover ? key : null
});
}, [store]);
var renderRows = function renderRows(renderData, indent) {
var rows = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
var ancestorKeys = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
var _loop = function _loop(i) {
var record = renderData[i];
var key = getRowKey(record, i);
var className = typeof rowClassName === 'string' ? rowClassName : rowClassName(record, i, indent);
var onHoverProps = {};
if (columnManager.isAnyColumnsFixed()) {
onHoverProps.onHover = handleRowHover;
}
var leafColumns = void 0;
if (fixed === 'left') {
leafColumns = columnManager.leftLeafColumns();
} else if (fixed === 'right') {
leafColumns = columnManager.rightLeafColumns();
} else {
leafColumns = getColumns(columnManager.leafColumns(), true);
}
var rowPrefixCls = "".concat(prefixCls, "-row");
var rowIndex = rows.filter(function (row) {
return !row.props.expandedRow;
}).length;
var row = /*#__PURE__*/_react["default"].createElement(_ExpandableRow["default"], (0, _extends2["default"])({}, expander.props, {
fixed: fixed,
index: rowIndex,
prefixCls: rowPrefixCls,
record: record,
key: key,
rowKey: key,
onRowClick: onRowClick,
needIndentSpaced: expander.needIndentSpaced,
onExpandedChange: expander.handleExpandChange
}), function (expandableRow) {
return (
/*#__PURE__*/
// eslint-disable-line
_react["default"].createElement(_TableRow["default"], (0, _extends2["default"])({
fixed: fixed,
indent: indent,
className: className,
record: record,
index: rowIndex,
prefixCls: rowPrefixCls,
childrenColumnName: childrenColumnName,
columns: leafColumns,
onRow: onRow,
onRowDoubleClick: onRowDoubleClick,
onRowContextMenu: onRowContextMenu,
onRowMouseEnter: onRowMouseEnter,
onRowMouseLeave: onRowMouseLeave
}, onHoverProps, {
rowKey: key,
ancestorKeys: ancestorKeys,
ref: rowRef(record, i, indent),
components: components,
isAnyColumnsFixed: isAnyColumnsFixed
}, expandableRow))
);
});
rows.push(row);
expander.renderRows(renderRows, rows, record, i, indent, fixed, key, ancestorKeys);
};
for (var i = 0; i < renderData.length; i++) {
_loop(i);
}
return rows;
};
var placeholder = hasHead && !hasBody && scroll.y && fixed !== 'left';
if (!fixed && scroll.x) {
// not set width, then use content fixed width
if (scroll.x === true) {
tableStyle.tableLayout = 'fixed';
} else {
if (placeholder && (0, _isNumber["default"])(scroll.x)) {
tableStyle.width = scroll.x + (0, _measureScrollbar["default"])() + 1;
} else {
tableStyle.width = scroll.x;
}
}
}
var Table = hasBody ? components.table : 'table';
var BodyWrapper = components.body.wrapper;
var body;
if (hasBody) {
body = /*#__PURE__*/_react["default"].createElement(BodyWrapper, {
className: "".concat(prefixCls, "-tbody")
}, renderRows(data, 0));
if (getBodyWrapper) {
body = getBodyWrapper(body);
}
}
var columns = getColumns();
return /*#__PURE__*/_react["default"].createElement(Table, {
className: tableClassName,
style: tableStyle,
key: "table"
}, /*#__PURE__*/_react["default"].createElement(_ColGroup["default"], {
columns: columns,
fixed: fixed,
placeholder: placeholder
}), hasHead && /*#__PURE__*/_react["default"].createElement(_TableHeader["default"], {
expander: expander,
columns: columns,
fixed: fixed,
placeholder: placeholder
}), body, hasFoot && /*#__PURE__*/_react["default"].createElement(_TableFooter["default"], {
onHover: handleRowHover,
columns: columns,
fixed: fixed
}));
};
var _default = (0, _miniStore.connect)()(BaseTable);
exports["default"] = _default;
//# sourceMappingURL=BaseTable.js.map