--- import HeroBanner from './HeroBanner.jsx'; import { getNewestMovies } from '../lib/api.js'; import { txasupabase } from '../lib/txasupabase.js'; // 1. Lấy tất cả phim cục bộ để tìm phim được ghim lên slider const localMoviesObj = await txasupabase.getLocalMovies(); const deletedSlugs = await txasupabase.getDeletedMovies(); const allLocalMovies = Object.values(localMoviesObj) .filter(m => !deletedSlugs.includes(m.movie.slug)); // Lọc các phim được chọn ghim lên slider const pinnedMovies = allLocalMovies .filter(m => m.movie.is_slider === true || m.movie.is_slider === 'true') .map(m => ({ _id: m.movie.id || m.movie.slug, name: m.movie.name, slug: m.movie.slug, origin_name: m.movie.origin_name, thumb_url: m.movie.thumb_url, poster_url: m.movie.poster_url, year: m.movie.year, quality: m.movie.quality || 'FHD', lang: m.movie.lang || 'Vietsub', episode_current: m.movie.episode_current || 'Tập 1', type: m.movie.type || 'single', isLocal: true })); // Sắp xếp phim được ghim theo thời gian cập nhật mới nhất pinnedMovies.sort((a, b) => { const timeA = new Date(localMoviesObj[a.slug]?.movie.modified?.time || 0).getTime(); const timeB = new Date(localMoviesObj[b.slug]?.movie.modified?.time || 0).getTime(); return timeB - timeA; }); // Cần tối đa 10 phim cho slider let heroMovies = [...pinnedMovies]; if (heroMovies.length === 0) { // Lấy danh sách phim mới nhất để bù đắp các vị trí trống const newest = await getNewestMovies(1); const newestMovies = newest?.items || []; let extraMovies = [...newestMovies]; if (extraMovies.length < 4) { try { const res = await fetch('https://phimapi.com/danh-sach/phim-moi-cap-nhat?page=1'); if (res.ok) { const data = await res.json(); const items = 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 || 'single', isLocal: false })); extraMovies = [...extraMovies, ...mapped.filter(m => !extraMovies.some(x => x.slug === m.slug))]; } } catch (e) { console.error('Hero fallback error:', e); } } // Thêm phim mới vào slider và loại trừ các phim đã được ghim/đã thêm để tránh trùng lặp for (const movie of extraMovies) { if (heroMovies.length >= 10) break; if (!heroMovies.some(m => m.slug === movie.slug)) { heroMovies.push(movie); } } } // Giới hạn đúng tối đa 10 phim heroMovies = heroMovies.slice(0, 10); ---