Git Product home page Git Product logo

Comments (3)

Baal-Marduk avatar Baal-Marduk commented on May 19, 2024

Hey have you found any solution to this issue ? I'm encountering same behaviour even though I used the {provided.placeholder} element which I thought would prevent it.

from react-beautiful-dnd.

RMahammad avatar RMahammad commented on May 19, 2024

Hey have you found any solution to this issue ? I'm encountering same behaviour even though I used the {provided.placeholder} element which I thought would prevent it.

I am using provided placeholders also but they are not working at all. I didn't find any normal solution to prevent it

from react-beautiful-dnd.

joeryoost avatar joeryoost commented on May 19, 2024

It looks like your droppable is set to mode="virtual". The documentation states that you need to provide your own placeholder.

For my use-case, with items that have a variable size, I managed to achieve this by keeping track of the index of the element that was dragged:

const draggedIndex = useRef<number | null>(null);

const handleDragStart: OnDragStartResponder = ({ draggableId, source }) => {
  ...
  draggedIndex.current = source.index
};

And then grabbing a reference to the HTML element currently being dragged from the renderClone method:

renderClone={(provided) => {
  ...
   return (
     <div
       {...provided.draggableProps}
       {...provided.dragHandleProps}
       style={{ ...provided.draggableProps.style, ...style, ...indentationStyle }}
       ref={(el) => {
         provided.innerRef(el);
         draggedElementRef.current = el;
       }}
     >
       ...
     </div>
   );
 }}

And finally inserting a placeholder when rendering the draggable nodes, that has the same height as the element we're dragging:

{items.reduce((acc, { index, measureRef }) => {
  if (draggedIndex.current === index) {
    // We need to manually add a spacer for the dragged element to prevent items in the list from overlapping
    acc.push(<div style={{ height: draggedElementRef.current?.offsetHeight ?? 100 }} />);
  }
  acc.push(renderNode(index));

  return acc;
}, [] as Array<JSX.Element>)}

Hope this helps!

from react-beautiful-dnd.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.