Skip to content

Fix Jellyseerr search results not navigating to details page#54

Open
rsiyasena wants to merge 2 commits intoMoonfin-Client:masterfrom
rsiyasena:fix/jellyseerr-search-navigation
Open

Fix Jellyseerr search results not navigating to details page#54
rsiyasena wants to merge 2 commits intoMoonfin-Client:masterfrom
rsiyasena:fix/jellyseerr-search-navigation

Conversation

@rsiyasena
Copy link

@rsiyasena rsiyasena commented Feb 13, 2026

Summary

  • Jellyseerr search results were broken — selecting a Jellyseerr movie or TV show from the Search view did nothing (no navigation, no error). The root cause: Search.js was calling onSelectItem with a manually constructed Jellyfin-shaped object (Id, Name, Type), but the app's Jellyseerr details flow expects the native mediaId/mediaType format routed through the dedicated handleSelectJellyseerrItem handler.
  • Fix: Route Jellyseerr search results through onSelectJellyseerrItem (the same handler already used by JellyseerrDiscover), passing the native mediaId and mediaType so the existing Jellyseerr details flow picks them up correctly.
  • Jellyseerr movie details caused a black screen — after the navigation fix, selecting a movie from Jellyseerr search showed a loading spinner then a permanent black screen requiring force-close. TV shows worked fine. Root cause: multiple rendering vulnerabilities in JellyseerrDetails with no error boundary to catch crashes.
  • Fix: Added an error boundary around JellyseerrDetails, switched image URLs to HTTPS, reduced backdrop size from original to w1280 to prevent webOS memory crashes, added defensive checks for movie-specific code paths (formatCurrency, voteAverage.toFixed, keywords array validation), and aligned Search's media_type handling with JellyseerrDiscover's pattern.

What changed

File Change
src/views/Search/Search.js Accept new onSelectJellyseerrItem prop; use it for Jellyseerr results instead of onSelectItem with a faked Jellyfin object. Add media_type (snake_case) check to match Discover pattern. Fix handleClearSearch missing albums/artists/songs fields.
src/App/App.js Pass the existing handleSelectJellyseerrItem callback down to <Search />. Add PanelErrorBoundary component to catch rendering crashes and show a recoverable error screen instead of black screen. Wrap JellyseerrDetails panel with it.
src/views/JellyseerrDetails/JellyseerrDetails.js Reduce backdrop from original to w1280 size. Wrap formatCurrency in try-catch. Add Number() coercion for voteAverage. Use Array.isArray for keywords validation.
src/services/jellyseerrApi.js Fix getImageUrl to use HTTPS instead of HTTP.

Test plan

  • Search for a movie — Jellyseerr results navigate to details page without black screen
  • Search for a TV show — Jellyseerr results navigate to details page correctly
  • Jellyfin search results still navigate to the standard details page (no regression)
  • Person search results still navigate correctly
  • JellyseerrDiscover item selection still works as before
  • Movie details page loads fully (poster, backdrop, facts, cast, recommendations)
  • Error boundary shows "Something went wrong" with Go Back button if a rendering error occurs

🤖 Generated with Claude Code

rsiyasena and others added 2 commits February 12, 2026 18:58
Selecting a Jellyseerr result from Search was calling onSelectItem with
a manually constructed Jellyfin-shaped object, which failed to open the
Jellyseerr details view. Route Jellyseerr results through the dedicated
onSelectJellyseerrItem handler instead, passing the native mediaId and
mediaType so the existing Jellyseerr details flow handles it correctly.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Movies from Jellyseerr search/discover caused a loading spinner followed
by a permanent black screen on webOS TVs. Multiple defensive fixes:

- Add PanelErrorBoundary around JellyseerrDetails to catch rendering
  crashes and show a recoverable error screen instead of black screen
- Fix getImageUrl to use HTTPS instead of HTTP (mixed content blocking)
- Reduce backdrop image size from 'original' to 'w1280' to prevent
  webOS memory crashes from large movie backdrops
- Wrap formatCurrency (movie-only code) in try-catch for older webOS
- Add Number() coercion for voteAverage.toFixed() type safety
- Use Array.isArray for keywords (TMDB returns different structures)
- Add media_type (snake_case) check in Search to match Discover pattern
- Fix handleClearSearch missing albums/artists/songs fields

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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