UNPKG

wix-style-react

Version:
63 lines (51 loc) 1.33 kB
import React from 'react'; import PropTypes from 'prop-types'; import TouchBackend from './TouchBackend'; import { DndProvider, createDndContext } from 'react-dnd'; let defaultManager; function getDefaultManager(backend) { if (!defaultManager) { defaultManager = createDndContext( backend, {}, { enableMouseEvents: true, }, ).dragDropManager; } return defaultManager; } // https://github.com/react-dnd/react-dnd/issues/186#issuecomment-110333064 class DragDropContextProvider extends React.Component { static propTypes = { children: PropTypes.node, backend: PropTypes.func, }; static defaultProps = { backend: TouchBackend, }; static contextTypes = { dragDropManager: PropTypes.object, }; static childContextTypes = { dragDropManager: PropTypes.object, }; // we add `manager` to instance to allow to manipulate d&d in tests getManager() { return ( this.context.dragDropManager || getDefaultManager(this.props.backend) ); } getChildContext() { return { dragDropManager: this.getManager(), }; } render() { const { backend, children } = this.props; return ( <DndProvider manager={this.getManager(backend)}>{children}</DndProvider> ); } } export default DragDropContextProvider;