Skip to content

feat: add issue view swimlane#3149

Open
anderson-oki wants to merge 7 commits into
multica-ai:mainfrom
anderson-oki:feature/add-issue-view-swimlane
Open

feat: add issue view swimlane#3149
anderson-oki wants to merge 7 commits into
multica-ai:mainfrom
anderson-oki:feature/add-issue-view-swimlane

Conversation

@anderson-oki
Copy link
Copy Markdown
Contributor

What does this PR do?

When you have an issue with massive amount of sub tasks, and that scale to many issues, you can't group or tell what issue is this sub task from and the board becomes messy. While it is still achievable with workaround and Projects, it is not the most ideal right now.

I'm proposing similar on what YouTrack allow you to do called Swimlane view. It allows you to still have your Kamban board status, but it will group the parent issue as a "lane", and display the sub issues as it is now.

Related Issue

Closes #2951

Type of Change

  • Bug fix (non-breaking change that fixes an issue)
  • New feature (non-breaking change that adds functionality)
  • Refactor / code improvement (no behavior change)
  • Documentation update
  • Tests (adding or improving test coverage)
  • CI / infrastructure

Changes Made

1. Persistent State Management

  • packages/core/issues/stores/view-store.ts:
    • Registered "swimlane" to ViewMode type.
    • Added persistent swimlaneOrder (string array) and collapsedSwimlanes (string array) to save customized lane ordering and collapsible section states per-workspace.
    • Implemented setSwimlaneOrder and toggleSwimlaneCollapsed state actions in the workspace-aware store slice.

2. Layout & Interactions (Swimlane View)

  • packages/views/issues/components/swimlane-view.tsx:
    • Implemented SwimLaneView rendering a 2D grid utilizing dnd-kit where parent issues form horizontal collapsible lanes and columns represent statuses.
    • Built sticky status column headers and sticky row headers with grab handles for swimlane reordering.
    • Integrated localized "+" action buttons in cells to pre-fill parent issue and status fields upon creation.
    • Excluded parent duplicate cards from the "No parent" lane and filtered deleted-parent or unloaded-parent rows.
    • Connected hidden column totaling directly to the React Query cache via useLoadMoreByStatus to ensure dynamic, accurate counts.

3. Component De-duplication

  • packages/views/issues/components/hidden-columns-panel.tsx:
    • Extracted shared presentational layers and dropdown menus to eliminate duplication between Board and Swimlane views.
  • packages/views/issues/components/board-view.tsx:
    • Refactored to consume the newly shared HiddenColumnsPanel and HiddenColumnRow.

4. Integration & Localization

  • packages/views/issues/components/issues-header.tsx & my-issues-header.tsx:
    • Added toggle controls (Waves icon) for the new "swimlane" view mode.
  • packages/views/issues/components/issues-page.tsx & my-issues-page.tsx & project-detail.tsx:
    • Wired SwimLaneView on all issue containers, passing down scope/filters for query-cache totals.
  • packages/views/locales/{en, zh-Hans}/*:
    • Added localized strings for English and Chinese, keeping terminology rules (mixed-rule) intact.

5. Test Suite

  • packages/views/issues/components/swimlane-view.test.tsx:
    • Added 19 comprehensive unit tests verifying 2D layout mapping, cell rendering, parent detail links, and lane drag/drop and collapsed state persistence.

How to Test

  1. Navigate to {{url}}/{{workspace}}/issues
  2. Click over the icon to change views.
  3. Select Swimlane from the dropdown

Checklist

  • I have included a thinking path that traces from project context to this change
  • I have run tests locally and they pass
  • I have added or updated tests where applicable
  • If this change affects the UI, I have included before/after screenshots
  • I have updated relevant documentation to reflect my changes
  • If I added a new runtime / coding tool / UI tab, I synced the change to landing copy (apps/web/features/landing/i18n/) and relevant docs (apps/docs/content/docs/)
  • If this PR touches Chinese product copy, I checked it against apps/docs/content/docs/developers/conventions.zh.mdx (terminology, mixed-rule for task / issue / skill)
  • I have considered and documented any risks above
  • I will address all reviewer comments before requesting merge

AI Disclosure

AI tool used: Opencode

Prompt / approach:

We analyzed the dnd-kit sorting context constraints and modeled a robust 2D grid that maps parents to lanes and statuses to columns. We integrated collapsed states and lane ordering directly into the workspace-aware Zustand store slice. We extracted shared presentational elements into a centralized HiddenColumnsPanel component and wired hidden counts directly to the React Query cache via useLoadMoreByStatus. We followed a TDD-based approach.

Screenshots (optional)

Screen.Recording.2026-05-24.at.14.24.02.mov

@vercel
Copy link
Copy Markdown

vercel Bot commented May 24, 2026

@anderson-oki is attempting to deploy a commit to the IndexLabs Team on Vercel.

A member of the Team first needs to authorize it.

@anderson-oki anderson-oki marked this pull request as ready for review May 24, 2026 05:41
@anderson-oki anderson-oki marked this pull request as draft May 24, 2026 06:09
@anderson-oki anderson-oki marked this pull request as ready for review May 24, 2026 06:26
@anderson-oki anderson-oki changed the title feat: Add issue view swimlane feat: add issue view swimlane May 24, 2026
@anderson-oki anderson-oki force-pushed the feature/add-issue-view-swimlane branch from 3b5f386 to b4fbafc Compare May 24, 2026 07:35
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.

[Feature]: Issue Swimlane View

1 participant