feat(core): add pagination to explore, search, person, and library endpoints

Convert trending, search, people.detail, and dashboard.library to page-based responses (`page` / `totalPages`) so clients can load results incrementally.

Update `@sofa/core` discovery and person services to accept a `page` / `limit` input and slice results accordingly. Add a new DB migration to persist the data needed to back paginated filmography queries.

On the web, introduce a `useInfiniteScroll` hook and wire up `useInfiniteQuery` in the explore, person detail, and filterable title row components with an intersection-observer sentinel. On native, switch the same screens from `useQuery` to `useInfiniteQuery` with `onEndReached` / `ListFooterComponent` loading indicators. Also replace remaining `FlatList` usages with `FlashList` in the home and title detail screens.
This commit is contained in:
2026-03-15 17:37:39 -04:00
parent d0eca7cf32
commit 6c193a9271
34 changed files with 4135 additions and 313 deletions
@@ -7,11 +7,13 @@ _openapi:
structuredData:
headings: []
contents:
- content: Fetch all titles in the user's library with their tracking statuses.
- content: >-
Fetch paginated titles in the user's library with their tracking
statuses.
---
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Fetch all titles in the user's library with their tracking statuses.
Fetch paginated titles in the user's library with their tracking statuses.
<APIPage document={"./public/openapi.json"} operations={[{"path":"/dashboard/library","method":"get"}]} />
@@ -8,12 +8,12 @@ _openapi:
headings: []
contents:
- content: >-
Fetch a person's profile and filmography. Imports from TMDB on first
access if not yet cached locally.
Fetch a person's profile and paginated filmography. Imports from TMDB
on first access if not yet cached locally.
---
{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}
Fetch a person's profile and filmography. Imports from TMDB on first access if not yet cached locally.
Fetch a person's profile and paginated filmography. Imports from TMDB on first access if not yet cached locally.
<APIPage document={"./public/openapi.json"} operations={[{"path":"/people/{id}","method":"get"}]} />