# React DnD Preview [![NPM Version][npm-image]][npm-url] [![dependencies Status][deps-image]][deps-url] [![devDependencies Status][deps-dev-image]][deps-dev-url] [Try it here!](https://louisbrunner.github.io/dnd-multi-backend/examples/react-dnd-preview.html) This project is a React component compatible with [React DnD](https://github.com/react-dnd/react-dnd) that can be used to emulate a Drag'n'Drop "ghost" when a Backend system doesn't have one (e.g. `react-dnd-touch-backend`). See the [migration section](#migrating) for instructions when switching from `4.x.x` or `6.x.x`. ## Installation ```sh npm install -S react-dnd-preview ``` ## Usage & Example Just include the `Preview` component close to the top component of your application (it places itself absolutely). It is usable in different ways: hook-based, function-based and context-based. All of them receive the same data formatted the same way, an object containing the following properties: - `display`: only with `usePreview`, boolean indicating if you should render your preview - `itemType`: the type of the item (`monitor.getItemType()`) - `item`: the item (`monitor.getItem()`) - `style`: an object representing the style (used for positioning), it should be passed to the `style` property of your preview component - `ref`: a reference which can be passed to the final component that will use `style`, it will allow `Preview` to position the previewed component correctly (closer to what HTML5 DnD can do) - `monitor`: the actual [`DragLayerMonitor`](https://react-dnd.github.io/react-dnd/docs/api/drag-layer-monitor) from `react-dnd` The function needs to return something that React can render (React component, `null`, etc). See also the [examples](examples/) for more information. ### Hook-based ```js import { usePreview } from 'react-dnd-preview' const MyPreview = () => { const preview = usePreview({ placement: 'top', padding: {x: -20, y: 0 }}) if (!preview.display) { return null } const {itemType, item, style, ref} = preview; return