import { aniListData } from "@/lib/anilist/AniList"; import { useState, useEffect, Fragment } from "react"; import Head from "next/head"; import Link from "next/link"; import Footer from "@/components/shared/footer"; import Image from "next/image"; import Content from "@/components/home/content"; import { motion } from "framer-motion"; import { signOut, useSession } from "next-auth/react"; import Genres from "@/components/home/genres"; import Schedule from "@/components/home/schedule"; import getUpcomingAnime from "@/lib/anilist/getUpcomingAnime"; import GetMedia from "@/lib/anilist/getMedia"; // import UserRecommendation from "../../components/home/recommendation"; import MobileNav from "@/components/shared/MobileNav"; import { getGreetings } from "@/utils/getGreetings"; import { redis } from "@/lib/redis"; import { NewNavbar } from "@/components/shared/NavBar"; export async function getServerSideProps() { let cachedData; if (redis) { cachedData = await redis.get("index_server"); } if (cachedData) { const { genre, detail, populars } = JSON.parse(cachedData); const upComing = await getUpcomingAnime(); return { props: { genre, detail, populars, upComing, }, }; } else { const trendingDetail = await aniListData({ sort: "TRENDING_DESC", page: 1, }); const popularDetail = await aniListData({ sort: "POPULARITY_DESC", page: 1, }); const genreDetail = await aniListData({ sort: "TYPE", page: 1 }); if (redis) { await redis.set( "index_server", JSON.stringify({ genre: genreDetail.props, detail: trendingDetail.props, populars: popularDetail.props, }), // set cache for 2 hours "EX", 60 * 60 * 2 ); } const upComing = await getUpcomingAnime(); return { props: { genre: genreDetail.props, detail: trendingDetail.props, populars: popularDetail.props, upComing, }, }; } } export default function Home({ detail, populars, upComing }) { const { data: sessions } = useSession(); const { anime: currentAnime, manga: currentManga } = GetMedia(sessions, { stats: "CURRENT", }); const { anime: plan } = GetMedia(sessions, { stats: "PLANNING" }); const { anime: release } = GetMedia(sessions); const [schedules, setSchedules] = useState(null); const [anime, setAnime] = useState([]); const [recentAdded, setRecentAdded] = useState([]); async function getRecent() { const data = await fetch(`/api/v2/etc/recent/1`) .then((res) => res.json()) .catch((err) => console.log(err)); setRecentAdded(data?.results); } useEffect(() => { if (sessions?.user?.version) { if (sessions.user.version !== "1.0.1") { signOut("AniListProvider"); } } }, [sessions?.user?.version]); useEffect(() => { getRecent(); }, []); const update = () => { setAnime((prevAnime) => prevAnime.slice(1)); }; useEffect(() => { if (upComing && upComing.length > 0) { setAnime(upComing); } }, [upComing]); // useEffect(() => { // const getSchedule = async () => { // try { // const res = await fetch(`/api/v2/etc/schedule`); // const data = await res.json(); // if (!res.ok) { // setSchedules(null); // } else { // setSchedules(data); // } // } catch (err) { // console.log(err); // } // }; // getSchedule(); // }, []); const [releaseData, setReleaseData] = useState([]); useEffect(() => { function getRelease() { let releasingAnime = []; let progress = []; let seenIds = new Set(); // Create a Set to store the IDs of seen anime release.map((list) => { list.entries.map((entry) => { if ( entry.media.status === "RELEASING" && !seenIds.has(entry.media.id) ) { releasingAnime.push(entry.media); seenIds.add(entry.media.id); // Add the ID to the Set } progress.push(entry); }); }); setReleaseData(releasingAnime); setProg(progress); } getRelease(); }, [release]); const [listAnime, setListAnime] = useState(null); const [listManga, setListManga] = useState(null); const [planned, setPlanned] = useState(null); const [user, setUser] = useState(null); const [removed, setRemoved] = useState(); const [prog, setProg] = useState(null); const popular = populars?.data; const data = detail.data[0]; useEffect(() => { async function userData() { try { if (sessions?.user?.name) { await fetch(`/api/user/profile`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ name: sessions.user.name, }), }); } } catch (error) { console.log(error); } let data; try { if (sessions?.user?.name) { const res = await fetch( `/api/user/profile?name=${sessions.user.name}` ); if (!res.ok) { switch (res.status) { case 404: { console.log("user not found"); break; } case 500: { console.log("server error"); break; } default: { console.log("unknown error"); break; } } } else { data = await res.json(); // Do something with the data } } } catch (error) { console.error(error); // Handle the error here } if (!data) { const dat = JSON.parse(localStorage.getItem("artplayer_settings")); if (dat) { const arr = Object.keys(dat).map((key) => dat[key]); const newFirst = arr?.sort((a, b) => { return new Date(b?.createdAt) - new Date(a?.createdAt); }); const uniqueTitles = new Set(); // Filter out duplicates and store unique entries const filteredData = newFirst.filter((entry) => { if (uniqueTitles.has(entry.aniTitle)) { return false; } uniqueTitles.add(entry.aniTitle); return true; }); setUser(filteredData); } } else { // Create a Set to store unique aniTitles const uniqueTitles = new Set(); // Filter out duplicates and store unique entries const filteredData = data?.WatchListEpisode.filter((entry) => { if (uniqueTitles.has(entry.aniTitle)) { return false; } uniqueTitles.add(entry.aniTitle); return true; }); setUser(filteredData); } // const data = await res.json(); } userData(); }, [sessions?.user?.name, removed]); useEffect(() => { async function userData() { if (!sessions?.user?.name) return; const getMedia = currentAnime.find((item) => item.status === "CURRENT") || null; const listAnime = getMedia?.entries .map(({ media }) => media) .filter((media) => media); const getManga = currentManga?.find((item) => item.status === "CURRENT") || null; const listManga = getManga?.entries .map(({ media }) => media) .filter((media) => media); const planned = plan?.[0]?.entries .map(({ media }) => media) .filter((media) => media); if (listManga) { setListManga(listManga); } if (listAnime) { setListAnime(listAnime); } if (planned) { setPlanned(planned); } } userData(); // eslint-disable-next-line react-hooks/exhaustive-deps }, [sessions?.user?.name, currentAnime, plan]); // console.log({ recentAdded }); return ( Moopa {/* Write the best SEO for this homepage */}
{/* PC / TABLET */}

{data.title.english || data.title.romaji || data.title.native}

START WATCHING
{`cover
{sessions && (
{getGreetings() && ( <> {getGreetings()},

{sessions?.user.name}

)}
)}
{user?.length > 0 && user?.some((i) => i?.watchId) && ( )} {sessions && releaseData?.length > 0 && ( )} {sessions && listAnime?.length > 0 && ( )} {sessions && listManga?.length > 0 && ( )} {/* {recommendations.length > 0 && (

Based on Your List
Recommendations

)} */} {/* SECTION 2 */} {sessions && planned?.length > 0 && ( )}
{/* SECTION 3 */} {recentAdded?.length > 0 && ( )} {/* SECTION 4 */} {detail && ( )} {/* Schedule */} {anime.length > 0 && ( )} {/* SECTION 5 */} {popular && ( )}