anix/fix: search in bookmarks, user collections, user favorites, user history

This commit is contained in:
Kentai Radiquum 2025-08-25 05:38:06 +05:00
parent 8d2800c2f2
commit 93205fdb4e
Signed by: Radiquum
GPG key ID: 858E8EE696525EED
6 changed files with 55 additions and 19 deletions

12
app/discover/page.tsx Normal file
View file

@ -0,0 +1,12 @@
import { DiscoverPage } from "#/pages/Discover";
export const metadata = {
title: "Обзор",
description: "Рекомендации и популярное",
};
export const dynamic = "force-static";
export default function Discover() {
return <DiscoverPage />;
}

View file

@ -82,7 +82,7 @@ export function BookmarksCategoryPage(props: any) {
<Spinner /> <Spinner />
</div> </div>
); );
}; }
if (error) { if (error) {
return ( return (
@ -105,7 +105,9 @@ export function BookmarksCategoryPage(props: any) {
className="flex-1 max-w-full mx-4" className="flex-1 max-w-full mx-4"
onSubmit={(e) => { onSubmit={(e) => {
e.preventDefault(); e.preventDefault();
router.push(`/search?q=${searchVal}&where=list&list=${props.slug}`); router.push(
`/search?query=${searchVal}&params={"where"%3A"list"%2C"searchBy"%3A"${props.slug}"}`
);
}} }}
> >
<label <label

View file

@ -54,7 +54,9 @@ export function CollectionsPage() {
className="flex-1 max-w-full mx-4 mb-4" className="flex-1 max-w-full mx-4 mb-4"
onSubmit={(e) => { onSubmit={(e) => {
e.preventDefault(); e.preventDefault();
router.push(`/search?q=${searchVal}&where=collections`); router.push(
`/search?query=${searchVal}&params={"where"%3A"collections_fav"%2C"searchBy"%3A"none"}`
);
}} }}
> >
<label <label

19
app/pages/Discover.tsx Normal file
View file

@ -0,0 +1,19 @@
"use client";
import { useState, useEffect } from "react";
import { useUserStore } from "../store/auth";
import { useRouter } from "next/navigation";
export const DiscoverPage = () => {
const token = useUserStore((state) => state.token);
const authState = useUserStore((state) => state.state);
const router = useRouter();
useEffect(() => {
if (authState === "finished" && !token) {
router.push("/login?redirect=/discover");
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [authState, token]);
return <></>;
};

View file

@ -69,7 +69,9 @@ export function FavoritesPage() {
className="flex-1 max-w-full mx-4 mb-4" className="flex-1 max-w-full mx-4 mb-4"
onSubmit={(e) => { onSubmit={(e) => {
e.preventDefault(); e.preventDefault();
router.push(`/search?q=${searchVal}&where=favorites`); router.push(
`/search?query=${searchVal}&params={"where"%3A"favorites"%2C"searchBy"%3A"none"}`
);
}} }}
> >
<label <label
@ -129,9 +131,9 @@ export function FavoritesPage() {
<DropdownItem key={index} onClick={() => setSelectedSort(index)}> <DropdownItem key={index} onClick={() => setSelectedSort(index)}>
<span <span
className={`w-6 h-6 iconify ${ className={`w-6 h-6 iconify ${
sort.values[index].value.split("_")[1] == "descending" sort.values[index].value.split("_")[1] == "descending" ?
? sort.descendingIcon sort.descendingIcon
: sort.ascendingIcon : sort.ascendingIcon
}`} }`}
></span> ></span>
{item.name} {item.name}
@ -139,18 +141,17 @@ export function FavoritesPage() {
))} ))}
</Dropdown> </Dropdown>
</div> </div>
{content && content.length > 0 ? ( {content && content.length > 0 ?
<ReleaseSection content={content} /> <ReleaseSection content={content} />
) : isLoading ? ( : isLoading ?
<div className="flex flex-col items-center justify-center min-w-full min-h-screen"> <div className="flex flex-col items-center justify-center min-w-full min-h-screen">
<Spinner /> <Spinner />
</div> </div>
) : ( : <div className="flex flex-col items-center justify-center min-w-full gap-4 mt-12 text-xl">
<div className="flex flex-col items-center justify-center min-w-full gap-4 mt-12 text-xl">
<span className="w-24 h-24 iconify-color twemoji--broken-heart"></span> <span className="w-24 h-24 iconify-color twemoji--broken-heart"></span>
<p>В избранном пока ничего нет...</p> <p>В избранном пока ничего нет...</p>
</div> </div>
)} }
{data && {data &&
data[data.length - 1].current_page < data[data.length - 1].current_page <
data[data.length - 1].total_page_count && ( data[data.length - 1].total_page_count && (

View file

@ -10,7 +10,6 @@ import { Button } from "flowbite-react";
import { useRouter } from "next/navigation"; import { useRouter } from "next/navigation";
import { useSWRfetcher } from "#/api/utils"; import { useSWRfetcher } from "#/api/utils";
export function HistoryPage() { export function HistoryPage() {
const token = useUserStore((state) => state.token); const token = useUserStore((state) => state.token);
const authState = useUserStore((state) => state.state); const authState = useUserStore((state) => state.state);
@ -62,7 +61,9 @@ export function HistoryPage() {
className="flex-1 max-w-full mx-4 mb-4" className="flex-1 max-w-full mx-4 mb-4"
onSubmit={(e) => { onSubmit={(e) => {
e.preventDefault(); e.preventDefault();
router.push(`/search?q=${searchVal}&where=history`); router.push(
`/search?query=${searchVal}&params={"where"%3A"history"%2C"searchBy"%3A"none"}`
);
}} }}
> >
<label <label
@ -106,7 +107,7 @@ export function HistoryPage() {
</button> </button>
</div> </div>
</form> </form>
{content && content.length > 0 ? ( {content && content.length > 0 ?
<> <>
<ReleaseSection sectionTitle="История" content={content} /> <ReleaseSection sectionTitle="История" content={content} />
{data && data[0].total_count != content.length && ( {data && data[0].total_count != content.length && (
@ -122,16 +123,15 @@ export function HistoryPage() {
</Button> </Button>
)} )}
</> </>
) : isLoading ? ( : isLoading ?
<div className="flex flex-col items-center justify-center min-w-full min-h-[100dvh]"> <div className="flex flex-col items-center justify-center min-w-full min-h-[100dvh]">
<Spinner /> <Spinner />
</div> </div>
) : ( : <div className="flex flex-col items-center justify-center min-w-full gap-4 mt-12 text-xl">
<div className="flex flex-col items-center justify-center min-w-full gap-4 mt-12 text-xl">
<span className="w-24 h-24 iconify-color twemoji--broken-heart"></span> <span className="w-24 h-24 iconify-color twemoji--broken-heart"></span>
<p>В истории пока ничего нет...</p> <p>В истории пока ничего нет...</p>
</div> </div>
)} }
</> </>
); );
} }