import { aniListData } from "../../lib/anilist/AniList"; import React, { useState, useEffect } from "react"; import Head from "next/head"; import Link from "next/link"; import Footer from "../../components/footer"; import Image from "next/image"; import Content from "../../components/home/content"; import { motion } from "framer-motion"; import { signOut } from "next-auth/react"; import { getServerSession } from "next-auth/next"; import { authOptions } from "../api/auth/[...nextauth]"; import SearchBar from "../../components/searchBar"; import Genres from "../../components/home/genres"; import Schedule from "../../components/home/schedule"; import getUpcomingAnime from "../../lib/anilist/getUpcomingAnime"; import { useCountdown } from "../../utils/useCountdownSeconds"; import Navigasi from "../../components/home/staticNav"; import MobileNav from "../../components/home/mobileNav"; import axios from "axios"; import { createUser } from "../../prisma/user"; import { checkAdBlock } from "adblock-checker"; import { ToastContainer, toast } from "react-toastify"; import { useAniList } from "../../lib/anilist/useAnilist"; export async function getServerSideProps(context) { const session = await getServerSession(context.req, context.res, authOptions); try { if (session) { await createUser(session.user.name); } } catch (error) { console.error(error); } 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 }); const upComing = await getUpcomingAnime(); return { props: { genre: genreDetail.props, detail: trendingDetail.props, populars: popularDetail.props, sessions: session, upComing, }, }; } export default function Home({ detail, populars, sessions, upComing }) { const { media: current } = useAniList(sessions, { stats: "CURRENT" }); const { media: plan } = useAniList(sessions, { stats: "PLANNING" }); const { media: release } = useAniList(sessions); const [schedules, setSchedules] = useState(null); const [anime, setAnime] = useState([]); useEffect(() => { async function adBlock() { const ad = await checkAdBlock(); if (ad) { toast.dark( "Please disable your adblock for better experience, we don't have any ads on our site.", { position: "top-center", autoClose: false, hideProgressBar: true, closeOnClick: true, pauseOnHover: true, draggable: true, theme: "dark", } ); } } adBlock(); }, []); const update = () => { setAnime((prevAnime) => prevAnime.slice(1)); }; const [days, hours, minutes, seconds] = useCountdown( anime[0]?.nextAiringEpisode?.airingAt * 1000 || Date.now(), update ); useEffect(() => { if (upComing && upComing.length > 0) { setAnime(upComing); } }, [upComing]); useEffect(() => { const getSchedule = async () => { const res = await fetch(`/api/anify/schedule`); const data = await res.json(); if (!res.ok) { setSchedules(null); } else { setSchedules(data); } }; 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 [list, setList] = useState(null); const [planned, setPlanned] = useState(null); const [greeting, setGreeting] = useState(""); 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() { 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); }); setUser(newFirst); } } else { setUser(data?.WatchListEpisode); } // const data = await res.json(); } userData(); }, [sessions?.user?.name, removed]); useEffect(() => { const time = new Date().getHours(); let greeting = ""; if (time >= 5 && time < 12) { greeting = "Good morning"; } else if (time >= 12 && time < 18) { greeting = "Good afternoon"; } else if (time >= 18 && time < 22) { greeting = "Good evening"; } else if (time >= 22 || time < 5) { greeting = "Good night"; } setGreeting(greeting); async function userData() { if (!sessions?.user?.name) return; const getMedia = current.filter((item) => item.status === "CURRENT")[0] || null; const list = getMedia?.entries .map(({ media }) => media) .filter((media) => media); const planned = plan?.[0]?.entries .map(({ media }) => media) .filter((media) => media); if (list) { setList(list.reverse()); } if (planned) { setPlanned(planned.reverse()); } } userData(); }, [sessions?.user?.name, current, plan]); return ( <> Moopa
{/* PC / TABLET */}

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

{`alt
{/* {!sessions && (

{greeting}!

)} */} {sessions && (
{greeting},

{sessions?.user.name}

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