UNPKG

@6thquake/react-material

Version:

React components that implement Google's Material Design.

199 lines (157 loc) 5.81 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _withStyles = _interopRequireDefault(require("../styles/withStyles")); var _icons = require("@material-ui/icons"); var _reactDndHtml5Backend = _interopRequireDefault(require("react-dnd-html5-backend")); var _reactDnd = require("react-dnd"); /** * @ignore - do not document. */ /* type: position 对于panel中已存在的source 拖拽时会重新定位它的位置 当拖出panel以外时会删除 dragin 从panel外部拖入,源source不变,复制一份 style */ var styles = { position: { display: 'flex', justifyContent: 'center', alignItems: 'center', width: '100%', height: '100%' }, dragin: { display: 'inline-block', padding: '6px' }, isOvered: { opacity: '0.1' } }; var _source = { beginDrag: function beginDrag(props, monitor, component) { console.log('start drag.......'); // Return the data describing the dragged item /* 开始drag时, 如果type==dragin 就会生成新的position source传给dropTarget 如果type === position 就需要传回当前xy定位; */ // 每次begin时 如果有span的class中有MuiTouchRipple 则display none var _ripple = component.decoratedComponentInstance.refs.mytttest.querySelectorAll('span[class^="MuiTouchRipple"]'); if (_ripple.length > 0) { _ripple.forEach(function (element, index, array) { element.style.display = 'none'; }); } var item = {}; if (props.type === 'POSITION') { // 拿到当前node的index var _from = props.index || 0; item.sortFrom = _from; } else if (props.type === 'DRAGIN') { item.component = component.props.children; } return item; }, endDrag: function endDrag(props, monitor, component) { var item = monitor.getItem(); if ((!!item.sortFrom || item.sortFrom === 0) && typeof props.remove === 'function') { props.remove(item.sortFrom); } console.log('end drag.......'); } }; var _target = { hover: function hover(props, monitor, component) { // 当hover的时候改变原数组的排列顺序 // var justComeIn = true; var gi = monitor.getItem(); var from; if (gi) { from = gi.sortFrom; } if (!from && from != 0) { return; } var to = props.index || 0; if (from != to && typeof props.sequence === 'function') { console.log("################# from ".concat(from, " to ").concat(to, " #################")); // const hovered = component.refs.dndwrap.parentElement.getBoundingClientRect(); props.sequence(parseInt(from), parseInt(to), function () { component.hasChanged = true; monitor.getItem().sortFrom = to; }); } // console.log('!!!!!!!!!!') } }; function _dragCollect(connect, monitor) { return { // Call this function inside render() // to let React DnD handle the drag events: connectDragSource: connect.dragSource(), // You can ask the monitor about the current drag state: isDragging: monitor.isDragging() }; } function _dropCollect(connect, monitor) { return { connectDropTarget: connect.dropTarget(), isOver: monitor.isOver({ shallow: true }), // isOverCurrent: monitor.isOver({ shallow: false }), canDrop: monitor.canDrop(), itemType: monitor.getItemType() }; } var _DragSouce = /*#__PURE__*/ function (_Component) { (0, _inherits2.default)(_DragSouce, _Component); function _DragSouce(props) { (0, _classCallCheck2.default)(this, _DragSouce); return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(_DragSouce).call(this, props)); } (0, _createClass2.default)(_DragSouce, [{ key: "render", value: function render() { var _this$props = this.props, connectDragSource = _this$props.connectDragSource, connectDropTarget = _this$props.connectDropTarget, children = _this$props.children, isDragging = _this$props.isDragging, type = _this$props.type, classes = _this$props.classes, isOver = _this$props.isOver; var _style = {}; if (type === 'POSITION' && !!isDragging) {// return null; } return connectDropTarget(connectDragSource(_react.default.createElement("div", { className: "".concat(type === 'POSITION' ? classes.position : classes.dragin, " ").concat(isOver ? classes.isOvered : '') }, _react.default.createElement("div", { ref: 'dndwrap' }, _react.default.createElement("div", { ref: 'mytttest' }, children))))); } }]); return _DragSouce; }(_react.Component); var _mc = (0, _reactDnd.DropTarget)('DRAGANDDROP', _target, _dropCollect)(_DragSouce); var DragSouce = (0, _reactDnd.DragSource)('DRAGANDDROP', _source, _dragCollect)(_mc); var _default = (0, _withStyles.default)(styles, { name: 'RMDragSouce' })(DragSouce); exports.default = _default;