Replace the global 'Show done' kanban toggle with per-column collapse#157
Merged
Conversation
… so each user picks which columns to hide and the choice persists per profile The old board had a single 'Show done' toggle in the toolbar that hid every state marked done=true. That was a global on/off and could not distinguish DONE from CANCELLED, nor let a user hide e.g. WAIT without losing DONE too. Each column now has its own chevron in the header. A collapsed column shrinks to a 40px strip showing the rotated label, count chip, and an expand chevron; re-expanding restores the full column. State is stored per-profile under the localStorage key board_collapsed_columns (JSON array of state names), so switching profiles gives each its own layout and the choice survives reloads. The 'show done' toolbar toggle, its translation key, and the showDone arg threaded into useTasks are removed. useTasks now always fetches all states; per-column collapse is purely a render-time hide, so re-expanding a column is instant with no extra network round-trip. Drag and drop into a collapsed column is intentionally blocked: the compact strip has no drop zone, so a card cannot vanish into an invisible target. Drag-to-reorder of the column itself still works -- the rotated label is the drag handle.
…by mirroring the open column's header/body split The first iteration wrapped the whole collapsed column in a single dashed-border box with py-2 padding, which pushed the expand chevron ~8px below the collapse chevrons on the open columns next to it. The eye picks that misalignment up immediately when collapsed and open columns sit side by side. Split the collapsed column into the same two-section layout the open column uses: a top header row (flex items-center mb-3 px-1) holding the expand chevron, and a bordered body below (rounded-lg border border-dashed border-border-subtle bg-surface-card/30) holding the dot, count chip, and rotated label. The header row geometry matches the open column's exactly, so the chevron lines up regardless of how many of each kind sit beside each other. The body inherits the open column's drop-zone styling, which also makes the visual transition between expanded and collapsed states look like one shape changing rather than two unrelated boxes.
This was referenced Jun 9, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
First of the three PRs scoped in the kanban-scheduling discussion. Pure UI / per-profile state, no schema change.
Before
A single "Show done" toggle in the board toolbar globally hid every state with
done=true. No way to hideWAITwithout losingDONEtoo, no way to let one profile prefer different visibility than another.After
Each column header has its own collapse chevron. Collapsed columns shrink to a 40 px strip showing the rotated label, count chip, and an expand chevron. The choice persists per profile under the localStorage key
board_collapsed_columns(JSON array of state names) using the existingprofileGet/profileSethelpers — switching profiles gives each its own layout, reloads keep it.The global toolbar toggle, its
showDonetranslation key (en/de/es/ru), and theshowDonearg threaded throughuseTasksare removed.useTasksnow always fetches every state — per-column collapse is purely render-time hiding, so re-expanding is instant with no extra round-trip.Notable design choices
profileGet/Setpattern.Test plan
Up next
PR 2: add
scheduled+deadlinedate columns to the task model across all four backends. PR 3: card icons + auto-surface cron job.