diff --git a/src/backend/metadata/search.ts b/src/backend/metadata/search.ts index 9ae985e7..6f6ecc99 100644 --- a/src/backend/metadata/search.ts +++ b/src/backend/metadata/search.ts @@ -5,7 +5,7 @@ import { MWMediaMeta, MWQuery } from "./types/mw"; const cache = new SimpleCache(); cache.setCompare((a, b) => { - return a.type === b.type && a.searchQuery.trim() === b.searchQuery.trim(); + return a.searchQuery.trim() === b.searchQuery.trim(); }); cache.initialize(); diff --git a/src/backend/metadata/types/mw.ts b/src/backend/metadata/types/mw.ts index e7cc26fe..3f0f452f 100644 --- a/src/backend/metadata/types/mw.ts +++ b/src/backend/metadata/types/mw.ts @@ -43,7 +43,6 @@ export type MWMediaMeta = MWMediaMetaBase & MWMediaMetaSpecific; export interface MWQuery { searchQuery: string; - type: MWMediaType; } export interface DetailedMeta { diff --git a/src/hooks/useSearchQuery.ts b/src/hooks/useSearchQuery.ts index cb8c3171..fe2b451e 100644 --- a/src/hooks/useSearchQuery.ts +++ b/src/hooks/useSearchQuery.ts @@ -1,14 +1,16 @@ import { useState } from "react"; -import { generatePath, useHistory, useRouteMatch } from "react-router-dom"; +import { generatePath, useHistory, useParams } from "react-router-dom"; -import { MWMediaType, MWQuery } from "@/backend/metadata/types/mw"; +import { MWQuery } from "@/backend/metadata/types/mw"; +import { useQueryParams } from "@/hooks/useQueryParams"; -function getInitialValue(params: { type: string; query: string }) { - const type = - Object.values(MWMediaType).find((v) => params.type === v) || - MWMediaType.MOVIE; - const searchQuery = decodeURIComponent(params.query || ""); - return { type, searchQuery }; +function getInitialValue( + query: Record, + params: Record +) { + let searchQuery = decodeURIComponent(params.query || ""); + if (query.q) searchQuery = query.q; + return { searchQuery }; } export function useSearchQuery(): [ @@ -17,28 +19,34 @@ export function useSearchQuery(): [ () => void ] { const history = useHistory(); - const { path, params } = useRouteMatch<{ type: string; query: string }>(); - const [search, setSearch] = useState(getInitialValue(params)); + const query = useQueryParams(); + const params = useParams<{ query: string }>(); + const [search, setSearch] = useState(getInitialValue(query, params)); const updateParams = (inp: Partial, force: boolean) => { - const copySearch: MWQuery = { ...search }; + const copySearch = { ...search }; Object.assign(copySearch, inp); setSearch(copySearch); if (!force) return; + if (copySearch.searchQuery.length === 0) { + history.replace("/"); + return; + } history.replace( - generatePath(path, { - query: - copySearch.searchQuery.length === 0 ? undefined : inp.searchQuery, - type: copySearch.type, + generatePath("/browse/:query", { + query: copySearch.searchQuery, }) ); }; const onUnFocus = () => { + if (search.searchQuery.length === 0) { + history.replace("/"); + return; + } history.replace( - generatePath(path, { - query: search.searchQuery.length === 0 ? undefined : search.searchQuery, - type: search.type, + generatePath("/browse/:query", { + query: search.searchQuery, }) ); }; diff --git a/src/setup/App.tsx b/src/setup/App.tsx index e8fd3695..6bb6b957 100644 --- a/src/setup/App.tsx +++ b/src/setup/App.tsx @@ -84,8 +84,12 @@ function App() { - - + + {/* other */} diff --git a/src/views/search/SearchLoadingView.tsx b/src/views/search/SearchLoadingView.tsx index 45971860..0c59f5d9 100644 --- a/src/views/search/SearchLoadingView.tsx +++ b/src/views/search/SearchLoadingView.tsx @@ -1,19 +1,10 @@ import { useTranslation } from "react-i18next"; import { Loading } from "@/components/layout/Loading"; -import { useSearchQuery } from "@/hooks/useSearchQuery"; export function SearchLoadingView() { const { t } = useTranslation(); - const [query] = useSearchQuery(); return ( - + ); }