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)
- How to copy over items from one SortableContext to another?
- Drag down invalid HOT 1
- AutoScroll absolute thresholds and acceleration
- Drag Handle stops working when its visibility is toggled (hidden then shown) HOT 2
- Multiple containers : possibility of hitting minified error due to too many re-renders
- How do I get access to the Draggable data once it is over a Droppable? HOT 1
- Automatically generate id for components
- Sorting doesn't stay at it's position or moves somewhere else HOT 1
- Cannot auto-scroll back to first vertical list when used in a horizontally scrollable parent
- pnpm add @dnd-kit/sortable
- Click-and-drop?
- DND Kit / React Virtual Re-renders more with DndContent HOT 3
- @dnd-kit/react (beta). Wrong nested scrollable elements activating HOT 8
- [next] Feature Request: Apply different `activationConstraints` based on `pointerType` HOT 1
- Dragging object does not trigger scrolling in target scroll container (despite use of DragOverlay) HOT 3
- [next] controlled or cancellable useSortable HOT 5
- Nextjs with @dnd-kit/react HOT 4
- Trouble with nested droppables HOT 1
- Add `over` property to the DropAnimationFunctionArguments
- Trouble with " select "
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.