Object List rows in right panel show GripVertical with cursor:grab but no drag handlers — reorder of colorRegions / stitchObjects is non-functional #182
Labels
No labels
blocked:commit-ready-failed
blocked:gate-fetch
blocked:gate-lint
blocked:gate-plan
blocked:gate-research
blocked:needs-attention
blocked:needs-decision
blocked:needs-human
blocked:no-changes
blocked:verify-failed
bug
deferred
feature-request
in-progress
needs-decompose
needs-triage
quickfix
security/medium
triage-approved
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Mark/Kimi_Agent_Brother_10_Digitizing_App#182
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Finding
src/components/workspace/RightPanel.tsx:587(post #177 location; pre-#177 line number was the same) renders aGripVerticalicon as the first child of each Object List row:The
cursor: 'grab'style suggests the user can drag the row to reorder it. Verified: there is nodraggableattribute, noonDragStart, noonDragOver, noonDropon the parent<div>(lines 580-651 in the post-#177 file). The cursor change is a visual lie.This is the same class of bug as #177 (which fixed the Thread Stops list) and #165 (which fixed BottomThreadBar). The Object List is a separate surface that renders
colorRegions(duringdigitizing) orstitchObjects(duringdigitized), so the reorder action would dispatch on a different reducer key.The Thread Stops reorder reducer (
REORDER_THREAD_STOPS) doesn't apply here — object order matters for render layering (z-order, selection, Group/Ungroup) but the current state shape doesn't have an explicit ordering field onstitchObjects/colorRegions. A reorder would need to either:orderfield to eachstitchObjects/colorRegionsentry and sort by it on render, ORWhere
src/components/workspace/RightPanel.tsx:587—GripVerticalicon withcursor: 'grab'src/components/workspace/RightPanel.tsx:580-651(the parent<div>has nodraggable/onDragStart)grep -rn 'REORDER_OBJECTS\|MOVE_OBJECT\|REORDER_STITCH_OBJECTS' src/returns 0 hitsSuggested fix shape
Two options:
Remove the GripVertical icon (and its
cursor: grab) until reorder is implemented. Replace with a non-interactive indicator (or just no leading icon). The row is clickable for selection; the user gets to see the order, but can't change it.Implement Object List reorder. Add a
REORDER_OBJECTSreducer action ({ from: number, to: number }) operating on the active list (colorRegionsindigitizing,stitchObjectsindigitized). Use HTML5 drag-and-drop on the row (draggable={true},onDragStart={...},onDragOver={preventDefault},onDrop={...}). On drop, dispatch the reorder. The GripVertical becomes a real drag handle.Option 2 is the right product move; consistent with the BottomThreadBar (#165) and Thread Stops list (#177) surfaces.
Severity
Medium. Same class of bug as #177 — UI lie. Users who try to drag will see the cursor change but the row won't move.
Discovered by
Triage of #177 (RightPanel thread stops). The Object List grip was noted in the #177 closing comment as out of scope; filing as a separate issue so the next triage sweep can route it.
Related
Implemented HTML5 drag-and-drop reorder of the Object List rows, mirroring the BottomThreadBar pattern from #165 and the right-panel thread-stops fix from #177.
Changes
useWorkspace.ts: new actionREORDER_OBJECTS { list: 'colorRegions' | 'stitchObjects', from, to }that splice-moves an entry in the active list and pushes history (samepushHistoryshapeREORDER_THREAD_STOPS/REORDER_STITCH_OBJECTShave used since #165).RightPanel.tsx: extractedObjectListsubcomponent. Each row now carries a real<GripVertical>drag handle (the only draggable element — the row's onClick select is preserved). Drop firesREORDER_OBJECTSwith the active list key. A 3px gold vertical accent bar appears next to the drop target on dragover, switching left/right based on cursor X vs. wrapper midpoint. Source row dims to opacity 0.4 while a drag is in flight.issue-182.test.tsx(7 cases) covers drag-handle rendering, forward/backward drops, the active-list dispatch key for both appState paths (digitizing ->colorRegions, digitized ->stitchObjects), same-row self-drop no-op, drop indicator, source-row dim, and click-preserved SELECT.issue-182-reducer.test.ts(5 cases) pins the reducer math: splice-move within the active list, cross-list isolation, and the post-action snapshot contract shared with #165.Fix landed on
mainas commitc898c46(rebased ontob5bc1fe/ #177). Closing.