2021-03-26 04:17:02 +04:30
|
|
|
/*
|
|
|
|
|
* Copyright (C) Contributors to the Suwayomi project
|
|
|
|
|
*
|
|
|
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
2021-01-26 23:32:12 +03:30
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
2023-05-18 13:17:41 +02:00
|
|
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
|
|
|
*/
|
2021-01-26 23:32:12 +03:30
|
|
|
|
2021-11-15 19:33:48 +03:30
|
|
|
import { Container } from '@mui/material';
|
2021-09-09 17:51:22 +04:30
|
|
|
import CssBaseline from '@mui/material/CssBaseline';
|
2023-12-10 15:58:21 +01:00
|
|
|
import React, { useLayoutEffect } from 'react';
|
|
|
|
|
import { Navigate, Route, Routes, useLocation } from 'react-router-dom';
|
2023-08-27 21:39:47 +02:00
|
|
|
import { loadErrorMessages, loadDevMessages } from '@apollo/client/dev';
|
2023-10-28 00:32:02 +02:00
|
|
|
import { AppContext } from '@/components/context/AppContext';
|
|
|
|
|
import { Browse } from '@/screens/Browse';
|
|
|
|
|
import { DownloadQueue } from '@/screens/DownloadQueue';
|
|
|
|
|
import { Extensions } from '@/screens/Extensions';
|
|
|
|
|
import { Library } from '@/screens/Library';
|
|
|
|
|
import { Manga } from '@/screens/Manga';
|
|
|
|
|
import { Reader } from '@/screens/Reader';
|
|
|
|
|
import { SearchAll } from '@/screens/SearchAll';
|
|
|
|
|
import { Settings } from '@/screens/Settings';
|
|
|
|
|
import { About } from '@/screens/settings/About';
|
|
|
|
|
import { Backup } from '@/screens/settings/Backup';
|
|
|
|
|
import { Categories } from '@/screens/settings/Categories';
|
|
|
|
|
import { DefaultReaderSettings } from '@/screens/settings/DefaultReaderSettings';
|
|
|
|
|
import { SourceConfigure } from '@/screens/SourceConfigure';
|
|
|
|
|
import { SourceMangas } from '@/screens/SourceMangas';
|
|
|
|
|
import { Sources } from '@/screens/Sources';
|
|
|
|
|
import { Updates } from '@/screens/Updates';
|
2023-06-05 01:42:39 +02:00
|
|
|
import '@/i18n';
|
2023-10-28 00:32:02 +02:00
|
|
|
import { LibrarySettings } from '@/screens/settings/LibrarySettings';
|
|
|
|
|
import { DefaultNavBar } from '@/components/navbar/DefaultNavBar';
|
2023-11-04 14:40:43 +01:00
|
|
|
import { DownloadSettings } from '@/screens/settings/DownloadSettings.tsx';
|
2023-11-18 19:55:44 +01:00
|
|
|
import { ServerSettings } from '@/screens/settings/ServerSettings.tsx';
|
2023-11-20 22:14:24 +01:00
|
|
|
import { WebUISettings } from '@/screens/settings/WebUISettings.tsx';
|
2023-12-09 23:20:52 +01:00
|
|
|
import { ServerUpdateChecker } from '@/components/settings/ServerUpdateChecker.tsx';
|
2021-09-09 17:51:22 +04:30
|
|
|
|
2023-12-23 15:15:03 +01:00
|
|
|
if (process.env.NODE_ENV !== 'production') {
|
2023-08-27 21:39:47 +02:00
|
|
|
// Adds messages only in a dev environment
|
|
|
|
|
loadDevMessages();
|
|
|
|
|
loadErrorMessages();
|
|
|
|
|
}
|
2023-12-10 15:58:21 +01:00
|
|
|
|
|
|
|
|
const ScrollToTop = () => {
|
|
|
|
|
const { pathname } = useLocation();
|
|
|
|
|
|
|
|
|
|
useLayoutEffect(() => {
|
|
|
|
|
window.scrollTo(0, 0);
|
|
|
|
|
}, [pathname]);
|
|
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
};
|
|
|
|
|
|
2023-10-28 00:32:02 +02:00
|
|
|
export const App: React.FC = () => (
|
2022-11-26 13:51:56 +01:00
|
|
|
<AppContext>
|
2023-12-10 15:58:21 +01:00
|
|
|
<ScrollToTop />
|
2023-12-09 23:20:52 +01:00
|
|
|
<ServerUpdateChecker />
|
2022-11-26 13:51:56 +01:00
|
|
|
<CssBaseline />
|
|
|
|
|
<DefaultNavBar />
|
|
|
|
|
<Container
|
|
|
|
|
id="appMainContainer"
|
|
|
|
|
maxWidth={false}
|
|
|
|
|
disableGutters
|
|
|
|
|
sx={{
|
|
|
|
|
mt: 8,
|
|
|
|
|
ml: { sm: 8 },
|
|
|
|
|
mb: { xs: 8, sm: 0 },
|
|
|
|
|
width: 'auto',
|
|
|
|
|
overflow: 'auto',
|
|
|
|
|
}}
|
|
|
|
|
>
|
2023-06-04 21:30:15 +02:00
|
|
|
<Routes>
|
2022-11-26 13:51:56 +01:00
|
|
|
{/* General Routes */}
|
2023-06-26 20:40:35 +02:00
|
|
|
<Route path="/" element={<Navigate to="/library" replace />} />
|
2023-06-04 21:30:15 +02:00
|
|
|
<Route path="settings">
|
|
|
|
|
<Route index element={<Settings />} />
|
|
|
|
|
<Route path="about" element={<About />} />
|
|
|
|
|
<Route path="categories" element={<Categories />} />
|
|
|
|
|
<Route path="defaultReaderSettings" element={<DefaultReaderSettings />} />
|
|
|
|
|
<Route path="librarySettings" element={<LibrarySettings />} />
|
2023-11-04 14:40:43 +01:00
|
|
|
<Route path="downloadSettings" element={<DownloadSettings />} />
|
2023-06-04 21:30:15 +02:00
|
|
|
<Route path="backup" element={<Backup />} />
|
2023-11-18 19:55:44 +01:00
|
|
|
<Route path="server" element={<ServerSettings />} />
|
2023-11-20 22:14:24 +01:00
|
|
|
<Route path="webUI" element={<WebUISettings />} />
|
2022-11-26 13:51:56 +01:00
|
|
|
</Route>
|
2021-03-18 21:46:24 +03:30
|
|
|
|
2022-11-26 13:51:56 +01:00
|
|
|
{/* Manga Routes */}
|
2021-01-23 01:20:16 +03:30
|
|
|
|
2023-06-04 21:30:15 +02:00
|
|
|
<Route path="sources">
|
|
|
|
|
<Route index element={<Sources />} />
|
|
|
|
|
<Route path=":sourceId" element={<SourceMangas />} />
|
|
|
|
|
<Route path=":sourceId/configure/" element={<SourceConfigure />} />
|
|
|
|
|
<Route path="all/search/" element={<SearchAll />} />
|
|
|
|
|
</Route>
|
|
|
|
|
<Route path="downloads" element={<DownloadQueue />} />
|
|
|
|
|
<Route path="manga/:id">
|
|
|
|
|
<Route path="chapter/:chapterNum" element={null} />
|
|
|
|
|
<Route index element={<Manga />} />
|
|
|
|
|
</Route>
|
|
|
|
|
<Route path="library" element={<Library />} />
|
|
|
|
|
<Route path="updates" element={<Updates />} />
|
|
|
|
|
<Route path="extensions" element={<Extensions />} />
|
|
|
|
|
<Route path="browse" element={<Browse />} />
|
|
|
|
|
</Routes>
|
2022-11-26 13:51:56 +01:00
|
|
|
</Container>
|
2023-06-04 21:30:15 +02:00
|
|
|
<Routes>
|
|
|
|
|
<Route path="manga/:mangaId/chapter/:chapterIndex" element={<Reader />} />
|
|
|
|
|
<Route path="*" element={null} />
|
|
|
|
|
</Routes>
|
2022-11-26 13:51:56 +01:00
|
|
|
</AppContext>
|
|
|
|
|
);
|