Giter Site home page Giter Site logo

Comments (5)

clauderic avatar clauderic commented on May 14, 2024 2

I think this is roughly what you're trying to build: https://codesandbox.io/s/dndkit-sortable-image-grid-forked-bjh7n?file=/src/App.jsx

That's the lowest effort solution, but it's also buggy, because the layout is shifting and the collision detection strategy can get into a state where it's constantly hesitating between two positions while the items are moved in the DOM.

Ideally for a use-case like this, you need to build a custom sorting strategy.

from dnd-kit.

sventschui avatar sventschui commented on May 14, 2024

Thanks for taking time to look into this issue, appreciated!

The sandbox already works a lot better. Unfortunately it crashes my chrome when dragging an item a bit longer. Any idea why this happens?

Implementing a custom sorting strategy would mean to check whether the element could be moved at the hovered place and move it there if it can be moved or move it to a later place in the sorted array otherwise, right? This sounds kinda difficult to me, especially as I am using a grid with a dynamic amount of columns (using repeat(auto-fill, minmax(x, y))). Do you have some pointers for me here?

from dnd-kit.

clauderic avatar clauderic commented on May 14, 2024

The stack overflow happens because the collision detection strategy can get into a state where it's constantly hesitating between two positions while the items are shifting positions in the DOM. Ideally the library should be able to detect that it's getting into such a scenario and avoid the stack overflow by picking one of the two positions, but this isn't currently planned; you'd need to try to open a PR for this yourself. You could try debouncing the onDragOver logic as a first step to see if that helps.

Indeed building a custom sorting strategy for your use-case would be extremely challenging, since you'd need to be able to compute the new positions of items.

from dnd-kit.

sventschui avatar sventschui commented on May 14, 2024

Thanks a lot for all the hints and your time. If I can come up with a solution I'll let you know. Closing the issue for now.

from dnd-kit.

justdvl avatar justdvl commented on May 14, 2024

Hello @clauderic . Thanks for the Codesandbox example above, very helpful.
Is there a way to not fill empty spot in a grid with other element, but leave it empty there? Let's say I changed your Codesandbox to only have 2 columns, so 1 row can have 2 items. I would like to allow user to take one item to other row and leave just 1 item in that row. If it is possible, how? Thanks.
@sventschui I am also experiencing a lot of flickering when collision detection strategy is undecisive. Did you manage to come up with a solution? I am not experienced enough to create PR myself, even though I would love to!

from dnd-kit.

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.