fix: gate task board/list write controls and add keyboard drag-reorder (#2069)#2248
Open
larryro wants to merge 2 commits into
Open
fix: gate task board/list write controls and add keyboard drag-reorder (#2069)#2248larryro wants to merge 2 commits into
larryro wants to merge 2 commits into
Conversation
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.
Summary
Resolves the two affordance defects on the Projects → Tasks board & list surface (#2069):
[57] Write controls exposed to read-only viewers
The board/list rendered the Create button and the inline priority/assignee pickers and allowed drag-reorder for everyone, even read-only viewers — the server correctly rejected the writes (
assertTaskWritable→RBAC_FORBIDDEN), but the user only saw a generic failure toast. The task modal already gated these viadisabled={!canEdit}; this brings the board/list to parity.listTasksByProjectnow returnscanEdit(derived from the existingcheckProjectAccess) in its return validator.useTasksByProject→TasksWorkspace→KanbanBoard/TasksList→BoardColumn/TaskCard/TaskListRow.disabledmode), and drag is disabled viauseSortable({ disabled: !canEdit }).[56] No keyboard drag-reorder
An explicit
onKeyDownon each card/row shadowed dnd-kit'sKeyboardSensoractivator (also spread viasortable.listeners.onKeyDown), so Space/Enter never started a keyboard drag.KeyboardSensoris configured withkeyboardCodesso Space picks up/drops and arrow keys move a card (Escape cancels), freeing Enter to open the task.onKeyDownnow forwards to dnd-kit's activator (sortable.listeners?.onKeyDown) instead of shadowing it; Enter opens, and for non-draggable (read-only/nested) rows Space opens too.Tests
listTasksByProject canEditcases (editor → true, read-only member → false) toconvex/tasks/queries.test.ts.bunx vitest --run --project server convex/tasks→ 100 passed.bunx tsc --noEmit→ clean.bunx oxlint --type-aware app/features/tasks convex/tasks→ 0 warnings/errors.Closes #2069