Settings → System: stale "managed in the legacy UI" copy pointing at a UI removed in #91b, and it renders as a dead link #730

Open
opened 2026-08-04 21:23:48 +02:00 by timothy · 0 comments
Owner

Symptom

/app/settings/system shows:

Connections, credentials and library sync are managed in the legacy UI.

It renders with an external-link icon and a "Legacy UI" badge, so it looks like a link — but there
is no href, so clicking does nothing. The legacy Blazor UI was removed entirely in the #91 phase (b)
cutover, so there is nowhere for it to point.

Cause

web/src/screens/SettingsScreen.tsx:240-248

function LegacyCallout({ children }: { children: ReactNode }) {
  return (
    <div className="ctv-settings-callout">
      <ExternalLink aria-hidden="true" size={14} />   {/* looks clickable */}
      <span>{children}</span>
      <Badge tone="neutral">Legacy UI</Badge>
    </div>
  );
}

The ExternalLink icon + badge imply navigation the component never provides.

The copy is not merely stale — it is now incorrect

#202 delivered the media-source write API and SPA screens, so these connections are no longer
read-only or legacy-managed. docs/endpoint-index.md lists the write paths, e.g.:

  • PUT /api/v1/media-sources/jellyfin/connection — connect / reconnect / edit
  • POST /api/v1/media-sources/jellyfin/disconnect
  • PUT /api/v1/media-sources/{plex,jellyfin,emby}/{id}/libraries
  • PUT /api/v1/media-sources/{...}/{id}/path-replacements
  • POST /api/v1/media-sources/{...}/{id}/refresh-libraries

with web/src/screens/PlexSourceScreen.tsx and RemoteSourceScreen.tsx already in the SPA.

All three stale sites (fix together, not just the reported one)

Line Text
SettingsScreen.tsx:886 "Connections, credentials and library sync are managed in the legacy UI." (reported)
SettingsScreen.tsx:857 Card subtitle: "Read-only — add or edit connections in the legacy UI"
SettingsScreen.tsx:353 Row help: "Display language for the legacy UI, as a culture code (e.g. en-US)."

The LegacyCallout component itself has exactly one usage, so if the callout goes, the component
should go with it rather than being left dead.

Line 353 needs a judgement call rather than a blind sweep: confirm whether that language setting still
drives anything in the SPA/server, and either reword it or flag it as genuinely obsolete.

Done-when

  • No SPA copy references the removed legacy UI
  • Media-sources card copy reflects the #202 write capability (not "read-only")
  • LegacyCallout removed if it ends up unused
  • Language setting (line 353) verified as still meaningful, and reworded or removed accordingly
  • Repo-wide grep confirms no other user-facing "legacy UI" copy remains
  • Adversarial review passed
## Symptom `/app/settings/system` shows: > Connections, credentials and library sync are managed in the legacy UI. It renders with an external-link icon and a "Legacy UI" badge, so it **looks like a link** — but there is no `href`, so clicking does nothing. The legacy Blazor UI was removed entirely in the #91 phase (b) cutover, so there is nowhere for it to point. ## Cause `web/src/screens/SettingsScreen.tsx:240-248` ```tsx function LegacyCallout({ children }: { children: ReactNode }) { return ( <div className="ctv-settings-callout"> <ExternalLink aria-hidden="true" size={14} /> {/* looks clickable */} <span>{children}</span> <Badge tone="neutral">Legacy UI</Badge> </div> ); } ``` The `ExternalLink` icon + badge imply navigation the component never provides. ## The copy is not merely stale — it is now incorrect #202 delivered the media-source write API **and** SPA screens, so these connections are no longer read-only or legacy-managed. `docs/endpoint-index.md` lists the write paths, e.g.: - `PUT /api/v1/media-sources/jellyfin/connection` — connect / reconnect / edit - `POST /api/v1/media-sources/jellyfin/disconnect` - `PUT /api/v1/media-sources/{plex,jellyfin,emby}/{id}/libraries` - `PUT /api/v1/media-sources/{...}/{id}/path-replacements` - `POST /api/v1/media-sources/{...}/{id}/refresh-libraries` with `web/src/screens/PlexSourceScreen.tsx` and `RemoteSourceScreen.tsx` already in the SPA. ## All three stale sites (fix together, not just the reported one) | Line | Text | |---|---| | `SettingsScreen.tsx:886` | "Connections, credentials and library sync are managed in the legacy UI." (reported) | | `SettingsScreen.tsx:857` | Card subtitle: "Read-only — add or edit connections in the legacy UI" | | `SettingsScreen.tsx:353` | Row help: "Display language for the **legacy UI**, as a culture code (e.g. en-US)." | The `LegacyCallout` component itself has exactly one usage, so if the callout goes, the component should go with it rather than being left dead. Line 353 needs a judgement call rather than a blind sweep: confirm whether that language setting still drives anything in the SPA/server, and either reword it or flag it as genuinely obsolete. ## Done-when - [ ] No SPA copy references the removed legacy UI - [ ] Media-sources card copy reflects the #202 write capability (not "read-only") - [ ] `LegacyCallout` removed if it ends up unused - [ ] Language setting (line 353) verified as still meaningful, and reworded or removed accordingly - [ ] Repo-wide grep confirms no other user-facing "legacy UI" copy remains - [ ] Adversarial review passed
timothy added the bugpriority: lowfrontend labels 2026-08-04 21:23:48 +02:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: timothy/ersatztv#730