choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
334 lines (272 loc) • 12.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"] = exports.propTypes = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectSpread3 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
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 React = _interopRequireWildcard(require("react"));
var _mobx = require("mobx");
var _propTypes = _interopRequireDefault(require("prop-types"));
var _isString = _interopRequireDefault(require("lodash/isString"));
var _isNumber = _interopRequireDefault(require("lodash/isNumber"));
var _classnames = _interopRequireDefault(require("classnames"));
var _constants = require("./constants");
var _utils = require("./utils");
var _TableContext = _interopRequireDefault(require("./TableContext"));
var _Column = _interopRequireDefault(require("./Column"));
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 propTypes = {
align: _propTypes["default"].oneOf(['left', 'center', 'right']),
verticalAlign: _propTypes["default"].oneOf(['top', 'middle', 'bottom']),
className: _propTypes["default"].string,
classPrefix: _propTypes["default"].string,
dataKey: _propTypes["default"].string,
isHeaderCell: _propTypes["default"].bool,
width: _propTypes["default"].number,
height: _propTypes["default"].oneOfType([_propTypes["default"].number, _propTypes["default"].func]),
left: _propTypes["default"].number,
headerHeight: _propTypes["default"].number,
style: _propTypes["default"].object,
firstColumn: _propTypes["default"].bool,
lastColumn: _propTypes["default"].bool,
hasChildren: _propTypes["default"].bool,
children: _propTypes["default"].any,
rowKey: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
rowIndex: _propTypes["default"].number,
rowData: _propTypes["default"].object,
depth: _propTypes["default"].number,
onTreeToggle: _propTypes["default"].func,
renderTreeToggle: _propTypes["default"].func,
renderCell: _propTypes["default"].func,
wordWrap: _propTypes["default"].bool,
hidden: _propTypes["default"].bool,
treeCol: _propTypes["default"].bool,
expanded: _propTypes["default"].bool,
groupHeader: _propTypes["default"].node,
groupCount: _propTypes["default"].number,
isDragging: _propTypes["default"].bool
};
exports.propTypes = propTypes;
var Cell =
/*#__PURE__*/
function (_React$PureComponent) {
(0, _inherits2["default"])(Cell, _React$PureComponent);
var _super = _createSuper(Cell);
function Cell() {
var _this;
(0, _classCallCheck2["default"])(this, Cell);
_this = _super.apply(this, arguments); // @ts-ignore
_this.addPrefix = function (name) {
return (0, _utils.prefix)(_this.props.classPrefix)(name);
};
_this.handleExpandClick = function (event) {
var _this$props$onTreeTog, _this$props2;
var _this$props = _this.props,
rowKey = _this$props.rowKey,
rowIndex = _this$props.rowIndex,
rowData = _this$props.rowData;
(_this$props$onTreeTog = (_this$props2 = _this.props).onTreeToggle) === null || _this$props$onTreeTog === void 0 ? void 0 : _this$props$onTreeTog.call(_this$props2, rowKey, rowIndex, rowData, event);
};
return _this;
}
(0, _createClass2["default"])(Cell, [{
key: "isTreeCol",
value: function isTreeCol() {
var _this$props3 = this.props,
treeCol = _this$props3.treeCol,
firstColumn = _this$props3.firstColumn;
var _this$context = this.context,
hasCustomTreeCol = _this$context.hasCustomTreeCol,
isTree = _this$context.isTree;
if (treeCol) {
return true;
}
if (!hasCustomTreeCol && firstColumn && isTree) {
return true;
}
return false;
}
}, {
key: "getHeight",
value: function getHeight() {
var _this$props4 = this.props,
height = _this$props4.height,
rowData = _this$props4.rowData; // @ts-ignore
return typeof height === 'function' ? height(rowData) : height;
}
}, {
key: "renderTreeNodeExpandIcon",
value: function renderTreeNodeExpandIcon() {
var _this$props5 = this.props,
rowData = _this$props5.rowData,
renderTreeToggle = _this$props5.renderTreeToggle,
hasChildren = _this$props5.hasChildren,
expanded = _this$props5.expanded;
var expandButton = React.createElement("i", {
className: this.addPrefix('expand-icon icon')
});
if (this.isTreeCol() && hasChildren) {
return React.createElement("span", {
role: "button",
tabIndex: -1,
className: this.addPrefix('expand-wrapper'),
onClick: this.handleExpandClick
}, renderTreeToggle ? renderTreeToggle(expandButton, rowData, expanded) : expandButton);
}
return null;
}
}, {
key: "render",
value: function render() {
var _classNames;
var _this$props6 = this.props,
width = _this$props6.width,
left = _this$props6.left,
style = _this$props6.style,
className = _this$props6.className,
firstColumn = _this$props6.firstColumn,
lastColumn = _this$props6.lastColumn,
isHeaderCell = _this$props6.isHeaderCell,
headerHeight = _this$props6.headerHeight,
align = _this$props6.align,
children = _this$props6.children,
rowData = _this$props6.rowData,
dataKey = _this$props6.dataKey,
rowIndex = _this$props6.rowIndex,
renderCell = _this$props6.renderCell,
hidden = _this$props6.hidden,
wordWrap = _this$props6.wordWrap,
classPrefix = _this$props6.classPrefix,
depth = _this$props6.depth,
verticalAlign = _this$props6.verticalAlign,
expanded = _this$props6.expanded,
onClick = _this$props6.onClick,
onCell = _this$props6.onCell,
rowSpan = _this$props6.rowSpan,
fixed = _this$props6.fixed,
rest = (0, _objectWithoutProperties2["default"])(_this$props6, ["width", "left", "style", "className", "firstColumn", "lastColumn", "isHeaderCell", "headerHeight", "align", "children", "rowData", "dataKey", "rowIndex", "renderCell", "hidden", "wordWrap", "classPrefix", "depth", "verticalAlign", "expanded", "onClick", "onCell", "rowSpan", "fixed"]);
var tableStore = this.context.tableStore;
var cellExternalProps = (typeof onCell === 'function' ? onCell({
rowData: rowData,
dataKey: dataKey,
rowIndex: rowIndex
}) : {}) || {};
var cellHidden = hidden || cellExternalProps.hidden;
var cellRowSpan = rowSpan || cellExternalProps.rowSpan;
if (cellHidden || cellRowSpan === 0) {
if (!isHeaderCell && rowData && cellRowSpan === 0 && fixed) {
(0, _mobx.runInAction)(function () {
tableStore.rowZIndex.push(rowIndex);
});
}
return null;
}
var classes = (0, _classnames["default"])(classPrefix, className, cellExternalProps.className, (_classNames = {}, (0, _defineProperty2["default"])(_classNames, this.addPrefix('expanded'), expanded && this.isTreeCol()), (0, _defineProperty2["default"])(_classNames, this.addPrefix('first'), firstColumn), (0, _defineProperty2["default"])(_classNames, this.addPrefix('last'), lastColumn), _classNames));
var rtl = this.context.rtl;
var nextHeight = isHeaderCell ? headerHeight : this.getHeight();
if (cellExternalProps.rowSpan) {
nextHeight = cellExternalProps.rowSpan * (nextHeight || 1);
}
var styles = (0, _objectSpread3["default"])({}, style, {}, cellExternalProps.style, (0, _defineProperty2["default"])({
width: width,
height: nextHeight,
zIndex: depth
}, rtl ? 'right' : 'left', left)); //By moving style from cell content to Cell, it breaks UI behaviours.
// for example, check box are not showing in the middle of the cell anymore.
var contentStyles = (0, _defineProperty2["default"])({
width: width,
height: nextHeight,
textAlign: align
}, rtl ? 'paddingRight' : 'paddingLeft', this.isTreeCol() ? depth * _constants.LAYER_WIDTH + 10 : null);
if (verticalAlign) {
contentStyles.display = 'table-cell';
contentStyles.verticalAlign = verticalAlign;
} // @ts-ignore
var cellContent = (0, _utils.isNullOrUndefined)(children) && rowData ? rowData[dataKey] : children;
if (typeof children === 'function') {
var getChildren = children;
cellContent = getChildren(rowData, rowIndex);
} // fix unable to get propTypes after gatsby is compiled
var unhandledProps = (0, _utils.getUnhandledProps)(propTypes, (0, _utils.getUnhandledProps)(_Column["default"].propTypes, rest));
var cell = renderCell ? renderCell(cellContent) : cellContent;
var searchText = tableStore.searchText,
highlightRowIndexs = tableStore.highlightRowIndexs;
if ((0, _isNumber["default"])(cell)) cell = String(cell);
if ((0, _isString["default"])(cell) && searchText) {
var index = cell.indexOf(searchText);
var beforeStr = cell.substr(0, index);
var afterStr = cell.substr(index + searchText.length);
if (index > -1) {
highlightRowIndexs.push(rowIndex);
}
cell = index > -1 ? React.createElement("span", null, beforeStr, React.createElement("span", {
className: this.addPrefix('letter-highlight')
}, searchText), afterStr) : React.createElement("span", null, cell);
}
var content = wordWrap ? React.createElement("div", {
className: this.addPrefix('wrap')
}, this.renderTreeNodeExpandIcon(), cell) : React.createElement(React.Fragment, null, this.renderTreeNodeExpandIcon(), cell);
return React.createElement("div", (0, _extends2["default"])({
role: isHeaderCell ? 'columnheader' : 'gridcell'
}, unhandledProps, {
onClick: onClick,
className: classes,
style: styles
}), React.createElement("div", {
className: this.addPrefix('content'),
style: contentStyles
}, content));
}
}], [{
key: "contextType",
get: function get() {
return _TableContext["default"];
}
}]);
return Cell;
}(React.PureComponent);
Cell.propTypes = propTypes;
Cell.defaultProps = {
classPrefix: (0, _utils.defaultClassPrefix)('performance-table-cell'),
headerHeight: 36,
depth: 0,
height: 36,
width: 0,
left: 0
};
var _default = Cell;
exports["default"] = _default;
//# sourceMappingURL=Cell.js.map