choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
309 lines (256 loc) • 11.6 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 _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
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 React = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _classnames = _interopRequireDefault(require("classnames"));
var _noop = _interopRequireDefault(require("lodash/noop"));
var _ColumnResizeHandler = _interopRequireDefault(require("./ColumnResizeHandler"));
var _utils = require("./utils");
var _Cell = _interopRequireDefault(require("./Cell"));
var _TableContext = _interopRequireDefault(require("./TableContext"));
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 = {
index: _propTypes["default"].number,
sortColumn: _propTypes["default"].string,
dataIndex: _propTypes["default"].string,
sortType: _propTypes["default"].oneOf(['desc', 'asc']),
sortable: _propTypes["default"].bool,
resizable: _propTypes["default"].bool,
minWidth: _propTypes["default"].number,
onColumnResizeStart: _propTypes["default"].func,
onColumnResizeEnd: _propTypes["default"].func,
onResize: _propTypes["default"].func,
onColumnResizeMove: _propTypes["default"].func,
onSortColumn: _propTypes["default"].func,
flexGrow: _propTypes["default"].number,
fixed: _propTypes["default"].oneOfType([_propTypes["default"].bool, _propTypes["default"].oneOf(['left', 'right'])]),
children: _propTypes["default"].node,
onMouseEnterHandler: _propTypes["default"].func,
onMouseLeaveHandler: _propTypes["default"].func
};
var HeaderCell =
/*#__PURE__*/
function (_React$PureComponent) {
(0, _inherits2["default"])(HeaderCell, _React$PureComponent);
var _super = _createSuper(HeaderCell);
function HeaderCell(props) {
var _this;
(0, _classCallCheck2["default"])(this, HeaderCell);
_this = _super.call(this, props);
_this.handleColumnResizeStart = function () {
var _this$props = _this.props,
_this$props$left = _this$props.left,
left = _this$props$left === void 0 ? 0 : _this$props$left,
fixed = _this$props.fixed,
onColumnResizeStart = _this$props.onColumnResizeStart,
_this$props$resizeLef = _this$props.resizeLeft,
resizeLeft = _this$props$resizeLef === void 0 ? 0 : _this$props$resizeLef;
onColumnResizeStart === null || onColumnResizeStart === void 0 ? void 0 : onColumnResizeStart(_this.state.columnWidth, left + resizeLeft, !!fixed);
};
_this.handleColumnResizeMove = function (width) {
var left = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
var fixed = arguments.length > 2 ? arguments[2] : undefined;
var _this$props2 = _this.props,
_this$props2$onColumn = _this$props2.onColumnResizeMove,
onColumnResizeMove = _this$props2$onColumn === void 0 ? _noop["default"] : _this$props2$onColumn,
_this$props2$resizeLe = _this$props2.resizeLeft,
resizeLeft = _this$props2$resizeLe === void 0 ? 0 : _this$props2$resizeLe;
onColumnResizeMove(width, left + resizeLeft, fixed);
};
_this.handleColumnResizeEnd = function (columnWidth, cursorDelta) {
var _this$props3 = _this.props,
dataKey = _this$props3.dataKey,
index = _this$props3.index,
onColumnResizeEnd = _this$props3.onColumnResizeEnd,
onResize = _this$props3.onResize;
_this.setState({
columnWidth: columnWidth
});
onColumnResizeEnd === null || onColumnResizeEnd === void 0 ? void 0 : onColumnResizeEnd(columnWidth, cursorDelta, dataKey, index);
onResize === null || onResize === void 0 ? void 0 : onResize(columnWidth, dataKey);
};
_this.handleClick = function () {
if (_this.props.sortable) {
var _this$props$onSortCol, _this$props4;
(_this$props$onSortCol = (_this$props4 = _this.props).onSortColumn) === null || _this$props$onSortCol === void 0 ? void 0 : _this$props$onSortCol.call(_this$props4, _this.props.dataKey);
}
};
_this.handleShowMouseArea = function (left) {
var _this$props5 = _this.props,
_this$props5$onMouseE = _this$props5.onMouseEnterHandler,
onMouseEnterHandler = _this$props5$onMouseE === void 0 ? _noop["default"] : _this$props5$onMouseE,
fixed = _this$props5.fixed;
onMouseEnterHandler(left, fixed);
}; // @ts-ignore
_this.addPrefix = function (name) {
return (0, _utils.prefix)(_this.props.classPrefix)(name);
};
_this.state = {
width: props.width,
flexGrow: props.flexGrow,
columnWidth: (0, _utils.isNullOrUndefined)(props.flexGrow) ? props.width : 0
};
return _this;
}
(0, _createClass2["default"])(HeaderCell, [{
key: "renderResizeSpanner",
value: function renderResizeSpanner() {
var _this$props6 = this.props,
resizable = _this$props6.resizable,
_this$props6$left = _this$props6.left,
left = _this$props6$left === void 0 ? 0 : _this$props6$left,
onMouseLeaveHandler = _this$props6.onMouseLeaveHandler,
fixed = _this$props6.fixed,
headerHeight = _this$props6.headerHeight,
minWidth = _this$props6.minWidth,
groupCount = _this$props6.groupCount,
children = _this$props6.children,
style = _this$props6.style;
var columnWidth = this.state.columnWidth;
if (!resizable) {
return null;
}
var defaultColumnWidth = columnWidth; // 处理组合列第一列拖拽柄定位问题
if (groupCount && groupCount > 1) {
defaultColumnWidth = children === null || children === void 0 ? void 0 : children.props.children[0].props.width;
}
return React.createElement(_ColumnResizeHandler["default"], {
defaultColumnWidth: defaultColumnWidth,
key: columnWidth,
columnLeft: left,
columnFixed: fixed,
height: headerHeight ? headerHeight - 1 : undefined,
minWidth: minWidth,
style: {
top: style ? style.top : 0
},
onColumnResizeMove: this.handleColumnResizeMove,
onColumnResizeStart: this.handleColumnResizeStart,
onColumnResizeEnd: this.handleColumnResizeEnd,
onMouseEnterHandler: this.handleShowMouseArea,
onMouseLeaveHandler: onMouseLeaveHandler
});
}
}, {
key: "renderSortColumn",
value: function renderSortColumn() {
var _this$props7 = this.props,
sortable = _this$props7.sortable,
sortColumn = _this$props7.sortColumn,
_this$props7$sortType = _this$props7.sortType,
sortType = _this$props7$sortType === void 0 ? '' : _this$props7$sortType,
dataKey = _this$props7.dataKey,
groupHeader = _this$props7.groupHeader;
if (sortable && !groupHeader) {
var iconClasses = (0, _classnames["default"])(this.addPrefix('icon-sort icon'), (0, _defineProperty2["default"])({}, this.addPrefix("icon-sort-".concat(sortType)), sortColumn === dataKey));
return React.createElement("span", {
className: this.addPrefix('sort-wrapper')
}, React.createElement("i", {
className: iconClasses
}));
}
return null;
}
}, {
key: "render",
value: function render() {
var _this$props8 = this.props,
className = _this$props8.className,
width = _this$props8.width,
dataKey = _this$props8.dataKey,
headerHeight = _this$props8.headerHeight,
children = _this$props8.children,
left = _this$props8.left,
sortable = _this$props8.sortable,
classPrefix = _this$props8.classPrefix,
sortColumn = _this$props8.sortColumn,
sortType = _this$props8.sortType,
groupHeader = _this$props8.groupHeader,
rest = (0, _objectWithoutProperties2["default"])(_this$props8, ["className", "width", "dataKey", "headerHeight", "children", "left", "sortable", "classPrefix", "sortColumn", "sortType", "groupHeader"]);
var classes = (0, _classnames["default"])(classPrefix, className, (0, _defineProperty2["default"])({}, this.addPrefix('sortable'), sortable));
var unhandledProps = (0, _utils.getUnhandledProps)(propTypes, rest);
var ariaSort;
if (sortColumn === dataKey) {
ariaSort = 'other';
if (sortType === 'asc') {
ariaSort = 'ascending';
} else if (sortType === 'desc') {
ariaSort = 'descending';
}
}
return React.createElement("div", {
className: classes
}, React.createElement(_Cell["default"], (0, _extends2["default"])({
"aria-sort": ariaSort
}, unhandledProps, {
width: width,
dataKey: dataKey,
left: left,
headerHeight: headerHeight,
isHeaderCell: true,
onClick: !groupHeader ? this.handleClick : null
}), children, this.renderSortColumn()), this.renderResizeSpanner());
}
}], [{
key: "getDerivedStateFromProps",
value: function getDerivedStateFromProps(nextProps, prevState) {
if (nextProps.width !== prevState.width || nextProps.flexGrow !== prevState.flexGrow) {
return {
width: nextProps.width,
flexGrow: nextProps.flexGrow,
columnWidth: (0, _utils.isNullOrUndefined)(nextProps.flexGrow) ? nextProps.width : 0
};
}
return null;
}
}, {
key: "contextType",
get: function get() {
return _TableContext["default"];
}
}]);
return HeaderCell;
}(React.PureComponent);
HeaderCell.propTypes = propTypes;
HeaderCell.defaultProps = {
classPrefix: (0, _utils.defaultClassPrefix)('performance-table-cell-header')
};
var _default = HeaderCell;
exports["default"] = _default;
//# sourceMappingURL=HeaderCell.js.map