Comments (5)
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.
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.
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.
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.
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)
- Sortable in modal - `keydown` event propagation issue
- useDroppable changing state in useIsomorphicLayoutEffect forces a nested update
- Sortable when translating page - Uncaught DOMException: Failed to execute 'removeChild' on 'Node'
- Draggable element does not recalculate position after window resize and gets out of edges
- "Maximum update depth exceeded." in handleMove
- How to "freeze" items so that they always remain in the same location in vertical sortable lists? HOT 1
- Iframe drag&drop issue HOT 1
- useSortable data prop is spreaded and hence only copies owned properties.
- onDragCancel gets called when the iframe body height changes its width while an item is dragged
- Sortable with flex wrap
- useSortable re-renders all items even with just clicking one item, affecting performance HOT 5
- Scroll while dragging broked if container with dragable elements has `scroll-behavior: smooth`
- Issue with framer motion integration HOT 1
- dragging animation or collusion-detection issue
- rectSwappingStrategy has bad/unnecessary animation
- Element displacement when parent has transform property
- How would you find which sensor is active in a DndContext?
- Multi-Select by DND-Kit HOT 1
- Getting `aria-describedby` warning
- Dragging into sortable tree
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from dnd-kit.