Refactor token reordering to support cross-group drag and drop #3637
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Overview
This PR refactors the token reordering logic to support dragging tokens between different groups within TokenListing. Previously, tokens could only be reordered within their parent group, limiting organizational flexibility. This implementation removes that restriction while adding proper validation and automatic name handling.
Problem
The current drag-and-drop implementation has several limitations:
size.font.smallto thesize.spacinggroup is not possibleExample of what wasn't possible before:
Solution
This PR introduces a comprehensive refactor with three key components:
1. Token Path Utilities (
src/utils/token/tokenPath.ts)New utility functions for working with token hierarchies:
2. Validation Functions (
src/utils/token/tokenValidation.ts)Prevents name collisions when moving tokens across groups:
3. Enhanced Drag and Drop
DraggableWrapper.tsx - Simplified and enhanced the drop handler:
DragOverItem.tsx - Removed parent group restriction:
Examples
Move token to different sibling group:
Move token up a hierarchy level:
Collision prevention:
Testing
Comprehensive test coverage with 37 new tests:
Total: 52 tests passing
Breaking Changes
None. This is a backward-compatible enhancement:
Future Enhancements
Potential follow-ups (not in this PR):
Original prompt
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.