"use client"; import { useEffect, useState } from "react"; import { getData } from "@/app/api/api-utils"; import { endpoints } from "@/app/api/config"; import { ReleaseCard } from "../ReleaseCard/ReleaseCard"; import { useUserStore } from "@/app/store/user-store"; export const ReleaseInfo = (props) => { const userStore = useUserStore(); const [releaseInfo, setReleaseInfo] = useState(); const [list, setList] = useState(); const [isFavorite, setIsFavorite] = useState(false); const [timer, seTimer] = useState(); useEffect(() => { async function _fetchInfo() { let url = `${endpoints.release}/${props.id}`; if (userStore.token) { url = `${endpoints.release}/${props.id}?token=${userStore.token}`; } const release = await getData(url); setReleaseInfo(release); if (userStore.token) { setList(release.release.profile_list_status || 0); setIsFavorite(release.release.is_favorite); } } // I really think it's not the way it is should be done // but it works // FIX: double requests, 1st without token, and second with it. // now it's only 1 request with or w/o token, if page is reloaded. if (userStore.token) { clearTimeout(timer); } if (props.id) { seTimer( setTimeout(() => { _fetchInfo(); }, 1000), ); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [userStore.token]); useEffect(() => { async function _setList() { const url = `${endpoints.user.bookmarks.list}/${list}/${props.id}/add?token=${userStore.token}`; await getData(url); } if ( userStore.token && releaseInfo && list != releaseInfo.release.profile_list_status ) { _setList(); releaseInfo.release.profile_list_status = list; } }, [userStore.token, list]); function _setFav() { async function __updateFavorite() { const add_url = `${endpoints.user.favorites}/list/${props.id}/add?token=${userStore.token}`; const delete_url = `${endpoints.user.favorites}/list/${props.id}/delete?token=${userStore.token}`; await getData(!isFavorite ? add_url : delete_url); } __updateFavorite(); } const lists = [ { list: 0, name: "Не смотрю" }, { list: 1, name: "Смотрю" }, { list: 2, name: "В планах" }, { list: 3, name: "Просмотрено" }, { list: 4, name: "Отложено" }, { list: 5, name: "Брошено" }, ]; return ( <> {releaseInfo ? ( <>
{releaseInfo.release.title_ru}
{releaseInfo.release.title_original}
{userStore.token && list >= 0 && ( )} {userStore.token && releaseInfo && ( )}

{releaseInfo.release.country} •{" "} {releaseInfo.release.status.name} •{" "} {releaseInfo.release.episodes_released}/ {releaseInfo.release.episodes_total ? releaseInfo.release.episodes_total : "?"}

{releaseInfo.release.description}

{releaseInfo.release.related_releases.length > 0 && (
hub
Связанные релизы
)} ) : (
)} ); };