Socket
Socket
Sign inDemoInstall

react-dnd-preview

Package Overview
Dependencies
20
Maintainers
1
Versions
44
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    react-dnd-preview

Preview component for React DnD


Version published
Weekly downloads
138K
increased by13.82%
Maintainers
1
Created
Weekly downloads
 

Readme

Source

React DnD Preview NPM Version dependencies Status devDependencies Status

Try it here!

This project is a React component compatible with 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 for instructions when switching from 4.x.x or 6.x.x.

Installation

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 from react-dnd

The function needs to return something that React can render (React component, null, etc).

See also the examples for more information.

Hook-based

import { usePreview } from 'react-dnd-preview'

const MyPreview = () => {
  const preview = usePreview()
  if (!preview.display) {
    return null
  }
  const {itemType, item, style} = preview;
  return <div className="item-list__item" style={style}>{itemType}</div>
}

const App = () => {
  return (
    <DndProvider backend={MyBackend}>
      <ItemList />
      <MyPreview />
    </DndProvider>
  )
}

Function-based

import { Preview } from 'react-dnd-preview'

const generatePreview = ({itemType, item, style}) => {
  return <div className="item-list__item" style={style}>{itemType}</div>
}

class App extends React.Component {
  render() {
    return (
      <DndProvider backend={MyBackend}>
        <ItemList />
        <Preview generator={generatePreview} />
        // or
        <Preview>{generatePreview}</Preview>
      </DndProvider>
    )
  }
}

Context-based

import { Preview, Context } from 'react-dnd-preview'

const MyPreview = () => {
  const {itemType, item, style} = useContext(Preview.Component)
  return <div className="item-list__item" style={style}>{itemType}</div>
}

const App = () => {
  return (
    <DndProvider backend={MyBackend}>
      <ItemList />
      <Preview>
        <MyPreview />
        // or
        <Context.Consumer>
          {({itemType, item, style}) => <div className="item-list__item" style={style}>{itemType}</div>}
        </Context.Consumer>
      </Preview>
    </DndProvider>
  )
}

Migrating

Migrating from 6.x.x

Starting with 7.0.0, react-dnd-preview doesn't have a default export anymore.

Previously:

import Preview from 'react-dnd-preview'

Now:

import { Preview } from 'react-dnd-preview'

Migrating from 4.x.x

Starting with 5.0.0, react-dnd-preview will start passing its arguments packed in one argument, an object {itemType, item, style}, instead of 3 different arguments (itemType, item and style). This means that will need to change your generator function to receive arguments correctly.

License

MIT, Copyright (c) 2016-2022 Louis Brunner

Keywords

FAQs

Last updated on 21 Sep 2023

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc