react-dnd-mouse-backend
Version:
A lightweight attempt for solving the whole HTML5 DnD - svg tags compability issue
50 lines (44 loc) • 1.19 kB
JavaScript
import React, { PropTypes } from 'react'
import ItemTypes from '../ItemTypes'
import { DragSource } from 'react-dnd'
const style = {
position: 'absolute',
border: '1px dashed gray',
backgroundColor: 'white',
padding: '0.5rem 1rem',
cursor: 'move',
}
const boxSource = {
beginDrag(props) {
const { id, left, top } = props
return { id, left, top }
}
}
const Source = React.createClass({
propTypes: {
connectDragSource: PropTypes.func.isRequired,
isDragging: PropTypes.bool.isRequired,
id: PropTypes.any.isRequired,
left: PropTypes.number.isRequired,
top: PropTypes.number.isRequired,
hideSourceOnDrag: PropTypes.bool.isRequired,
children: PropTypes.node
},
render() {
const {
hideSourceOnDrag, left, top, connectDragSource, isDragging, children
} = this.props
if (isDragging && hideSourceOnDrag) {
return null
}
return connectDragSource(
<div style={{ ...style, left, top }}>
{children}
</div>
)
}
})
export default DragSource(ItemTypes.BOX, boxSource, (connect, monitor) => ({
connectDragSource: connect.dragSource(),
isDragging: monitor.isDragging()
}))(Source)