feat(#571): Shares view gains My shares and Shared with me tabs #583

Merged
Cordy merged 4 commits from fix-571tabs into main 2026-09-17 22:40:13 +00:00
Owner

The last piece of #571. One sidebar entry, two tabs, per the rev-2 mockup.

My shares lists grants and public links together, grouped by file. They answer one question — what have I let out, and to whom? — and an owner who has to check two places will check one. pure:share-groups is the tested part: one group per file rather than one per share, ordered by path so the list does not jump around, and grants before links inside a group, because "who can see this" is answered by the people and the public link is the loud exception that belongs at the bottom.

Shared with me is flattened, as agreed — one row per granted item with who it came from, and a name that navigates to s.vpath. That value comes from the server (#582), so the view does not rebuild /shared/<owner>/<name> itself and cannot drift from what the overlay actually resolves.

A group-derived grant says via {group}. Cheap to render, and it is the honest answer to "where did that file go?" when someone leaves a group — the grant goes with the membership.

Rendered into the existing #listpane. That element is what the view machinery already reveals for this view; adding a sibling container would have meant teaching setView about it for no gain. The tab strip is the first <li>, styled as a strip. Given that a merged switch turned out to be invisible three rounds ago because I did not know about SET_SLOTS, staying inside a container the shell already manages is deliberate.

Everything the previous list showed is preserved: key-link, password and file-drop badges, expiry, copy and revoke.

The one-shot prints its assumptions before acting — every helper it calls (load, askConfirm, copyText, fmtTime, setView, closeMenus) and every existing i18n key it reuses, with a count. 6 new keys ×4.

Red witnessed: the pure:share-groups block did not exist.

Verified: share-groups.test.js green, all eleven web tests green, extract.js + node --check (#389 fence gate) green, \\u escape guard green, full Go suite green.

Not verified: appearance, and no live round-trip. #571's UI now wants a release and a look on the dogfood.

The last piece of #571. One sidebar entry, two tabs, per the rev-2 mockup. **My shares** lists grants and public links **together, grouped by file**. They answer one question — what have I let out, and to whom? — and an owner who has to check two places will check one. `pure:share-groups` is the tested part: one group per file rather than one per share, ordered by path so the list does not jump around, and **grants before links inside a group**, because "who can see this" is answered by the people and the public link is the loud exception that belongs at the bottom. **Shared with me** is flattened, as agreed — one row per granted item with who it came from, and a name that navigates to `s.vpath`. That value comes from the server (#582), so the view does not rebuild `/shared/<owner>/<name>` itself and cannot drift from what the overlay actually resolves. A group-derived grant says **via {group}**. Cheap to render, and it is the honest answer to "where did that file go?" when someone leaves a group — the grant goes with the membership. **Rendered into the existing `#listpane`.** That element is what the view machinery already reveals for this view; adding a sibling container would have meant teaching `setView` about it for no gain. The tab strip is the first `<li>`, styled as a strip. Given that a *merged* switch turned out to be invisible three rounds ago because I did not know about `SET_SLOTS`, staying inside a container the shell already manages is deliberate. Everything the previous list showed is preserved: key-link, password and file-drop badges, expiry, copy and revoke. The one-shot prints its assumptions before acting — every helper it calls (`load`, `askConfirm`, `copyText`, `fmtTime`, `setView`, `closeMenus`) and every existing i18n key it reuses, with a count. 6 new keys ×4. Red witnessed: the `pure:share-groups` block did not exist. Verified: `share-groups.test.js` green, all eleven web tests green, `extract.js` + `node --check` (#389 fence gate) green, `\\u` escape guard green, full Go suite green. **Not verified:** appearance, and no live round-trip. #571's UI now wants a release and a look on the dogfood.
Cordy merged commit d723344458 into main 2026-09-17 22:40:13 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
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: Cordy/Cairn#583
No description provided.