UNPKG

choerodon-ui

Version:

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

296 lines (234 loc) 11.1 kB
"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 _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _objectSpread3 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2")); 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 _reactDom = _interopRequireDefault(require("react-dom")); var _propTypes = _interopRequireDefault(require("prop-types")); var _classnames = _interopRequireDefault(require("classnames")); var _clamp = _interopRequireDefault(require("lodash/clamp")); var _domLib = require("dom-lib"); var _utils = require("./utils"); var _domFns = require("./utils/domFns"); var _TableContext = _interopRequireDefault(require("./TableContext")); var _constants = require("./constants"); 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 = { height: _propTypes["default"].number, defaultColumnWidth: _propTypes["default"].number, columnLeft: _propTypes["default"].number, columnFixed: _propTypes["default"].oneOfType([_propTypes["default"].bool, _propTypes["default"].oneOf(['left', 'right'])]), className: _propTypes["default"].string, classPrefix: _propTypes["default"].string, minWidth: _propTypes["default"].number, style: _propTypes["default"].object, onColumnResizeStart: _propTypes["default"].func, onColumnResizeEnd: _propTypes["default"].func, onColumnResizeMove: _propTypes["default"].func }; var ColumnResizeHandler = /*#__PURE__*/ function (_React$Component) { (0, _inherits2["default"])(ColumnResizeHandler, _React$Component); var _super = _createSuper(ColumnResizeHandler); function ColumnResizeHandler(props) { var _this; (0, _classCallCheck2["default"])(this, ColumnResizeHandler); _this = _super.call(this, props); _this.columnWidth = 0; _this.cursorDelta = 0; _this.mounted = false; _this.deltaX = 0; _this.touchX = 0; _this.handleDragStart = function (e) { if (e.touches) { var _this$props$onColumnR, _this$props; _this.dragging = true; _this.cursorDelta = 0; var _e$touches$ = e.touches[0], clientX = _e$touches$.clientX, clientY = _e$touches$.clientY; var client = { clientX: clientX, clientY: clientY }; _this.touchX = clientX; (_this$props$onColumnR = (_this$props = _this.props).onColumnResizeStart) === null || _this$props$onColumnR === void 0 ? void 0 : _this$props$onColumnR.call(_this$props, client); } var thisNode = _this.findDOMNode(); var ownerDocument = thisNode.ownerDocument; if (e.type === 'touchstart') e.preventDefault(); if (!_this.mounted) return; (0, _domFns.addEvent)(ownerDocument, 'touchmove', _this.handleDrag); (0, _domFns.addEvent)(ownerDocument, 'touchend', _this.handleDragStop); }; _this.handleDrag = function (event) { if (event.touches) { var x = event.touches[0].clientX; _this.deltaX = x - _this.touchX; _this.touchX = x; _this.onMove(_this.deltaX); } }; _this.handleDragStop = function () { var _this$props$onColumnR2, _this$props2; if (!_this.dragging) return; _this.dragging = false; (_this$props$onColumnR2 = (_this$props2 = _this.props).onColumnResizeEnd) === null || _this$props$onColumnR2 === void 0 ? void 0 : _this$props$onColumnR2.call(_this$props2, _this.columnWidth, _this.cursorDelta); }; _this.onMove = function (deltaX) { if (!_this.isKeyDown && !_this.dragging) { return; } var _this$props3 = _this.props, onColumnResizeMove = _this$props3.onColumnResizeMove, defaultColumnWidth = _this$props3.defaultColumnWidth, columnLeft = _this$props3.columnLeft, columnFixed = _this$props3.columnFixed; var rtl = _this.context.rtl; _this.cursorDelta += deltaX; _this.columnWidth = (0, _clamp["default"])( // @ts-ignore defaultColumnWidth + (rtl ? -_this.cursorDelta : _this.cursorDelta), _this.props.minWidth ? Math.max(_this.props.minWidth, _constants.RESIZE_MIN_WIDTH) : _constants.RESIZE_MIN_WIDTH, 20000); onColumnResizeMove === null || onColumnResizeMove === void 0 ? void 0 : onColumnResizeMove(_this.columnWidth, columnLeft, columnFixed); }; _this.onColumnResizeEnd = function () { var _this$props$onColumnR3, _this$props4, _this$mouseMoveTracke, _this$mouseMoveTracke2; _this.isKeyDown = false; (_this$props$onColumnR3 = (_this$props4 = _this.props).onColumnResizeEnd) === null || _this$props$onColumnR3 === void 0 ? void 0 : _this$props$onColumnR3.call(_this$props4, _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$onColumnR4, _this$props5; _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$onColumnR4 = (_this$props5 = _this.props).onColumnResizeStart) === null || _this$props$onColumnR4 === void 0 ? void 0 : _this$props$onColumnR4.call(_this$props5, client); }; _this.columnWidth = props.defaultColumnWidth || 0; _this.handleRef = React.createRef(); return _this; } (0, _createClass2["default"])(ColumnResizeHandler, [{ key: "componentDidMount", value: function componentDidMount() { this.mounted = true; // Touch handlers must be added with {passive: false} to be cancelable. var thisNode = this.findDOMNode(); if (thisNode) { (0, _domFns.addEvent)(thisNode, 'touchstart', this.handleDragStart, { passive: false }); } } }, { key: "componentWillUnmount", value: function componentWillUnmount() { this.mounted = false; if (this.mouseMoveTracker) { this.mouseMoveTracker.releaseMouseMoves(); this.mouseMoveTracker = null; } var thisNode = this.findDOMNode(); if (thisNode) { var ownerDocument = thisNode.ownerDocument; (0, _domFns.removeEvent)(ownerDocument, 'touchmove', this.handleDrag); (0, _domFns.removeEvent)(ownerDocument, 'touchend', this.handleDragStop); (0, _domFns.removeEvent)(thisNode, 'touchstart', this.handleDragStart, { passive: false }); } } // React Strict Mode compatibility: if `nodeRef` is passed, we will use it instead of trying to find // the underlying DOM node ourselves. See the README for more information. }, { key: "findDOMNode", value: function findDOMNode() { var _this$handleRef; return ((_this$handleRef = this.handleRef) === null || _this$handleRef === void 0 ? void 0 : _this$handleRef.current) || _reactDom["default"].findDOMNode(this); } }, { key: "getMouseMoveTracker", value: function getMouseMoveTracker() { return this.mouseMoveTracker || new _domLib.DOMMouseMoveTracker(this.onMove, this.onColumnResizeEnd, document.body); } }, { key: "render", value: function render() { var _objectSpread2; var _this$props6 = this.props, _this$props6$columnLe = _this$props6.columnLeft, columnLeft = _this$props6$columnLe === void 0 ? 0 : _this$props6$columnLe, classPrefix = _this$props6.classPrefix, height = _this$props6.height, className = _this$props6.className, style = _this$props6.style, columnFixed = _this$props6.columnFixed, rest = (0, _objectWithoutProperties2["default"])(_this$props6, ["columnLeft", "classPrefix", "height", "className", "style", "columnFixed"]); if (columnFixed === 'right') { return null; } var rtl = this.context.rtl; var styles = (0, _objectSpread3["default"])((_objectSpread2 = {}, (0, _defineProperty2["default"])(_objectSpread2, rtl ? 'right' : 'left', this.columnWidth + columnLeft - 2), (0, _defineProperty2["default"])(_objectSpread2, "height", height), _objectSpread2), style); var classes = (0, _classnames["default"])(classPrefix, className); var unhandled = (0, _utils.getUnhandledProps)(propTypes, rest); return React.createElement("div", (0, _extends2["default"])({}, unhandled, { ref: this.handleRef, className: classes, style: styles, onMouseDown: this.onColumnResizeMouseDown, onTouchEnd: this.handleDragStop, role: "button", tabIndex: -1 })); } }]); return ColumnResizeHandler; }(React.Component); ColumnResizeHandler.contextType = _TableContext["default"]; ColumnResizeHandler.propTypes = propTypes; ColumnResizeHandler.defaultProps = { classPrefix: (0, _utils.defaultClassPrefix)('performance-table-column-resize-spanner') }; var _default = ColumnResizeHandler; exports["default"] = _default; //# sourceMappingURL=ColumnResizeHandler.js.map