From 498a10c96f15381c17bfec293da0208c069d388c Mon Sep 17 00:00:00 2001 From: Factiven Date: Thu, 20 Jul 2023 12:25:11 +0700 Subject: Update v3.6.6 > Added functionality to see more anime at home page > fixed some bugs --- pages/_app.js | 58 ++++++------- pages/en/anime/popular.js | 175 +++++++++++++++++++++++++++++++++++++++ pages/en/anime/trending.js | 175 +++++++++++++++++++++++++++++++++++++++ pages/en/index.js | 199 ++------------------------------------------- pages/en/profile/[user].js | 6 +- pages/en/search/[param].js | 4 +- 6 files changed, 393 insertions(+), 224 deletions(-) create mode 100644 pages/en/anime/popular.js create mode 100644 pages/en/anime/trending.js (limited to 'pages') diff --git a/pages/_app.js b/pages/_app.js index 6334bd9..0030e0d 100644 --- a/pages/_app.js +++ b/pages/_app.js @@ -1,4 +1,3 @@ -// import { ThemeProvider } from "next-themes"; import { useRouter } from "next/router"; import { AnimatePresence, motion as m } from "framer-motion"; import NextNProgress from "nextjs-progressbar"; @@ -6,6 +5,7 @@ import { SessionProvider } from "next-auth/react"; import "../styles/globals.css"; import "react-toastify/dist/ReactToastify.css"; import "react-loading-skeleton/dist/skeleton.css"; +import { SkeletonTheme } from "react-loading-skeleton"; export default function App({ Component, @@ -15,36 +15,36 @@ export default function App({ return ( - {/* */} - - - - + + + + + + - {/* */} ); } diff --git a/pages/en/anime/popular.js b/pages/en/anime/popular.js new file mode 100644 index 0000000..b8b19ba --- /dev/null +++ b/pages/en/anime/popular.js @@ -0,0 +1,175 @@ +import { ChevronLeftIcon } from "@heroicons/react/24/solid"; +import Image from "next/image"; +import Link from "next/link"; +import { useEffect, useState } from "react"; +import Skeleton from "react-loading-skeleton"; +import Navbar from "../../../components/navbar"; +import Footer from "../../../components/footer"; +import { getServerSession } from "next-auth"; +import { authOptions } from "../../api/auth/[...nextauth]"; +import MobileNav from "../../../components/home/mobileNav"; + +export default function PopularAnime({ sessions }) { + const [data, setData] = useState(null); + const [page, setPage] = useState(1); + const [nextPage, setNextPage] = useState(true); + const [loading, setLoading] = useState(true); + + useEffect(() => { + setLoading(true); + const fetchData = async () => { + const res = await fetch("https://graphql.anilist.co", { + method: "POST", + headers: { + "Content-Type": "application/json", + Accept: "application/json", + }, + body: JSON.stringify({ + query: `query ($page: Int, $perPage: Int) { + Page (page: $page, perPage: $perPage) { + pageInfo { + total + currentPage + lastPage + hasNextPage + perPage + } + media (sort: POPULARITY_DESC, type: ANIME) { + id + idMal + title { + romaji + } + coverImage { + large + } + averageScore + description + episodes + status + } + } + } + `, + variables: { + page: page, + perPage: 20, + }, + }), + }); + const get = await res.json(); + if (get?.data?.Page?.media?.length === 0) { + setNextPage(false); + } else if (get !== null && page > 1) { + setData((prevData) => { + return [...(prevData ?? []), ...get?.data?.Page?.media]; + }); + setNextPage(get?.data?.Page?.pageInfo.hasNextPage); + } else { + setData(get?.data?.Page?.media); + } + setNextPage(get?.data?.Page?.pageInfo.hasNextPage); + setLoading(false); + }; + fetchData(); + }, [page]); + + useEffect(() => { + function handleScroll() { + if (page > 5 || !nextPage) { + window.removeEventListener("scroll", handleScroll); + return; + } + + if ( + window.innerHeight + window.pageYOffset >= + document.body.offsetHeight - 3 + ) { + setPage((prevPage) => prevPage + 1); + } + } + + window.addEventListener("scroll", handleScroll); + + return () => window.removeEventListener("scroll", handleScroll); + }, [page, nextPage]); + + return ( + <> + +
+
+ + +

Popular Anime

+ +
+
+ {data?.map((i, index) => ( +
+ + {i.title.romaji} + + +

+ {i.status === "RELEASING" ? ( + + ) : i.status === "NOT_YET_RELEASED" ? ( + + ) : null} + {i.title.romaji} +

+ +
+ ))} + + {loading && ( + <> + {[1, 2, 4, 5, 6, 7, 8].map((item) => ( +
+
+ +
+
+ +
+
+ ))} + + )} +
+ {!loading && page > 5 && nextPage && ( + + )} +
+