mirror of
https://github.com/Radiquum/AniX.git
synced 2025-04-30 18:09:40 +05:00
feat: add collection action and release edit toasts
fix: misaligned posters in add release to collection modal fix: collection releases reset when searching for new release to add
This commit is contained in:
parent
b7661f47ef
commit
3aa71acad5
2 changed files with 140 additions and 22 deletions
|
@ -1,9 +1,11 @@
|
|||
"use client";
|
||||
import { Card, Button } from "flowbite-react";
|
||||
import { Card, Button, useThemeMode } from "flowbite-react";
|
||||
import { useState } from "react";
|
||||
import { useUserStore } from "#/store/auth";
|
||||
import { ENDPOINTS } from "#/api/config";
|
||||
import { useRouter } from "next/navigation";
|
||||
import { tryCatchAPI } from "#/api/utils";
|
||||
import { toast } from "react-toastify";
|
||||
|
||||
export const CollectionInfoControls = (props: {
|
||||
isFavorite: boolean;
|
||||
|
@ -12,36 +14,124 @@ export const CollectionInfoControls = (props: {
|
|||
isPrivate: boolean;
|
||||
}) => {
|
||||
const [isFavorite, setIsFavorite] = useState(props.isFavorite);
|
||||
const [isUpdating, setIsUpdating] = useState(false);
|
||||
const theme = useThemeMode();
|
||||
|
||||
const userStore = useUserStore();
|
||||
const router = useRouter();
|
||||
|
||||
async function _addToFavorite() {
|
||||
if (userStore.user) {
|
||||
setIsFavorite(!isFavorite);
|
||||
if (isFavorite) {
|
||||
fetch(
|
||||
`${ENDPOINTS.collection.favoriteCollections}/delete/${props.id}?token=${userStore.token}`
|
||||
);
|
||||
} else {
|
||||
fetch(
|
||||
`${ENDPOINTS.collection.favoriteCollections}/add/${props.id}?token=${userStore.token}`
|
||||
);
|
||||
async function _FavCol(url: string) {
|
||||
setIsUpdating(true);
|
||||
const tid = toast.loading(
|
||||
isFavorite ?
|
||||
"Удаляем коллекцию из избранного..."
|
||||
: "Добавляем коллекцию в избранное...",
|
||||
{
|
||||
position: "bottom-center",
|
||||
hideProgressBar: true,
|
||||
closeOnClick: false,
|
||||
pauseOnHover: false,
|
||||
draggable: false,
|
||||
theme: theme.mode == "light" ? "light" : "dark",
|
||||
}
|
||||
);
|
||||
const { data, error } = await tryCatchAPI(fetch(url));
|
||||
|
||||
if (error) {
|
||||
toast.update(tid, {
|
||||
render:
|
||||
isFavorite ?
|
||||
"Ошибка удаления коллекции из избранного"
|
||||
: "Ошибка добавления коллекции в избранное",
|
||||
type: "error",
|
||||
autoClose: 2500,
|
||||
isLoading: false,
|
||||
closeOnClick: true,
|
||||
draggable: true,
|
||||
});
|
||||
setIsUpdating(false);
|
||||
return;
|
||||
}
|
||||
|
||||
toast.update(tid, {
|
||||
render:
|
||||
isFavorite ?
|
||||
"Коллекция удалена из избранного"
|
||||
: "Коллекция добавлена в избранное",
|
||||
type: "success",
|
||||
autoClose: 2500,
|
||||
isLoading: false,
|
||||
closeOnClick: true,
|
||||
draggable: true,
|
||||
});
|
||||
|
||||
setIsUpdating(false);
|
||||
setIsFavorite(!isFavorite);
|
||||
}
|
||||
|
||||
if (userStore.token) {
|
||||
let url = `${ENDPOINTS.collection.favoriteCollections}/add/${props.id}?token=${userStore.token}`;
|
||||
if (isFavorite) {
|
||||
url = `${ENDPOINTS.collection.favoriteCollections}/delete/${props.id}?token=${userStore.token}`;
|
||||
}
|
||||
_FavCol(url);
|
||||
}
|
||||
}
|
||||
|
||||
async function _deleteCollection() {
|
||||
if (userStore.user) {
|
||||
fetch(
|
||||
async function _DelCol(url: string) {
|
||||
setIsUpdating(true);
|
||||
const tid = toast.loading("Удаляем коллекцию...", {
|
||||
position: "bottom-center",
|
||||
hideProgressBar: true,
|
||||
closeOnClick: false,
|
||||
pauseOnHover: false,
|
||||
draggable: false,
|
||||
theme: theme.mode == "light" ? "light" : "dark",
|
||||
});
|
||||
const { data, error } = await tryCatchAPI(fetch(url));
|
||||
|
||||
if (error) {
|
||||
toast.update(tid, {
|
||||
render: "Ошибка удаления коллекции",
|
||||
type: "error",
|
||||
autoClose: 2500,
|
||||
isLoading: false,
|
||||
closeOnClick: true,
|
||||
draggable: true,
|
||||
});
|
||||
setIsUpdating(false);
|
||||
return;
|
||||
}
|
||||
|
||||
toast.update(tid, {
|
||||
render: `Коллекция удалена`,
|
||||
type: "success",
|
||||
autoClose: 2500,
|
||||
isLoading: false,
|
||||
closeOnClick: true,
|
||||
draggable: true,
|
||||
});
|
||||
|
||||
setIsUpdating(false);
|
||||
router.push("/collections");
|
||||
}
|
||||
|
||||
if (userStore.token) {
|
||||
_DelCol(
|
||||
`${ENDPOINTS.collection.delete}/${props.id}?token=${userStore.token}`
|
||||
);
|
||||
router.push("/collections");
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<Card className="w-full h-fit ">
|
||||
<Button color={"blue"} onClick={() => _addToFavorite()}>
|
||||
<Button
|
||||
color={"blue"}
|
||||
onClick={() => _addToFavorite()}
|
||||
disabled={isUpdating}
|
||||
>
|
||||
<span
|
||||
className={`iconify w-6 h-6 mr-2 ${
|
||||
isFavorite ? "mdi--heart" : "mdi--heart-outline"
|
||||
|
@ -60,6 +150,7 @@ export const CollectionInfoControls = (props: {
|
|||
onClick={() =>
|
||||
router.push("/collections/create?mode=edit&id=" + props.id)
|
||||
}
|
||||
disabled={isUpdating}
|
||||
>
|
||||
<span className="w-6 h-6 mr-2 iconify mdi--pencil"></span>{" "}
|
||||
Редактировать
|
||||
|
@ -68,6 +159,7 @@ export const CollectionInfoControls = (props: {
|
|||
color={"red"}
|
||||
className="w-full sm:max-w-64"
|
||||
onClick={() => _deleteCollection()}
|
||||
disabled={isUpdating}
|
||||
>
|
||||
<span className="w-6 h-6 mr-2 iconify mdi--trash"></span> Удалить
|
||||
</Button>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue