Use global navigation history stack
The readers history stack was different to the one from the rest of the app, resulting in an infinite loop when using the closing the reader and using the back button in the manga page, since the back button just opened the reader again.
Regression introduced with 4bb458778e
This commit is contained in:
@@ -6,14 +6,26 @@
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
import { useEffect, useState } from 'react';
|
||||
import { useCallback, useEffect, useState } from 'react';
|
||||
import { NavigationType, useLocation, useNavigationType } from 'react-router-dom';
|
||||
|
||||
const MAX_DEPTH = 50;
|
||||
|
||||
export const useHistory = () => {
|
||||
const location = useLocation();
|
||||
const navigationType = useNavigationType();
|
||||
|
||||
const [history, setHistory] = useState<string[]>([]);
|
||||
const [history, setHistory] = useState<string[]>([location.pathname]);
|
||||
|
||||
const updateHistory = useCallback((newHistory: string[]) => {
|
||||
// prevent the history from getting too large (only relevant in case the app never gets reloaded (e.g. browser F5,
|
||||
// electron window gets closed))
|
||||
// theoretically the history should be empty for the "base" pages (e.g. library, updates, ...), but since the browser
|
||||
// navigation is used, opening another base page pushes this page to this history, as if it had a different depth
|
||||
// than the current page (expected history: library -> manga -> reader,
|
||||
// possible history: library -> updates -> settings -> library -> manga -> reader)
|
||||
setHistory(newHistory.slice(-MAX_DEPTH));
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
const isLastPageInHistory = location.key === 'default';
|
||||
@@ -24,13 +36,13 @@ export const useHistory = () => {
|
||||
|
||||
switch (navigationType) {
|
||||
case NavigationType.Pop:
|
||||
setHistory([...history.slice(0, -1)]);
|
||||
updateHistory([...history.slice(0, -1)]);
|
||||
break;
|
||||
case NavigationType.Push:
|
||||
setHistory([...history, location.pathname]);
|
||||
updateHistory([...history, location.pathname]);
|
||||
break;
|
||||
case NavigationType.Replace:
|
||||
setHistory([...history.slice(0, -1), location.pathname]);
|
||||
updateHistory([...history.slice(0, -1), location.pathname]);
|
||||
break;
|
||||
default:
|
||||
throw new Error(`Unexpected NavigationType "${navigationType}"`);
|
||||
|
||||
Reference in New Issue
Block a user