dptxa-proxy / src /components /DeferredHero.astro
TXAVLOG
Deploy DPTXA to Hugging Face Spaces
4bea261
Raw
History Blame Contribute Delete
3.01 kB
---
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);
---
<HeroBanner movies={heroMovies} client:load />