UNPKG

fixed-data-table-one.com

Version:

A React table component designed to allow presenting thousands of rows of data.

141 lines (114 loc) 4.43 kB
'use strict'; var _DOMMouseMoveTracker = require('./DOMMouseMoveTracker'); var _DOMMouseMoveTracker2 = _interopRequireDefault(_DOMMouseMoveTracker); var _Locale = require('./Locale'); var _Locale2 = _interopRequireDefault(_Locale); var _React = require('./React'); var _React2 = _interopRequireDefault(_React); var _createReactClass = require('create-react-class'); var _createReactClass2 = _interopRequireDefault(_createReactClass); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _ReactComponentWithPureRenderMixin = require('./ReactComponentWithPureRenderMixin'); var _ReactComponentWithPureRenderMixin2 = _interopRequireDefault(_ReactComponentWithPureRenderMixin); var _clamp = require('./clamp'); var _clamp2 = _interopRequireDefault(_clamp); var _cx = require('./cx'); var _cx2 = _interopRequireDefault(_cx); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Copyright Schrodinger, LLC * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * * This is to be used with the FixedDataTable. It is a header icon * that allows you to reorder the corresponding column. * * @providesModule FixedDataTableColumnReorderHandle * @typechecks */ var FixedDataTableColumnReorderHandle = (0, _createReactClass2.default)({ displayName: 'FixedDataTableColumnReorderHandle', mixins: [_ReactComponentWithPureRenderMixin2.default], propTypes: { /** * When resizing is complete this is called. */ onColumnReorderEnd: _propTypes2.default.func, /** * Column key for the column being reordered. */ columnKey: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]) }, getInitialState: function getInitialState() /*object*/{ return { dragDistance: 0 }; }, componentWillReceiveProps: function componentWillReceiveProps( /*object*/newProps) {}, componentWillUnmount: function componentWillUnmount() { if (this._mouseMoveTracker) { cancelAnimationFrame(this.frameId); this.frameId = null; this._mouseMoveTracker.releaseMouseMoves(); this._mouseMoveTracker = null; } }, render: function render() /*object*/{ var style = { height: this.props.height }; return _React2.default.createElement('div', { className: (0, _cx2.default)({ 'fixedDataTableCellLayout/columnReorderContainer': true, 'fixedDataTableCellLayout/columnReorderContainer/active': false }), onMouseDown: this.onMouseDown, style: style }); }, onMouseDown: function onMouseDown(event) { var targetRect = event.target.getBoundingClientRect(); var mouseLocationInElement = event.clientX - targetRect.offsetLeft; var mouseLocationInRelationToColumnGroup = mouseLocationInElement + event.target.parentElement.offsetLeft; this._mouseMoveTracker = new _DOMMouseMoveTracker2.default(this._onMove, this._onColumnReorderEnd, document.body); this._mouseMoveTracker.captureMouseMoves(event); this.setState({ dragDistance: 0 }); this.props.onMouseDown({ columnKey: this.props.columnKey, mouseLocation: { dragDistance: 0, inElement: mouseLocationInElement, inColumnGroup: mouseLocationInRelationToColumnGroup } }); this._distance = 0; this._animating = true; this.frameId = requestAnimationFrame(this._updateState); }, _onMove: function _onMove( /*number*/deltaX) { this._distance = this.state.dragDistance + deltaX; }, _onColumnReorderEnd: function _onColumnReorderEnd( /*boolean*/cancelReorder) { this._animating = false; cancelAnimationFrame(this.frameId); this.frameId = null; this._mouseMoveTracker.releaseMouseMoves(); this.props.columnReorderingData.cancelReorder = cancelReorder; this.props.onColumnReorderEnd(); }, _updateState: function _updateState() { if (this._animating) { this.frameId = requestAnimationFrame(this._updateState); } this.setState({ dragDistance: this._distance }); this.props.onColumnReorderMove(this._distance); } }); module.exports = FixedDataTableColumnReorderHandle;