fix(settings): stop offering a column the backend rejects
Settings -> Track List Columns listed two rows both called "Track Name", one of which could not be ticked, and a screen reader heard "Show the Track Name column" twice with nothing to tell them apart. They are `titleArtist` and `trackName`, and the issue left open which way to fix it: a second label so the sort dropdown and the configurator can say different words, or drop the row because the user cannot select it. The code settles that. `titleArtist` is not in `tracklist.AllColumnIDs`, so `Config.Validate()` returns `unknown track-list column ID: "titleArtist"` -- ticking the row sends a column set the backend rejects, `config-page` swallows the rejection into a `console.error`, and the tick reverts. A second label would have named a control that cannot work. So a definition says whether it is a *choice*, and the configurator reads `CONFIGURABLE_COLUMN_IDS` rather than `Object.keys(COLUMN_DEFS)`. The new test reads Go's own list out of `backend/tracklist/config.go` rather than writing it down a third time, since a third copy is the fault one step earlier. Verified by planting: with the filter removed all four assertions fail with the defect's own numbers. Not fixed here, and filed as #231: `SetTrackListColumns` assigns before it validates, so a rejected list stays in memory and `Save()` validates the whole config -- one tick and no setting saves for the rest of the session. That is reachable from any invalid input, not from this row. Closes #197
This commit is contained in:
@@ -3275,6 +3275,27 @@ its own duplicates apart) — and changing either is invisible against an
|
||||
existing `YJ_HOME`, whose `config.toml` already holds the old list, so
|
||||
`make sandbox-seed NAME=default` before believing the app.
|
||||
|
||||
**And the *valid* columns are declared twice too, which is the pair
|
||||
that drifted.** `tracklist.AllColumnIDs` is what the backend accepts;
|
||||
`COLUMN_DEFS` is what the frontend knows how to draw, and they are not
|
||||
the same set — `titleArtist` is a definition and not a choice, since it
|
||||
is the phone's stacked column and is picked by width in
|
||||
`PHONE_COLUMN_IDS`. Settings built its list from `Object.keys(
|
||||
COLUMN_DEFS)` and so offered it: **two rows both called "Track Name"**
|
||||
(#197), the second unselectable, because ticking it sends a column set
|
||||
Go rejects with `unknown track-list column ID` and `config-page`
|
||||
swallows that into a `console.error`. `CONFIGURABLE_COLUMN_IDS` is what
|
||||
the configurator reads now, derived from a `configurable` flag on the
|
||||
definition, and `settings-column-list.test.ts` reads Go's own list out
|
||||
of the source rather than writing it down a third time — the rule being
|
||||
about every column, so checking one checks nothing.
|
||||
|
||||
One thing it does **not** fix, because it is reachable from any invalid
|
||||
input rather than from that row: `SetTrackListColumns` assigns before it
|
||||
validates, so a rejected list stays in memory and `Save()` validates the
|
||||
whole config — one tick and **no setting saves for the rest of the
|
||||
session**, silently. That is #231.
|
||||
|
||||
**Event-driven communication**: Backend emits events via Wails runtime; frontend stores subscribe to them. Event names are constants in `backend/events/`.
|
||||
|
||||
`frontend/src/events.ts` is **generated** from `backend/events/events.go`
|
||||
|
||||
Reference in New Issue
Block a user