UNPKG

@6thquake/react-material

Version:

React components that implement Google's Material Design.

68 lines (59 loc) 1.44 kB
/** * @ignore - do not document. */ import React, { PureComponent } from 'react'; import withStyles from '../styles/withStyles'; import { DragSource as DragSourceBase } from 'react-dnd'; import PropTypes from 'prop-types'; import ReactDOM from 'react-dom'; const styles = { inner: { display: 'inline-block', position: 'static' } }; const _source = { beginDrag(props, monitor, component) { const item = component.state.comp.beginDrag(props, monitor, component); return item; }, endDrag(props, monitor, component) { component.state.comp.endDrag(props, monitor, component); } }; function collect(connect, monitor) { return { connect, monitor }; } class _DragSource extends PureComponent { constructor(props) { super(props); this.register = comp => { this.state.comp = comp; }; this.state = { getSource: '', comp: '' }; } render() { const { connect, monitor, children, classes } = this.props; const childrenWithProps = React.Children.map(children, child => React.cloneElement(child, { register: this.register.bind(this), connect, monitor })); return connect.dragSource()(React.createElement("div", { className: classes.inner }, childrenWithProps)); } } const DragSource = DragSourceBase('*', _source, collect)(_DragSource); export default withStyles(styles)(DragSource);