Spaces:
Sleeping
Sleeping
| --- | |
| import TopTenSection from './TopTenSection.jsx'; | |
| import { getSeriesMovies } from '../lib/api.js'; | |
| import { txasupabase } from '../lib/txasupabase.js'; | |
| const data = await getSeriesMovies(1); | |
| let rawMovies = data?.items || []; | |
| if (rawMovies.length < 4) { | |
| try { | |
| const res = await fetch('https://phimapi.com/v1/api/danh-sach/phim-bo?page=1'); | |
| if (res.ok) { | |
| const d = await res.json(); | |
| const items = d.data?.items || []; | |
| const mapped = items.map(item => ({ | |
| _id: item._id, | |
| name: item.name, | |
| slug: item.slug, | |
| origin_name: item.origin_name, | |
| thumb_url: item.thumb_url, | |
| poster_url: item.poster_url, | |
| year: item.year, | |
| quality: item.quality || 'FHD', | |
| lang: item.lang || 'Vietsub', | |
| episode_current: item.episode_current || 'Tập 1', | |
| type: item.type || 'series', | |
| isLocal: false | |
| })); | |
| rawMovies = [...rawMovies, ...mapped.filter(m => !rawMovies.some(x => x.slug === m.slug))]; | |
| } | |
| } catch (e) { | |
| console.error('TopTen fallback error:', e); | |
| } | |
| } | |
| // Smart Deduplicate by base name (to avoid multiple seasons of the same show) | |
| const uniqueMovies = []; | |
| const seenBaseNames = new Set(); | |
| for (const m of rawMovies) { | |
| const baseName = m.name.split(' (Phần')[0].trim().toLowerCase(); | |
| if (!seenBaseNames.has(baseName)) { | |
| seenBaseNames.add(baseName); | |
| uniqueMovies.push(m); | |
| } | |
| } | |
| const seriesMovies = uniqueMovies.slice(0, 10); | |
| // Fetch Top Rated & Most Favorited | |
| const topRated = await txasupabase.getTopRatedMovies(10).catch(() => []); | |
| const mostFavorited = await txasupabase.getMostFavoritedMovies(10).catch(() => []); | |
| // Intelligent Fallbacks | |
| const finalSeries = seriesMovies; | |
| const finalRated = topRated.length >= 3 ? topRated : seriesMovies; | |
| const finalFavorited = mostFavorited.length >= 3 ? mostFavorited : seriesMovies; | |
| --- | |
| <TopTenSection | |
| series={finalSeries} | |
| rated={finalRated} | |
| favorited={finalFavorited} | |
| client:only="react" | |
| /> | |