Skip to content

feat(kanban): add draggable vertical swimlanes and filters - #62

Merged
cnjack merged 2 commits into
mainfrom
codex/board-status-filter-redesign
Jul 30, 2026
Merged

feat(kanban): add draggable vertical swimlanes and filters#62
cnjack merged 2 commits into
mainfrom
codex/board-status-filter-redesign

Conversation

@cnjack

@cnjack cnjack commented Jul 30, 2026

Copy link
Copy Markdown
Owner

Summary

  • replace the retired two-dimensional Columns + left-side Rows board with one top-labelled vertical Swimlanes dimension
  • keep Status as the default workflow view, with alternate Priority, Assignee, and Custom swimlanes
  • make pointer drag update the field owned by the selected dimension: status, priority, assignee, or the stable custom swimlane ID
  • keep Desktop, Web, and jtype-board-react on the same shared model and BoardSurface
  • support custom swimlane add/rename/reorder/color/delete, Unassigned drops, dangling-ID recovery, and priority/assignee conversion
  • update in-app Help, package docs, design docs, generated package artifacts, translations, and the repository feature-impact workflow

Why

The previous implementation treated “swimlane” as a second horizontal row axis. JType’s intended model is the conventional Kanban model shown below: one set of vertical lanes with labels at the top and cards dragged horizontally between them.

UI

Vertical swimlanes

Design and compatibility notes

Persistence and compatibility

  • Status/Priority/Assignee selections continue to use groupBy
  • Custom uses groupBy: "status", swimlaneBy: "custom", and immutable board-owned lane IDs
  • historical non-custom swimlaneBy values still open without rewriting card documents
  • deleted or unknown custom IDs render in Unassigned without destroying the stored ID

Verification

  • Desktop build: passed
  • Web frontend build: passed
  • jtype-board-react build: passed
  • shared unit tests: 59 passed
  • vertical swimlane component E2E: 10 passed
  • Desktop E2E: 30 passed
  • Web E2E: 29 passed
  • package unit tests: 21 passed
  • Grok review: PASS
  • Kimi review: PASS

Desktop and Web E2E both exercise a real pointer drag in Priority swimlanes and verify persisted card movement; the component E2E also covers Custom → Unassigned clearing.

Summary by CodeRabbit

  • New Features

    • Added vertical swimlane views for Status, Priority, Assignee, and Custom dimensions.
    • Added multi-select filters for priorities, assignees, labels, due dates, blocked cards, missing swimlanes, and “My cards.”
    • Dragging cards between swimlanes now updates their placement fields correctly.
    • Added status and custom swimlane management, including stable identifiers and Unassigned handling.
  • Documentation

    • Updated Kanban and embed guides with local-first behavior, swimlanes, filtering, and personalization details.
  • Tests

    • Expanded desktop and web coverage for swimlanes, filters, drag-and-drop, and status management.

@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 9daf2a4d-0637-40e8-8556-c71d4ae0e09d

📥 Commits

Reviewing files that changed from the base of the PR and between 706071c and cc53df6.

