Preflight: Collection Settings in React, Team Collection page (BL-16735)

Branch BL-16735-team-collection-settings, stacked on #8493 (base BL-16733-xmatter-settings at 5b0789127d), in stack #8498. Nothing waits on you; one optional re-run is offered below.
Draft PR Up to date with base Bot findings all answered No decisions waiting

What this PR is about

Problem

The new React Collection Settings dialog (BL-16271) showed only a placeholder on its Team Collection page. Users still had to use the old WinForms dialog to see a Team Collection's shared folder, edit its administrators, or turn a collection into a Team Collection.

What the PR does

  • The page reuses the old tab's panel, including the experimental warning and the subscription overlay. The WinForms tab and its Create dialog work as before.
  • Administrators are kept by the dialog, like the subscription code. When the user edits them, they are checked in the browser using the rule C# uses, so a bad list shows an error in the field and disables OK. A change is saved through ApplyAdministrators and needs a restart, as in the old dialog.
  • Create a Team Collection opens the existing Create dialog in the browser. Its Create & Restart works as before: the settings dialog saves the user's other edits, then C# creates the Team Collection and Bloom restarts. The edits are saved first so they reach the shared copy, and the Team Collection subscription rules apply (no Pro code). This reverses PLAN Q12, which had deferred the create to the settings dialog's OK; the plan says why.
  • No create while a rename is unsaved. A rename only happens as Bloom restarts, so the Team Collection would get the old name, which is also the name the Create dialog asks the user to approve. While the name has an unsaved edit, Create is disabled with a note to save the rename first.
  • The page is hidden when the feature is off (as saved) and this is not a Team Collection, and for a Bloom Library book downloaded for editing.

Quality gate

TypecheckPassed
LintPassed (no errors) at HEAD.
MergeRestacked: the branch holds only BL-16735's four commits on top of BL-16733 5b0789127d, and the PR lists only its 16 files. BL-16734 and master come in through the base branches, not merged here.
TypeScript tests (vitest)Passed at HEAD: the 87 tests in collection/ and teamCollection/. The full suite passed on the previous base (1593). Its run at HEAD was stopped part way, because the machine was critically low on memory.
C# tests (NUnit)Passed at HEAD: the 401 CollectionSettings and TeamCollection tests. The full suite passed on the previous base (3845, after refreshing this worktree's stale copy of the theme CSS the base had changed). Its run at HEAD did not start, for the same memory reason.
Production bundleCompiled on the first commit (build/agent-vite.sh). Not re-run since.
Repo check: e2e specs at nightly sizeDid not apply: no src/BloomE2E/tests/*.spec.ts in the diff.
Live checkIn a running Bloom (BL-17007 Andika Test, expired subscription; nothing saved). The page shows behind the subscription overlay. With the overlay hidden in the DOM: after a new name was typed on the Advanced page, the page showed the note and Create was disabled. From an unedited dialog, the Create dialog opened in the browser with Create & Restart and the Dropbox folder filled in. Cancel left the collection unchanged.

What changed this run

Restacked as the stack was rewritten: rebased onto each new BL-16733 (one conflict in the dialog's state declarations, keeping both sides) and force-pushed. One small commit gives the Team Collection values the same get-only shape BL-16734 gave the subscription's. Commits.

Reviewer outcomes

Local review (light sub-agent pass)Clean, over the restacked diff, checking how BL-16735 sits on the new base.
DevinComplete for HEAD. Nothing new after the restack: its findings are the earlier ones, each already answered (Pro rule, saved administrators, rename with create fixed; retry after a failed create, silently refused Pro code, failed save drops the create, XLF removal declined or not an issue). No threads open.
GreptileLast reviewed 1f3abe5543, the same behavior as HEAD (since then: the rebase and the small property change). Its findings there are answered (#8502 note). It has not reviewed the restacked commits.
CIpr-automation passed for the restacked head (GitHub runs it again now that the stack is current). There is no build or test CI on this PR; the local gates stand in for it.

Worth knowing

  • The live check could not cover a real Team Collection (administrators box) or an actual create-and-restart. The open collection's subscription has expired, and I saved nothing. Unit tests cover both, and the test ideas on the card ask the tester to do them.
  • The old WinForms dialog has no rename guard; it goes away at cutover.

Decisions

None waiting. Optional: say if you want the full vitest and C# suites re-run at HEAD once memory allows.