diff --git a/app/components/Discovery/Modal/PopularFilters.ts b/app/components/Discovery/Modal/PopularFilters.ts new file mode 100644 index 0000000..82d0948 --- /dev/null +++ b/app/components/Discovery/Modal/PopularFilters.ts @@ -0,0 +1,34 @@ +import { FilterDefault } from "#/api/utils"; + +export const TabOngoing = { + id: "ongoing", + name: "Онгоинги", + filter: { + ...FilterDefault, + sort: 3, + episodes_from: 1, + episodes_to: 48, + status_id: 2, + }, +}; + +export const TabFinished = { + id: "finished", + name: "Завершённые", + filter: { ...FilterDefault, sort: 3, status_id: 1 }, +}; + +export const TabFilms = { + id: "films", + name: "Фильмы", + filter: { ...FilterDefault, sort: 3, category_id: 2 }, +}; + +export const TabOVA = { + id: "ova", + name: "OVA", + filter: { ...FilterDefault, sort: 3, category_id: 3 }, +}; + +export const tabs = [TabOngoing, TabFinished, TabFilms, TabOVA]; +export const tabsId = { ongoing: 0, finished: 1, films: 2, ova: 3 }; diff --git a/app/components/Discovery/Modal/PopularModal.tsx b/app/components/Discovery/Modal/PopularModal.tsx new file mode 100644 index 0000000..36616ab --- /dev/null +++ b/app/components/Discovery/Modal/PopularModal.tsx @@ -0,0 +1,82 @@ +"use client"; + +import { ENDPOINTS } from "#/api/config"; +import { FetchFilter, useSWRfetcher } from "#/api/utils"; +import { useUserStore } from "#/store/auth"; +import useSWR from "swr"; + +import { tabs, tabsId } from "./PopularFilters"; +import { + Button, + ButtonGroup, + Modal, + ModalBody, + ModalHeader, +} from "flowbite-react"; +import { useEffect, useState } from "react"; +import { ReleaseLink } from "#/components/ReleaseLink/ReleaseLinkUpdate"; +import { Spinner } from "#/components/Spinner/Spinner"; +type ModalProps = { + isOpen: boolean; + setIsOpen: (value: boolean) => void; +}; + +export const PopularModal = ({ isOpen, setIsOpen }: ModalProps) => { + const token = useUserStore((state) => state.token); + const [tab, setTab] = useState< + "ongoing" | "finished" | "films" | "ova" | string + >("ongoing"); + const [content, setContent] = useState(null); + + useEffect(() => { + setContent(null); + async function _loadReleases() { + const [data, error] = await FetchFilter( + tabs[tabsId[tab]].filter, + 0, + token + ); + if (!error) { + setContent(data.content); + } + } + _loadReleases(); + }, [tab, token]); + + return ( + setIsOpen(false)} + size="7xl" + dismissible + > + Популярное + +
+ + {tabs.map((item) => ( + + ))} + +
+
+ {content ? + content.map((release) => { + return ( +
+ +
+ ); + }) + : } +
+
+
+ ); +}; diff --git a/app/pages/Discover.tsx b/app/pages/Discover.tsx index e75d63b..ab70259 100644 --- a/app/pages/Discover.tsx +++ b/app/pages/Discover.tsx @@ -2,16 +2,24 @@ import { CollectionsOfTheWeek } from "#/components/Discovery/CollectionsOfTheWeek"; import { DiscussingToday } from "#/components/Discovery/DiscussingToday"; import { InterestingCarousel } from "#/components/Discovery/InterestingCarousel"; +import { PopularModal } from "#/components/Discovery/Modal/PopularModal"; import { RecommendedCarousel } from "#/components/Discovery/RecommendedCarousel"; import { WatchingNowCarousel } from "#/components/Discovery/WatchingNowCarousel"; import { Button } from "flowbite-react"; +import { useState } from "react"; export const DiscoverPage = () => { + const [PopularModalOpen, setPopularModalOpen] = useState(false); + return ( <>
- @@ -32,6 +40,8 @@ export const DiscoverPage = () => { + + ); }; diff --git a/app/pages/IndexFilters.tsx b/app/pages/IndexFilters.ts similarity index 90% rename from app/pages/IndexFilters.tsx rename to app/pages/IndexFilters.ts index c53146a..0432d99 100644 --- a/app/pages/IndexFilters.tsx +++ b/app/pages/IndexFilters.ts @@ -22,7 +22,7 @@ export const ListFinished = { export const ListFilms = { name: "Фильмы", - filter: { ...FilterDefault, category_id: 2, status_id: null }, + filter: { ...FilterDefault, category_id: 2 }, }; export const slugToFilter = {