Skip to content

Feature/inprogress todo state - #884

Open
waldemar-p wants to merge 4 commits into
ransome1:mainfrom
waldemar-p:feature/inprogress-todo-state
Open

waldemar-p wants to merge 4 commits into
ransome1:mainfrom
waldemar-p:feature/inprogress-todo-state

Conversation

@waldemar-p

Copy link
Copy Markdown
Contributor

This branch adds support for tracking in-progress todo items via an inprogress extension.

  • Adds inprogress: boolean to the TodoObject type
  • Parses the inprogress:1 extension when loading todos
  • Displays an orange left border on in-progress todos for visual identification
  • Checkbox shows an indeterminate state when a todo is in progress
  • Adds Ctrl+click and middle-click on the checkbox to toggle the in-progress state
  • Automatically removes the inprogress extension when a todo is marked complete
  • Includes unit test verifying the cleanup behavior

@ransome1

ransome1 commented Jul 9, 2026

Copy link
Copy Markdown
Owner

@waldemar-p thanks for contributing! I haven’t found the time yet to go through your pull requests, but I'll get back to you as soon as I do

@Lezurex
Lezurex force-pushed the feature/inprogress-todo-state branch 2 times, most recently from 01d9f39 to 99d5ca5 Compare October 2, 2026 12:31
@codecov

codecov Bot commented Oct 2, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 88.88889% with 4 lines in your changes missing coverage. Please review.
✅ Project coverage is 50.99%. Comparing base (9af124d) to head (9c97f54).

Files with missing lines Patch % Lines
src/renderer/Grid/Row.tsx 85.00% 3 Missing ⚠️
src/renderer/Grid/Renderer.tsx 0.00% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #884      +/-   ##
==========================================
- Coverage   56.18%   50.99%   -5.19%     
==========================================
  Files          43       50       +7     
  Lines        1367     1759     +392     
  Branches      373      507     +134     
==========================================
+ Hits          768      897     +129     
- Misses        493      710     +217     
- Partials      106      152      +46     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@Lezurex
Lezurex force-pushed the feature/inprogress-todo-state branch from 99d5ca5 to 9c97f54 Compare October 8, 2026 20:16
@Lezurex

Lezurex commented Oct 8, 2026

Copy link
Copy Markdown
Collaborator

Hi @waldemar-p

As you may have seen I've rebased your PR branch onto main, and I had to make some adjustments to get it up to date. I'll have a more detailed look soon. Thanks again and sorry for the wait.

@waldemar-p

Copy link
Copy Markdown
Contributor Author

@Lezurex

Thanks for looking into and and thanks for updating it. I haven't had the time to take another look at the code but I trust you.

@ransome1

Copy link
Copy Markdown
Owner

Thank you for the contribution! The implementation is solid and well-tested. However, I have several UX and architectural concerns that prevent merging:

1. Feature Discoverability

Ctrl+Click is not intuitive or discoverable. Users won't know this feature exists without documentation. We need a visual affordance (button, icon, or menu item) to make it obvious.

2. Context Menu Conflict

Right-click triggers both the in-progress toggle AND opens the context menu. This feels unintentional and confusing. Please clarify the interaction model.

3. Unclear Visual Indicator

The indeterminate checkbox state doesn't clearly communicate "in-progress" to users. It could be misinterpreted as half-done, error, or loading.

4. Limited Functionality

The in-progress attribute only filters in the sidebar and adds a border. What workflows should it support? (notifications, sorting, actions, etc.)

5. Sorting Implementation Bug

The in-progress sorting appears to be hard-coded and automatic, not using sleek's configurable sorting system. This creates architectural problems:

  • Users cannot configure sort order for in-progress todos
  • It doesn't respect the user's sorting configuration
  • Inconsistent with how other attributes (priority, due, etc.) work
  • Not documented in the sorting logic

In-progress should either:

  • Be added to the user-configurable Sorting[] system like other attributes, OR
  • Not have automatic sorting at all

@waldemar-p

Copy link
Copy Markdown
Contributor Author

Thank you for the contribution! The implementation is solid and well-tested. However, I have several UX and architectural concerns that prevent merging:

Thank you. Very good feedback! I will look into all of those points later.

- Add inprogress extension support to TodoObject type and parser
- Display orange left border on in-progress todos
- Add Ctrl+click and middle-click checkbox toggle for in-progress state
- Remove inprogress extension when marking todo as complete
- Add unit test for inprogress cleanup on completion
- Add sortInProgressFirst function to sort in-progress items first within each group
- Apply in-progress sorting after all other sorting in dataRequest
- Add unit tests for sortInProgressFirst function
- Fix checkbox event handling to prevent onChange when toggling in-progress state
- Add inprogress pattern to renderer for proper syntax highlighting
- Remove attributeValue requirement check in handleWriteTodoToFile
- Extract inline completed items sorting logic into sortCompletedLast function
- Add unit tests for sortCompletedLast function
- Remove unused event parameter from handleInprogressToggle
…bute handling

- Store inprogress as "1" | null like other attribute values
- Replace ctrl+click with a row context menu item (with middle-click hint); keep middle-click
- Show IncompleteCircle icon with "In progress" tooltip and aria-label
- Make inprogress a regular sorting entry (migration 2.0.30); inverting sorts in-progress todos last
- Label in-progress in the sidebar chip and group header; allow removing it via the attribute menu
- Inline sortCompletedLast again
@waldemar-p
waldemar-p force-pushed the feature/inprogress-todo-state branch from 9d8669f to 6ebfd90 Compare October 15, 2026 12:13
@waldemar-p

Copy link
Copy Markdown
Contributor Author
  1. Discoverability. Ctrl+click is gone. The row context menu now has "Mark in progress" / "Remove in progress", with "Middle-click" shown greyed next to it, so the mouse shortcut can be found from the menu. Completed todos don't show the item.

  2. Context menu conflict. This came from macOS, where Ctrl+click is a right-click, so both handlers fired. With Ctrl+click removed, right-click only opens the menu. Middle-click on the checkbox toggles in-progress directly and 3. Visual indicator. The indeterminate state is replaced by an todo goes from empty circle to partly filled circle to checked circle. This also drops aria-checked="mixed"`, which screen readers announced as "half checked". The checkbox now stays unchecked, is labelled "In progress" and shows a tooltip.

  3. Scope. I'd keep it to what priorpm offer: filter, visuag. I don't plan notifications or other actions unless users ask forthem. The sidebar now shows an "In progress" category. Before, it didn't appear there at all, because the sidebar only lists attributes from the sorting list.

  4. Sorting. The automatic sort is removed. inprogress is now a regular entry in Sorting[]. A settings migration appends it at the end of existing lists, so nobody's order changes on update. Users can move or invert it like aing by it shows an "In progress" group.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Feature requests

Development

Successfully merging this pull request may close these issues.

3 participants