@bigfishtv/cockpit
Version:
136 lines (110 loc) • 4.7 kB
JavaScript
;
exports.__esModule = true;
exports.default = undefined;
var _dec, _class, _class2, _temp;
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _reactImmutableProptypes = require('react-immutable-proptypes');
var _reactImmutableProptypes2 = _interopRequireDefault(_reactImmutableProptypes);
var _reactDnd = require('react-dnd');
var _treeUtils = require('../../utils/treeUtils');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _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; }
/**
* Wrapper for TreeItem being dragged
*/
var TreeDragLayer = (_dec = (0, _reactDnd.DragLayer)(function (monitor) {
return {
item: monitor.getItem(),
itemType: monitor.getItemType(),
initialOffset: monitor.getInitialSourceClientOffset(),
currentOffset: monitor.getSourceClientOffset()
};
}), _dec(_class = (_temp = _class2 = function (_Component) {
_inherits(TreeDragLayer, _Component);
function TreeDragLayer() {
_classCallCheck(this, TreeDragLayer);
var _this = _possibleConstructorReturn(this, _Component.call(this));
_this.state = {
title: '',
count: 0
};
return _this;
}
TreeDragLayer.prototype.componentWillUpdate = function componentWillUpdate(nextProps, nextState) {
if (!this.props.dragging && nextProps.dragging) {
var selectedIds = nextProps.selectedIds,
InflatedTree = nextProps.InflatedTree;
var title = '';
var count = 0;
if (selectedIds.length == 1) {
var item = (0, _treeUtils.getChildByIdImmutable)(selectedIds[0], InflatedTree).toObject();
title = item.title || item.name;
} else if (selectedIds.length > 1) {
var titles = selectedIds.map(function (id) {
var item = (0, _treeUtils.getChildByIdImmutable)(id, InflatedTree).toObject();
return item.title || item.name;
});
count = selectedIds.length;
title = titles.join(', ');
}
this.setState({ title: title, count: count });
}
};
TreeDragLayer.prototype.render = function render() {
var _props = this.props,
initialOffset = _props.initialOffset,
currentOffset = _props.currentOffset,
dragging = _props.dragging;
if (!dragging || !initialOffset || !currentOffset) return null;
var title = this.state.title;
var count = this.state.count;
var transform = 'translate(' + currentOffset.x + 'px, ' + currentOffset.y + 'px)';
var styles = { transform: transform, WebkitTransform: transform };
return _react2.default.createElement(
'div',
{ className: 'tree-overlay' },
_react2.default.createElement(
'div',
{ className: 'tree-node', style: styles },
_react2.default.createElement(
'div',
{ className: 'tree-cell' },
count > 1 && _react2.default.createElement(
'div',
{ className: 'tree-cell-count' },
count
),
_react2.default.createElement(
'div',
{ className: 'tree-cell-title' },
title
)
)
)
);
};
return TreeDragLayer;
}(_react.Component), _class2.propTypes = {
/** disregard - provided by react-dnd */
initialOffset: _propTypes2.default.shape({
x: _propTypes2.default.number.isRequired,
y: _propTypes2.default.number.isRequired
}),
/** disregard - provided by react-dnd */
currentOffset: _propTypes2.default.shape({
x: _propTypes2.default.number.isRequired,
y: _propTypes2.default.number.isRequired
}),
/** if item is being dragged */
dragging: _propTypes2.default.bool,
/** list of ids for selected items */
selectedIds: _propTypes2.default.array,
/** immutable tree, list of maps of list of maps etc. */
InflatedTree: _reactImmutableProptypes2.default.listOf(_reactImmutableProptypes2.default.map)
}, _temp)) || _class);
exports.default = TreeDragLayer;