mirror of
https://github.com/AnimeThemes/animethemes-web.git
synced 2026-07-11 01:24:31 +02:00
fix: Fixed search page behaving unexpectedly (#222)
This commit is contained in:
Generated
+1
-23
@@ -47,8 +47,7 @@
|
||||
"styled-components": "^5.3.3",
|
||||
"swr": "^2.2.4",
|
||||
"unist-util-visit": "^4.1.2",
|
||||
"use-local-storage-state": "^19.3.1",
|
||||
"use-session-storage-state": "^19.0.0"
|
||||
"use-local-storage-state": "^19.3.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@graphql-codegen/cli": "^5.0.2",
|
||||
@@ -12991,21 +12990,6 @@
|
||||
"react-dom": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/use-session-storage-state": {
|
||||
"version": "19.0.0",
|
||||
"resolved": "https://registry.npmjs.org/use-session-storage-state/-/use-session-storage-state-19.0.0.tgz",
|
||||
"integrity": "sha512-u6kyD7lgAm0xSwLerXcrbaNLWqeYsXYPuB97XZftBPAqPo5gVAMvAeFsRLwxblpCQDxFkjKsz/apTM5OlkbKFg==",
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/astoilkov"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": ">=18",
|
||||
"react-dom": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/use-sidecar": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz",
|
||||
@@ -22661,12 +22645,6 @@
|
||||
"integrity": "sha512-y3Z1dODXvZXZB4qtLDNN8iuXbsYD6TAxz61K58GWB9/yKwrNG9ynI0GzCTHi/Je1rMiyOwMimz0oyFsZn+Kj7Q==",
|
||||
"requires": {}
|
||||
},
|
||||
"use-session-storage-state": {
|
||||
"version": "19.0.0",
|
||||
"resolved": "https://registry.npmjs.org/use-session-storage-state/-/use-session-storage-state-19.0.0.tgz",
|
||||
"integrity": "sha512-u6kyD7lgAm0xSwLerXcrbaNLWqeYsXYPuB97XZftBPAqPo5gVAMvAeFsRLwxblpCQDxFkjKsz/apTM5OlkbKFg==",
|
||||
"requires": {}
|
||||
},
|
||||
"use-sidecar": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz",
|
||||
|
||||
+1
-2
@@ -55,8 +55,7 @@
|
||||
"styled-components": "^5.3.3",
|
||||
"swr": "^2.2.4",
|
||||
"unist-util-visit": "^4.1.2",
|
||||
"use-local-storage-state": "^19.3.1",
|
||||
"use-session-storage-state": "^19.0.0"
|
||||
"use-local-storage-state": "^19.3.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@graphql-codegen/cli": "^5.0.2",
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { useEffect, useState } from "react";
|
||||
import { useState } from "react";
|
||||
|
||||
import gql from "graphql-tag";
|
||||
|
||||
@@ -32,18 +32,17 @@ export function SearchAnime({ searchQuery }: SearchAnimeProps) {
|
||||
});
|
||||
const [prevSearchQuery, setPrevSearchQuery] = useState(searchQuery);
|
||||
|
||||
useEffect(() => {
|
||||
if (!searchQuery && filter.sortBy === null) {
|
||||
updateFilter("sortBy", initialFilter.sortBy);
|
||||
}
|
||||
|
||||
// Check if user is switching from non-searching to searching
|
||||
if (searchQuery !== prevSearchQuery && searchQuery && !prevSearchQuery) {
|
||||
updateFilter("sortBy", null);
|
||||
}
|
||||
});
|
||||
if (!searchQuery && filter.sortBy === null) {
|
||||
updateFilter("sortBy", initialFilter.sortBy);
|
||||
return null;
|
||||
}
|
||||
|
||||
if (searchQuery !== prevSearchQuery) {
|
||||
// Check if user is switching from non-searching to searching
|
||||
if (searchQuery && !prevSearchQuery) {
|
||||
updateFilter("sortBy", null);
|
||||
}
|
||||
|
||||
setPrevSearchQuery(searchQuery);
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { useEffect, useState } from "react";
|
||||
import { useState } from "react";
|
||||
|
||||
import gql from "graphql-tag";
|
||||
|
||||
@@ -26,18 +26,17 @@ export function SearchArtist({ searchQuery }: SearchArtistProps) {
|
||||
});
|
||||
const [prevSearchQuery, setPrevSearchQuery] = useState(searchQuery);
|
||||
|
||||
useEffect(() => {
|
||||
if (!searchQuery && filter.sortBy === null) {
|
||||
updateFilter("sortBy", initialFilter.sortBy);
|
||||
}
|
||||
|
||||
// Check if user is switching from non-searching to searching
|
||||
if (searchQuery !== prevSearchQuery && searchQuery && !prevSearchQuery) {
|
||||
updateFilter("sortBy", null);
|
||||
}
|
||||
});
|
||||
if (!searchQuery && filter.sortBy === null) {
|
||||
updateFilter("sortBy", initialFilter.sortBy);
|
||||
return null;
|
||||
}
|
||||
|
||||
if (searchQuery !== prevSearchQuery) {
|
||||
// Check if user is switching from non-searching to searching
|
||||
if (searchQuery && !prevSearchQuery) {
|
||||
updateFilter("sortBy", null);
|
||||
}
|
||||
|
||||
setPrevSearchQuery(searchQuery);
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { useEffect, useState } from "react";
|
||||
import { useState } from "react";
|
||||
|
||||
import gql from "graphql-tag";
|
||||
|
||||
@@ -24,18 +24,17 @@ export function SearchPlaylist({ searchQuery }: SearchPlaylistProps) {
|
||||
});
|
||||
const [prevSearchQuery, setPrevSearchQuery] = useState(searchQuery);
|
||||
|
||||
useEffect(() => {
|
||||
if (!searchQuery && filter.sortBy === null) {
|
||||
updateFilter("sortBy", initialFilter.sortBy);
|
||||
}
|
||||
|
||||
// Check if user is switching from non-searching to searching
|
||||
if (searchQuery !== prevSearchQuery && searchQuery && !prevSearchQuery) {
|
||||
updateFilter("sortBy", null);
|
||||
}
|
||||
});
|
||||
if (!searchQuery && filter.sortBy === null) {
|
||||
updateFilter("sortBy", initialFilter.sortBy);
|
||||
return null;
|
||||
}
|
||||
|
||||
if (searchQuery !== prevSearchQuery) {
|
||||
// Check if user is switching from non-searching to searching
|
||||
if (searchQuery && !prevSearchQuery) {
|
||||
updateFilter("sortBy", null);
|
||||
}
|
||||
|
||||
setPrevSearchQuery(searchQuery);
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { useEffect, useState } from "react";
|
||||
import { useState } from "react";
|
||||
|
||||
import gql from "graphql-tag";
|
||||
|
||||
@@ -26,18 +26,17 @@ export function SearchSeries({ searchQuery }: SearchSeriesProps) {
|
||||
});
|
||||
const [prevSearchQuery, setPrevSearchQuery] = useState(searchQuery);
|
||||
|
||||
useEffect(() => {
|
||||
if (!searchQuery && filter.sortBy === null) {
|
||||
updateFilter("sortBy", initialFilter.sortBy);
|
||||
}
|
||||
|
||||
// Check if user is switching from non-searching to searching
|
||||
if (searchQuery !== prevSearchQuery && searchQuery && !prevSearchQuery) {
|
||||
updateFilter("sortBy", null);
|
||||
}
|
||||
});
|
||||
if (!searchQuery && filter.sortBy === null) {
|
||||
updateFilter("sortBy", initialFilter.sortBy);
|
||||
return null;
|
||||
}
|
||||
|
||||
if (searchQuery !== prevSearchQuery) {
|
||||
// Check if user is switching from non-searching to searching
|
||||
if (searchQuery && !prevSearchQuery) {
|
||||
updateFilter("sortBy", null);
|
||||
}
|
||||
|
||||
setPrevSearchQuery(searchQuery);
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { useEffect, useState } from "react";
|
||||
import { useState } from "react";
|
||||
|
||||
import gql from "graphql-tag";
|
||||
|
||||
@@ -27,18 +27,17 @@ export function SearchStudio({ searchQuery }: SearchStudioProps) {
|
||||
});
|
||||
const [prevSearchQuery, setPrevSearchQuery] = useState(searchQuery);
|
||||
|
||||
useEffect(() => {
|
||||
if (!searchQuery && filter.sortBy === null) {
|
||||
updateFilter("sortBy", initialFilter.sortBy);
|
||||
}
|
||||
|
||||
// Check if user is switching from non-searching to searching
|
||||
if (searchQuery !== prevSearchQuery && searchQuery && !prevSearchQuery) {
|
||||
updateFilter("sortBy", null);
|
||||
}
|
||||
});
|
||||
if (!searchQuery && filter.sortBy === null) {
|
||||
updateFilter("sortBy", initialFilter.sortBy);
|
||||
return null;
|
||||
}
|
||||
|
||||
if (searchQuery !== prevSearchQuery) {
|
||||
// Check if user is switching from non-searching to searching
|
||||
if (searchQuery && !prevSearchQuery) {
|
||||
updateFilter("sortBy", null);
|
||||
}
|
||||
|
||||
setPrevSearchQuery(searchQuery);
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { useEffect, useState } from "react";
|
||||
import { useState } from "react";
|
||||
|
||||
import gql from "graphql-tag";
|
||||
|
||||
@@ -28,18 +28,17 @@ export function SearchTheme({ searchQuery }: SearchThemeProps) {
|
||||
});
|
||||
const [prevSearchQuery, setPrevSearchQuery] = useState(searchQuery);
|
||||
|
||||
useEffect(() => {
|
||||
if (!searchQuery && filter.sortBy === null) {
|
||||
updateFilter("sortBy", initialFilter.sortBy);
|
||||
}
|
||||
|
||||
// Check if user is switching from non-searching to searching
|
||||
if (searchQuery !== prevSearchQuery && searchQuery && !prevSearchQuery) {
|
||||
updateFilter("sortBy", null);
|
||||
}
|
||||
});
|
||||
if (!searchQuery && filter.sortBy === null) {
|
||||
updateFilter("sortBy", initialFilter.sortBy);
|
||||
return null;
|
||||
}
|
||||
|
||||
if (searchQuery !== prevSearchQuery) {
|
||||
// Check if user is switching from non-searching to searching
|
||||
if (searchQuery && !prevSearchQuery) {
|
||||
updateFilter("sortBy", null);
|
||||
}
|
||||
|
||||
setPrevSearchQuery(searchQuery);
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { useCallback } from "react";
|
||||
|
||||
import useSessionStorageState from "use-session-storage-state";
|
||||
import { useSessionStorageState } from "ahooks";
|
||||
|
||||
export default function useFilterStorage<T>(
|
||||
key: string,
|
||||
@@ -13,10 +13,25 @@ export default function useFilterStorage<T>(
|
||||
const [filter, setFilter] = useSessionStorageState(key, { defaultValue });
|
||||
|
||||
return {
|
||||
filter,
|
||||
updateFilter: useCallback((key, value) => setFilter((filter) => ({ ...filter, [key]: value })), [setFilter]),
|
||||
filter: filter ?? defaultValue,
|
||||
updateFilter: useCallback(
|
||||
(key, value) =>
|
||||
setFilter((filter) => {
|
||||
if (!filter) {
|
||||
filter = {} as T;
|
||||
}
|
||||
return { ...filter, [key]: value };
|
||||
}),
|
||||
[setFilter],
|
||||
),
|
||||
bindUpdateFilter: useCallback(
|
||||
(key) => (value) => setFilter((filter) => ({ ...filter, [key]: value })),
|
||||
(key) => (value) =>
|
||||
setFilter((filter) => {
|
||||
if (!filter) {
|
||||
filter = {} as T;
|
||||
}
|
||||
return { ...filter, [key]: value };
|
||||
}),
|
||||
[setFilter],
|
||||
),
|
||||
};
|
||||
|
||||
@@ -115,7 +115,10 @@ export const searchResolvers: Resolvers = {
|
||||
"include[anime]",
|
||||
"animethemes.animethemeentries.videos,animethemes.group,animethemes.song,images",
|
||||
);
|
||||
searchParams.append("include[animetheme]", "animethemeentries.videos,anime.images,song.artists,group");
|
||||
searchParams.append(
|
||||
"include[animetheme]",
|
||||
"animethemeentries.videos.audio,anime.images,song.artists,group",
|
||||
);
|
||||
searchParams.append("include[artist]", "images,songs");
|
||||
searchParams.append("include[playlist]", "user");
|
||||
searchParams.append("fields[anime]", "name,slug,year,season");
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { useEffect, useState } from "react";
|
||||
import type { GetStaticPaths, GetStaticProps } from "next";
|
||||
import { useRouter } from "next/router";
|
||||
|
||||
@@ -27,6 +28,18 @@ export default function SearchEntityPage({ entity }: SearchEntityPageProps) {
|
||||
const urlParams = router.query;
|
||||
const searchQuery = Array.isArray(urlParams.q) ? urlParams.q.join() : urlParams.q;
|
||||
|
||||
const [shouldRender, setShouldRender] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
if (router.isReady) {
|
||||
setShouldRender(true);
|
||||
}
|
||||
}, [router.isReady]);
|
||||
|
||||
if (!shouldRender) {
|
||||
return <SEO title={`${capitalize(entity)} Index`} />;
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<SEO title={`${searchQuery ? `${searchQuery} - ` : ""}${capitalize(entity)} Index`} />
|
||||
|
||||
Reference in New Issue
Block a user