UNPKG

6.27 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 _classnames = require('classnames');
26
27var _classnames2 = _interopRequireDefault(_classnames);
28
29var _reactTappable = require('react-tappable');
30
31var _reactTappable2 = _interopRequireDefault(_reactTappable);
32
33var _ItemTypes = require('./ItemTypes');
34
35var _ItemTypes2 = _interopRequireDefault(_ItemTypes);
36
37var _reactDnd = require('react-dnd');
38
39var tabSource = {
40 beginDrag: function beginDrag(props) {
41 props.beginDrag();
42 return {
43 tabKey: props.tabKey
44 };
45 }
46};
47
48// reference from https://github.com/gaearon/react-dnd/tree/master/examples/04%20Sortable/Simple
49var tabTarget = {
50 hover: function hover(props, monitor, component) {
51 var dragIndex = monitor.getItem().tabKey;
52 var hoverIndex = props.tabKey;
53
54 // Don't replace items with themselves
55 if (dragIndex === hoverIndex) {
56 return;
57 }
58
59 // Determine rectangle on screen
60 var hoverBoundingRect = _reactDom2['default'].findDOMNode(component).getBoundingClientRect();
61
62 // Get horizontal middle
63 var hoverMiddleX = (hoverBoundingRect.right - hoverBoundingRect.left) / 2;
64
65 // Determine mouse position
66 var clientOffset = monitor.getClientOffset();
67
68 var hoverClientX = hoverBoundingRect.right - clientOffset.x;
69
70 // Dragging left
71 if (dragIndex < hoverIndex && hoverClientX < hoverMiddleX) {
72 return;
73 }
74
75 // Dragging right
76 if (dragIndex > hoverIndex && hoverClientX > hoverMiddleX) {
77 return;
78 }
79
80 props.moveTab(dragIndex, hoverIndex);
81 // change the dragging tab index
82 monitor.getItem().tabKey = hoverIndex;
83 }
84};
85
86var Tab = (function (_React$Component) {
87 _inherits(Tab, _React$Component);
88
89 function Tab(props) {
90 _classCallCheck(this, _Tab);
91
92 _get(Object.getPrototypeOf(_Tab.prototype), 'constructor', this).call(this, props);
93 this.handleTabDeleteButton = this.handleTabDeleteButton.bind(this);
94 this.clickTab = this.clickTab.bind(this);
95 }
96
97 _createClass(Tab, [{
98 key: 'handleTabDeleteButton',
99 value: function handleTabDeleteButton(e) {
100 e.stopPropagation(); //prevent trigger clickTab function
101 this.props.handleTabDeleteButton(this.props.tabKey);
102 }
103 }, {
104 key: 'clickTab',
105 value: function clickTab() {
106 this.props.handleTabClick(this.props.tabKey);
107 }
108 }, {
109 key: 'render',
110 value: function render() {
111 var tabClass = undefined,
112 closeButtonStyle = undefined;
113 var _props = this.props;
114 var connectDragSource = _props.connectDragSource;
115 var connectDropTarget = _props.connectDropTarget;
116
117 if (this.props.status === 'active') {
118 tabClass = (0, _classnames2['default'])(this.props.style + 'tab', 'active');
119 } else {
120 tabClass = (0, _classnames2['default'])(this.props.style + 'tab');
121 }
122
123 // only show the delete button when it's active
124 if (this.props.tabDeleteButton && this.props.status === "active") {
125 closeButtonStyle = { display: 'inline-block' };
126 } else {
127 closeButtonStyle = { display: 'none' };
128 }
129
130 return connectDragSource(connectDropTarget(_react2['default'].createElement(
131 'div',
132 { className: tabClass, onClick: this.clickTab },
133 this.props.title,
134 _react2['default'].createElement(
135 'div',
136 { className: 'tabtab__folder__circCont', style: closeButtonStyle },
137 _react2['default'].createElement('div', { className: 'tabtab__folder__circle', onClick: this.handleTabDeleteButton })
138 )
139 )));
140 }
141 }]);
142
143 var _Tab = Tab;
144 Tab = (0, _reactDnd.DragSource)(_ItemTypes2['default'].TAB, tabSource, function (connect, monitor) {
145 return {
146 connectDragSource: connect.dragSource(),
147 isDragging: monitor.isDragging()
148 };
149 })(Tab) || Tab;
150 Tab = (0, _reactDnd.DropTarget)(_ItemTypes2['default'].TAB, tabTarget, function (connect) {
151 return {
152 connectDropTarget: connect.dropTarget()
153 };
154 })(Tab) || Tab;
155 return Tab;
156})(_react2['default'].Component);
157
158exports['default'] = Tab;
159module.exports = exports['default'];
\No newline at end of file