From 819d336540f6e6a8c8c2db8f61e9e600f16ce23b Mon Sep 17 00:00:00 2001 From: Radiquum Date: Thu, 28 Aug 2025 04:47:51 +0500 Subject: [PATCH] anix/feat: add studio and source filters. add select all buttons to filters modal --- app/api/utils.ts | 3 +- .../Discovery/Modal/FiltersGenreModal.tsx | 19 ++- .../Modal/FiltersListExcludeModal.tsx | 24 +++- .../Discovery/Modal/FiltersModal.tsx | 114 +++++++++++++++--- 4 files changed, 136 insertions(+), 24 deletions(-) diff --git a/app/api/utils.ts b/app/api/utils.ts index aa03c14..a3e6907 100644 --- a/app/api/utils.ts +++ b/app/api/utils.ts @@ -398,7 +398,6 @@ export const FilterProfileListIdToString: Record = { 5: "Брошено", }; export const FilterStudio = [ - "Неважно", "A-1 Pictures", "A.C.G.T", "ACTAS, Inc", @@ -672,7 +671,7 @@ export type Filter = { is_genres_exclude_mode_enabled: boolean; profile_list_exclusions: number[]; types: number[]; // fetched from /type/all - studio: string[]; + studio: null | string; source: null | string; start_year: null | number; end_year: null | number; diff --git a/app/components/Discovery/Modal/FiltersGenreModal.tsx b/app/components/Discovery/Modal/FiltersGenreModal.tsx index 98ad180..7ee4362 100644 --- a/app/components/Discovery/Modal/FiltersGenreModal.tsx +++ b/app/components/Discovery/Modal/FiltersGenreModal.tsx @@ -30,6 +30,11 @@ export const FiltersGenreModal = ({ const [newGenres, setNewGenres] = useState(genres); const [newExclusionMode, setNewExclusionMode] = useState(exclusionMode); + const genresLength = + FilterGenre.uncategorized.genres.length + + FilterGenre.audience.genres.length + + FilterGenre.theme.genres.length; + function toggleGenre(string: string) { if (newGenres.includes(string)) { setNewGenres(newGenres.filter((genre) => genre != string)); @@ -44,7 +49,7 @@ export const FiltersGenreModal = ({ }, [genres, exclusionMode]); return ( - setIsOpen(false)} dismissible> + setIsOpen(false)} dismissible size="6xl"> Жанры
@@ -116,6 +121,18 @@ export const FiltersGenreModal = ({ > Применить +
diff --git a/app/components/Discovery/Modal/FiltersListExcludeModal.tsx b/app/components/Discovery/Modal/FiltersListExcludeModal.tsx index 3ea2229..4c72cf4 100644 --- a/app/components/Discovery/Modal/FiltersListExcludeModal.tsx +++ b/app/components/Discovery/Modal/FiltersListExcludeModal.tsx @@ -8,7 +8,7 @@ import { Modal, ModalBody, ModalFooter, - ModalHeader + ModalHeader, } from "flowbite-react"; import { useEffect, useState } from "react"; @@ -81,7 +81,27 @@ export const FiltersListExcludeModal = ({ > Применить +
); -} +}; diff --git a/app/components/Discovery/Modal/FiltersModal.tsx b/app/components/Discovery/Modal/FiltersModal.tsx index 56380f2..c5610bc 100644 --- a/app/components/Discovery/Modal/FiltersModal.tsx +++ b/app/components/Discovery/Modal/FiltersModal.tsx @@ -6,6 +6,8 @@ import { FilterCountry, FilterDefault, FilterProfileListIdToString, + FilterSource, + FilterStudio, } from "#/api/utils"; import { Button, @@ -131,23 +133,97 @@ export const FiltersModal = ({ isOpen, setIsOpen, filter }: ModalProps) => { Рекомендуется выбирать не более 3 жанров

- {userStore.isAuth ?
-

Исключить закладки

+ {userStore.isAuth ? +
+

Исключить закладки

+ +

+ Исключит из выдачи релизы, входящие в указанные закладки +

+
+ : ""} +
+

Варианты озвучек

-

- Исключит из выдачи релизы, входящие в указанные закладки -

-
: ""} +
+
+

Студия

+ + setNewFilter({ ...newFilter, studio: null })} + > + Неважно + + {FilterStudio.map((value) => { + return ( + + setNewFilter({ + ...newFilter, + studio: value, + }) + } + > + {value} + + ); + })} + +
+
+

Первоисточник

+ + setNewFilter({ ...newFilter, source: null })} + > + Неважно + + {FilterSource.map((value) => { + return ( + + setNewFilter({ + ...newFilter, + source: value, + }) + } + > + {value} + + ); + })} + +
@@ -160,13 +236,13 @@ export const FiltersModal = ({ isOpen, setIsOpen, filter }: ModalProps) => { save={saveGenres} /> - setNewFilter({ ...newFilter, profile_list_exclusions }) - } - /> + isOpen={isListExcludeModalOpen} + setIsOpen={setIsListExcludeModalOpen} + lists={newFilter.profile_list_exclusions} + setLists={(profile_list_exclusions) => + setNewFilter({ ...newFilter, profile_list_exclusions }) + } + /> ); };