Skip to content

feat(beps): add drag-and-drop support for kanban card status migration#3304

Draft
aaronvg wants to merge 1 commit intocanaryfrom
cursor/kanban-card-migration-issue-ea9d
Draft

feat(beps): add drag-and-drop support for kanban card status migration#3304
aaronvg wants to merge 1 commit intocanaryfrom
cursor/kanban-card-migration-issue-ea9d

Conversation

@aaronvg
Copy link
Copy Markdown
Contributor

@aaronvg aaronvg commented Mar 30, 2026

Pull Request Template

Thanks for taking the time to fill out this pull request!

Issue Reference

  • This PR fixes an issue where users could not migrate kanban cards from one status to another

Changes

This PR adds drag-and-drop functionality to the BEP kanban board, allowing users to easily change a BEP's status by dragging cards between columns.

Key Changes:

  • Installed @dnd-kit/core and @dnd-kit/sortable - Modern, accessible drag-and-drop libraries for React
  • Updated BepKanbanCard component - Added draggable functionality with a grip handle icon for clear drag affordance
  • Updated BepList component - Implemented DndContext with droppable columns for each status
  • Visual feedback - Shows highlighting when dragging over valid drop targets
  • Status update on drop - Calls the existing updateStatus mutation when a card is dropped in a new column

User Experience:

  • Cards now have a grip icon (⠿) on the left side indicating they can be dragged
  • Dragging a card shows a semi-transparent preview
  • Dropping a card in a different column immediately updates the BEP's status
  • The card link still works - clicking on the card title navigates to the BEP detail page
  • Drag requires 8px of movement to activate (prevents accidental drags when clicking)

Testing

  • TypeScript compilation passes (npx tsc --noEmit)
  • ESLint checks pass for modified files
  • Manual testing performed (requires Convex credentials)

PR Checklist

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • My changes generate no new warnings

Additional Notes

The implementation uses @dnd-kit which is a modern, accessible, and performant drag-and-drop library. It supports touch devices and keyboard navigation out of the box.

Slack Thread

Open in Web Open in Cursor 

- Install @dnd-kit/core and @dnd-kit/sortable for drag-and-drop functionality
- Update BepKanbanCard to be draggable with a grip handle
- Update BepList to support dropping cards between status columns
- Cards can now be dragged from one column to another to change their status
- Visual feedback shows when dragging over a valid drop target

Co-authored-by: aaronvg <aaronvg@users.noreply.github.com>
@vercel
Copy link
Copy Markdown

vercel Bot commented Mar 30, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
beps Ready Ready Preview, Comment Mar 30, 2026 3:55am
1 Skipped Deployment
Project Deployment Actions Updated (UTC)
promptfiddle Skipped Skipped Mar 30, 2026 3:55am

Request Review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Mar 30, 2026

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: bbf8ac3d-9fc3-41f0-ac20-53c293909328

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch cursor/kanban-card-migration-issue-ea9d

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

})}
</div>
) : null}
</DragOverlay>
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sortable hook in DragOverlay causes broken drag preview

Medium Severity

Rendering BepKanbanCard inside DragOverlay causes it to call useSortable with the same ID as the actively dragged card. Since useSortable returns isDragging: true when active.id === id, the overlay card's inline style sets opacity: 0.5. Combined with the wrapper div's opacity-90 class, the drag preview ends up at ~45% opacity instead of the intended 90%. The transform from useSortable is also applied via CSS.Transform.toString(transform), which can conflict with DragOverlay's own positioning, causing the preview to appear offset from the cursor. The isDragging prop on BepKanbanCardProps was likely meant to address this but is never destructured from the function parameters — it's shadowed by the hook's return value.

Additional Locations (1)
Fix in Cursor Fix in Web

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants