Skip to content

fix(web,api): folder browsing, responsive layout, people list for the workspace view#274

Merged
Zach Dunn (zachdunn) merged 1 commit into
mainfrom
claude/settings-folder-structure-9fa4d3
Jul 19, 2026
Merged

fix(web,api): folder browsing, responsive layout, people list for the workspace view#274
Zach Dunn (zachdunn) merged 1 commit into
mainfrom
claude/settings-folder-structure-9fa4d3

Conversation

@zachdunn

Copy link
Copy Markdown
Member

Follow-ups to the settings overhaul (#268), all found while dogfooding the new workspace view.

Folder browsing was flat

The new files tab listed every key in one flat list: WorkspaceFileTable's client never sent delimiter=/, and GET /me/workspaces/:name/files only groups keys into folder prefixes when a delimiter is given. listWorkspaceFolder now always sends it, and the client tests lock the param in. Verified end to end on the local stack: root shows folders, drill-down + breadcrumbs + URL sync work, files appear only at their leaf level.

Responsive layout

The account shell had only two modes — 3-column desktop and a ≤680px full stack. In between, the fixed 180px nav + 272px rail left the content column narrower than the file grid's minimum, so the table painted over the rail.

  • 681–1080px: new 2-column mode — side nav stays, the rail (usage / details / quick actions) moves below the content with a divider.
  • ≤560px: the file grid drops its size/type columns (via semantic wft-head__* classes, not positional nth-child) so filenames keep room instead of ellipsizing to zero width.

Rail shows the real public URL

/me/workspaces previously exposed only a hasPublicUrl boolean, so the rail could only say "configured". The endpoint now passes publicBaseUrl through (boolean kept for existing consumers — three components branch on it for open-vs-sign logic), and the details rail renders a host-labeled link with a "configured" fallback for an older API.

People tab lists members

New member-gated GET /me/workspaces/:name/members, backed by a shared membersForOrg helper in org-workspaces.ts (also adopted by the admin-ui members proxy, which previously inlined the same fetch). The payload is sanitized to email / name / role / createdAt — internal member/user IDs never reach teammates. Behavior change: non-admin members now see the people list instead of a hard "admin access required" error; the invite form stays admin-only.

Copy

Bracketed labels ([add], [copy], [invite teammate], [open on github ↗], [MEMBER]) flattened to the plain lowercase style the rest of the app uses.

Review pass

A 4-angle cleanup review (reuse / simplification / efficiency / altitude) ran before commit; applied: shared membersForOrg, dropping a duplicate per-request org fetch in the members route (memberWorkspaceOr404 already resolves the org), semantic column classes over nth-child, and two parsing/label simplifications. Noted-not-done: server-side delimiter default (would diverge from the flat-by-default contract of the token-scoped /v1/:workspace/files twin) and a breakpoint token system (no existing convention; only worth it if a third breakpoint appears).

Tests: 818 pass across web + api (new coverage for the delimiter param, members route sanitization/communal/404, member-row rendering + escaping, rail URL fallback + escaping).

…llow-ups

The 3A files tab (#268) listed every key flat: the new client never sent
delimiter=/, so the API returned no folder prefixes. Send it always, and
lock the contract in the client tests.

Stacked follow-ups from the same review pass:
- responsive shell: mid-width (681-1080px) mode moves the rail below the
  content instead of letting the file grid paint over it; <=560px drops the
  size/type columns so filenames keep room
- rail details: /me/workspaces now passes publicBaseUrl through (boolean
  hasPublicUrl kept for existing consumers) and the rail links the real
  public URL instead of the "configured" label
- people tab: member-gated GET /me/workspaces/:name/members (sanitized via
  the new shared membersForOrg helper, also adopted by admin-ui) and a
  people list every member can see; invites stay admin-only
- copy: bracketed [button] labels ([add], [copy], [invite teammate],
  [MEMBER]) flattened to the plain lowercase style used elsewhere
@zachdunn

Copy link
Copy Markdown
Member Author

📎 Attachments

files-desktop.webp

files-midwidth.webp

files-mobile.webp

people-tab.webp

Maintained by uploads.sh — re-uploading a file with the same name updates it everywhere it is embedded.

@coderabbitai

coderabbitai Bot commented Jul 19, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are limited based on label configuration.

🏷️ Required labels (at least one) (2)
  • coderabbit:review
  • review
🚫 Excluded labels (none allowed) (1)
  • wip

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: b148bb01-4852-48eb-a683-1c4c313913c7

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/settings-folder-structure-9fa4d3

Comment @coderabbitai help to get the list of available commands.

@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
uploads-api e02d793 Commit Preview URL

Branch Preview URL
Jul 19 2026, 11:08 PM

@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
uploads-web e02d793 Commit Preview URL

Branch Preview URL
Jul 19 2026, 11:08 PM

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