UNPKG

choerodon-ui

Version:

An enterprise-class UI design language and React-based implementation

183 lines (153 loc) 6.84 kB
import _extends from "@babel/runtime/helpers/extends"; import _defineProperty from "@babel/runtime/helpers/defineProperty"; import _objectSpread from "@babel/runtime/helpers/objectSpread2"; import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties"; import _classCallCheck from "@babel/runtime/helpers/classCallCheck"; import _createClass from "@babel/runtime/helpers/createClass"; import _inherits from "@babel/runtime/helpers/inherits"; import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn"; import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf"; 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 = _getPrototypeOf(Derived), result; if (isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } import * as React from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames'; import clamp from 'lodash/clamp'; import { DOMMouseMoveTracker } from 'dom-lib'; import { defaultClassPrefix, getUnhandledProps } from './utils'; import TableContext from './TableContext'; import { RESIZE_MIN_WIDTH } from './constants'; var ColumnResizeHandler = /*#__PURE__*/ function (_React$Component) { _inherits(ColumnResizeHandler, _React$Component); var _super = _createSuper(ColumnResizeHandler); function ColumnResizeHandler(props) { var _this; _classCallCheck(this, ColumnResizeHandler); _this = _super.call(this, props); _this.columnWidth = 0; _this.cursorDelta = 0; _this.onMove = function (deltaX) { if (!_this.isKeyDown) { return; } var _this$props = _this.props, onColumnResizeMove = _this$props.onColumnResizeMove, defaultColumnWidth = _this$props.defaultColumnWidth, columnLeft = _this$props.columnLeft, columnFixed = _this$props.columnFixed; var rtl = _this.context.rtl; _this.cursorDelta += deltaX; _this.columnWidth = clamp( // @ts-ignore defaultColumnWidth + (rtl ? -_this.cursorDelta : _this.cursorDelta), _this.props.minWidth ? Math.max(_this.props.minWidth, RESIZE_MIN_WIDTH) : RESIZE_MIN_WIDTH, 20000); onColumnResizeMove === null || onColumnResizeMove === void 0 ? void 0 : onColumnResizeMove(_this.columnWidth, columnLeft, columnFixed); }; _this.onColumnResizeEnd = function () { var _this$props$onColumnR, _this$props2, _this$mouseMoveTracke, _this$mouseMoveTracke2; _this.isKeyDown = false; (_this$props$onColumnR = (_this$props2 = _this.props).onColumnResizeEnd) === null || _this$props$onColumnR === void 0 ? void 0 : _this$props$onColumnR.call(_this$props2, _this.columnWidth, _this.cursorDelta); (_this$mouseMoveTracke = _this.mouseMoveTracker) === null || _this$mouseMoveTracke === void 0 ? void 0 : (_this$mouseMoveTracke2 = _this$mouseMoveTracke.releaseMouseMoves) === null || _this$mouseMoveTracke2 === void 0 ? void 0 : _this$mouseMoveTracke2.call(_this$mouseMoveTracke); _this.mouseMoveTracker = null; }; _this.onColumnResizeMouseDown = function (event) { var _this$props$onColumnR2, _this$props3; _this.mouseMoveTracker = _this.getMouseMoveTracker(); _this.mouseMoveTracker.captureMouseMoves(event); _this.isKeyDown = true; _this.cursorDelta = 0; var client = { clientX: event.clientX, clientY: event.clientY, preventDefault: Function() }; (_this$props$onColumnR2 = (_this$props3 = _this.props).onColumnResizeStart) === null || _this$props$onColumnR2 === void 0 ? void 0 : _this$props$onColumnR2.call(_this$props3, client); }; _this.columnWidth = props.defaultColumnWidth || 0; return _this; } _createClass(ColumnResizeHandler, [{ key: "componentWillUnmount", value: function componentWillUnmount() { if (this.mouseMoveTracker) { this.mouseMoveTracker.releaseMouseMoves(); this.mouseMoveTracker = null; } } }, { key: "getMouseMoveTracker", value: function getMouseMoveTracker() { return this.mouseMoveTracker || new DOMMouseMoveTracker(this.onMove, this.onColumnResizeEnd, document.body); } }, { key: "render", value: function render() { var _objectSpread2; var _this$props4 = this.props, _this$props4$columnLe = _this$props4.columnLeft, columnLeft = _this$props4$columnLe === void 0 ? 0 : _this$props4$columnLe, classPrefix = _this$props4.classPrefix, height = _this$props4.height, className = _this$props4.className, style = _this$props4.style, columnFixed = _this$props4.columnFixed, rest = _objectWithoutProperties(_this$props4, ["columnLeft", "classPrefix", "height", "className", "style", "columnFixed"]); if (columnFixed === 'right') { return null; } var rtl = this.context.rtl; var styles = _objectSpread((_objectSpread2 = {}, _defineProperty(_objectSpread2, rtl ? 'right' : 'left', this.columnWidth + columnLeft - 2), _defineProperty(_objectSpread2, "height", height), _objectSpread2), style); var classes = classNames(classPrefix, className); var unhandled = getUnhandledProps(ColumnResizeHandler, rest); return React.createElement("div", _extends({}, unhandled, { className: classes, style: styles, onMouseDown: this.onColumnResizeMouseDown, role: "button", tabIndex: -1 })); } }]); return ColumnResizeHandler; }(React.Component); ColumnResizeHandler.contextType = TableContext; ColumnResizeHandler.propTypes = { height: PropTypes.number, defaultColumnWidth: PropTypes.number, columnLeft: PropTypes.number, columnFixed: PropTypes.oneOfType([PropTypes.bool, PropTypes.oneOf(['left', 'right'])]), className: PropTypes.string, classPrefix: PropTypes.string, minWidth: PropTypes.number, style: PropTypes.object, onColumnResizeStart: PropTypes.func, onColumnResizeEnd: PropTypes.func, onColumnResizeMove: PropTypes.func }; ColumnResizeHandler.defaultProps = { classPrefix: defaultClassPrefix('performance-table-column-resize-spanner') }; export default ColumnResizeHandler; //# sourceMappingURL=ColumnResizeHandler.js.map