From 50a0f0240d7fef133eb5acc1bea2b1168b08e9db Mon Sep 17 00:00:00 2001 From: Factiven Date: Sun, 24 Dec 2023 13:03:54 +0700 Subject: migrate to typescript --- pages/en/index.js | 610 ------------------------------------------------------ 1 file changed, 610 deletions(-) delete mode 100644 pages/en/index.js (limited to 'pages/en/index.js') diff --git a/pages/en/index.js b/pages/en/index.js deleted file mode 100644 index 29b0778..0000000 --- a/pages/en/index.js +++ /dev/null @@ -1,610 +0,0 @@ -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 && ( - - - - )} - - - - - -
-
-