"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
Связанные релизы
)}
>
) : (
)}
>
);
};