⛔ Files ignored due to path filters (14)
  • internal-docs/kanban/mockups/status-columns-filter-redesign.png is excluded by !**/*.png
  • internal-docs/kanban/mockups/status-management-redesign.png is excluded by !**/*.png
  • internal-docs/kanban/mockups/vertical-swimlanes-redesign.png is excluded by !**/*.png
  • packages/board-react/dist/index.d.ts is excluded by !**/dist/**
  • packages/board-react/dist/index.js is excluded by !**/dist/**
  • packages/board-react/dist/style.css is excluded by !**/dist/**
  • shared/i18n/locales/en/messages.mjs is excluded by !**/i18n/locales/**
  • shared/i18n/locales/en/messages.po is excluded by !**/i18n/locales/**
  • shared/i18n/locales/ja/messages.mjs is excluded by !**/i18n/locales/**
  • shared/i18n/locales/ja/messages.po is excluded by !**/i18n/locales/**
  • shared/i18n/locales/ko/messages.mjs is excluded by !**/i18n/locales/**
  • shared/i18n/locales/ko/messages.po is excluded by !**/i18n/locales/**
  • shared/i18n/locales/zh/messages.mjs is excluded by !**/i18n/locales/**
  • shared/i18n/locales/zh/messages.po is excluded by !**/i18n/locales/**
📒 Files selected for processing (33)
  • AGENTS.md
  • internal-docs/kanban/status-columns-filter-redesign.md
  • internal-docs/kanban/swimlane-management-design.md
  • internal-docs/kanban/swimlane-management-ui-design.md
  • packages/board-react/README.md
  • packages/board-react/src/JTypeBoard.tsx
  • services/jtype-web/frontend/src/help/content/articles/kanban-boards-and-cards.en.md
  • services/jtype-web/frontend/src/help/content/articles/kanban-boards-and-cards.ts
  • services/jtype-web/frontend/src/help/content/articles/kanban-boards-and-cards.zh.md
  • services/jtype-web/frontend/src/help/content/articles/kanban-embed-your-board.en.md
  • services/jtype-web/frontend/src/help/content/articles/kanban-embed-your-board.ts
  • services/jtype-web/frontend/src/help/content/articles/kanban-embed-your-board.zh.md
  • services/jtype-web/frontend/src/help/content/articles/kanban-web-board-view.en.md
  • services/jtype-web/frontend/src/help/content/articles/kanban-web-board-view.ts
  • services/jtype-web/frontend/src/help/content/articles/kanban-web-board-view.zh.md
  • services/jtype-web/frontend/src/pages/WebBoardView.tsx
  • shared/components/board/BoardFilterPopover.tsx
  • shared/components/board/BoardSurface.tsx
  • shared/components/board/BoardSwimlanes.tsx
  • shared/components/board/LaneDetailsPopover.tsx
  • shared/components/board/StatusManagerDialog.tsx
  • shared/components/board/SwimlaneConversionDialog.tsx
  • shared/components/board/SwimlaneManagerDialog.tsx
  • shared/components/board/index.ts
  • shared/components/board/types.ts
  • shared/lib/board.ts
  • src/components/BoardView.tsx
  • tests/e2e/app.spec.ts
  • tests/e2e/board-swimlanes.spec.ts
  • tests/e2e/web-dashboard.spec.ts
  • tests/fixtures/board-swimlanes.tsx
  • tests/unit/boardFilters.spec.ts
  • tests/unit/boardSwimlanes.spec.ts

📝 Walkthrough

Walkthrough

This PR redesigns Kanban boards around one vertical swimlane dimension, adds structured multi-criteria filters, updates card persistence across Desktop, Web, and board-react, expands end-to-end coverage, and revises supporting design and help documentation.

Changes

Kanban vertical swimlane redesign

Layer / File(s) Summary
Lane and filter model
shared/lib/board.ts, tests/unit/*
Adds active-lane mapping, stable custom-lane handling, unassigned targets, structured filters, legacy normalization, and unit coverage.
Board surface and controls
shared/components/board/*
Uses vertical lane membership for rendering and drag/drop, adds the filter popover, and updates status/custom swimlane management UI.
Host integrations
src/components/BoardView.tsx, services/.../WebBoardView.tsx, packages/board-react/src/JTypeBoard.tsx
Creates and moves cards through lane-specific frontmatter patches and wires currentUser to the embedded board.
Validation and documentation
tests/e2e/*, tests/fixtures/*, packages/board-react/README.md, services/.../help/*, internal-docs/kanban/*
Adds Desktop/Web swimlane, filter, persistence, and help-center tests and updates product, package, and design documentation.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related PRs

  • cnjack/jtype#47: Earlier board-react and BoardSurface embedding changes at the same integration seams.
  • cnjack/jtype#61: Earlier custom swimlane and stable-key implementation used by this redesign.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/board-status-filter-redesign

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.

@cnjack cnjack changed the title feat(kanban): redesign status workflow and filters feat(kanban): add draggable vertical swimlanes and filters Jul 30, 2026
@cnjack
cnjack marked this pull request as ready for review July 30, 2026 04:53
@cnjack
cnjack merged commit 79835f5 into main Jul 30, 2026
2 of 3 checks passed
@cnjack
cnjack deleted the codex/board-status-filter-redesign branch July 30, 2026 04:53
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.

1 participant