@6thquake/react-material
Version:
React components that implement Google's Material Design.
68 lines (59 loc) • 1.44 kB
JavaScript
/**
* @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);