feat(v3): Shared screens — With me / With others / Via links#18
Merged
Conversation
Replaces the three /v2/shared/{with-me,with-others,via-links} placeholders
with a single parameterized SharedComponent wired to
SharesService.listShares. Each route supplies a { variant } data entry and
the component picks title/eyebrow/filter/empty-copy from a small config map.
- Hero: "Shared" eyebrow + variant-specific h1 ("With me" / "With others"
/ "Via links") matching the design's editorial headers.
- Table columns: Name (FileGlyph via mimeToGlyph + title + description) ·
Recipients ("N users · M links") · Modified (amTimeAgo) · row-more.
- Variant filters against the full shares list:
with-me → shares where parent is set (you're a child-share recipient)
with-others → shares where parent is null (you own the share)
via-links → shares with at least one link
The backend doesn't split this into three endpoints, so client-side
filtering keeps service surface unchanged.
- Row click opens /spaces/shares/<alias> (classic) for m3; v2 shares
browser is a future PR.
Breadcrumbs push "Shared" → variant label so the TitleBar reflects the
chosen sub-view.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
zjean
added a commit
that referenced
this pull request
Apr 23, 2026
## Summary PR #4 of 9 in [milestone 3](../blob/main/docs/plans/2026-04-23-v3-ui-redesign-milestone3.md). Replaces the \`/v2/trash\` placeholder with a trash-bin list wired to \`SpacesService.listTrashBins\`. **Stacked on [#18](../pull/18) — chain through #17, #16 to \`main\`.** ## What's here - Toolbar: \"Trash\" title + monoline summary (\`<total> items across <bins> bins\`) + Restore / Empty trash buttons (both disabled for m3 — per-item operations land with the v2 trash file-list) + Refresh. - Columns: Space · Items · Last deletion · \`chevRight\` drill-in. - Rose-soft glyph block; rows dim to \`opacity: 0.85\` to signal trashed content, full opacity on hover. - Click opens \`/spaces/trash/<alias>\` (classic) so users can actually manage trashed files end-to-end today; the inline Restore / Empty ops are a follow-up PR. Also drops the now-unused \`placeholder()\` helper from \`v2.routes.ts\` since every left-nav destination has a real component. \`PlaceholderComponent\` stays co-located for remaining milestone-3 AppRail screens (Search / Settings / People) to reuse. ## Test plan - [x] \`npm run lint\` — clean - [x] \`npm run build --configuration production\` — clean, no budget warnings - [ ] Reviewer smoke: \`/v2/trash\` loads bin list with per-space trash counts; clicking a row drills into the classic trash browser. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
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
PR #3 of 9 in milestone 3. Replaces the three `/v2/shared/*` placeholders with a single parameterized `SharedComponent` wired to `SharesService.listShares`.
Stacked on #17 — chain: `feat/v3-shared` → `feat/v3-spaces` → `feat/v3-browser-grid-gallery` → `main`. Auto-retargets as ancestors merge.
What's here
The backend doesn't split these into three endpoints; client-side filtering keeps the service surface unchanged.
Test plan
🤖 Generated with Claude Code