UNPKG

zoapp-ui

Version:

Javascript ES7 React UI Material Components extensions

269 lines (228 loc) 8.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = undefined; var _objectWithoutProperties2 = require("babel-runtime/helpers/objectWithoutProperties"); var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2); var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require("babel-runtime/helpers/createClass"); var _createClass3 = _interopRequireDefault(_createClass2); var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require("babel-runtime/helpers/inherits"); var _inherits3 = _interopRequireDefault(_inherits2); var _dec, _dec2, _class; /** * Copyright (c) 2015-present, CWB SAS * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ var _react = require("react"); var _react2 = _interopRequireDefault(_react); var _propTypes = require("prop-types"); var _propTypes2 = _interopRequireDefault(_propTypes); var _reactDnd = require("react-dnd"); var _zrmc = require("zrmc"); var _zrmc2 = _interopRequireDefault(_zrmc); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var MDC_LISTITEM = "mdc-list-item"; var itemSource = { beginDrag: function beginDrag(props) { return { id: props.id, index: props.index }; } }; var itemTarget = { drop: function drop(props, monitor) { var dragIndex = monitor.getItem().index; var dropIndex = props.index; // console.log("WIP", `ListDragItem.drop ${dragIndex} / ${dropIndex}`); if (dragIndex !== dropIndex && props.onDrop) { props.onDrop(dragIndex, dropIndex); } }, hover: function hover(props, monitor, component) { var item = monitor.getItem(); var dragIndex = item.index; var hoverIndex = props.index; // Don't replace items with themselves if (dragIndex === hoverIndex || !component || !component.ref) { return; } // Determine rectangle on screen var hoverBoundingRect = component.ref.getBoundingClientRect(); // Get vertical middle var hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2; // Determine mouse position var clientOffset = monitor.getClientOffset(); // Get pixels to the top var hoverClientY = clientOffset.y - hoverBoundingRect.top; // Only perform the move when the mouse has crossed half of the items height // When dragging downwards, only move when the cursor is below 50% // When dragging upwards, only move when the cursor is above 50% // Dragging downwards if (dragIndex < hoverIndex && hoverClientY < hoverMiddleY) { return; } // Dragging upwards if (dragIndex > hoverIndex && hoverClientY > hoverMiddleY) { return; } // Time to actually perform the action if (props.onMove) { if (props.onMove(dragIndex, hoverIndex)) { // Note: we're mutating the monitor item here! // Generally it's better to avoid mutations, // but it's good here for the sake of performance // to avoid expensive index searches. item.index = hoverIndex; } } } }; var ListDragItem = (_dec = (0, _reactDnd.DropTarget)("item", itemTarget, function (connect) { return { connectDropTarget: connect.dropTarget() }; }), _dec2 = (0, _reactDnd.DragSource)("item", itemSource, function (connect, monitor) { return { connectDragSource: connect.dragSource(), isDragging: monitor.isDragging() }; }), _dec(_class = _dec2(_class = function (_Component) { (0, _inherits3.default)(ListDragItem, _Component); function ListDragItem() { (0, _classCallCheck3.default)(this, ListDragItem); return (0, _possibleConstructorReturn3.default)(this, (ListDragItem.__proto__ || Object.getPrototypeOf(ListDragItem)).apply(this, arguments)); } (0, _createClass3.default)(ListDragItem, [{ key: "render", value: function render() { var _props = this.props, connectDragSource = _props.connectDragSource, connectDropTarget = _props.connectDropTarget, children = _props.children, type = _props.type, icon = _props.icon, activated = _props.activated, imgSrc = _props.imgSrc, imgSize = _props.imgSize, imgLabel = _props.imgLabel, secondaryText = _props.secondaryText, href = _props.href, onClick = _props.onClick, otherProps = (0, _objectWithoutProperties3.default)(_props, ["connectDragSource", "connectDropTarget", "children", "type", "icon", "activated", "imgSrc", "imgSize", "imgLabel", "secondaryText", "href", "onClick"]); delete otherProps.index; delete otherProps.onMove; delete otherProps.onDrop; delete otherProps.isDragging; var classes = MDC_LISTITEM; var graphic = void 0; if (activated) { classes += " mdc-list-item--activated"; } if (icon) { graphic = _react2.default.createElement(_zrmc.Icon, { className: "mdc-list-item__graphic", "aria-hidden": "true", name: icon }); } else if (imgSrc) { graphic = _react2.default.createElement("img", { className: "mdc-list-item__graphic", src: imgSrc, width: imgSize, height: imgSize, alt: imgLabel }); } var meta = void 0; var text = _react.Children.map(children, function (child) { if (child.props && child.props.mdcElement === "mdc-list-item__meta") { meta = child; return null; } return child; }); if (secondaryText) { text = _react2.default.createElement( "span", { className: "mdc-list-item__text" }, text, _react2.default.createElement( "span", { className: "mdc-list-item__secondary-text" }, secondaryText ) ); } var el = void 0; if (type === "a") { el = _react2.default.createElement( "a", { className: classes, href: href, onClick: onClick }, graphic, text, meta ); } else { el = _react2.default.createElement( "li", { role: "menuitem", className: classes, onKeyPress: function onKeyPress() {}, onClick: onClick }, graphic, text, meta ); } return connectDragSource(connectDropTarget(_zrmc2.default.render(el, otherProps))); } }]); return ListDragItem; }(_react.Component)) || _class) || _class); exports.default = ListDragItem; ListDragItem.defaultProps = { mdcElement: MDC_LISTITEM, children: null, type: "li", activated: false, icon: null, imgSrc: null, imgSize: 56, imgLabel: null, secondaryText: null, href: null, onMove: null, onDrop: null, connectDragSource: null, connectDropTarget: null, isDragging: false }; ListDragItem.propTypes = { mdcElement: _propTypes2.default.string, children: _propTypes2.default.node, type: _propTypes2.default.string, activated: _propTypes2.default.bool, icon: _propTypes2.default.string, imgSrc: _propTypes2.default.string, imgSize: _propTypes2.default.number, imgLabel: _propTypes2.default.string, secondaryText: _propTypes2.default.string, href: _propTypes2.default.string, connectDragSource: _propTypes2.default.func, connectDropTarget: _propTypes2.default.func, isDragging: _propTypes2.default.bool, index: _propTypes2.default.number.isRequired, id: _propTypes2.default.string.isRequired, onMove: _propTypes2.default.func, onDrop: _propTypes2.default.func, onClick: _propTypes2.default.func.isRequired };