Enable Drag-and-Drop Between Encoding Channels #5
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.
Pull Request: Drag-and-Drop Between Encoding Channels
Summary
Added the ability to drag field pills between encoding channels (e.g., drag "Horsepower" from X axis to Y axis). When both channels have fields, they swap positions.
Changes
src/types/index.tsDragPayloadinterface to distinguish drag sourcessrc/components/FieldList/FieldPill.tsxsourceType: 'fieldList'src/components/EncodingPanel/EncodingShelf.tsxHow It Works
The Problem: We needed to know where a drag originated to handle it correctly:
The Solution: Added a
DragPayloadtype that includes the source:The drop handler checks
sourceTypeand either replaces (from FieldList) or swaps (from EncodingShelf).Bug We Hit & How We Fixed It
Symptom: Dragging from one encoding shelf to another showed visual feedback, but nothing happened on drop.
Debugging steps:
console.logat start ofhandleDrop→ never firedconsole.loginhandleDragOver→ fired correctlyRoot cause: HTML5 Drag and Drop requires
effectAllowed(set on drag source) anddropEffect(set on drop target) to be compatible:Fix: Removed explicit
dropEffect, letting the browser infer fromeffectAllowed:Key Lesson for Interns
Debugging strategy:
dragOverworks butdropdoesn't → browser rejectionTest Plan