From 4a45b7af5618583af0f459442893bb34890c3e48 Mon Sep 17 00:00:00 2001 From: Radiquum Date: Sun, 6 Apr 2025 18:23:04 +0500 Subject: [PATCH] refactor: release related releases poster -> list --- .../ReleaseInfo/ReleaseInfo.Related.tsx | 40 +++--- .../ReleaseLink/ReleaseLinkList.tsx | 116 ++++++++++++++++++ 2 files changed, 135 insertions(+), 21 deletions(-) create mode 100644 app/components/ReleaseLink/ReleaseLinkList.tsx diff --git a/app/components/ReleaseInfo/ReleaseInfo.Related.tsx b/app/components/ReleaseInfo/ReleaseInfo.Related.tsx index 2d4a326..3bb9990 100644 --- a/app/components/ReleaseInfo/ReleaseInfo.Related.tsx +++ b/app/components/ReleaseInfo/ReleaseInfo.Related.tsx @@ -1,7 +1,7 @@ "use client"; -import { Card, Carousel } from "flowbite-react"; -import { ReleaseLink } from "#/components/ReleaseLink/ReleaseLinkUpdate"; +import { Card } from "flowbite-react"; +import { ReleaseLinkList } from "#/components/ReleaseLink/ReleaseLinkList"; import Link from "next/link"; export const ReleaseInfoRelated = (props: { @@ -22,25 +22,23 @@ export const ReleaseInfoRelated = (props: { )} -
- - {props.related_releases - .filter((release: any) => { - if (release.id == props.release_id) { - return false; - } - return true; - }) - .map((release: any) => { - return ( - - ); - })} - +
+ {props.related_releases + .filter((release: any) => { + if (release.id == props.release_id) { + return false; + } + return true; + }) + .map((release: any) => { + return ( + + ); + })}
); diff --git a/app/components/ReleaseLink/ReleaseLinkList.tsx b/app/components/ReleaseLink/ReleaseLinkList.tsx new file mode 100644 index 0000000..4fcfa0c --- /dev/null +++ b/app/components/ReleaseLink/ReleaseLinkList.tsx @@ -0,0 +1,116 @@ +import Link from "next/link"; +import { Poster } from "../ReleasePoster/Poster"; +import { ReleaseChips } from "../ReleasePoster/Chips"; + +const profile_lists = { + // 0: "Не смотрю", + 1: { name: "Смотрю", bg_color: "bg-green-500" }, + 2: { name: "В планах", bg_color: "bg-purple-500" }, + 3: { name: "Просмотрено", bg_color: "bg-blue-500" }, + 4: { name: "Отложено", bg_color: "bg-yellow-500" }, + 5: { name: "Брошено", bg_color: "bg-red-500" }, +}; + +export const ReleaseLinkList = (props: { + image: string; + title_ru: string; + title_original: string; + description?: string; + genres?: string; + grade?: number; + id: number; + settings?: { + showGenres?: boolean; + showDescription?: boolean; + }; + chipsSettings?: { + enabled: boolean; + gradeHidden?: boolean; + statusHidden?: boolean; + categoryHidden?: boolean; + episodesHidden?: boolean; + listHidden?: boolean; + favHidden?: boolean; + lastWatchedHidden?: boolean; + }; + profile_list_status?: number; + status?: { + name: string; + }; + category?: { + name: string; + }; + status_id?: number; + episodes_released?: string; + episodes_total?: string; + is_favorite?: boolean; +}) => { + const genres = []; + const settings = { + showGenres: true, + showDescription: true, + ...props.settings, + }; + const chipsSettings = props.chipsSettings || {}; + + const grade = props.grade ? Number(props.grade.toFixed(1)) : null; + const profile_list_status = props.profile_list_status || null; + let user_list = null; + if (profile_list_status != null || profile_list_status != 0) { + user_list = profile_lists[profile_list_status]; + } + if (props.genres) { + const genres_array = props.genres.split(","); + genres_array.forEach((genre) => { + genres.push(genre.trim()); + }); + } + + return ( + +
+
+ +
+
+ +
+ {settings.showGenres && + genres.length > 0 && + genres.map((genre: string, index: number) => { + return ( + + {index > 0 && ", "} + {genre} + + ); + })} +
+ {props.title_ru && ( +

+ {props.title_ru} +

+ )} + {props.title_original && ( +

+ {props.title_original} +

+ )} + {settings.showDescription && props.description && ( +

+ {props.description} +

+ )} +
+
+ + ); +};