UNPKG

4.92 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, '__esModule', {
4 value: true
5});
6
7var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
8
9var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
10
11function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
12
13function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
14
15function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
16
17var _react = require('react');
18
19var _react2 = _interopRequireDefault(_react);
20
21var _reactDom = require('react-dom');
22
23var _reactDom2 = _interopRequireDefault(_reactDom);
24
25var _reactDnd = require('react-dnd');
26
27var _ItemTypes = require('./ItemTypes');
28
29var _ItemTypes2 = _interopRequireDefault(_ItemTypes);
30
31var _Tab = require('./Tab');
32
33var _Tab2 = _interopRequireDefault(_Tab);
34
35var tabSource = {
36 beginDrag: function beginDrag(props) {
37 props.beginDrag();
38 return {
39 tabKey: props.tabKey
40 };
41 }
42};
43
44// reference from https://github.com/gaearon/react-dnd/tree/master/examples/04%20Sortable/Simple
45var tabTarget = {
46 hover: function hover(props, monitor, component) {
47 var dragIndex = monitor.getItem().tabKey;
48 var hoverIndex = props.tabKey;
49
50 // Don't replace items with themselves
51 if (dragIndex === hoverIndex) {
52 return;
53 }
54
55 // Determine rectangle on screen
56 var hoverBoundingRect = _reactDom2['default'].findDOMNode(component).getBoundingClientRect();
57
58 // Get horizontal middle
59 var hoverMiddleX = (hoverBoundingRect.right - hoverBoundingRect.left) / 2;
60
61 // Determine mouse position
62 var clientOffset = monitor.getClientOffset();
63
64 var hoverClientX = hoverBoundingRect.right - clientOffset.x;
65
66 // Dragging left
67 if (dragIndex < hoverIndex && hoverClientX < hoverMiddleX) {
68 return;
69 }
70
71 // Dragging right
72 if (dragIndex > hoverIndex && hoverClientX > hoverMiddleX) {
73 return;
74 }
75
76 props.moveTab(dragIndex, hoverIndex);
77 // change the dragging tab index
78 monitor.getItem().tabKey = hoverIndex;
79 }
80};
81
82var DragTab = (function (_React$Component) {
83 _inherits(DragTab, _React$Component);
84
85 function DragTab(props) {
86 _classCallCheck(this, _DragTab);
87
88 _get(Object.getPrototypeOf(_DragTab.prototype), 'constructor', this).call(this, props);
89 }
90
91 _createClass(DragTab, [{
92 key: 'render',
93 value: function render() {
94 var _props = this.props;
95 var connectDragSource = _props.connectDragSource;
96 var connectDropTarget = _props.connectDropTarget;
97
98 return connectDragSource(connectDropTarget(_react2['default'].createElement(
99 'span',
100 null,
101 _react2['default'].createElement(_Tab2['default'], this.props)
102 )));
103 }
104 }]);
105
106 var _DragTab = DragTab;
107 DragTab = (0, _reactDnd.DragSource)(_ItemTypes2['default'].TAB, tabSource, function (connect, monitor) {
108 return {
109 connectDragSource: connect.dragSource(),
110 isDragging: monitor.isDragging()
111 };
112 })(DragTab) || DragTab;
113 DragTab = (0, _reactDnd.DropTarget)(_ItemTypes2['default'].TAB, tabTarget, function (connect) {
114 return {
115 connectDropTarget: connect.dropTarget()
116 };
117 })(DragTab) || DragTab;
118 return DragTab;
119})(_react2['default'].Component);
120
121exports['default'] = DragTab;
122module.exports = exports['default'];
\No newline at end of file