diff --git a/app/actions/media.ts b/app/actions/media.ts index 758bb07..20b834a 100644 --- a/app/actions/media.ts +++ b/app/actions/media.ts @@ -47,28 +47,58 @@ export async function mergeMediaWithWatchlist( type CategoryFetcher = (page: number) => Promise; -const CATEGORY_FETCHERS: Record = { - popular: (page) => - getPopularMovies(page).then((r) => r.map(movieToMediaItem)), - 'top-rated': (page) => - getTopRatedMovies(page).then((r) => r.map(movieToMediaItem)), - upcoming: (page) => - getUpcomingMovies(page).then((r) => r.map(movieToMediaItem)), - 'now-playing': (page) => - getNowPlayingMovies(page).then((r) => r.map(movieToMediaItem)), - trending: (page) => - getTrendingMovies('week', page).then((r) => r.map(movieToMediaItem)), - 'tv-popular': (page) => - getPopularTvShows(page).then((r) => r.map(tvShowToMediaItem)), - 'tv-top-rated': (page) => - getTopRatedTvShows(page).then((r) => r.map(tvShowToMediaItem)), - 'tv-trending': (page) => - getTrendingTvShows('week', page).then((r) => r.map(tvShowToMediaItem)), - 'tv-airing-today': (page) => - getAiringTodayTvShows(page).then((r) => r.map(tvShowToMediaItem)), - 'tv-on-the-air': (page) => - getOnTheAirTvShows(page).then((r) => r.map(tvShowToMediaItem)), -}; +const CATEGORY_FETCHERS: Map = new Map([ + [ + 'popular', + (page) => getPopularMovies(page).then((r) => r.map(movieToMediaItem)), + ], + [ + 'top-rated', + (page) => getTopRatedMovies(page).then((r) => r.map(movieToMediaItem)), + ], + [ + 'upcoming', + (page) => getUpcomingMovies(page).then((r) => r.map(movieToMediaItem)), + ], + [ + 'now-playing', + (page) => + getNowPlayingMovies(page).then((r) => r.map(movieToMediaItem)), + ], + [ + 'trending', + (page) => + getTrendingMovies('week', page).then((r) => + r.map(movieToMediaItem) + ), + ], + [ + 'tv-popular', + (page) => getPopularTvShows(page).then((r) => r.map(tvShowToMediaItem)), + ], + [ + 'tv-top-rated', + (page) => + getTopRatedTvShows(page).then((r) => r.map(tvShowToMediaItem)), + ], + [ + 'tv-trending', + (page) => + getTrendingTvShows('week', page).then((r) => + r.map(tvShowToMediaItem) + ), + ], + [ + 'tv-airing-today', + (page) => + getAiringTodayTvShows(page).then((r) => r.map(tvShowToMediaItem)), + ], + [ + 'tv-on-the-air', + (page) => + getOnTheAirTvShows(page).then((r) => r.map(tvShowToMediaItem)), + ], +]); /** * Fetches a paginated list of media items for a given category and merges watchlist data. @@ -81,13 +111,8 @@ export async function fetchMoreMedia( category: string, page: number ): Promise { - if (!Object.prototype.hasOwnProperty.call(CATEGORY_FETCHERS, category)) { - return []; - } - - const fetcher = CATEGORY_FETCHERS[category]; - if (typeof fetcher !== 'function') return []; - + if (!CATEGORY_FETCHERS.has(category)) return []; + const fetcher = CATEGORY_FETCHERS.get(category)!; const items = await fetcher(page); return mergeMediaWithWatchlist(items); }