feat: browse the store folder by folder #6

Merged
schaefera merged 2 commits from folder-navigation into main 2026-10-05 13:17:06 +00:00
Collaborator

Roadmap item: folder navigation.

What changes

  • Browsing (search box empty): the entry list shows the current folder — subfolders first (folder icon, "N entries", chevron), then entries by their short name. Tapping a folder opens it; the header shows the folder path and an Up action goes to the parent. Drill-down happens in place on the one page, so reloads after save/delete/sync keep working as before.
  • Searching: scoped to the current folder and everything below it, results named relative to it (in aws: prod/console). At the root it covers the whole store. Title and Up stay while searching, so Up widens the search; clearing it returns to the folder listing.
  • Add inside a folder shows the folder as a fixed label in front of the Name field (new EntryEditor.folder); only the rest is typed, and sub/name still makes a subfolder. Editing keeps the whole name editable (a different folder moves the entry).
  • Reload that removes the current folder (delete, sync) falls back to the nearest ancestor that still has entries.

How

  • qml/folders.js — pure helpers over PassStore.entries(): list, search, parent, existing. No Rust/bridge changes; registered in src/qrc.rs.
  • po/touchpass.aps.pot regenerated by the build.

Testing

  • New tests/qml/tst_Folders.qml and tests/qml/tst_EntryListPage.qml (page runs inside a real PageStack); new tst_EntryEditor cases. FakePassStore gained entries()/decrypt().
  • cargo make qml-test: 70 passed, 0 failed, no warnings.
  • On device: browsing, Up, add-in-folder and the fall-back after delete checked; scoped search and the folder label re-installed for a second look.

🤖 Generated with Claude Code

Roadmap item: folder navigation. ## What changes - **Browsing (search box empty):** the entry list shows the current folder — subfolders first (folder icon, "N entries", chevron), then entries by their short name. Tapping a folder opens it; the header shows the folder path and an **Up** action goes to the parent. Drill-down happens in place on the one page, so reloads after save/delete/sync keep working as before. - **Searching:** scoped to the current folder and everything below it, results named relative to it (in `aws`: `prod/console`). At the root it covers the whole store. Title and Up stay while searching, so Up widens the search; clearing it returns to the folder listing. - **Add** inside a folder shows the folder as a fixed label in front of the Name field (new `EntryEditor.folder`); only the rest is typed, and `sub/name` still makes a subfolder. Editing keeps the whole name editable (a different folder moves the entry). - **Reload** that removes the current folder (delete, sync) falls back to the nearest ancestor that still has entries. ## How - `qml/folders.js` — pure helpers over `PassStore.entries()`: `list`, `search`, `parent`, `existing`. No Rust/bridge changes; registered in `src/qrc.rs`. - `po/touchpass.aps.pot` regenerated by the build. ## Testing - New `tests/qml/tst_Folders.qml` and `tests/qml/tst_EntryListPage.qml` (page runs inside a real `PageStack`); new `tst_EntryEditor` cases. `FakePassStore` gained `entries()`/`decrypt()`. - `cargo make qml-test`: 70 passed, 0 failed, no warnings. - On device: browsing, Up, add-in-folder and the fall-back after delete checked; scoped search and the folder label re-installed for a second look. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Browse the store folder by folder
All checks were successful
CI / ci (pull_request) Successful in 5m15s
CI / audit (pull_request) Successful in 15s
CI / qml (pull_request) Successful in 34s
4c4d98a2d5
The entry list now shows the current folder: its subfolders (with how
many entries are below each) and then its entries by their short name.
Tapping a folder opens it, the header's Up action goes back. Search is
unchanged: flat, across the whole store, by full name. Add starts the
new entry's name in the folder being browsed, and a reload that removes
the folder falls back to the nearest one that still has entries.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Search the current folder; show a new entry's folder as fixed text
All checks were successful
CI / ci (pull_request) Successful in 7m42s
CI / audit (pull_request) Successful in 14s
CI / qml (pull_request) Successful in 39s
baa778bc23
Search now finds the entries below the folder being browsed, named
relative to it; at the root it still covers the whole store. The
folder's title and Up action stay while searching, so Up widens it.

Adding in a folder shows the folder as a label in front of the name
field instead of pre-filling it, so only the rest is typed. Editing
keeps the whole name editable: a different folder moves the entry.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
schaefera approved these changes 2026-10-05 13:17:02 +00:00
schaefera deleted branch folder-navigation 2026-10-05 13:17:06 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
schaefera/TouchPass!6
No description provided.