From 500fd8c82e18ad6043a0f82a7e67ffd0516ee965 Mon Sep 17 00:00:00 2001 From: abhijeetchawla Date: Mon, 15 Nov 2021 18:48:36 +0530 Subject: [PATCH 1/4] added an optional url parameter to the library path to get to a particular tab --- src/App.tsx | 2 +- src/screens/Library.tsx | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 3a10146ed3..9beeb23d4f 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -158,7 +158,7 @@ export default function App() { - + diff --git a/src/screens/Library.tsx b/src/screens/Library.tsx index 9fdef66814..fbc8f33d9f 100644 --- a/src/screens/Library.tsx +++ b/src/screens/Library.tsx @@ -16,6 +16,7 @@ import TabPanel from 'components/util/TabPanel'; import LibraryOptions from 'components/library/LibraryOptions'; import LibraryMangaGrid from 'components/library/LibraryMangaGrid'; import LibrarySearch from 'components/library/LibrarySearch'; +import { useHistory, useParams } from 'react-router-dom'; interface IMangaCategory { category: ICategory @@ -34,14 +35,17 @@ export default function Library() { ); }, []); + const { tabParamNumber } = useParams<{ tabParamNumber: string }>(); const [tabs, setTabs] = useState(); const [tabNum, setTabNum] = useState(0); + const history = useHistory(); // 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) => { + history.replace(`/library/${newTab}`); setTabNum(newTab); }; @@ -54,10 +58,11 @@ export default function Library() { mangas: [] as IManga[], isFetched: false, })); - setTabs(categoryTabs); if (categoryTabs.length > 0) { - setTabNum(categoryTabs[0].category.order); + setTabNum(tabParamNumber === undefined + ? categoryTabs[0].category.order + : Number(tabParamNumber)); } }); }, []); From 9d4796bc05418fd060fe1a020bdba3e970804d66 Mon Sep 17 00:00:00 2001 From: abhijeetchawla Date: Tue, 16 Nov 2021 11:32:04 +0530 Subject: [PATCH 2/4] Added Error checking when taking the parameter from the Url --- src/screens/Library.tsx | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/screens/Library.tsx b/src/screens/Library.tsx index fbc8f33d9f..529225a1f4 100644 --- a/src/screens/Library.tsx +++ b/src/screens/Library.tsx @@ -60,9 +60,15 @@ export default function Library() { })); setTabs(categoryTabs); if (categoryTabs.length > 0) { - setTabNum(tabParamNumber === undefined - ? categoryTabs[0].category.order - : Number(tabParamNumber)); + 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; + }); } }); }, []); From ab24c8be00d4e7d1881d3e5f02506c064c5d9c3d Mon Sep 17 00:00:00 2001 From: abhijeetchawla Date: Wed, 17 Nov 2021 13:28:17 +0530 Subject: [PATCH 3/4] Now Tabs persist with library options --- src/screens/Library.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/screens/Library.tsx b/src/screens/Library.tsx index 529225a1f4..125d28968c 100644 --- a/src/screens/Library.tsx +++ b/src/screens/Library.tsx @@ -45,7 +45,10 @@ export default function Library() { const [lastPageNum, setLastPageNum] = useState(1); const handleTabChange = (newTab: number) => { - history.replace(`/library/${newTab}`); + // 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); }; From 9a071aac1adc1fee1771ddb731b594311176e04c Mon Sep 17 00:00:00 2001 From: abhijeetchawla Date: Wed, 17 Nov 2021 13:39:49 +0530 Subject: [PATCH 4/4] FIxed a bug which made the backbutton appear in the Library route when tabs number was presents in the url --- src/components/navbar/DefaultNavBar.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/navbar/DefaultNavBar.tsx b/src/components/navbar/DefaultNavBar.tsx index e7448750f4..f30b019588 100644 --- a/src/components/navbar/DefaultNavBar.tsx +++ b/src/components/navbar/DefaultNavBar.tsx @@ -105,6 +105,7 @@ export default function DefaultNavBar() { { !navbarItems.some(({ path }) => path === history.location.pathname) + && !history.location.pathname.startsWith('/library') && (