Skip to content

feat(todos): filter, edit and delete todos - #1559

Closed
johnmatthewtennant wants to merge 2 commits into
simone/nested-todosfrom
jtennant/martha/todo-filters-edit
Closed

johnmatthewtennant wants to merge 2 commits into
simone/nested-todosfrom
jtennant/martha/todo-filters-edit

Conversation

@johnmatthewtennant

Copy link
Copy Markdown
Contributor

Stacked on #1483.

Context

Todos in a channel Canvas could be added, checked, given a status and assigned, but not renamed or removed, and a long list had no way to narrow it. Fixing a typo or dropping a stale task meant editing the Canvas Markdown by hand.

Changes

  • Edit: each row's new More menu opens an inline field for the label. Enter or leaving the field saves; Escape cancels. Only the label's source is rewritten, so the checkbox, assignee and subtasks are kept, and an edit that would change the todo's structure (for example, typing · Assignee: Sam) is refused.
  • Delete: removes the todo's lines together with its subtasks, and nothing else. A todo with subtasks asks first.
  • Filters: status and assignee filters above the list. A parent stays visible when any of its subtasks match, so matches keep their context. Filters are local to the panel and don't change the Canvas.

Testing

  • model.test.ts: label edits keep status, assignee, subtasks and CRLF; empty, multiline, stale and structure-changing edits are refused; deletes remove exactly the todo and its subtasks.
  • TodosPanel.test.tsx: edit from the menu (Escape cancels, Enter saves once, focus returns to the checkbox), delete with and without the subtask confirmation, and status/assignee filters keeping parents.
  • todos.spec.mjs: in Chromium, the inline field keeps focus after the menu closes, and edit, filter and delete save the expected Canvas.

🤖 Generated with Claude Code

johnmatthewtennant and others added 2 commits October 22, 2026 13:55
Each todo row gains a More menu with Edit and Delete. Edit swaps the
label for an inline field: Enter or leaving the field saves, and
Escape cancels. Only the label's source changes, so the checkbox,
assignee and subtasks stay as they were. Delete removes the todo's
lines with its subtasks, and asks first when it has subtasks.

Status and assignee filters sit above the list. A parent stays visible
when any of its subtasks match, so a match keeps its context.

Co-authored-by: Martha <73923046810b68ae182000e74ef7c444383a907df20f81f2ba1008870a6f45a1@buzz.block.builderlab.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: John Tennant <jtennant@block.xyz>
A Chromium and WebKit journey opens Edit from the row menu, which
returns focus as it closes, and checks that the inline field keeps
focus and saves. It then filters to Done and deletes from there. The
empty-filter note is plain text, so the panel keeps one save status.

Co-authored-by: Martha <73923046810b68ae182000e74ef7c444383a907df20f81f2ba1008870a6f45a1@buzz.block.builderlab.xyz>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: John Tennant <jtennant@block.xyz>
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