import { Card, Dropdown, Button, Modal } from "flowbite-react"; import { ENDPOINTS } from "#/api/config"; import Link from "next/link"; import useSWRInfinite from "swr/infinite"; import { useCallback, useEffect, useState } from "react"; const lists = [ { list: 0, name: "Не смотрю" }, { list: 1, name: "Смотрю" }, { list: 2, name: "В планах" }, { list: 3, name: "Просмотрено" }, { list: 4, name: "Отложено" }, { list: 5, name: "Брошено" }, ]; const DropdownTheme = { floating: { target: "flex-1", }, }; export const ReleaseInfoUserList = (props: { userList: number; isFavorite: boolean; release_id: number; token: string | null; setUserList: any; setIsFavorite: any; collection_count: number; profile_id: number; }) => { const [AddReleaseToCollectionModalOpen, setAddReleaseToCollectionModalOpen] = useState(false); function _addToFavorite() { if (props.token) { props.setIsFavorite(!props.isFavorite); if (props.isFavorite) { fetch( `${ENDPOINTS.user.favorite}/delete/${props.release_id}?token=${props.token}` ); } else { fetch( `${ENDPOINTS.user.favorite}/add/${props.release_id}?token=${props.token}` ); } } } function _addToList(list: number) { if (props.token) { props.setUserList(list); fetch( `${ENDPOINTS.user.bookmark}/add/${list}/${props.release_id}?token=${props.token}` ); } } return ( Показать в коллекциях{" "} {props.collection_count} {props.token && ( setAddReleaseToCollectionModalOpen(true)} > В коллекцию{" "} )} {props.token ? ( <> {lists.map((list) => ( _addToList(list.list)} > {list.name} ))} { _addToFavorite(); }} size="sm" > > ) : ( Войдите что-бы добавить в список, избранное или коллекцию )} ); }; const fetcher = async (url: string) => { const res = await fetch(url); if (!res.ok) { const error = new Error( `An error occurred while fetching the data. status: ${res.status}` ); error.message = await res.json(); throw error; } return res.json(); }; const AddReleaseToCollectionModal = (props: { isOpen: boolean; setIsOpen: (isopen: boolean) => void; release_id: number; token: string; profile_id: number; }) => { const getKey = (pageIndex: number, previousPageData: any) => { if (previousPageData && !previousPageData.content.length) return null; return `${ENDPOINTS.collection.userCollections}/${props.profile_id}/${pageIndex}?token=${props.token}`; }; const { data, error, isLoading, size, setSize } = useSWRInfinite( getKey, fetcher, { initialSize: 2 } ); const [currentRef, setCurrentRef] = useState(null); const modalRef = useCallback((ref) => { setCurrentRef(ref); }, []); const [content, setContent] = useState([]); useEffect(() => { if (data) { let allReleases = []; for (let i = 0; i < data.length; i++) { allReleases.push(...data[i].content); } setContent(allReleases); } }, [data]); const [scrollPosition, setScrollPosition] = useState(0); function handleScroll() { const height = currentRef.scrollHeight - currentRef.clientHeight; const windowScroll = currentRef.scrollTop; const scrolled = (windowScroll / height) * 100; setScrollPosition(Math.floor(scrolled)); } useEffect(() => { if (scrollPosition >= 95 && scrollPosition <= 96) { setSize(size + 1); } }, [scrollPosition]); function _addToCollection(collection_id: number) { if (props.token) { fetch( `${ENDPOINTS.collection.addRelease}/${collection_id}?release_id=${props.release_id}&token=${props.token}` ) .then((res) => { if (!res.ok) { alert("Ошибка добавления релиза в коллекцию."); } else { return res.json(); } }) .then((data) => { if (data.code != 0) { alert( "Не удалось добавить релиз в коллекцию, возможно он уже в ней находится." ); } else { props.setIsOpen(false); } }); } } return ( props.setIsOpen(false)} > Выбор коллекции {content && content.length > 0 ? content.map((collection) => ( _addToCollection(collection.id)} > {collection.title} {collection.description} )) : "коллекций не найдено"} ); };
Войдите что-бы добавить в список, избранное или коллекцию
{collection.title}
{collection.description}