fix(e4): address code-review findings (a11y sweep + dedup guards)
Resolves the 5 /code-review high findings on this branch: - a11y sweep: extend aria-label to the remaining icon-only Plex card buttons the first pass missed — PlexPosterCard Info, SeasonCard watched-toggle + add-season (EpisodeCard already had them). "Fix a principle everywhere, in one sweep." - new shared lib/parseId.ts `parsePositiveIntId`, used by BOTH readSelectedId (now guarding the stored ?pl fallback the same as the URL — was unguarded) and plexSubUrl's ?v=playlist decode; removes the hand-duplicated guard. - PAGE_KEY exported from navigationInit and imported by NavigationProvider (was defined in both). - hoist a `watchedLabel` const per card so title + aria-label can't drift. +8 tests (parseId unit + guarded-stored ?pl); full FE gate green (tsc/eslint/ prettier/knip, 317 vitest).
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import type { SubviewUrl } from "../lib/history";
|
||||
import { parsePositiveIntId } from "../lib/parseId";
|
||||
|
||||
// The Plex module's sub-view union and its address-bar mirror, extracted from PlexBrowse so the
|
||||
// encode/decode round-trip (and its guards) can be unit-tested without pulling the whole component
|
||||
@@ -46,9 +47,9 @@ export const PLEX_SUB_URL: SubviewUrl<Sub> = {
|
||||
return arg ? { kind: "person", name: arg } : null;
|
||||
case "playlist": {
|
||||
// Positive-integer id only — a fractional/zero/negative ?v=playlist:<arg> would open a
|
||||
// sub-view for a non-existent id (matches the ?pl guard in PlaylistsProvider.readSelectedId).
|
||||
const id = arg ? Number(arg) : NaN;
|
||||
return Number.isInteger(id) && id > 0 ? { kind: "playlist", id } : null;
|
||||
// sub-view for a non-existent id (shares parsePositiveIntId with readSelectedId's ?pl guard).
|
||||
const id = parsePositiveIntId(arg);
|
||||
return id != null ? { kind: "playlist", id } : null;
|
||||
}
|
||||
case "season": {
|
||||
const [showId, seasonId] = arg.split(":");
|
||||
|
||||
Reference in New Issue
Block a user