diff --git a/src/App.tsx b/src/App.tsx index e6c52dfa..36ae87ee 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -158,7 +158,7 @@ export default function App() { - + diff --git a/src/components/navbar/DefaultNavBar.tsx b/src/components/navbar/DefaultNavBar.tsx index f30b0195..e7448750 100644 --- a/src/components/navbar/DefaultNavBar.tsx +++ b/src/components/navbar/DefaultNavBar.tsx @@ -105,7 +105,6 @@ export default function DefaultNavBar() { { !navbarItems.some(({ path }) => path === history.location.pathname) - && !history.location.pathname.startsWith('/library') && ( (); const [tabs, setTabs] = useState(); + const [tabNum, setTabNum] = useState(0); - const history = useHistory(); + const [tabSearchParam, setTabSearchParam] = useQueryParam('tab', NumberParam); // a hack so MangaGrid doesn't stop working. I won't change it in case // if I do manga pagination for library.. const [lastPageNum, setLastPageNum] = useState(1); const handleTabChange = (newTab: number) => { - // eslint-disable-next-line @typescript-eslint/no-unused-expressions - history.location.search === '' - ? history.replace(`/library/${newTab}`) - : history.replace(`/library/${newTab}/${history.location.search}`); setTabNum(newTab); + setTabSearchParam(newTab); }; useEffect(() => { @@ -63,15 +60,14 @@ export default function Library() { })); setTabs(categoryTabs); if (categoryTabs.length > 0) { - setTabNum(() => { - if (tabParamNumber !== undefined - && !Number.isNaN(tabParamNumber) - && !!categories.find((cat) => cat.order === Number(tabParamNumber))) { - return Number(tabParamNumber); - } - history.replace('/library'); - return categoryTabs[0].category.order; - }); + if ( + tabSearchParam !== undefined + && tabSearchParam !== null + && !Number.isNaN(tabSearchParam) + && categories.some((category) => category.order === Number(tabSearchParam)) + ) { + handleTabChange(Number(tabSearchParam!)); + } else { handleTabChange(categoryTabs[0].category.order); } } }); }, []); diff --git a/src/util/useLibraryOptions.ts b/src/util/useLibraryOptions.ts index 5b3450e7..d64b00d5 100644 --- a/src/util/useLibraryOptions.ts +++ b/src/util/useLibraryOptions.ts @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { BooleanParam, useQueryParams, StringParam } from 'use-query-params'; +import { BooleanParam, useQueryParam, StringParam } from 'use-query-params'; export type NullAndUndefined = T | null | undefined; @@ -21,24 +21,13 @@ interface IUseLibraryOptions { } export default function useLibraryOptions(): IUseLibraryOptions { - const [searchQuery, setSearchQuery] = useQueryParams({ - downloaded: BooleanParam, - unread: BooleanParam, - query: StringParam, - }); - const { downloaded, unread, query } = searchQuery; - const setDownloaded = (newDownloaded: NullAndUndefined) => { - setSearchQuery(Object.assign(searchQuery, { downloaded: newDownloaded }), 'replace'); - }; - const setUnread = (newUnread: NullAndUndefined) => { - setSearchQuery(Object.assign(searchQuery, { unread: newUnread }), 'replace'); - }; - const setQuery = (newQuery: NullAndUndefined) => { - setSearchQuery(Object.assign(searchQuery, { query: newQuery }), 'replace'); - }; + const [downloaded, setDownloaded] = useQueryParam('downloaded', BooleanParam); + const [unread, setUnread] = useQueryParam('unread', BooleanParam); + const [query, setQuery] = useQueryParam('query', StringParam); + // eslint-disable-next-line eqeqeq const active = !(unread == undefined) || !(downloaded == undefined); return { - downloaded, setDownloaded, unread, setUnread, active, query, setQuery, + downloaded, setDownloaded, unread, setUnread, query, setQuery, active, }; }