"use client";
import { useState, useEffect } from "react";
import { useSearchParams } from "next/navigation";
import { useRouter } from "next/navigation";
import {
Button,
Dropdown,
DropdownItem,
Modal,
ModalBody,
ModalFooter,
ModalHeader,
} from "flowbite-react";
import { useUserStore } from "#/store/auth";
const whereMapping = [
{
id: "releases",
label: "Релизах",
auth: false,
},
{
id: "profiles",
label: "Профилях",
auth: false,
},
{
id: "list",
label: "Списках",
auth: true,
},
{
id: "history",
label: "Истории",
auth: true,
},
{
id: "favorites",
label: "Избранном",
auth: true,
},
{
id: "collections",
label: "Коллекциях",
auth: true,
},
];
const searchByMapping = {
releases: [
{
id: "name",
label: "Названию",
value: 0,
},
{
id: "studio",
label: "Студии",
value: 1,
},
{
id: "director",
label: "Режиссёру",
value: 2,
},
{
id: "author",
label: "Автору",
value: 3,
},
{
id: "tag",
label: "Тегу",
value: 4,
},
],
list: [
{
id: "watching",
label: "Смотрю",
value: 1,
},
{
id: "planned",
label: "В планах",
value: 2,
},
{
id: "watched",
label: "Просмотрено",
value: 3,
},
{
id: "delayed",
label: "Отложено",
value: 4,
},
{
id: "abandoned",
label: "Заброшено",
value: 5,
},
],
none: [{ id: "none", label: "Нет", value: 0 }],
};
export function SearchPage() {
const router = useRouter();
const searchParams = useSearchParams();
const userStore = useUserStore();
const [query, setQuery] = useState(searchParams.get("query") || "");
const [params, setParams] = useState(null);
const [filtersModalOpen, setFiltersModalOpen] = useState(false);
useEffect(() => {
const queryParams = searchParams.get("params");
if (queryParams) {
try {
setParams(JSON.parse(queryParams));
} catch (e) {
setParams({
where: "releases",
searchBy: "name",
});
}
} else {
setParams({
where: "releases",
searchBy: "name",
});
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
useEffect(() => {
if (!params) return;
const url = new URL(`/search`, window.location.origin);
url.searchParams.set("params", JSON.stringify(params));
router.replace(url.toString());
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [params]);
if (!params) return <>>;
return (
query: {query}
params: {JSON.stringify(params)}
{}}
params={params}
setParams={setParams}
/>
);
}
const FiltersModal = (props: {
isOpen: boolean;
setIsOpen: any;
isAuth: boolean;
setContent: any;
params: any;
setParams: any;
}) => {
if (!props.params) return <>>;
return (
props.setIsOpen(false)}>
Фильтры
Искать в
item.id == props.params.where).label
}
color="blue"
>
{whereMapping.map((item) => {
return item.auth && !props.isAuth ?
<>>
:
searchByMapping[item.id] ?
props.setParams({
where: item.id,
searchBy: searchByMapping[item.id][0].id,
})
: props.setParams({ where: item.id, searchBy: "none" })
}
key={`filter--where--${item.id}`}
>
{item.label}
;
})}
{searchByMapping[props.params.where] ?
Искать по
item.id == props.params.searchBy
).label
}
color="blue"
>
{searchByMapping[props.params.where].map((item) => {
return (
props.setParams({
where: props.params.where,
searchBy: item.id,
})
}
key={`filter--where--${props.params.where}--searchBy--${item.id}`}
>
{item.label}
);
})}
: <>>}
);
};
// import useSWRInfinite from "swr/infinite";
// import { ReleaseSection } from "#/components/ReleaseSection/ReleaseSection";
// import { RelatedSection } from "#/components/RelatedSection/RelatedSection";
// import { Spinner } from "#/components/Spinner/Spinner";
// import { useScrollPosition } from "#/hooks/useScrollPosition";
// import { useUserStore } from "../store/auth";
// import { Button, Dropdown, DropdownItem, Modal, ModalBody, ModalFooter, ModalHeader } from "flowbite-react";
// import { CollectionsSection } from "#/components/CollectionsSection/CollectionsSection";
// import { UserSection } from "#/components/UserSection/UserSection";
// import { useSWRfetcher } from "#/api/utils";
// export function SearchPage() {
// const router = useRouter();
// const [searchVal, setSearchVal] = useState(searchParams.get("q") || "");
// const [where, setWhere] = useState(searchParams.get("where") || "releases");
// const [list, setList] = useState(searchParams.get("list") || "watching");
// const [filtersModalOpen, setFiltersModalOpen] = useState(false);
//
// const getKey = (pageIndex: number, previousPageData: any) => {
// if (where == "releases") {
// if (previousPageData && !previousPageData.releases.length) return null;
// } else {
// if (previousPageData && !previousPageData.content.length) return null;
// }
// const url = new URL("/api/search", window.location.origin);
// url.searchParams.set("page", pageIndex.toString());
// if (userStore.token) {
// url.searchParams.set("token", userStore.token);
// }
// if (where) {
// url.searchParams.set("where", where);
// }
// if (where == "list" && list && ListsMapping.hasOwnProperty(list)) {
// url.searchParams.set("list", ListsMapping[list].id);
// }
// url.searchParams.set("searchBy", TagMapping[searchBy].id);
// if (query) {
// url.searchParams.set("q", query);
// return url.toString();
// }
// return;
// };
// const { data, error, isLoading, size, setSize } = useSWRInfinite(
// getKey,
// useSWRfetcher,
// { initialSize: 2, revalidateFirstPage: false }
// );
// const [content, setContent] = useState(null);
// useEffect(() => {
// if (data) {
// let allReleases = [];
// if (where == "releases") {
// for (let i = 0; i < data.length; i++) {
// allReleases.push(...data[i].releases);
// }
// } else {
// for (let i = 0; i < data.length; i++) {
// allReleases.push(...data[i].content);
// }
// }
// setContent(allReleases);
// }
// // eslint-disable-next-line react-hooks/exhaustive-deps
// }, [data]);
// const scrollPosition = useScrollPosition();
// useEffect(() => {
// if (scrollPosition >= 98 && scrollPosition <= 99) {
// setSize(size + 1);
// }
// // eslint-disable-next-line react-hooks/exhaustive-deps
// }, [scrollPosition]);
// function _executeSearch(value: string) {
// const Params = new URLSearchParams(window.location.search);
// Params.set("q", value);
// const url = new URL(`/search?${Params.toString()}`, window.location.origin);
// setContent(null);
// setQuery(value);
// router.push(url.toString());
// }
// useEffect(() => {
// if (searchVal && searchVal.length % 4 == 1) {
// _executeSearch(searchVal.trim());
// }
// // eslint-disable-next-line react-hooks/exhaustive-deps
// }, [searchVal]);
// if (error)
// return (
//
//
//
Ошибка
//
// Произошла ошибка поиска. Попробуйте обновить страницу или зайдите
// позже.
//
//
//
// );
// return (
// <>
//
//
//
//
//
// {data && data[0].related &&
}
// {content ?
// content.length > 0 ?
// <>
// {where == "collections" ?
//
// : where == "profiles" ?
//
// :
// }
// >
// :
//
//
Странно, аниме не найдено, попробуйте другой запрос...
//
// : isLoading && (
//
//
//
// )
// }
// {!content && !isLoading && !query && (
//
//
//
Введите ваш запрос что-бы найти любимый тайтл
//
// )}
//
// {(
// data &&
// data.length > 1 &&
// (where == "releases" ?
// data[data.length - 1].releases.length == 25
// : data[data.length - 1].content.length == 25)
// ) ?
//
// : ""}
//
// >
// );
// }
// const FiltersModal = (props: {
// isOpen: boolean;
// setIsOpen: any;
// where: string;
// setWhere: any;
// list: string;
// setList: any;
// isAuth: boolean;
// searchBy: string;
// setSearchBy: any;
// setContent: any;
// }) => {
// const router = useRouter();
// const [where, setWhere] = useState(props.where);
// const [list, setList] = useState(props.list);
// const [searchBy, setSearchBy] = useState(props.searchBy);
// function _cancel() {
// setWhere(props.where);
// setList(props.list);
// setSearchBy(props.searchBy);
// props.setIsOpen(false);
// }
// function _accept() {
// const Params = new URLSearchParams(window.location.search);
// if (props.where != where) {
// Params.set("where", where);
// props.setWhere(where);
// }
// if (where == "list") {
// Params.set("list", list);
// props.setList(list);
// } else {
// Params.delete("list");
// }
// if (!["profiles", "collections"].includes(where)) {
// Params.set("searchBy", searchBy);
// props.setSearchBy(searchBy);
// } else {
// Params.delete("searchBy");
// props.setSearchBy("name");
// }
// props.setContent(null);
// const url = new URL(`/search?${Params.toString()}`, window.location.origin);
// router.push(url.toString());
// }
// return (
// _cancel()}>
// Фильтры
//
//
//
//
Искать в
//
// {Object.keys(WhereMapping).map((item) => {
// if (
// ["list", "history", "collections", "favorites"].includes(
// item
// ) &&
// !props.isAuth
// ) {
// return <>>;
// } else {
// return (
// setWhere(item)}
// key={`where--${item}`}
// >
// {WhereMapping[item]}
//
// );
// }
// })}
//
//
//
// {props.isAuth && where == "list" && ListsMapping.hasOwnProperty(list) ?
//
//
//
Список
//
// {Object.keys(ListsMapping).map((item) => {
// return (
// setList(item)}
// key={`list--${item}`}
// >
// {ListsMapping[item].name}
//
// );
// })}
//
//
//
// : ""}
// {!["profiles", "collections"].includes(where) ?
//
//
//
Искать по
//
// {Object.keys(TagMapping).map((item) => {
// return (
// setSearchBy(item)}
// key={`tag--${item}`}
// >
// {TagMapping[item].name}
//
// );
// })}
//
//
//
// : ""}
//
//
//
//
//
//
//
//
// );
// };