choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
325 lines (264 loc) • 10.4 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 _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
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 _classnames = _interopRequireDefault(require("classnames"));
var _isNil = _interopRequireDefault(require("lodash/isNil"));
var _measureScrollbar = _interopRequireDefault(require("../../../lib/_util/measureScrollbar"));
var _UnitConvertor = require("../../../lib/_util/UnitConvertor");
var _TableContext = _interopRequireDefault(require("./TableContext"));
var _Column = require("./Column");
var _enum = require("./enum");
var _TableEditor = _interopRequireDefault(require("./TableEditor"));
var _TableCol = _interopRequireDefault(require("./TableCol"));
var _utils = require("./utils");
var _autobind = _interopRequireDefault(require("../_util/autobind"));
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 TableWrapper =
/*#__PURE__*/
function (_Component) {
(0, _inherits2["default"])(TableWrapper, _Component);
var _super = _createSuper(TableWrapper);
function TableWrapper() {
(0, _classCallCheck2["default"])(this, TableWrapper);
return _super.apply(this, arguments);
}
(0, _createClass2["default"])(TableWrapper, [{
key: "getCol",
value: function getCol(column, width) {
if (!column.hidden) {
return _react["default"].createElement(_TableCol["default"], {
key: (0, _utils.getColumnKey)(column),
width: width,
minWidth: (0, _Column.minColumnWidth)(column)
});
}
}
}, {
key: "getColGroup",
value: function getColGroup() {
var _this = this;
var _this$props = this.props,
lock = _this$props.lock,
hasHeader = _this$props.hasHeader,
hasFooter = _this$props.hasFooter;
var _this$context$tableSt = this.context.tableStore,
overflowY = _this$context$tableSt.overflowY,
overflowX = _this$context$tableSt.overflowX,
customizable = _this$context$tableSt.customizable,
rowDraggable = _this$context$tableSt.rowDraggable,
dragColumnAlign = _this$context$tableSt.dragColumnAlign;
var hasEmptyWidth = false;
var fixedColumnLength = 1;
if (customizable) {
fixedColumnLength += 1;
}
if (rowDraggable && dragColumnAlign === _enum.DragColumnAlign.right) {
fixedColumnLength += 1;
}
var cols = this.leafColumns.map(function (column, index, array) {
var width = (0, _mobx.get)(column, 'width');
if (!overflowX) {
if (!hasEmptyWidth && index === array.length - fixedColumnLength) {
width = undefined;
} else if ((0, _isNil["default"])(width)) {
hasEmptyWidth = true;
}
}
return _this.getCol(column, width);
});
if (overflowY && lock !== _enum.ColumnLock.left && (hasHeader || hasFooter)) {
cols.push(_react["default"].createElement("col", {
key: "fixed-column",
style: {
width: (0, _UnitConvertor.pxToRem)((0, _measureScrollbar["default"])())
}
}));
}
return _react["default"].createElement("colgroup", null, cols);
}
}, {
key: "getEditors",
value: function getEditors() {
return this.leafEditorColumns.map(function (column) {
return _react["default"].createElement(_TableEditor["default"], {
key: (0, _utils.getColumnKey)(column),
column: column
});
});
}
}, {
key: "saveRef",
value: function saveRef(node) {
this.tableWrapper = node;
}
}, {
key: "render",
value: function render() {
var _this$props2 = this.props,
children = _this$props2.children,
lock = _this$props2.lock,
hasBody = _this$props2.hasBody;
var _this$context$tableSt2 = this.context.tableStore,
overflowY = _this$context$tableSt2.overflowY,
height = _this$context$tableSt2.height,
prefixCls = _this$context$tableSt2.prefixCls;
var editors = hasBody && this.getEditors();
var className = (0, _classnames["default"])((0, _defineProperty2["default"])({}, "".concat(prefixCls, "-last-row-bordered"), hasBody && !overflowY && height !== undefined));
var table = _react["default"].createElement("table", {
key: "table",
ref: lock ? undefined : this.saveRef,
className: className,
style: {
width: this.tableWidth
}
}, this.getColGroup(), children);
return [table, editors];
}
}, {
key: "leafColumnsWidth",
get: function get() {
var tableStore = this.context.tableStore;
var lock = this.props.lock;
switch (lock) {
case _enum.ColumnLock.left:
case true:
return tableStore.leftLeafColumnsWidth;
case _enum.ColumnLock.right:
return tableStore.rightLeafColumnsWidth;
default:
if (tableStore.overflowX) {
return tableStore.totalLeafColumnsWidth;
}
}
return undefined;
}
}, {
key: "leafEditorColumns",
get: function get() {
var tableStore = this.context.tableStore;
var lock = this.props.lock;
switch (lock) {
case _enum.ColumnLock.left:
case true:
return tableStore.leftLeafColumns.filter(function (_ref) {
var editor = _ref.editor,
name = _ref.name,
hidden = _ref.hidden;
return editor && name && !hidden;
});
case _enum.ColumnLock.right:
return tableStore.rightLeafColumns.filter(function (_ref2) {
var editor = _ref2.editor,
name = _ref2.name,
hidden = _ref2.hidden;
return editor && name && !hidden;
});
default:
return tableStore.leafColumns.filter(function (_ref3) {
var editor = _ref3.editor,
name = _ref3.name,
hidden = _ref3.hidden,
columnLock = _ref3.lock;
return editor && name && !hidden && ((0, _utils.isStickySupport)() || !columnLock || !tableStore.overflowX);
});
}
}
}, {
key: "leafColumns",
get: function get() {
var tableStore = this.context.tableStore;
var lock = this.props.lock;
switch (lock) {
case _enum.ColumnLock.left:
case true:
return tableStore.leftLeafColumns.filter(function (_ref4) {
var hidden = _ref4.hidden;
return !hidden;
});
case _enum.ColumnLock.right:
return tableStore.rightLeafColumns.filter(function (_ref5) {
var hidden = _ref5.hidden;
return !hidden;
});
default:
return tableStore.leafColumns.filter(function (_ref6) {
var hidden = _ref6.hidden;
return !hidden;
});
}
}
}, {
key: "tableWidth",
get: function get() {
var _this$props3 = this.props,
lock = _this$props3.lock,
hasBody = _this$props3.hasBody;
var _this$context$tableSt3 = this.context.tableStore,
overflowY = _this$context$tableSt3.overflowY,
overflowX = _this$context$tableSt3.overflowX;
if (overflowX) {
var tableWidth = this.leafColumnsWidth;
if (tableWidth !== undefined && overflowY && lock !== _enum.ColumnLock.left && !hasBody) {
tableWidth += (0, _measureScrollbar["default"])();
}
return (0, _UnitConvertor.pxToRem)(tableWidth);
}
return '100%';
}
}]);
return TableWrapper;
}(_react.Component);
TableWrapper.contextType = _TableContext["default"];
TableWrapper.propTypes = {
lock: _propTypes["default"].oneOfType([_propTypes["default"].bool, _propTypes["default"].oneOf([_enum.ColumnLock.right, _enum.ColumnLock.left])]),
hasBody: _propTypes["default"].bool,
hasHeader: _propTypes["default"].bool,
hasFooter: _propTypes["default"].bool
};
(0, _tslib.__decorate)([_mobx.computed], TableWrapper.prototype, "leafColumnsWidth", null);
(0, _tslib.__decorate)([_mobx.computed], TableWrapper.prototype, "leafEditorColumns", null);
(0, _tslib.__decorate)([_mobx.computed], TableWrapper.prototype, "leafColumns", null);
(0, _tslib.__decorate)([_autobind["default"]], TableWrapper.prototype, "saveRef", null);
(0, _tslib.__decorate)([_mobx.computed], TableWrapper.prototype, "tableWidth", null);
TableWrapper = (0, _tslib.__decorate)([_mobxReact.observer], TableWrapper);
var _default = TableWrapper;
exports["default"] = _default;
//# sourceMappingURL=TableWrapper.js.map