choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
452 lines (385 loc) • 16 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _tslib = require("tslib");
var _react = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _mobxReact = require("mobx-react");
var _mobx = require("mobx");
var _componentClasses = _interopRequireDefault(require("component-classes"));
var _raf = _interopRequireDefault(require("raf"));
var _reactBeautifulDnd = require("react-beautiful-dnd");
var _UnitConvertor = require("../../../lib/_util/UnitConvertor");
var _resizeObserver = _interopRequireDefault(require("../../../lib/_util/resizeObserver"));
var _isFunction = _interopRequireDefault(require("lodash/isFunction"));
var _TableContext = _interopRequireDefault(require("./TableContext"));
var _TableRow = _interopRequireDefault(require("./TableRow"));
var _enum = require("./enum");
var _ExpandedRow = _interopRequireDefault(require("./ExpandedRow"));
var _enum2 = require("../data-set/enum");
var _autobind = _interopRequireDefault(require("../_util/autobind"));
var _Table = require("./Table");
var _utils = require("./utils");
function _createSuper(Derived) {
function isNativeReflectConstruct() {
if (typeof Reflect === "undefined" || !Reflect.construct) return false;
if (Reflect.construct.sham) return false;
if (typeof Proxy === "function") return true;
try {
Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));
return true;
} catch (e) {
return false;
}
}
return function () {
var Super = (0, _getPrototypeOf2["default"])(Derived),
result;
if (isNativeReflectConstruct()) {
var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor;
result = Reflect.construct(Super, arguments, NewTarget);
} else {
result = Super.apply(this, arguments);
}
return (0, _possibleConstructorReturn2["default"])(this, result);
};
}
var TableTBody =
/*#__PURE__*/
function (_Component) {
(0, _inherits2["default"])(TableTBody, _Component);
var _super = _createSuper(TableTBody);
function TableTBody() {
(0, _classCallCheck2["default"])(this, TableTBody);
return _super.apply(this, arguments);
}
(0, _createClass2["default"])(TableTBody, [{
key: "handleResize",
value: function handleResize() {
if (this.nextFrameActionId !== undefined) {
_raf["default"].cancel(this.nextFrameActionId);
}
this.nextFrameActionId = (0, _raf["default"])(this.syncBodyHeight);
}
}, {
key: "saveRef",
value: function saveRef(node) {
this.tableBody = node;
this.handleResize();
}
/**
* 虚拟滚动计算可视化数据
*/
}, {
key: "processData",
value: function processData() {
var _this$context$tableSt = this.context.tableStore,
data = _this$context$tableSt.data,
_this$context$tableSt2 = _this$context$tableSt.lastScrollTop,
lastScrollTop = _this$context$tableSt2 === void 0 ? 0 : _this$context$tableSt2,
height = _this$context$tableSt.height,
rowHeight = _this$context$tableSt.rowHeight;
var startIndex = Math.max(Math.round(lastScrollTop / rowHeight - 3), 0);
var endIndex = Math.min(Math.round((lastScrollTop + height) / rowHeight + 2), data.length);
return data.slice(startIndex, endIndex);
}
}, {
key: "render",
value: function render() {
var _this = this;
var lock = this.props.lock;
var leafColumns = this.leafColumns,
leafColumnsBody = this.leafColumnsBody;
var _this$context$tableSt3 = this.context.tableStore,
prefixCls = _this$context$tableSt3.prefixCls,
node = _this$context$tableSt3.node,
virtual = _this$context$tableSt3.virtual,
virtualData = _this$context$tableSt3.virtualData,
dataSet = _this$context$tableSt3.dataSet,
rowDraggable = _this$context$tableSt3.rowDraggable,
dragColumnAlign = _this$context$tableSt3.dragColumnAlign,
totalLeafColumnsWidth = _this$context$tableSt3.totalLeafColumnsWidth,
overflowX = _this$context$tableSt3.overflowX,
_this$context$tableSt4 = _this$context$tableSt3.props.rowDragRender,
rowDragRender = _this$context$tableSt4 === void 0 ? {} : _this$context$tableSt4;
var droppableProps = rowDragRender.droppableProps,
_renderClone = rowDragRender.renderClone;
var rows = virtualData.length ? this.getRows(virtualData, leafColumns, true, lock, virtual) : this.getEmptyRow(leafColumns, lock);
var body = rowDraggable ? _react["default"].createElement(_reactBeautifulDnd.Droppable, (0, _extends2["default"])({
droppableId: "table",
key: "table",
renderClone: function renderClone(provided, snapshot, rubric) {
if (overflowX && dragColumnAlign === _enum.DragColumnAlign.right && snapshot.isDragging) {
var style = provided.draggableProps.style;
if ((0, _utils.isDraggingStyle)(style)) {
var left = style.left,
width = style.width;
style.left = left - Math.max(totalLeafColumnsWidth - 50, width);
}
}
var record = dataSet.get(rubric.source.index);
if (_renderClone && (0, _isFunction["default"])(_renderClone)) {
return _renderClone({
provided: provided,
snapshot: snapshot,
key: record.id,
hidden: false,
lock: false,
prefixCls: prefixCls,
columns: leafColumnsBody,
record: record,
index: record.id,
rubric: rubric
});
}
return _react["default"].createElement(_TableRow["default"], {
provided: provided,
snapshot: snapshot,
key: record.id,
hidden: false,
lock: false,
columns: leafColumnsBody,
record: record,
index: record.id
});
},
getContainerForClone: function getContainerForClone() {
return (0, _Table.instance)(node.getClassName(), prefixCls).tbody;
}
}, droppableProps), function (droppableProvided) {
return _react["default"].createElement("tbody", (0, _extends2["default"])({
ref: function ref(_ref) {
if (_ref) {
_this.saveRef(_ref);
droppableProvided.innerRef(_ref);
}
}
}, droppableProvided.droppableProps, {
className: "".concat(prefixCls, "-tbody")
}), rows, droppableProvided.placeholder);
}) : _react["default"].createElement("tbody", {
ref: lock ? undefined : this.saveRef,
className: "".concat(prefixCls, "-tbody")
}, rows);
return lock ? body : _react["default"].createElement(_resizeObserver["default"], {
onResize: this.handleResize,
resizeProp: "height"
}, body);
}
}, {
key: "componentWillMount",
value: function componentWillMount() {
this.processDataSetListener(true);
}
}, {
key: "componentWillUnmount",
value: function componentWillUnmount() {
this.processDataSetListener(false);
}
}, {
key: "processDataSetListener",
value: function processDataSetListener(flag) {
var dataSet = this.context.tableStore.dataSet;
if (dataSet) {
var handler = flag ? dataSet.addEventListener : dataSet.removeEventListener;
handler.call(dataSet, 'validate', this.handleDataSetValidate);
}
}
}, {
key: "handleDataSetValidate",
value: function () {
var _handleDataSetValidate = (0, _asyncToGenerator2["default"])(
/*#__PURE__*/
_regenerator["default"].mark(function _callee(_ref2) {
var result, cell;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
result = _ref2.result;
_context.next = 3;
return result;
case 3:
if (_context.sent) {
_context.next = 6;
break;
}
cell = this.tableBody ? (0, _utils.findFirstFocusableInvalidElement)(this.tableBody) : null;
if (cell) {
cell.focus();
}
case 6:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
function handleDataSetValidate(_x) {
return _handleDataSetValidate.apply(this, arguments);
}
return handleDataSetValidate;
}()
}, {
key: "componentDidUpdate",
value: function componentDidUpdate() {
var lock = this.props.lock;
var prefixCls = this.context.tableStore.prefixCls;
if (!lock) {
var node = this.context.tableStore.node;
if ((0, _componentClasses["default"])(node.wrapper).has("".concat(prefixCls, "-focused")) && !node.wrapper.contains(document.activeElement)) {
node.focus();
}
}
}
}, {
key: "getRows",
value: function getRows(records, columns, expanded, lock, virtual) {
var _this2 = this;
return records.map(function (record, index) {
return _this2.getRow(columns, record, virtual ? record.index : index, expanded, lock);
});
}
}, {
key: "getEmptyRow",
value: function getEmptyRow(columns, lock) {
var _this$context$tableSt5 = this.context.tableStore,
prefixCls = _this$context$tableSt5.prefixCls,
dataSet = _this$context$tableSt5.dataSet,
emptyText = _this$context$tableSt5.emptyText,
width = _this$context$tableSt5.width,
style = _this$context$tableSt5.style;
var tableWidth = width;
if (style && style.width) {
tableWidth = (0, _UnitConvertor.toPx)(style === null || style === void 0 ? void 0 : style.width) || width;
}
var styles = tableWidth ? {
marginLeft: (0, _UnitConvertor.pxToRem)(tableWidth / 2)
} : {
transform: 'none',
display: 'inline-block'
};
var tdStyle = tableWidth ? {} : {
textAlign: 'center'
};
return _react["default"].createElement("tr", {
className: "".concat(prefixCls, "-empty-row")
}, _react["default"].createElement("td", {
colSpan: columns.length,
style: tdStyle
}, _react["default"].createElement("div", {
style: styles
}, !lock && dataSet.status === _enum2.DataSetStatus.ready && emptyText)));
}
}, {
key: "renderExpandedRows",
value: function renderExpandedRows(columns, record, isExpanded, lock) {
return this.getRows(record.children || [], columns, isExpanded, lock);
}
}, {
key: "getRow",
value: function getRow(columns, record, index, expanded, lock) {
var _this$context$tableSt6 = this.context.tableStore,
isTree = _this$context$tableSt6.isTree,
_this$context$tableSt7 = _this$context$tableSt6.props.rowDragRender,
rowDragRender = _this$context$tableSt7 === void 0 ? {} : _this$context$tableSt7,
rowDraggable = _this$context$tableSt6.rowDraggable,
dragColumnAlign = _this$context$tableSt6.dragColumnAlign;
var draggableProps = rowDragRender.draggableProps;
var children = isTree && _react["default"].createElement(_ExpandedRow["default"], {
record: record,
columns: columns,
lock: lock
}, this.renderExpandedRows);
return rowDraggable && (!dragColumnAlign || dragColumnAlign === _enum.DragColumnAlign.right && lock !== _enum.ColumnLock.left || dragColumnAlign === _enum.DragColumnAlign.left && lock !== _enum.ColumnLock.right) ? _react["default"].createElement(_reactBeautifulDnd.Draggable, {
draggableId: String(record.key),
index: index,
key: record.key
}, function (provided, snapshot) {
return _react["default"].createElement(_TableRow["default"], (0, _extends2["default"])({
provided: provided,
snapshot: snapshot,
key: record.key,
hidden: !expanded,
lock: lock,
columns: columns,
record: record,
index: index
}, draggableProps), children);
}) : _react["default"].createElement(_TableRow["default"], {
key: record.key,
hidden: !expanded,
lock: lock,
columns: columns,
record: record,
index: index
}, children);
}
}, {
key: "syncBodyHeight",
value: function syncBodyHeight() {
var tableStore = this.context.tableStore;
if (this.tableBody && !tableStore.hidden) {
tableStore.bodyHeight = this.tableBody.offsetHeight;
}
}
}, {
key: "leafColumns",
get: function get() {
var tableStore = this.context.tableStore;
var lock = this.props.lock;
if (lock === _enum.ColumnLock.right) {
return tableStore.rightLeafColumns.filter(function (_ref3) {
var hidden = _ref3.hidden;
return !hidden;
});
}
if (lock) {
return tableStore.leftLeafColumns.filter(function (_ref4) {
var hidden = _ref4.hidden;
return !hidden;
});
}
return this.leafColumnsBody;
}
}, {
key: "leafColumnsBody",
get: function get() {
var tableStore = this.context.tableStore;
return tableStore.leafColumns.filter(function (_ref5) {
var hidden = _ref5.hidden;
return !hidden;
});
}
}]);
return TableTBody;
}(_react.Component);
TableTBody.displayName = 'TableTBody';
TableTBody.propTypes = {
lock: _propTypes["default"].oneOfType([_propTypes["default"].bool, _propTypes["default"].oneOf([_enum.ColumnLock.right, _enum.ColumnLock.left])])
};
TableTBody.contextType = _TableContext["default"];
(0, _tslib.__decorate)([_mobx.computed], TableTBody.prototype, "leafColumns", null);
(0, _tslib.__decorate)([_mobx.computed], TableTBody.prototype, "leafColumnsBody", null);
(0, _tslib.__decorate)([_autobind["default"]], TableTBody.prototype, "handleResize", null);
(0, _tslib.__decorate)([_autobind["default"]], TableTBody.prototype, "saveRef", null);
(0, _tslib.__decorate)([_autobind["default"]], TableTBody.prototype, "processData", null);
(0, _tslib.__decorate)([_autobind["default"]], TableTBody.prototype, "handleDataSetValidate", null);
(0, _tslib.__decorate)([_autobind["default"]], TableTBody.prototype, "renderExpandedRows", null);
(0, _tslib.__decorate)([_autobind["default"], _mobx.action], TableTBody.prototype, "syncBodyHeight", null);
TableTBody = (0, _tslib.__decorate)([_mobxReact.observer], TableTBody);
var _default = TableTBody;
exports["default"] = _default;
//# sourceMappingURL=TableTBody.js.map