diff --git a/.eslintrc.js b/.eslintrc.js
index 6437ad3b..4361cb2a 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -1,6 +1,6 @@
module.exports = {
extends: ['airbnb', 'airbnb-typescript', 'prettier'],
- plugins: ['unused-imports', '@typescript-eslint', 'no-relative-import-paths', 'prettier', 'header'],
+ plugins: ['unused-imports', 'eslint-plugin-import', '@typescript-eslint', 'no-relative-import-paths', 'prettier', 'header'],
parserOptions: {
project: ['./tsconfig.json', './tsconfig.node.json', './tools/scripts/tsconfig.json'],
},
@@ -10,6 +10,9 @@ module.exports = {
rules: {
'unused-imports/no-unused-imports': 'error',
+ 'import/prefer-default-export': 'off',
+ 'import/no-default-export': 'error',
+
'header/header': [
'error',
'block', // comment type
diff --git a/src/App.tsx b/src/App.tsx
index 76130286..0c6cecd3 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -12,33 +12,33 @@ import React from 'react';
import { Navigate, Route, Routes } from 'react-router-dom';
import { loadErrorMessages, loadDevMessages } from '@apollo/client/dev';
import { __DEV__ } from '@apollo/client/utilities/globals';
-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';
+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';
import '@/i18n';
-import LibrarySettings from '@/screens/settings/LibrarySettings';
-import DefaultNavBar from '@/components/navbar/DefaultNavBar';
+import { LibrarySettings } from '@/screens/settings/LibrarySettings';
+import { DefaultNavBar } from '@/components/navbar/DefaultNavBar';
if (__DEV__) {
// Adds messages only in a dev environment
loadDevMessages();
loadErrorMessages();
}
-const App: React.FC = () => (
+export const App: React.FC = () => (
@@ -91,5 +91,3 @@ const App: React.FC = () => (
);
-
-export default App;
diff --git a/src/components/ExtensionCard.tsx b/src/components/ExtensionCard.tsx
index cc917968..732703a7 100644
--- a/src/components/ExtensionCard.tsx
+++ b/src/components/ExtensionCard.tsx
@@ -15,7 +15,7 @@ import Typography from '@mui/material/Typography';
import { Box } from '@mui/material';
import { useTranslation } from 'react-i18next';
import { PartialExtension, TranslationKey } from '@/typings';
-import requestManager from '@/lib/requests/RequestManager.ts';
+import { requestManager } from '@/lib/requests/RequestManager.ts';
interface IProps {
extension: PartialExtension;
@@ -60,7 +60,7 @@ const INSTALLED_STATE_TO_TRANSLATION_KEY_MAP: { [installedState in InstalledStat
[InstalledState.INSTALLING]: 'extension.state.label.installing',
} as const;
-export default function ExtensionCard(props: IProps) {
+export function ExtensionCard(props: IProps) {
const { t } = useTranslation();
const {
diff --git a/src/components/MangaCard.tsx b/src/components/MangaCard.tsx
index bba7181f..7fcdc412 100644
--- a/src/components/MangaCard.tsx
+++ b/src/components/MangaCard.tsx
@@ -12,9 +12,9 @@ import Typography from '@mui/material/Typography';
import { Link } from 'react-router-dom';
import { Avatar, Box, CardContent, styled } from '@mui/material';
import { useTranslation } from 'react-i18next';
-import requestManager from '@/lib/requests/RequestManager.ts';
+import { requestManager } from '@/lib/requests/RequestManager.ts';
import { GridLayout, useLibraryOptionsContext } from '@/components/context/LibraryOptionsContext';
-import SpinnerImage from '@/components/util/SpinnerImage';
+import { SpinnerImage } from '@/components/util/SpinnerImage';
import { TPartialManga } from '@/typings.ts';
const BottomGradient = styled('div')({
@@ -71,7 +71,7 @@ interface IProps {
inLibraryIndicator?: boolean;
}
-const MangaCard = (props: IProps) => {
+export const MangaCard = (props: IProps) => {
const { t } = useTranslation();
const {
@@ -259,5 +259,3 @@ const MangaCard = (props: IProps) => {
);
};
-
-export default MangaCard;
diff --git a/src/components/MangaGrid.tsx b/src/components/MangaGrid.tsx
index f9573804..47e9f65d 100644
--- a/src/components/MangaGrid.tsx
+++ b/src/components/MangaGrid.tsx
@@ -11,11 +11,11 @@ import Grid, { GridTypeMap } from '@mui/material/Grid';
import { Box, Typography } from '@mui/material';
import { GridItemProps, VirtuosoGrid, VirtuosoGridHandle } from 'react-virtuoso';
import { useNavigate, useLocation } from 'react-router-dom';
-import EmptyView from '@/components/util/EmptyView';
-import LoadingPlaceholder from '@/components/util/LoadingPlaceholder';
-import MangaCard from '@/components/MangaCard';
+import { EmptyView } from '@/components/util/EmptyView';
+import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder';
+import { MangaCard } from '@/components/MangaCard';
import { GridLayout } from '@/components/context/LibraryOptionsContext';
-import useLocalStorage from '@/util/useLocalStorage';
+import { useLocalStorage } from '@/util/useLocalStorage';
import { TPartialManga } from '@/typings.ts';
const GridContainer = React.forwardRef(({ children, ...props }, ref) => (
@@ -162,7 +162,7 @@ export interface IMangaGridProps {
inLibraryIndicator?: boolean;
}
-const MangaGrid: React.FC = (props) => {
+export const MangaGrid: React.FC = (props) => {
const {
mangas,
isLoading,
@@ -256,5 +256,3 @@ MangaGrid.defaultProps = {
message: '',
messageExtra: undefined,
};
-
-export default MangaGrid;
diff --git a/src/components/SourceCard.tsx b/src/components/SourceCard.tsx
index d779de44..795011d3 100644
--- a/src/components/SourceCard.tsx
+++ b/src/components/SourceCard.tsx
@@ -16,7 +16,7 @@ import React from 'react';
import { useTranslation } from 'react-i18next';
import { Link } from 'react-router-dom';
import { ISource } from '@/typings';
-import requestManager from '@/lib/requests/RequestManager.ts';
+import { requestManager } from '@/lib/requests/RequestManager.ts';
import { translateExtensionLanguage } from '@/screens/util/Extensions';
import { SourceContentType } from '@/screens/SourceMangas';
@@ -42,7 +42,7 @@ interface IProps {
source: ISource;
}
-const SourceCard: React.FC = (props: IProps) => {
+export const SourceCard: React.FC = (props: IProps) => {
const { t } = useTranslation();
const {
@@ -137,5 +137,3 @@ const SourceCard: React.FC = (props: IProps) => {
);
};
-
-export default SourceCard;
diff --git a/src/components/atoms/CheckboxInput.tsx b/src/components/atoms/CheckboxInput.tsx
index 1d9c34df..343cf713 100644
--- a/src/components/atoms/CheckboxInput.tsx
+++ b/src/components/atoms/CheckboxInput.tsx
@@ -13,8 +13,6 @@ interface IProps extends CheckboxProps {
label?: string;
}
-const CheckboxInput: React.FC = ({ label, sx, ...rest }) => (
+export const CheckboxInput: React.FC = ({ label, sx, ...rest }) => (
} label={label} sx={sx} />
);
-
-export default CheckboxInput;
diff --git a/src/components/atoms/LoadingIconButton.tsx b/src/components/atoms/LoadingIconButton.tsx
deleted file mode 100644
index 70688d61..00000000
--- a/src/components/atoms/LoadingIconButton.tsx
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) Contributors to the Suwayomi project
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at https://mozilla.org/MPL/2.0/.
- */
-
-import { CircularProgress, IconButton, IconButtonProps } from '@mui/material';
-import React, { useState } from 'react';
-
-interface IProps extends Omit {
- loading?: boolean;
- onClick: (e: React.MouseEvent) => Promise;
-}
-
-const LoadingIconButton = ({ onClick, children, loading: iLoading, ...rest }: IProps) => {
- const [sLoading, setLoading] = useState(false);
- const loading = sLoading || iLoading;
-
- const handleClick = (e: React.MouseEvent) => {
- setLoading(true);
- onClick(e).finally(() => setLoading(false));
- };
-
- return (
-
- {loading ? : children}
-
- );
-};
-
-LoadingIconButton.defaultProps = {
- loading: false,
-};
-
-export default LoadingIconButton;
diff --git a/src/components/atoms/RadioInput.tsx b/src/components/atoms/RadioInput.tsx
index d7a107fb..357b210e 100644
--- a/src/components/atoms/RadioInput.tsx
+++ b/src/components/atoms/RadioInput.tsx
@@ -13,8 +13,6 @@ export interface RadioInputProps extends RadioProps {
label?: string;
}
-const RadioInput: React.FC = ({ label, sx, ...rest }) => (
+export const RadioInput: React.FC = ({ label, sx, ...rest }) => (
} label={label} sx={sx} />
);
-
-export default RadioInput;
diff --git a/src/components/atoms/SortRadioInput.tsx b/src/components/atoms/SortRadioInput.tsx
index a36a8704..e5c79e25 100644
--- a/src/components/atoms/SortRadioInput.tsx
+++ b/src/components/atoms/SortRadioInput.tsx
@@ -9,17 +9,15 @@
import ArrowDownward from '@mui/icons-material/ArrowDownward';
import ArrowUpward from '@mui/icons-material/ArrowUpward';
import { memo } from 'react';
-import RadioInput, { RadioInputProps } from '@/components/atoms/RadioInput';
+import { RadioInput, RadioInputProps } from '@/components/atoms/RadioInput';
interface IProps extends RadioInputProps {
sortDescending?: boolean | null | undefined;
}
-const SortRadioInput = memo(({ sortDescending, ...rest }: IProps) => (
+export const SortRadioInput = memo(({ sortDescending, ...rest }: IProps) => (
: }
{...rest}
/>
));
-
-export default SortRadioInput;
diff --git a/src/components/atoms/ThreeStateCheckbox.tsx b/src/components/atoms/ThreeStateCheckbox.tsx
index 9e8baefc..ee555c12 100644
--- a/src/components/atoms/ThreeStateCheckbox.tsx
+++ b/src/components/atoms/ThreeStateCheckbox.tsx
@@ -28,7 +28,7 @@ export interface ThreeStateCheckboxProps extends Omit = ({ checked, onChange, ...rest }) => {
+export const ThreeStateCheckbox: React.FC = ({ checked, onChange, ...rest }) => {
const handleChange = useCallback(() => {
if (onChange) {
const newState = nextState(checked);
@@ -46,4 +46,3 @@ const ThreeStateCheckbox: React.FC = ({ checked, onChan
/>
);
};
-export default ThreeStateCheckbox;
diff --git a/src/components/atoms/ThreeStateCheckboxInput.tsx b/src/components/atoms/ThreeStateCheckboxInput.tsx
index e4c21260..e62ad632 100644
--- a/src/components/atoms/ThreeStateCheckboxInput.tsx
+++ b/src/components/atoms/ThreeStateCheckboxInput.tsx
@@ -8,14 +8,12 @@
import { FormControlLabel } from '@mui/material';
import React from 'react';
-import ThreeStateCheckbox, { ThreeStateCheckboxProps } from '@/components/atoms/ThreeStateCheckbox';
+import { ThreeStateCheckbox, ThreeStateCheckboxProps } from '@/components/atoms/ThreeStateCheckbox';
interface IProps extends ThreeStateCheckboxProps {
label?: string;
}
-const ThreeStateCheckboxInput: React.FC = ({ label, sx, ...rest }) => (
+export const ThreeStateCheckboxInput: React.FC = ({ label, sx, ...rest }) => (
} label={label} sx={sx} />
);
-
-export default ThreeStateCheckboxInput;
diff --git a/src/components/context/AppContext.tsx b/src/components/context/AppContext.tsx
index f79322a6..9e2193b4 100644
--- a/src/components/context/AppContext.tsx
+++ b/src/components/context/AppContext.tsx
@@ -11,17 +11,17 @@ import React, { useMemo } from 'react';
import { BrowserRouter as Router } from 'react-router-dom';
import { QueryParamProvider } from 'use-query-params';
import { ReactRouter6Adapter } from 'use-query-params/adapters/react-router-6';
-import createTheme from '@/theme';
-import useLocalStorage from '@/util/useLocalStorage';
-import DarkTheme from '@/components/context/DarkTheme';
-import NavBarContextProvider from '@/components/navbar/NavBarContextProvider';
-import LibraryOptionsContextProvider from '@/components/library/LibraryOptionsProvider';
+import { createTheme } from '@/theme';
+import { useLocalStorage } from '@/util/useLocalStorage';
+import { DarkTheme } from '@/components/context/DarkTheme';
+import { NavBarContextProvider } from '@/components/navbar/NavBarContextProvider';
+import { LibraryOptionsContextProvider } from '@/components/library/LibraryOptionsProvider';
interface Props {
children: React.ReactNode;
}
-const AppContext: React.FC = ({ children }) => {
+export const AppContext: React.FC = ({ children }) => {
const [darkTheme, setDarkTheme] = useLocalStorage('darkTheme', true);
const darkThemeContext = useMemo(
@@ -50,5 +50,3 @@ const AppContext: React.FC = ({ children }) => {
);
};
-
-export default AppContext;
diff --git a/src/components/context/DarkTheme.tsx b/src/components/context/DarkTheme.tsx
index cd3ba383..21366697 100644
--- a/src/components/context/DarkTheme.tsx
+++ b/src/components/context/DarkTheme.tsx
@@ -13,9 +13,7 @@ type ContextType = {
setDarkTheme: React.Dispatch>;
};
-const DarkTheme = React.createContext({
+export const DarkTheme = React.createContext({
darkTheme: true,
setDarkTheme: (): void => {},
});
-
-export default DarkTheme;
diff --git a/src/components/context/LibraryOptionsContext.tsx b/src/components/context/LibraryOptionsContext.tsx
index 56bab083..183853be 100644
--- a/src/components/context/LibraryOptionsContext.tsx
+++ b/src/components/context/LibraryOptionsContext.tsx
@@ -34,13 +34,11 @@ export const DefaultLibraryOptions: LibraryOptions = {
showTabSize: false,
};
-const LibraryOptionsContext = React.createContext({
+export const LibraryOptionsContext = React.createContext({
options: DefaultLibraryOptions,
setOptions: () => {},
});
-export default LibraryOptionsContext;
-
export function useLibraryOptionsContext() {
return useContext(LibraryOptionsContext);
}
diff --git a/src/components/context/NavbarContext.tsx b/src/components/context/NavbarContext.tsx
index 5f801ffa..5e6ab1fb 100644
--- a/src/components/context/NavbarContext.tsx
+++ b/src/components/context/NavbarContext.tsx
@@ -27,7 +27,7 @@ type ContextType = {
setOverride: React.Dispatch>;
};
-const NavBarContext = React.createContext({
+export const NavBarContext = React.createContext({
defaultBackTo: undefined,
setDefaultBackTo: (): void => {},
title: 'Tachidesk',
@@ -38,8 +38,6 @@ const NavBarContext = React.createContext({
setOverride: (): void => {},
});
-export default NavBarContext;
-
export const useNavBarContext = () => useContext(NavBarContext);
export const useSetDefaultBackTo = (value: string) => {
diff --git a/src/components/globalUpdate/CheckboxContainer.ts b/src/components/globalUpdate/CheckboxContainer.ts
index c678d37b..21823418 100644
--- a/src/components/globalUpdate/CheckboxContainer.ts
+++ b/src/components/globalUpdate/CheckboxContainer.ts
@@ -8,7 +8,6 @@
import { styled } from '@mui/material';
-// eslint-disable-next-line import/prefer-default-export
export const CheckboxContainer = styled('div')({
display: 'flex',
flexDirection: 'column',
diff --git a/src/components/globalUpdate/GlobalUpdateSettings.tsx b/src/components/globalUpdate/GlobalUpdateSettings.tsx
index a635f2ea..e31ea581 100644
--- a/src/components/globalUpdate/GlobalUpdateSettings.tsx
+++ b/src/components/globalUpdate/GlobalUpdateSettings.tsx
@@ -12,7 +12,6 @@ import { useTranslation } from 'react-i18next';
import { GlobalUpdateSettingsCategories } from '@/components/globalUpdate/GlobalUpdateSettingsCategories.tsx';
import { GlobalUpdateSettingsEntries } from '@/components/globalUpdate/GlobalUpdateSettingsEntries.tsx';
-// eslint-disable-next-line import/prefer-default-export
export const GlobalUpdateSettings = () => {
const { t } = useTranslation();
diff --git a/src/components/globalUpdate/GlobalUpdateSettingsCategories.tsx b/src/components/globalUpdate/GlobalUpdateSettingsCategories.tsx
index 83cc909a..b66ba5c3 100644
--- a/src/components/globalUpdate/GlobalUpdateSettingsCategories.tsx
+++ b/src/components/globalUpdate/GlobalUpdateSettingsCategories.tsx
@@ -17,11 +17,11 @@ import DialogContentText from '@mui/material/DialogContentText';
import DialogActions from '@mui/material/DialogActions';
import Button from '@mui/material/Button';
import { t as translate } from 'i18next';
-import ThreeStateCheckboxInput from '@/components/atoms/ThreeStateCheckboxInput.tsx';
-import makeToast from '@/components/util/Toast.tsx';
+import { ThreeStateCheckboxInput } from '@/components/atoms/ThreeStateCheckboxInput.tsx';
+import { makeToast } from '@/components/util/Toast.tsx';
import { IncludeInUpdate } from '@/lib/graphql/generated/graphql.ts';
import { TCategory } from '@/typings.ts';
-import requestManager from '@/lib/requests/RequestManager.ts';
+import { requestManager } from '@/lib/requests/RequestManager.ts';
import { CheckboxContainer } from '@/components/globalUpdate/CheckboxContainer.ts';
const booleanToIncludeInStatus = (status: boolean | null | undefined): IncludeInUpdate => {
@@ -78,7 +78,6 @@ const getCategoryUpdateInfo = (
return categories.map((category) => category.name).join(', ');
};
-// eslint-disable-next-line import/prefer-default-export
export const GlobalUpdateSettingsCategories = () => {
const { t } = useTranslation();
diff --git a/src/components/globalUpdate/GlobalUpdateSettingsEntries.tsx b/src/components/globalUpdate/GlobalUpdateSettingsEntries.tsx
index 2ad92f47..968f9ab1 100644
--- a/src/components/globalUpdate/GlobalUpdateSettingsEntries.tsx
+++ b/src/components/globalUpdate/GlobalUpdateSettingsEntries.tsx
@@ -14,10 +14,10 @@ import ListItemText from '@mui/material/ListItemText';
import { Button, Dialog, DialogActions, DialogContent, DialogTitle } from '@mui/material';
import { GetServerSettingsQuery } from '@/lib/graphql/generated/graphql.ts';
import { TranslationKey } from '@/typings.ts';
-import requestManager from '@/lib/requests/RequestManager.ts';
-import makeToast from '@/components/util/Toast.tsx';
+import { requestManager } from '@/lib/requests/RequestManager.ts';
+import { makeToast } from '@/components/util/Toast.tsx';
import { CheckboxContainer } from '@/components/globalUpdate/CheckboxContainer';
-import CheckboxInput from '@/components/atoms/CheckboxInput';
+import { CheckboxInput } from '@/components/atoms/CheckboxInput';
type GlobalUpdateSkipEntriesSettings = Pick<
GetServerSettingsQuery['settings'],
@@ -69,7 +69,6 @@ const extractSkipEntriesSettings = (
excludeUnreadChapters: serverSettings.excludeUnreadChapters,
});
-// eslint-disable-next-line import/prefer-default-export
export const GlobalUpdateSettingsEntries = () => {
const { t } = useTranslation();
const { data, loading, error: requestError } = requestManager.useGetServerSettings();
diff --git a/src/components/library/LibraryMangaGrid.tsx b/src/components/library/LibraryMangaGrid.tsx
index 93b67d99..a8d72a9d 100644
--- a/src/components/library/LibraryMangaGrid.tsx
+++ b/src/components/library/LibraryMangaGrid.tsx
@@ -12,7 +12,7 @@ import { useTranslation } from 'react-i18next';
import { LibrarySortMode, NullAndUndefined, TManga } from '@/typings';
import { useSearchSettings } from '@/util/searchSettings';
import { useLibraryOptionsContext } from '@/components/context/LibraryOptionsContext';
-import MangaGrid from '@/components/MangaGrid';
+import { MangaGrid } from '@/components/MangaGrid';
const unreadFilter = (unread: NullAndUndefined, { unreadCount }: TManga): boolean => {
switch (unread) {
@@ -109,7 +109,7 @@ interface LibraryMangaGridProps {
message?: string;
}
-const LibraryMangaGrid: React.FC = ({ mangas, isLoading, message }) => {
+export const LibraryMangaGrid: React.FC = ({ mangas, isLoading, message }) => {
const { t } = useTranslation();
const [query] = useQueryParam('query', StringParam);
@@ -144,5 +144,3 @@ const LibraryMangaGrid: React.FC = ({ mangas, isLoading,
/>
);
};
-
-export default LibraryMangaGrid;
diff --git a/src/components/library/LibraryOptionsPanel.tsx b/src/components/library/LibraryOptionsPanel.tsx
index 0f660a9c..9de1fd9d 100644
--- a/src/components/library/LibraryOptionsPanel.tsx
+++ b/src/components/library/LibraryOptionsPanel.tsx
@@ -10,12 +10,12 @@ import { FormLabel, RadioGroup } from '@mui/material';
import React from 'react';
import { useTranslation } from 'react-i18next';
import { LibraryOptions, LibrarySortMode, TranslationKey } from '@/typings';
-import CheckboxInput from '@/components/atoms/CheckboxInput';
-import RadioInput from '@/components/atoms/RadioInput';
-import SortRadioInput from '@/components/atoms/SortRadioInput';
-import ThreeStateCheckboxInput from '@/components/atoms/ThreeStateCheckboxInput';
+import { CheckboxInput } from '@/components/atoms/CheckboxInput';
+import { RadioInput } from '@/components/atoms/RadioInput';
+import { SortRadioInput } from '@/components/atoms/SortRadioInput';
+import { ThreeStateCheckboxInput } from '@/components/atoms/ThreeStateCheckboxInput';
import { GridLayout, useLibraryOptionsContext } from '@/components/context/LibraryOptionsContext';
-import OptionsTabs from '@/components/molecules/OptionsTabs';
+import { OptionsTabs } from '@/components/molecules/OptionsTabs';
const TITLES: { [key in 'filter' | 'sort' | 'display']: TranslationKey } = {
filter: 'global.label.filter',
@@ -35,7 +35,7 @@ interface IProps {
onClose: () => void;
}
-const LibraryOptionsPanel: React.FC = ({ open, onClose }) => {
+export const LibraryOptionsPanel: React.FC = ({ open, onClose }) => {
const { t } = useTranslation();
const { options, setOptions } = useLibraryOptionsContext();
@@ -133,5 +133,3 @@ const LibraryOptionsPanel: React.FC = ({ open, onClose }) => {
/>
);
};
-
-export default LibraryOptionsPanel;
diff --git a/src/components/library/LibraryOptionsProvider.tsx b/src/components/library/LibraryOptionsProvider.tsx
index e715855a..0788d1e8 100644
--- a/src/components/library/LibraryOptionsProvider.tsx
+++ b/src/components/library/LibraryOptionsProvider.tsx
@@ -8,19 +8,17 @@
import React, { useMemo } from 'react';
import { LibraryOptions } from '@/typings';
-import useLocalStorage from '@/util/useLocalStorage';
-import LibraryOptionsContext, { DefaultLibraryOptions } from '@/components/context/LibraryOptionsContext';
+import { useLocalStorage } from '@/util/useLocalStorage';
+import { LibraryOptionsContext, DefaultLibraryOptions } from '@/components/context/LibraryOptionsContext';
interface IProps {
children: React.ReactNode;
}
-const LibraryOptionsContextProvider: React.FC = ({ children }) => {
+export const LibraryOptionsContextProvider: React.FC = ({ children }) => {
const [options, setOptions] = useLocalStorage('libraryOptions', DefaultLibraryOptions);
const value = useMemo(() => ({ options, setOptions }), [options, setOptions]);
return {children};
};
-
-export default LibraryOptionsContextProvider;
diff --git a/src/components/library/LibraryToolbarMenu.tsx b/src/components/library/LibraryToolbarMenu.tsx
index 2c87493f..740d8f26 100644
--- a/src/components/library/LibraryToolbarMenu.tsx
+++ b/src/components/library/LibraryToolbarMenu.tsx
@@ -10,9 +10,9 @@ import FilterList from '@mui/icons-material/FilterList';
import { IconButton } from '@mui/material';
import React, { useState } from 'react';
import { useLibraryOptionsContext } from '@/components/context/LibraryOptionsContext';
-import LibraryOptionsPanel from '@/components/library/LibraryOptionsPanel';
+import { LibraryOptionsPanel } from '@/components/library/LibraryOptionsPanel';
-const LibraryToolbarMenu: React.FC = () => {
+export const LibraryToolbarMenu: React.FC = () => {
const [open, setOpen] = useState(false);
const { options } = useLibraryOptionsContext();
const active = options.downloaded != null || options.unread != null;
@@ -26,5 +26,3 @@ const LibraryToolbarMenu: React.FC = () => {
>
);
};
-
-export default LibraryToolbarMenu;
diff --git a/src/components/library/UpdateChecker.tsx b/src/components/library/UpdateChecker.tsx
index 515b9489..d2cf5029 100644
--- a/src/components/library/UpdateChecker.tsx
+++ b/src/components/library/UpdateChecker.tsx
@@ -13,8 +13,8 @@ import CircularProgress from '@mui/material/CircularProgress';
import { Box } from '@mui/material';
import Typography from '@mui/material/Typography';
import { useTranslation } from 'react-i18next';
-import requestManager from '@/lib/requests/RequestManager.ts';
-import makeToast from '@/components/util/Toast';
+import { requestManager } from '@/lib/requests/RequestManager.ts';
+import { makeToast } from '@/components/util/Toast';
import { UpdaterSubscription } from '@/lib/graphql/generated/graphql.ts';
interface IProgressProps {
@@ -45,7 +45,7 @@ const calcProgress = (status: UpdaterSubscription['updateStatusChanged'] | undef
return Number.isNaN(progress) ? 0 : progress;
};
-function UpdateChecker({ handleFinishedUpdate }: { handleFinishedUpdate: () => void }) {
+export function UpdateChecker({ handleFinishedUpdate }: { handleFinishedUpdate: () => void }) {
const { t } = useTranslation();
const { data: updaterData } = requestManager.useUpdaterSubscription();
@@ -81,5 +81,3 @@ function UpdateChecker({ handleFinishedUpdate }: { handleFinishedUpdate: () => v
);
}
-
-export default UpdateChecker;
diff --git a/src/components/manga/ChapterCard.tsx b/src/components/manga/ChapterCard.tsx
index a39db05a..ffc61ebf 100644
--- a/src/components/manga/ChapterCard.tsx
+++ b/src/components/manga/ChapterCard.tsx
@@ -27,9 +27,9 @@ import Typography from '@mui/material/Typography';
import React from 'react';
import { Link } from 'react-router-dom';
import { useTranslation } from 'react-i18next';
-import requestManager from '@/lib/requests/RequestManager.ts';
+import { requestManager } from '@/lib/requests/RequestManager.ts';
import { getUploadDateString } from '@/util/date';
-import DownloadStateIndicator from '@/components/molecules/DownloadStateIndicator';
+import { DownloadStateIndicator } from '@/components/molecules/DownloadStateIndicator';
import { DownloadType, UpdateChapterPatchInput } from '@/lib/graphql/generated/graphql.ts';
import { TChapter } from '@/typings.ts';
@@ -42,7 +42,7 @@ interface IProps {
selected: boolean | null;
}
-const ChapterCard: React.FC = (props: IProps) => {
+export const ChapterCard: React.FC = (props: IProps) => {
const { t } = useTranslation();
const theme = useTheme();
@@ -212,5 +212,3 @@ const ChapterCard: React.FC = (props: IProps) => {
);
};
-
-export default ChapterCard;
diff --git a/src/components/manga/ChapterList.tsx b/src/components/manga/ChapterList.tsx
index b53e5732..e5efd95b 100644
--- a/src/components/manga/ChapterList.tsx
+++ b/src/components/manga/ChapterList.tsx
@@ -12,14 +12,14 @@ import React, { ComponentProps, useEffect, useMemo, useRef, useState } from 'rea
import { Virtuoso } from 'react-virtuoso';
import { useTranslation } from 'react-i18next';
import { TChapter, TManga, TranslationKey } from '@/typings';
-import requestManager from '@/lib/requests/RequestManager.ts';
-import ChapterCard from '@/components/manga/ChapterCard';
-import ResumeFab from '@/components/manga/ResumeFAB';
+import { requestManager } from '@/lib/requests/RequestManager.ts';
+import { ChapterCard } from '@/components/manga/ChapterCard';
+import { ResumeFab } from '@/components/manga/ResumeFAB';
import { filterAndSortChapters, useChapterOptions } from '@/components/manga/util';
-import EmptyView from '@/components/util/EmptyView';
-import makeToast from '@/components/util/Toast';
-import ChaptersToolbarMenu from '@/components/manga/ChaptersToolbarMenu';
-import SelectionFAB from '@/components/manga/SelectionFAB';
+import { EmptyView } from '@/components/util/EmptyView';
+import { makeToast } from '@/components/util/Toast';
+import { ChaptersToolbarMenu } from '@/components/manga/ChaptersToolbarMenu';
+import { SelectionFAB } from '@/components/manga/SelectionFAB';
import { DEFAULT_FULL_FAB_HEIGHT } from '@/components/util/StyledFab';
import { DownloadType, UpdateChapterPatchInput } from '@/lib/graphql/generated/graphql.ts';
@@ -78,7 +78,7 @@ interface IProps {
isRefreshing: boolean;
}
-const ChapterList: React.FC = ({ manga, isRefreshing }) => {
+export const ChapterList: React.FC = ({ manga, isRefreshing }) => {
const { t } = useTranslation();
const [selection, setSelection] = useState(null);
@@ -299,5 +299,3 @@ const ChapterList: React.FC = ({ manga, isRefreshing }) => {
>
);
};
-
-export default ChapterList;
diff --git a/src/components/manga/ChapterOptions.tsx b/src/components/manga/ChapterOptions.tsx
index b029f3b0..13808452 100644
--- a/src/components/manga/ChapterOptions.tsx
+++ b/src/components/manga/ChapterOptions.tsx
@@ -10,10 +10,10 @@ import { RadioGroup } from '@mui/material';
import React from 'react';
import { useTranslation } from 'react-i18next';
import { ChapterListOptions, ChapterOptionsReducerAction, TranslationKey } from '@/typings';
-import RadioInput from '@/components/atoms/RadioInput';
-import SortRadioInput from '@/components/atoms/SortRadioInput';
-import ThreeStateCheckboxInput from '@/components/atoms/ThreeStateCheckboxInput';
-import OptionsTabs from '@/components/molecules/OptionsTabs';
+import { RadioInput } from '@/components/atoms/RadioInput';
+import { SortRadioInput } from '@/components/atoms/SortRadioInput';
+import { ThreeStateCheckboxInput } from '@/components/atoms/ThreeStateCheckboxInput';
+import { OptionsTabs } from '@/components/molecules/OptionsTabs';
import { SORT_OPTIONS } from '@/components/manga/util';
interface IProps {
@@ -29,7 +29,7 @@ const TITLES: { [key in 'filter' | 'sort' | 'display']: TranslationKey } = {
display: 'global.label.display',
};
-const ChapterOptions: React.FC = ({ open, onClose, options, optionsDispatch }) => {
+export const ChapterOptions: React.FC = ({ open, onClose, options, optionsDispatch }) => {
const { t } = useTranslation();
return (
@@ -110,5 +110,3 @@ const ChapterOptions: React.FC = ({ open, onClose, options, optionsDispa
/>
);
};
-
-export default ChapterOptions;
diff --git a/src/components/manga/ChaptersToolbarMenu.tsx b/src/components/manga/ChaptersToolbarMenu.tsx
index e89367d0..a93af63e 100644
--- a/src/components/manga/ChaptersToolbarMenu.tsx
+++ b/src/components/manga/ChaptersToolbarMenu.tsx
@@ -10,7 +10,7 @@ import FilterList from '@mui/icons-material/FilterList';
import { IconButton } from '@mui/material';
import * as React from 'react';
import { ChapterListOptions, ChapterOptionsReducerAction } from '@/typings';
-import ChapterOptions from '@/components/manga/ChapterOptions';
+import { ChapterOptions } from '@/components/manga/ChapterOptions';
import { isFilterActive } from '@/components/manga/util';
interface IProps {
@@ -18,7 +18,7 @@ interface IProps {
optionsDispatch: React.Dispatch;
}
-const ChaptersToolbarMenu = ({ options, optionsDispatch }: IProps) => {
+export const ChaptersToolbarMenu = ({ options, optionsDispatch }: IProps) => {
const [open, setOpen] = React.useState(false);
const isFiltered = isFilterActive(options);
@@ -36,5 +36,3 @@ const ChaptersToolbarMenu = ({ options, optionsDispatch }: IProps) => {
>
);
};
-
-export default ChaptersToolbarMenu;
diff --git a/src/components/manga/MangaDetails.tsx b/src/components/manga/MangaDetails.tsx
index 0e783644..1cbb3b88 100644
--- a/src/components/manga/MangaDetails.tsx
+++ b/src/components/manga/MangaDetails.tsx
@@ -15,8 +15,8 @@ import { useTranslation } from 'react-i18next';
import { t as translate } from 'i18next';
import Button from '@mui/material/Button';
import { ISource, TManga } from '@/typings';
-import requestManager from '@/lib/requests/RequestManager.ts';
-import makeToast from '@/components/util/Toast';
+import { requestManager } from '@/lib/requests/RequestManager.ts';
+import { makeToast } from '@/components/util/Toast';
const DetailsWrapper = styled('div')(({ theme }) => ({
width: '100%',
@@ -165,7 +165,7 @@ function getValueOrUnknown(val?: string | null) {
return val || 'UNKNOWN';
}
-const MangaDetails: React.FC = ({ manga }) => {
+export const MangaDetails: React.FC = ({ manga }) => {
const { t } = useTranslation();
const { data: categoriesData, loading: areCategoriesLoading } = requestManager.useGetCategories();
const categories = categoriesData?.categories.nodes ?? [];
@@ -250,5 +250,3 @@ const MangaDetails: React.FC = ({ manga }) => {
);
};
-
-export default MangaDetails;
diff --git a/src/components/manga/MangaToolbarMenu.tsx b/src/components/manga/MangaToolbarMenu.tsx
index 5a2f886b..9d86bbd1 100644
--- a/src/components/manga/MangaToolbarMenu.tsx
+++ b/src/components/manga/MangaToolbarMenu.tsx
@@ -21,7 +21,7 @@ import {
} from '@mui/material';
import React, { useState } from 'react';
import { useTranslation } from 'react-i18next';
-import CategorySelect from '@/components/navbar/action/CategorySelect';
+import { CategorySelect } from '@/components/navbar/action/CategorySelect';
import { TManga } from '@/typings.ts';
interface IProps {
@@ -30,7 +30,7 @@ interface IProps {
refreshing: boolean;
}
-const MangaToolbarMenu = ({ manga, onRefresh, refreshing }: IProps) => {
+export const MangaToolbarMenu = ({ manga, onRefresh, refreshing }: IProps) => {
const { t } = useTranslation();
const theme = useTheme();
const isLargeScreen = useMediaQuery(theme.breakpoints.up('sm'));
@@ -123,5 +123,3 @@ const MangaToolbarMenu = ({ manga, onRefresh, refreshing }: IProps) => {
>
);
};
-
-export default MangaToolbarMenu;
diff --git a/src/components/manga/ResumeFAB.tsx b/src/components/manga/ResumeFAB.tsx
index 6e6c7eba..361561b6 100644
--- a/src/components/manga/ResumeFAB.tsx
+++ b/src/components/manga/ResumeFAB.tsx
@@ -9,14 +9,14 @@
import { Link } from 'react-router-dom';
import { PlayArrow } from '@mui/icons-material';
import { useTranslation } from 'react-i18next';
-import StyledFab from '@/components/util/StyledFab';
+import { StyledFab } from '@/components/util/StyledFab';
interface ResumeFABProps {
chapterIndex: number;
mangaId: number;
}
-export default function ResumeFab(props: ResumeFABProps) {
+export function ResumeFab(props: ResumeFABProps) {
const { t } = useTranslation();
const { chapterIndex, mangaId } = props;
diff --git a/src/components/manga/SelectionFAB.tsx b/src/components/manga/SelectionFAB.tsx
index 93d1e514..5574d139 100644
--- a/src/components/manga/SelectionFAB.tsx
+++ b/src/components/manga/SelectionFAB.tsx
@@ -11,7 +11,7 @@ import { Fab, Menu, Box } from '@mui/material';
import React, { useRef, useState } from 'react';
import { useTranslation } from 'react-i18next';
import type { IChapterWithMeta } from '@/components/manga/ChapterList';
-import SelectionFABActionItem from '@/components/manga/SelectionFABActionItem';
+import { SelectionFABActionItem } from '@/components/manga/SelectionFABActionItem';
import { DEFAULT_FAB_STYLE } from '@/components/util/StyledFab';
export type SelectionAction = 'download' | 'delete' | 'bookmark' | 'unbookmark' | 'mark_as_read' | 'mark_as_unread';
@@ -21,7 +21,7 @@ interface SelectionFABProps {
onAction: (action: SelectionAction, chapters: IChapterWithMeta[]) => void;
}
-const SelectionFAB: React.FC = (props) => {
+export const SelectionFAB: React.FC = (props) => {
const { t } = useTranslation();
const { selectedChapters, onAction } = props;
@@ -102,5 +102,3 @@ const SelectionFAB: React.FC = (props) => {
);
};
-
-export default SelectionFAB;
diff --git a/src/components/manga/SelectionFABActionItem.tsx b/src/components/manga/SelectionFABActionItem.tsx
index addb58b1..fbf0c8c3 100644
--- a/src/components/manga/SelectionFABActionItem.tsx
+++ b/src/components/manga/SelectionFABActionItem.tsx
@@ -33,7 +33,7 @@ const ICONS = {
mark_as_unread: RemoveDone,
};
-const SelectionFABActionItem: React.FC = ({ action, matchingChapters, onClick, title }) => {
+export const SelectionFABActionItem: React.FC = ({ action, matchingChapters, onClick, title }) => {
const count = matchingChapters.length;
const Icon = ICONS[action];
return (
@@ -48,5 +48,3 @@ const SelectionFABActionItem: React.FC = ({ action, matchingChapters, on
);
};
-
-export default SelectionFABActionItem;
diff --git a/src/components/manga/hooks.ts b/src/components/manga/hooks.ts
index 7eb1e41f..b48a52ea 100644
--- a/src/components/manga/hooks.ts
+++ b/src/components/manga/hooks.ts
@@ -7,7 +7,7 @@
*/
import { useCallback, useEffect, useState } from 'react';
-import requestManager from '@/lib/requests/RequestManager.ts';
+import { requestManager } from '@/lib/requests/RequestManager.ts';
export const useRefreshManga = (mangaId: string) => {
const [fetchingOnline, setFetchingOnline] = useState(false);
diff --git a/src/components/molecules/DownloadStateIndicator.tsx b/src/components/molecules/DownloadStateIndicator.tsx
index 7bf7e2c0..a16df2e0 100644
--- a/src/components/molecules/DownloadStateIndicator.tsx
+++ b/src/components/molecules/DownloadStateIndicator.tsx
@@ -24,7 +24,7 @@ const DOWNLOAD_STATE_TO_TRANSLATION_KEY_MAP: { [state in DownloadState]: Transla
QUEUED: 'download.state.label.queued',
} as const;
-const DownloadStateIndicator: React.FC = ({ download }) => {
+export const DownloadStateIndicator: React.FC = ({ download }) => {
const { t } = useTranslation();
return (
@@ -59,5 +59,3 @@ const DownloadStateIndicator: React.FC = ({ downloa
);
};
-
-export default DownloadStateIndicator;
diff --git a/src/components/molecules/OptionsPanel.tsx b/src/components/molecules/OptionsPanel.tsx
index 63515c76..d7266d54 100644
--- a/src/components/molecules/OptionsPanel.tsx
+++ b/src/components/molecules/OptionsPanel.tsx
@@ -16,7 +16,7 @@ interface IProps {
minHeight?: number;
}
-const OptionsPanel: React.FC = ({ open, onClose, children, minHeight }) => (
+export const OptionsPanel: React.FC = ({ open, onClose, children, minHeight }) => (
= ({ open, onClose, children, minHeight })
OptionsPanel.defaultProps = {
minHeight: undefined,
};
-
-export default OptionsPanel;
diff --git a/src/components/molecules/OptionsTabs.tsx b/src/components/molecules/OptionsTabs.tsx
index cd3dfd95..53b37d8c 100644
--- a/src/components/molecules/OptionsTabs.tsx
+++ b/src/components/molecules/OptionsTabs.tsx
@@ -8,8 +8,8 @@
import { Stack, Tab, Tabs } from '@mui/material';
import React, { useState } from 'react';
-import TabPanel from '@/components/util/TabPanel';
-import OptionsPanel from '@/components/molecules/OptionsPanel';
+import { TabPanel } from '@/components/util/TabPanel';
+import { OptionsPanel } from '@/components/molecules/OptionsPanel';
interface IProps {
open: boolean;
@@ -20,7 +20,7 @@ interface IProps {
minHeight?: number;
}
-const OptionsTabs = ({
+export const OptionsTabs = ({
open,
onClose,
tabs,
@@ -55,5 +55,3 @@ const OptionsTabs = ({
OptionsTabs.defaultProps = {
minHeight: undefined,
};
-
-export default OptionsTabs;
diff --git a/src/components/navbar/DefaultNavBar.tsx b/src/components/navbar/DefaultNavBar.tsx
index d04acab3..2fc4fe89 100644
--- a/src/components/navbar/DefaultNavBar.tsx
+++ b/src/components/navbar/DefaultNavBar.tsx
@@ -27,10 +27,10 @@ import ArrowBack from '@mui/icons-material/ArrowBack';
import { useLocation, useNavigate } from 'react-router-dom';
import { createPortal } from 'react-dom';
import { NavbarItem } from '@/typings';
-import NavBarContext from '@/components/context/NavbarContext';
-import ExtensionOutlinedIcon from '@/components/util/CustomExtensionOutlinedIcon';
-import DesktopSideBar from '@/components/navbar/navigation/DesktopSideBar';
-import MobileBottomBar from '@/components/navbar/navigation/MobileBottomBar';
+import { NavBarContext } from '@/components/context/NavbarContext';
+import { ExtensionOutlinedIcon } from '@/components/util/CustomExtensionOutlinedIcon';
+import { DesktopSideBar } from '@/components/navbar/navigation/DesktopSideBar';
+import { MobileBottomBar } from '@/components/navbar/navigation/MobileBottomBar';
import { useHistory } from '@/util/useHistory';
const navbarItems: Array = [
@@ -85,7 +85,7 @@ const navbarItems: Array = [
},
];
-export default function DefaultNavBar() {
+export function DefaultNavBar() {
const { title, action, override, defaultBackTo: backToUrl } = useContext(NavBarContext);
const theme = useTheme();
diff --git a/src/components/navbar/NavBarContextProvider.tsx b/src/components/navbar/NavBarContextProvider.tsx
index 21a6e445..c087732e 100644
--- a/src/components/navbar/NavBarContextProvider.tsx
+++ b/src/components/navbar/NavBarContextProvider.tsx
@@ -8,13 +8,13 @@
import React, { useCallback, useMemo, useState } from 'react';
import { INavbarOverride } from '@/typings';
-import NavBarContext from '@/components/context/NavbarContext';
+import { NavBarContext } from '@/components/context/NavbarContext';
interface IProps {
children: React.ReactNode;
}
-export default function NavBarProvider({ children }: IProps) {
+export function NavBarContextProvider({ children }: IProps) {
const [defaultBackTo, setDefaultBackTo] = useState();
const [title, setTitle] = useState('Tachidesk');
const [action, setAction] = useState();
diff --git a/src/components/navbar/ReaderNavBar.tsx b/src/components/navbar/ReaderNavBar.tsx
index 3ad637d1..f17d60c1 100644
--- a/src/components/navbar/ReaderNavBar.tsx
+++ b/src/components/navbar/ReaderNavBar.tsx
@@ -25,7 +25,7 @@ import ListItemSecondaryAction from '@mui/material/ListItemSecondaryAction';
import Collapse from '@mui/material/Collapse';
import { useTranslation } from 'react-i18next';
import { ChapterOffset, IReaderSettings, TChapter, TManga } from '@/typings';
-import ReaderSettingsOptions from '@/components/reader/ReaderSettingsOptions';
+import { ReaderSettingsOptions } from '@/components/reader/ReaderSettingsOptions';
const Root = styled('div')(({ theme }) => ({
top: 0,
@@ -122,7 +122,7 @@ interface IProps {
retrievingNextChapter: boolean;
}
-export default function ReaderNavBar(props: IProps) {
+export function ReaderNavBar(props: IProps) {
const { t } = useTranslation();
const navigate = useNavigate();
const location = useLocation<{
diff --git a/src/components/navbar/action/CategorySelect.tsx b/src/components/navbar/action/CategorySelect.tsx
index be30cd52..cabe3541 100644
--- a/src/components/navbar/action/CategorySelect.tsx
+++ b/src/components/navbar/action/CategorySelect.tsx
@@ -16,7 +16,7 @@ import Checkbox from '@mui/material/Checkbox';
import FormControlLabel from '@mui/material/FormControlLabel';
import FormGroup from '@mui/material/FormGroup';
import { useTranslation } from 'react-i18next';
-import requestManager from '@/lib/requests/RequestManager.ts';
+import { requestManager } from '@/lib/requests/RequestManager.ts';
interface IProps {
open: boolean;
@@ -24,7 +24,7 @@ interface IProps {
mangaId: number;
}
-export default function CategorySelect(props: IProps) {
+export function CategorySelect(props: IProps) {
const { t } = useTranslation();
const { open, setOpen, mangaId } = props;
diff --git a/src/components/navbar/action/LangSelect.tsx b/src/components/navbar/action/LangSelect.tsx
index df68a026..c5917718 100644
--- a/src/components/navbar/action/LangSelect.tsx
+++ b/src/components/navbar/action/LangSelect.tsx
@@ -18,7 +18,7 @@ import FilterListIcon from '@mui/icons-material/FilterList';
import { List, ListItemSecondaryAction, ListItemText } from '@mui/material';
import ListItem from '@mui/material/ListItem';
import { useTranslation } from 'react-i18next';
-import cloneObject from '@/util/cloneObject';
+import { cloneObject } from '@/util/cloneObject';
import { translateExtensionLanguage } from '@/screens/util/Extensions';
function removeAll(firstList: any[], secondList: any[]) {
@@ -39,7 +39,7 @@ interface IProps {
forcedLangs?: string[];
}
-export default function LangSelect(props: IProps) {
+export function LangSelect(props: IProps) {
const { t } = useTranslation();
const { shownLangs, setShownLangs, allLangs, forcedLangs } = props;
diff --git a/src/components/navbar/navigation/DesktopSideBar.tsx b/src/components/navbar/navigation/DesktopSideBar.tsx
index f0f03429..9ac355b0 100644
--- a/src/components/navbar/navigation/DesktopSideBar.tsx
+++ b/src/components/navbar/navigation/DesktopSideBar.tsx
@@ -28,7 +28,7 @@ interface IProps {
navBarItems: Array;
}
-export default function DesktopSideBar({ navBarItems }: IProps) {
+export function DesktopSideBar({ navBarItems }: IProps) {
const { t } = useTranslation();
const location = useLocation();
const theme = useTheme();
diff --git a/src/components/navbar/navigation/MobileBottomBar.tsx b/src/components/navbar/navigation/MobileBottomBar.tsx
index ad89e686..48b84029 100644
--- a/src/components/navbar/navigation/MobileBottomBar.tsx
+++ b/src/components/navbar/navigation/MobileBottomBar.tsx
@@ -37,7 +37,7 @@ interface IProps {
navBarItems: Array;
}
-export default function MobileBottomBar({ navBarItems }: IProps) {
+export function MobileBottomBar({ navBarItems }: IProps) {
const { t } = useTranslation();
const location = useLocation();
const theme = useTheme();
diff --git a/src/components/reader/DoublePage.tsx b/src/components/reader/DoublePage.tsx
index 5565abca..8bd67034 100644
--- a/src/components/reader/DoublePage.tsx
+++ b/src/components/reader/DoublePage.tsx
@@ -26,7 +26,7 @@ interface IProps {
settings: IReaderSettings;
}
-const DoublePage = forwardRef((props: IProps, ref: any) => {
+export const DoublePage = forwardRef((props: IProps, ref: any) => {
const { image1src, image2src, index, settings } = props;
return (
@@ -47,5 +47,3 @@ const DoublePage = forwardRef((props: IProps, ref: any) => {
);
});
-
-export default DoublePage;
diff --git a/src/components/reader/Page.tsx b/src/components/reader/Page.tsx
index 71cca785..a93f24ca 100644
--- a/src/components/reader/Page.tsx
+++ b/src/components/reader/Page.tsx
@@ -9,7 +9,7 @@
import { useState, useEffect, forwardRef, useRef } from 'react';
import Box from '@mui/material/Box';
import { IReaderSettings } from '@/typings';
-import SpinnerImage from '@/components/util/SpinnerImage';
+import { SpinnerImage } from '@/components/util/SpinnerImage';
function imageStyle(settings: IReaderSettings): any {
const [dimensions, setDimensions] = useState({
@@ -65,7 +65,7 @@ interface IProps {
settings: IReaderSettings;
}
-const Page = forwardRef((props: IProps, ref: any) => {
+export const Page = forwardRef((props: IProps, ref: any) => {
const { src, index, onImageLoad, settings } = props;
const imgRef = useRef(null);
@@ -92,5 +92,3 @@ const Page = forwardRef((props: IProps, ref: any) => {
);
});
-
-export default Page;
diff --git a/src/components/reader/PageNumber.tsx b/src/components/reader/PageNumber.tsx
index fa03afa2..7e15ab31 100644
--- a/src/components/reader/PageNumber.tsx
+++ b/src/components/reader/PageNumber.tsx
@@ -15,7 +15,7 @@ interface IProps {
pageCount: number;
}
-export default function PageNumber(props: IProps) {
+export function PageNumber(props: IProps) {
const { settings, curPage, pageCount } = props;
return (
diff --git a/src/components/reader/ReaderSettingsOptions.tsx b/src/components/reader/ReaderSettingsOptions.tsx
index c04bae0f..5c6875b4 100644
--- a/src/components/reader/ReaderSettingsOptions.tsx
+++ b/src/components/reader/ReaderSettingsOptions.tsx
@@ -17,7 +17,7 @@ interface IProps extends IReaderSettings {
setSettingValue: (key: keyof IReaderSettings, value: string | boolean) => void;
}
-export default function ReaderSettingsOptions({
+export function ReaderSettingsOptions({
staticNav,
loadNextOnEnding,
readerType,
diff --git a/src/components/reader/pager/DoublePagedPager.tsx b/src/components/reader/pager/DoublePagedPager.tsx
index f68d9db7..245f14c3 100644
--- a/src/components/reader/pager/DoublePagedPager.tsx
+++ b/src/components/reader/pager/DoublePagedPager.tsx
@@ -10,8 +10,8 @@ import { useEffect, useRef } from 'react';
import { Box } from '@mui/material';
import { createRoot } from 'react-dom/client';
import { IReaderProps } from '@/typings';
-import Page from '@/components/reader/Page';
-import DoublePage from '@/components/reader/DoublePage';
+import { Page } from '@/components/reader/Page';
+import { DoublePage } from '@/components/reader/DoublePage';
const isSpreadPage = (image: HTMLImageElement): boolean => {
const aspectRatio = image.height / image.width;
@@ -29,7 +29,7 @@ const isSinglePage = (index: number, spreadPages: boolean[], offsetFirstPage: bo
return offsetFirstPage ? numberOfNonSpreads % 2 === 0 : numberOfNonSpreads % 2 === 1;
};
-export default function DoublePagedPager(props: IReaderProps) {
+export function DoublePagedPager(props: IReaderProps) {
const { pages, settings, setCurPage, initialPage, curPage, nextChapter, prevChapter } = props;
const selfRef = useRef(null);
diff --git a/src/components/reader/pager/HorizontalPager.tsx b/src/components/reader/pager/HorizontalPager.tsx
index 161e8173..45520436 100644
--- a/src/components/reader/pager/HorizontalPager.tsx
+++ b/src/components/reader/pager/HorizontalPager.tsx
@@ -9,7 +9,7 @@
import { useEffect, useRef } from 'react';
import { Box } from '@mui/material';
import { IReaderProps } from '@/typings';
-import Page from '@/components/reader/Page';
+import { Page } from '@/components/reader/Page';
const findCurrentPageIndex = (wrapper: HTMLDivElement): number => {
for (let i = 0; i < wrapper.children.length; i++) {
@@ -31,7 +31,7 @@ const isAtEnd = () => {
};
const isAtStart = () => window.scrollX <= 0;
-export default function HorizontalPager(props: IReaderProps) {
+export function HorizontalPager(props: IReaderProps) {
const { pages, curPage, initialPage, settings, setCurPage, prevChapter, nextChapter } = props;
const currentPageRef = useRef(initialPage);
diff --git a/src/components/reader/pager/PagedPager.tsx b/src/components/reader/pager/PagedPager.tsx
index e12c0e8c..aef8cdfe 100644
--- a/src/components/reader/pager/PagedPager.tsx
+++ b/src/components/reader/pager/PagedPager.tsx
@@ -9,9 +9,9 @@
import { useEffect, useRef } from 'react';
import { Box } from '@mui/material';
import { IReaderProps } from '@/typings';
-import Page from '@/components/reader/Page';
+import { Page } from '@/components/reader/Page';
-export default function PagedReader(props: IReaderProps) {
+export function PagedPager(props: IReaderProps) {
const { pages, settings, setCurPage, initialPage, curPage, nextChapter, prevChapter } = props;
const selfRef = useRef(null);
diff --git a/src/components/reader/pager/VerticalPager.tsx b/src/components/reader/pager/VerticalPager.tsx
index e5f01e28..ea040f19 100644
--- a/src/components/reader/pager/VerticalPager.tsx
+++ b/src/components/reader/pager/VerticalPager.tsx
@@ -9,7 +9,7 @@
import { useCallback, useEffect, useRef } from 'react';
import { Box } from '@mui/material';
import { IReaderProps } from '@/typings';
-import Page from '@/components/reader/Page';
+import { Page } from '@/components/reader/Page';
const findCurrentPageIndex = (wrapper: HTMLDivElement): number => {
for (let i = 0; i < wrapper.children.length; i++) {
@@ -35,7 +35,7 @@ const isAtBottom = () => {
};
const isAtTop = () => window.scrollY <= 0;
-export default function VerticalPager(props: IReaderProps) {
+export function VerticalPager(props: IReaderProps) {
const { pages, settings, setCurPage, initialPage, nextChapter, prevChapter } = props;
const currentPageRef = useRef(initialPage);
diff --git a/src/components/source/GridLayouts.tsx b/src/components/source/GridLayouts.tsx
index 9264aba6..055cef34 100644
--- a/src/components/source/GridLayouts.tsx
+++ b/src/components/source/GridLayouts.tsx
@@ -13,7 +13,7 @@ import { useTranslation } from 'react-i18next';
import { GridLayout, useLibraryOptionsContext } from '@/components/context/LibraryOptionsContext';
// TODO: clean up this to use a FormControl, and remove dependency on name o radio button
-export default function SourceGridLayout() {
+export function SourceGridLayout() {
const { t } = useTranslation();
const {
diff --git a/src/components/source/SourceMangaGrid.tsx b/src/components/source/SourceMangaGrid.tsx
index 8fcb14ed..db339b1f 100644
--- a/src/components/source/SourceMangaGrid.tsx
+++ b/src/components/source/SourceMangaGrid.tsx
@@ -7,14 +7,14 @@
*/
import { useTranslation } from 'react-i18next';
-import MangaGrid, { IMangaGridProps } from '@/components/MangaGrid';
+import { MangaGrid, IMangaGridProps } from '@/components/MangaGrid';
import { TPartialManga } from '@/typings.ts';
function filterManga(mangas: TPartialManga[]): TPartialManga[] {
return mangas;
}
-export default function SourceMangaGrid(props: IMangaGridProps) {
+export function SourceMangaGrid(props: IMangaGridProps) {
const { t } = useTranslation();
const { mangas, isLoading, hasNextPage, loadMore, message, messageExtra, gridLayout } = props;
diff --git a/src/components/source/SourceOptions.tsx b/src/components/source/SourceOptions.tsx
index 00f67678..c7b23a37 100644
--- a/src/components/source/SourceOptions.tsx
+++ b/src/components/source/SourceOptions.tsx
@@ -11,18 +11,18 @@ import { Button, Stack, Box } from '@mui/material';
import { useState } from 'react';
import { useTranslation } from 'react-i18next';
import { SourceFilters } from '@/typings';
-import OptionsPanel from '@/components/molecules/OptionsPanel';
-import CheckBoxFilter from '@/components/source/filters/CheckBoxFilter';
-import HeaderFilter from '@/components/source/filters/HeaderFilter';
-import SelectFilter from '@/components/source/filters/SelectFilter';
-import SortFilter from '@/components/source/filters/SortFilter';
-import TextFilter from '@/components/source/filters/TextFilter';
-import TriStateFilter from '@/components/source/filters/TriStateFilter';
+import { OptionsPanel } from '@/components/molecules/OptionsPanel';
+import { CheckBoxFilter } from '@/components/source/filters/CheckBoxFilter';
+import { HeaderFilter } from '@/components/source/filters/HeaderFilter';
+import { SelectFilter } from '@/components/source/filters/SelectFilter';
+import { SortFilter } from '@/components/source/filters/SortFilter';
+import { TextFilter } from '@/components/source/filters/TextFilter';
+import { TriStateFilter } from '@/components/source/filters/TriStateFilter';
// this can only cycle once, so should be fine
// eslint-disable-next-line import/no-cycle
-import GroupFilter from '@/components/source/filters/GroupFilter';
-import SeperatorFilter from '@/components/source/filters/SeparatorFilter';
-import StyledFab from '@/components/util/StyledFab';
+import { GroupFilter } from '@/components/source/filters/GroupFilter';
+import { SeparatorFilter } from '@/components/source/filters/SeparatorFilter';
+import { StyledFab } from '@/components/util/StyledFab';
interface IFilters {
sourceFilter: SourceFilters[];
@@ -88,7 +88,7 @@ export function Options({ sourceFilter, group, updateFilterValue, update }: IFil
/>
);
case 'SeparatorFilter':
- return ;
+ return ;
case 'SortFilter':
return (
= (props: Props) => {
+export const CheckBoxFilter: React.FC = (props: Props) => {
const { state, name, position, group, updateFilterValue, update } = props;
const [val, setval] = React.useState(state);
@@ -35,5 +35,3 @@ const CheckBoxFilter: React.FC = (props: Props) => {
}
return null;
};
-
-export default CheckBoxFilter;
diff --git a/src/components/source/filters/GroupFilter.tsx b/src/components/source/filters/GroupFilter.tsx
index dd07d2e4..413d937a 100644
--- a/src/components/source/filters/GroupFilter.tsx
+++ b/src/components/source/filters/GroupFilter.tsx
@@ -21,7 +21,7 @@ interface Props {
update: any;
}
-const GroupFilter: React.FC = (props: Props) => {
+export const GroupFilter: React.FC = (props: Props) => {
const { state, name, position, updateFilterValue, update } = props;
const [open, setOpen] = React.useState(false);
@@ -46,5 +46,3 @@ const GroupFilter: React.FC = (props: Props) => {
);
};
-
-export default GroupFilter;
diff --git a/src/components/source/filters/HeaderFilter.tsx b/src/components/source/filters/HeaderFilter.tsx
index d5bac788..41655963 100644
--- a/src/components/source/filters/HeaderFilter.tsx
+++ b/src/components/source/filters/HeaderFilter.tsx
@@ -13,10 +13,8 @@ interface Props {
name: string;
}
-const HeaderFilter: React.FC = ({ name }) => (
+export const HeaderFilter: React.FC = ({ name }) => (
{name}
);
-
-export default HeaderFilter;
diff --git a/src/components/source/filters/SelectFilter.tsx b/src/components/source/filters/SelectFilter.tsx
index 4ef7a015..499e9639 100644
--- a/src/components/source/filters/SelectFilter.tsx
+++ b/src/components/source/filters/SelectFilter.tsx
@@ -60,7 +60,5 @@ function noSelect(
return null;
}
-const SelectFilter: React.FC = ({ values, name, state, position, updateFilterValue, update, group }) =>
+export const SelectFilter: React.FC = ({ values, name, state, position, updateFilterValue, update, group }) =>
noSelect(values, name, state, position, updateFilterValue, update, group);
-
-export default SelectFilter;
diff --git a/src/components/source/filters/SeparatorFilter.tsx b/src/components/source/filters/SeparatorFilter.tsx
index 3cad7ce2..e045d56d 100644
--- a/src/components/source/filters/SeparatorFilter.tsx
+++ b/src/components/source/filters/SeparatorFilter.tsx
@@ -13,10 +13,8 @@ interface Props {
name: string;
}
-const SeparatorFilter: React.FC = ({ name }) => (
+export const SeparatorFilter: React.FC = ({ name }) => (
{name}
);
-
-export default SeparatorFilter;
diff --git a/src/components/source/filters/SortFilter.tsx b/src/components/source/filters/SortFilter.tsx
index 4748cf29..000c1f3a 100644
--- a/src/components/source/filters/SortFilter.tsx
+++ b/src/components/source/filters/SortFilter.tsx
@@ -9,7 +9,7 @@
import { ExpandLess, ExpandMore } from '@mui/icons-material';
import { Collapse, ListItemButton, ListItemText, Stack, Box } from '@mui/material';
import React from 'react';
-import SortRadioInput from '@/components/atoms/SortRadioInput';
+import { SortRadioInput } from '@/components/atoms/SortRadioInput';
import { SortSelectionInput } from '@/lib/graphql/generated/graphql.ts';
interface Props {
@@ -22,7 +22,7 @@ interface Props {
update: any;
}
-const SortFilter: React.FC = (props: Props) => {
+export const SortFilter: React.FC = (props: Props) => {
const { values, name, state, position, group, updateFilterValue, update } = props;
const [val, setval] = React.useState(state);
@@ -72,5 +72,3 @@ const SortFilter: React.FC = (props: Props) => {
}
return null;
};
-
-export default SortFilter;
diff --git a/src/components/source/filters/TextFilter.tsx b/src/components/source/filters/TextFilter.tsx
index 7b62304b..a2f16244 100644
--- a/src/components/source/filters/TextFilter.tsx
+++ b/src/components/source/filters/TextFilter.tsx
@@ -20,7 +20,7 @@ interface Props {
update: any;
}
-const TextFilter: React.FC = (props) => {
+export const TextFilter: React.FC = (props) => {
const { state, name, position, group, updateFilterValue, update } = props;
const [Search, setsearch] = React.useState(state || '');
const inputText = useDebounce(Search, 500);
@@ -51,5 +51,3 @@ const TextFilter: React.FC = (props) => {
}
return null;
};
-
-export default TextFilter;
diff --git a/src/components/source/filters/TriStateFilter.tsx b/src/components/source/filters/TriStateFilter.tsx
index 70a53094..a2af3647 100644
--- a/src/components/source/filters/TriStateFilter.tsx
+++ b/src/components/source/filters/TriStateFilter.tsx
@@ -7,7 +7,7 @@
*/
import React from 'react';
-import ThreeStateCheckboxInput from '@/components/atoms/ThreeStateCheckboxInput';
+import { ThreeStateCheckboxInput } from '@/components/atoms/ThreeStateCheckboxInput';
import { TriState } from '@/lib/graphql/generated/graphql.ts';
interface Props {
@@ -45,7 +45,7 @@ const convertNumberToTriState = (state: number): TriState => {
}
};
-const TriStateFilter: React.FC = (props) => {
+export const TriStateFilter: React.FC = (props) => {
const { state, name, position, group, updateFilterValue, update } = props;
const [val, setval] = React.useState(convertTriStateToNumber(state));
@@ -78,5 +78,3 @@ const TriStateFilter: React.FC = (props) => {
}
return null;
};
-
-export default TriStateFilter;
diff --git a/src/components/sourceConfiguration/EditTextPreference.tsx b/src/components/sourceConfiguration/EditTextPreference.tsx
index 9a364b35..f45329ce 100644
--- a/src/components/sourceConfiguration/EditTextPreference.tsx
+++ b/src/components/sourceConfiguration/EditTextPreference.tsx
@@ -19,7 +19,7 @@ import { useTranslation } from 'react-i18next';
import { ListItemButton } from '@mui/material';
import { EditTextPreferenceProps } from '@/typings';
-export default function EditTextPreference(props: EditTextPreferenceProps) {
+export function EditTextPreference(props: EditTextPreferenceProps) {
const { t } = useTranslation();
const {
diff --git a/src/components/sourceConfiguration/ListPreference.tsx b/src/components/sourceConfiguration/ListPreference.tsx
index 0460be0c..a9d1519f 100644
--- a/src/components/sourceConfiguration/ListPreference.tsx
+++ b/src/components/sourceConfiguration/ListPreference.tsx
@@ -84,7 +84,7 @@ function ListDialog(props: IListDialogProps) {
);
}
-export default function ListPreference(props: ListPreferenceProps) {
+export function ListPreference(props: ListPreferenceProps) {
const {
ListPreferenceTitle: title,
summary,
diff --git a/src/components/sourceConfiguration/MultiSelectListPreference.tsx b/src/components/sourceConfiguration/MultiSelectListPreference.tsx
index 89f10c65..125dde3c 100644
--- a/src/components/sourceConfiguration/MultiSelectListPreference.tsx
+++ b/src/components/sourceConfiguration/MultiSelectListPreference.tsx
@@ -19,7 +19,7 @@ import Button from '@mui/material/Button';
import { useTranslation } from 'react-i18next';
import { ListItemButton } from '@mui/material';
import { MultiSelectListPreferenceProps } from '@/typings';
-import cloneObject from '@/util/cloneObject';
+import { cloneObject } from '@/util/cloneObject';
interface IListDialogProps {
selectedValues: string[];
@@ -98,7 +98,7 @@ function ListDialog(props: IListDialogProps) {
);
}
-export default function MultiSelectListPreference(props: MultiSelectListPreferenceProps) {
+export function MultiSelectListPreference(props: MultiSelectListPreferenceProps) {
const {
MultiSelectListPreferenceTitle: title,
summary,
diff --git a/src/components/sourceConfiguration/TwoStatePreference.tsx b/src/components/sourceConfiguration/TwoStatePreference.tsx
index 84bdef48..fede4e5a 100644
--- a/src/components/sourceConfiguration/TwoStatePreference.tsx
+++ b/src/components/sourceConfiguration/TwoStatePreference.tsx
@@ -80,5 +80,3 @@ export function CheckBoxPreference(props: CheckBoxPreferenceProps) {
export function SwitchPreferenceCompat(props: SwitchPreferenceCompatProps) {
return ;
}
-
-export default { CheckBoxPreference, SwitchPreferenceCompat };
diff --git a/src/components/util/AppbarSearch.tsx b/src/components/util/AppbarSearch.tsx
index a54d54a6..81646187 100644
--- a/src/components/util/AppbarSearch.tsx
+++ b/src/components/util/AppbarSearch.tsx
@@ -20,7 +20,7 @@ const defaultProps = {
autoOpen: false,
};
-const AppbarSearch: React.FunctionComponent = (props) => {
+export const AppbarSearch: React.FunctionComponent = (props) => {
const { autoOpen } = props;
const [query, setQuery] = useQueryParam('query', StringParam);
const [searchOpen, setSearchOpen] = useState(!!query);
@@ -90,5 +90,3 @@ const AppbarSearch: React.FunctionComponent = (props) => {
};
AppbarSearch.defaultProps = defaultProps;
-
-export default AppbarSearch;
diff --git a/src/components/util/CustomExtensionOutlinedIcon.tsx b/src/components/util/CustomExtensionOutlinedIcon.tsx
index b7f0cba4..e0c7bdf3 100644
--- a/src/components/util/CustomExtensionOutlinedIcon.tsx
+++ b/src/components/util/CustomExtensionOutlinedIcon.tsx
@@ -11,6 +11,4 @@ import createSvgIcon from '@mui/material/utils/createSvgIcon';
const d =
'M 11 1 C 9.3550302 1 8 2.3550302 8 4 L 4 4 C 2.9069372 4 2 4.9069372 2 6 L 2 12 L 4 12 C 4.5650302 12 5 12.43497 5 13 C 5 13.56503 4.5650302 14 4 14 L 2 14 L 2 20 C 2 21.093063 2.9069372 22 4 22 L 10 22 L 10 20 C 10 19.43497 10.43497 19 11 19 C 11.56503 19 12 19.43497 12 20 L 12 22 L 18 22 C 19.093063 22 20 21.093063 20 20 L 20 16 C 21.64497 16 23 14.64497 23 13 C 23 11.35503 21.64497 10 20 10 L 20 6 C 20 4.9069372 19.093063 4 18 4 L 14 4 C 14 2.3550302 12.64497 1 11 1 z M 11 3 C 11.56503 3 12 3.4349698 12 4 L 12 6 L 18 6 L 18 12 L 20 12 C 20.56503 12 21 12.43497 21 13 C 21 13.56503 20.56503 14 20 14 L 18 14 L 18 20 L 14 20 C 14 18.35503 12.64497 17 11 17 C 9.3550302 17 8 18.35503 8 20 L 4 20 L 4 16 C 5.6449698 16 7 14.64497 7 13 C 7 11.35503 5.6449698 10 4 10 L 4 6 L 10 6 L 10 4 C 10 3.4349698 10.43497 3 11 3 z';
-const icon = createSvgIcon(, 'CustomExtensionOutlined');
-
-export default icon;
+export const ExtensionOutlinedIcon = createSvgIcon(, 'CustomExtensionOutlined');
diff --git a/src/components/util/EmptyView.tsx b/src/components/util/EmptyView.tsx
index ee7df4c9..3b704c5e 100644
--- a/src/components/util/EmptyView.tsx
+++ b/src/components/util/EmptyView.tsx
@@ -25,7 +25,7 @@ interface IProps {
messageExtra?: JSX.Element | string;
}
-export default function EmptyView({ message, messageExtra }: IProps) {
+export function EmptyView({ message, messageExtra }: IProps) {
const theme = useTheme();
const isMobileWidth = useMediaQuery(theme.breakpoints.down('sm'));
diff --git a/src/components/util/ListItemLink.tsx b/src/components/util/ListItemLink.tsx
index 795aa843..d5903d21 100644
--- a/src/components/util/ListItemLink.tsx
+++ b/src/components/util/ListItemLink.tsx
@@ -9,7 +9,7 @@
import { Link } from 'react-router-dom';
import { ListItemButton, ListItemButtonProps } from '@mui/material';
-export default function ListItemLink(props: ListItemButtonProps) {
+export function ListItemLink(props: ListItemButtonProps) {
const { directLink, to } = props;
if (directLink) {
if (typeof to !== 'string') {
diff --git a/src/components/util/LoadingPlaceholder.tsx b/src/components/util/LoadingPlaceholder.tsx
index d56804c7..af8b9f29 100644
--- a/src/components/util/LoadingPlaceholder.tsx
+++ b/src/components/util/LoadingPlaceholder.tsx
@@ -18,7 +18,7 @@ interface IProps {
usePadding?: boolean;
}
-export default function LoadingPlaceholder(props: IProps) {
+export function LoadingPlaceholder(props: IProps) {
const { children, shouldRender, component, componentProps, usePadding } = props;
let condition = true;
diff --git a/src/components/util/SpinnerImage.tsx b/src/components/util/SpinnerImage.tsx
index 05a571fb..63414271 100644
--- a/src/components/util/SpinnerImage.tsx
+++ b/src/components/util/SpinnerImage.tsx
@@ -23,7 +23,7 @@ interface IProps {
onImageLoad?: () => void;
}
-export default function SpinnerImage(props: IProps) {
+export function SpinnerImage(props: IProps) {
const { src, alt, onImageLoad, imgRef, spinnerStyle, imgStyle } = props;
const [imageSrc, setImagsrc] = useState('');
diff --git a/src/components/util/StyledFab.tsx b/src/components/util/StyledFab.tsx
index 6d30706b..3bf41df1 100644
--- a/src/components/util/StyledFab.tsx
+++ b/src/components/util/StyledFab.tsx
@@ -17,8 +17,6 @@ export const DEFAULT_FAB_STYLE = {
export const DEFAULT_FULL_FAB_HEIGHT = `calc(${DEFAULT_FAB_STYLE.bottom} + ${DEFAULT_FAB_STYLE.height})`;
-const StyledFab = styled(Fab)({
+export const StyledFab = styled(Fab)({
...DEFAULT_FAB_STYLE,
}) as typeof Fab;
-
-export default StyledFab;
diff --git a/src/components/util/TabPanel.tsx b/src/components/util/TabPanel.tsx
index a992eb31..784f1bec 100644
--- a/src/components/util/TabPanel.tsx
+++ b/src/components/util/TabPanel.tsx
@@ -14,7 +14,7 @@ interface IProps {
currentIndex: any;
}
-export default function TabPanel(props: IProps) {
+export function TabPanel(props: IProps) {
const { children, index, currentIndex } = props;
return (
diff --git a/src/components/util/Toast.tsx b/src/components/util/Toast.tsx
index 0e3ed40b..1735a302 100644
--- a/src/components/util/Toast.tsx
+++ b/src/components/util/Toast.tsx
@@ -48,7 +48,7 @@ export function Toast(props: IToastProps) {
);
}
-export default function makeToast(message: string, severity: Severity) {
+export function makeToast(message: string, severity: Severity) {
const id = Math.floor(Math.random() * 1000);
const container = document.createElement('div');
container.id = `alert-${id}`;
diff --git a/src/i18n/index.ts b/src/i18n/index.ts
index aff25b51..81c3c348 100644
--- a/src/i18n/index.ts
+++ b/src/i18n/index.ts
@@ -9,9 +9,9 @@
import { use } from 'i18next';
import { initReactI18next } from 'react-i18next';
import LanguageDetector from 'i18next-browser-languagedetector';
-import resources from '@/i18n/translations';
+import { resources } from '@/i18n/translations';
-const i18n = use(initReactI18next)
+export const i18n = use(initReactI18next)
.use(LanguageDetector)
.init({
resources,
@@ -23,5 +23,3 @@ const i18n = use(initReactI18next)
returnNull: false,
debug: process.env.NODE_ENV !== 'production',
});
-
-export default i18n;
diff --git a/src/i18n/translations.ts b/src/i18n/translations.ts
index a90dfb28..b225c9c8 100644
--- a/src/i18n/translations.ts
+++ b/src/i18n/translations.ts
@@ -29,7 +29,7 @@ const translationHelper = (lng: T) => ({
* Keys have to match {@link ISOLanguages} codes, they're used for showing the language name in the dropdown in the {@link Settings}.
* In case there is no language code for the key in {@link ISOLanguages}, the corresponding language has to be added
*/
-const resources = {
+export const resources = {
ar: translationHelper(ar),
de: translationHelper(de),
es: translationHelper(es),
@@ -45,5 +45,3 @@ const resources = {
'zh-Hans': translationHelper(zh_Hans),
'zh-Hant': translationHelper(zh_Hant),
} as const;
-
-export default resources;
diff --git a/src/index.tsx b/src/index.tsx
index bc62fa10..ea09f773 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -8,7 +8,7 @@
import { StrictMode } from 'react';
import { createRoot } from 'react-dom/client';
-import App from '@/App';
+import { App } from '@/App';
import '@/index.css';
// roboto font
import '@fontsource/roboto';
diff --git a/src/lib/StrictModeDroppable.tsx b/src/lib/StrictModeDroppable.tsx
index 8e675c88..8e7acabb 100644
--- a/src/lib/StrictModeDroppable.tsx
+++ b/src/lib/StrictModeDroppable.tsx
@@ -11,7 +11,7 @@ import { Droppable, DroppableProps } from 'react-beautiful-dnd';
// issue: https://github.com/atlassian/react-beautiful-dnd/issues/2399
// credit for fix: https://github.com/atlassian/react-beautiful-dnd/issues/2399#issuecomment-1175638194
-export default function StrictModeDroppable({ children, ...props }: DroppableProps) {
+export function StrictModeDroppable({ children, ...props }: DroppableProps) {
const [enabled, setEnabled] = useState(false);
useEffect(() => {
diff --git a/src/lib/graphql/mutations/ServerInfoMutation.ts b/src/lib/graphql/mutations/ServerInfoMutation.ts
index c040069b..6f1b9e30 100644
--- a/src/lib/graphql/mutations/ServerInfoMutation.ts
+++ b/src/lib/graphql/mutations/ServerInfoMutation.ts
@@ -9,7 +9,6 @@
import gql from 'graphql-tag';
import { WEBUI_UPDATE_STATUS } from '@/lib/graphql/Fragments';
-// eslint-disable-next-line import/prefer-default-export
export const UPDATE_WEBUI = gql`
${WEBUI_UPDATE_STATUS}
mutation UPDATE_WEBUI($input: WebUIUpdateInput = {}) {
diff --git a/src/lib/graphql/queries/DownloaderQuery.ts b/src/lib/graphql/queries/DownloaderQuery.ts
index d67cb9a6..bab33fac 100644
--- a/src/lib/graphql/queries/DownloaderQuery.ts
+++ b/src/lib/graphql/queries/DownloaderQuery.ts
@@ -9,7 +9,6 @@
import gql from 'graphql-tag';
import { FULL_DOWNLOAD_STATUS } from '@/lib/graphql/Fragments';
-// eslint-disable-next-line import/prefer-default-export
export const GET_DOWNLOAD_STATUS = gql`
${FULL_DOWNLOAD_STATUS}
query GET_DOWNLOAD_STATUS {
diff --git a/src/lib/graphql/queries/SettingsQuery.ts b/src/lib/graphql/queries/SettingsQuery.ts
index 227f798e..cfedb2dc 100644
--- a/src/lib/graphql/queries/SettingsQuery.ts
+++ b/src/lib/graphql/queries/SettingsQuery.ts
@@ -9,7 +9,6 @@
import gql from 'graphql-tag';
import { SERVER_SETTINGS } from '@/lib/graphql/Fragments';
-// eslint-disable-next-line import/prefer-default-export
export const GET_SERVER_SETTINGS = gql`
${SERVER_SETTINGS}
query GET_SERVER_SETTINGS {
diff --git a/src/lib/graphql/queries/UpdaterQuery.ts b/src/lib/graphql/queries/UpdaterQuery.ts
index 36625519..560af179 100644
--- a/src/lib/graphql/queries/UpdaterQuery.ts
+++ b/src/lib/graphql/queries/UpdaterQuery.ts
@@ -9,7 +9,6 @@
import gql from 'graphql-tag';
import { FULL_UPDATER_STATUS } from '@/lib/graphql/Fragments';
-// eslint-disable-next-line import/prefer-default-export
export const GET_UPDATE_STATUS = gql`
${FULL_UPDATER_STATUS}
query GET_UPDATE_STATUS {
diff --git a/src/lib/graphql/subscriptions/DownloaderSubscription.ts b/src/lib/graphql/subscriptions/DownloaderSubscription.ts
index af92bcfe..c70d4915 100644
--- a/src/lib/graphql/subscriptions/DownloaderSubscription.ts
+++ b/src/lib/graphql/subscriptions/DownloaderSubscription.ts
@@ -9,7 +9,6 @@
import gql from 'graphql-tag';
import { FULL_DOWNLOAD_STATUS } from '@/lib/graphql/Fragments';
-// eslint-disable-next-line import/prefer-default-export
export const DOWNLOAD_STATUS_SUBSCRIPTION = gql`
${FULL_DOWNLOAD_STATUS}
subscription DOWNLOAD_STATUS_SUBSCRIPTION {
diff --git a/src/lib/graphql/subscriptions/ServerInfoSubscription.ts b/src/lib/graphql/subscriptions/ServerInfoSubscription.ts
index e95f400f..740a6f58 100644
--- a/src/lib/graphql/subscriptions/ServerInfoSubscription.ts
+++ b/src/lib/graphql/subscriptions/ServerInfoSubscription.ts
@@ -9,7 +9,6 @@
import gql from 'graphql-tag';
import { WEBUI_UPDATE_STATUS } from '@/lib/graphql/Fragments';
-// eslint-disable-next-line import/prefer-default-export
export const WEBUI_UPDATE_SUBSCRIPTION = gql`
${WEBUI_UPDATE_STATUS}
subscription WEBUI_UPDATE_SUBSCRIPTION {
diff --git a/src/lib/graphql/subscriptions/UpdaterSubscription.ts b/src/lib/graphql/subscriptions/UpdaterSubscription.ts
index d16d657a..e807f07d 100644
--- a/src/lib/graphql/subscriptions/UpdaterSubscription.ts
+++ b/src/lib/graphql/subscriptions/UpdaterSubscription.ts
@@ -9,7 +9,6 @@
import gql from 'graphql-tag';
import { FULL_UPDATER_STATUS } from '@/lib/graphql/Fragments';
-// eslint-disable-next-line import/prefer-default-export
export const UPDATER_SUBSCRIPTION = gql`
${FULL_UPDATER_STATUS}
subscription UPDATER_SUBSCRIPTION {
diff --git a/src/lib/requests/CustomCache.ts b/src/lib/requests/CustomCache.ts
index 17679218..b97f2ced 100644
--- a/src/lib/requests/CustomCache.ts
+++ b/src/lib/requests/CustomCache.ts
@@ -6,7 +6,6 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
-// eslint-disable-next-line import/prefer-default-export
export class CustomCache {
private keyToResponseMap = new Map();
diff --git a/src/lib/requests/RequestManager.ts b/src/lib/requests/RequestManager.ts
index 4f1abf90..dd8a7f87 100644
--- a/src/lib/requests/RequestManager.ts
+++ b/src/lib/requests/RequestManager.ts
@@ -28,7 +28,7 @@ import {
import { OperationVariables } from '@apollo/client/core';
import { useEffect, useRef, useState } from 'react';
import { IRestClient, RestClient } from '@/lib/requests/client/RestClient.ts';
-import storage from '@/util/localStorage.tsx';
+import * as storage from '@/util/localStorage.tsx';
import { GraphQLClient } from '@/lib/requests/client/GraphQLClient.ts';
import {
CategoryOrderBy,
@@ -1795,5 +1795,4 @@ export class RequestManager {
}
}
-const requestManager = new RequestManager();
-export default requestManager;
+export const requestManager = new RequestManager();
diff --git a/src/lib/requests/client/BaseClient.ts b/src/lib/requests/client/BaseClient.ts
index 8fee7e3f..35f63df4 100644
--- a/src/lib/requests/client/BaseClient.ts
+++ b/src/lib/requests/client/BaseClient.ts
@@ -6,9 +6,8 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
-import storage from '@/util/localStorage.tsx';
+import * as storage from '@/util/localStorage.tsx';
-// eslint-disable-next-line import/prefer-default-export
export abstract class BaseClient {
protected client!: Client;
diff --git a/src/lib/requests/client/GraphQLClient.ts b/src/lib/requests/client/GraphQLClient.ts
index a4f35205..952f1eb0 100644
--- a/src/lib/requests/client/GraphQLClient.ts
+++ b/src/lib/requests/client/GraphQLClient.ts
@@ -56,7 +56,6 @@ const typePolicies: StrictTypedTypePolicies = {
};
/* eslint-enable no-underscore-dangle */
-// eslint-disable-next-line import/prefer-default-export
export class GraphQLClient extends BaseClient<
ApolloClient,
ApolloClientOptions,
diff --git a/src/screens/Browse.tsx b/src/screens/Browse.tsx
index 58c5a54a..78937e40 100644
--- a/src/screens/Browse.tsx
+++ b/src/screens/Browse.tsx
@@ -10,11 +10,11 @@ import { useState } from 'react';
import Tabs from '@mui/material/Tabs';
import Tab from '@mui/material/Tab';
import { useTranslation } from 'react-i18next';
-import Sources from '@/screens/Sources';
-import Extensions from '@/screens/Extensions';
-import TabPanel from '@/components/util/TabPanel';
+import { Sources } from '@/screens/Sources';
+import { Extensions } from '@/screens/Extensions';
+import { TabPanel } from '@/components/util/TabPanel';
-export default function Browse() {
+export function Browse() {
const { t } = useTranslation();
const [tabNum, setTabNum] = useState(0);
diff --git a/src/screens/DownloadQueue.tsx b/src/screens/DownloadQueue.tsx
index 325ecc14..8235d2c6 100644
--- a/src/screens/DownloadQueue.tsx
+++ b/src/screens/DownloadQueue.tsx
@@ -18,24 +18,24 @@ import { DragDropContext, Draggable } from 'react-beautiful-dnd';
import Typography from '@mui/material/Typography';
import { Link } from 'react-router-dom';
import { useTranslation } from 'react-i18next';
-import requestManager from '@/lib/requests/RequestManager.ts';
-import StrictModeDroppable from '@/lib/StrictModeDroppable';
-import makeToast from '@/components/util/Toast';
+import { requestManager } from '@/lib/requests/RequestManager.ts';
+import { StrictModeDroppable } from '@/lib/StrictModeDroppable';
+import { makeToast } from '@/components/util/Toast';
import { NavbarToolbar } from '@/components/navbar/DefaultNavBar';
-import DownloadStateIndicator from '@/components/molecules/DownloadStateIndicator';
-import EmptyView from '@/components/util/EmptyView';
-import NavbarContext from '@/components/context/NavbarContext';
+import { DownloadStateIndicator } from '@/components/molecules/DownloadStateIndicator';
+import { EmptyView } from '@/components/util/EmptyView';
import { DownloadType } from '@/lib/graphql/generated/graphql.ts';
import { TChapter } from '@/typings.ts';
+import { NavBarContext } from '@/components/context/NavbarContext.tsx';
-const DownloadQueue: React.FC = () => {
+export const DownloadQueue: React.FC = () => {
const { t } = useTranslation();
const { data: downloaderData } = requestManager.useDownloadSubscription();
const queue = (downloaderData?.downloadChanged.queue as DownloadType[]) ?? [];
const status = downloaderData?.downloadChanged.state ?? 'STARTED';
- const { setTitle, setAction } = useContext(NavbarContext);
+ const { setTitle, setAction } = useContext(NavBarContext);
const toggleQueueStatus = () => {
if (status === 'STOPPED') {
@@ -155,5 +155,3 @@ const DownloadQueue: React.FC = () => {
>
);
};
-
-export default DownloadQueue;
diff --git a/src/screens/Extensions.tsx b/src/screens/Extensions.tsx
index aeb5172e..e11a52e3 100644
--- a/src/screens/Extensions.tsx
+++ b/src/screens/Extensions.tsx
@@ -14,9 +14,9 @@ import { StringParam, useQueryParam } from 'use-query-params';
import { Virtuoso } from 'react-virtuoso';
import { Typography, useMediaQuery, useTheme } from '@mui/material';
import { useTranslation } from 'react-i18next';
-import requestManager from '@/lib/requests/RequestManager.ts';
+import { requestManager } from '@/lib/requests/RequestManager.ts';
import { extensionDefaultLangs, DefaultLanguage, langSortCmp } from '@/util/language';
-import useLocalStorage from '@/util/useLocalStorage';
+import { useLocalStorage } from '@/util/useLocalStorage';
import {
ExtensionState,
GroupedExtensions,
@@ -24,13 +24,13 @@ import {
isExtensionStateOrLanguage,
translateExtensionLanguage,
} from '@/screens/util/Extensions';
-import AppbarSearch from '@/components/util/AppbarSearch';
-import LoadingPlaceholder from '@/components/util/LoadingPlaceholder';
+import { AppbarSearch } from '@/components/util/AppbarSearch';
+import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder';
import { makeToaster } from '@/components/util/Toast';
-import LangSelect from '@/components/navbar/action/LangSelect';
-import NavbarContext from '@/components/context/NavbarContext';
-import ExtensionCard from '@/components/ExtensionCard';
+import { LangSelect } from '@/components/navbar/action/LangSelect';
+import { ExtensionCard } from '@/components/ExtensionCard';
import { PartialExtension } from '@/typings.ts';
+import { NavBarContext } from '@/components/context/NavbarContext.tsx';
const LANGUAGE = 0;
const EXTENSIONS = 1;
@@ -89,11 +89,11 @@ function getExtensionsInfo(extensions: PartialExtension[]): {
};
}
-export default function MangaExtensions() {
+export function Extensions() {
const { t } = useTranslation();
const inputRef = useRef(null);
- const { setTitle, setAction } = useContext(NavbarContext);
+ const { setTitle, setAction } = useContext(NavBarContext);
const [shownLangs, setShownLangs] = useLocalStorage('shownExtensionLangs', extensionDefaultLangs());
const [showNsfw] = useLocalStorage('showNsfw', true);
const theme = useTheme();
diff --git a/src/screens/Library.tsx b/src/screens/Library.tsx
index dc13bbe3..27cd15e6 100644
--- a/src/screens/Library.tsx
+++ b/src/screens/Library.tsx
@@ -10,16 +10,16 @@ import { Chip, Tab, Tabs, styled, Box } from '@mui/material';
import React, { useCallback, useContext, useEffect, useMemo } from 'react';
import { useQueryParam, NumberParam } from 'use-query-params';
import { useTranslation } from 'react-i18next';
-import requestManager from '@/lib/requests/RequestManager.ts';
-import NavbarContext from '@/components/context/NavbarContext';
-import EmptyView from '@/components/util/EmptyView';
-import LoadingPlaceholder from '@/components/util/LoadingPlaceholder';
-import TabPanel from '@/components/util/TabPanel';
-import LibraryToolbarMenu from '@/components/library/LibraryToolbarMenu';
-import LibraryMangaGrid from '@/components/library/LibraryMangaGrid';
-import AppbarSearch from '@/components/util/AppbarSearch';
-import UpdateChecker from '@/components/library/UpdateChecker';
+import { requestManager } from '@/lib/requests/RequestManager.ts';
+import { EmptyView } from '@/components/util/EmptyView';
+import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder';
+import { TabPanel } from '@/components/util/TabPanel';
+import { LibraryToolbarMenu } from '@/components/library/LibraryToolbarMenu';
+import { LibraryMangaGrid } from '@/components/library/LibraryMangaGrid';
+import { AppbarSearch } from '@/components/util/AppbarSearch';
+import { UpdateChecker } from '@/components/library/UpdateChecker';
import { useLibraryOptionsContext } from '@/components/context/LibraryOptionsContext';
+import { NavBarContext } from '@/components/context/NavbarContext.tsx';
const StyledGridWrapper = styled(Box)(({ theme }) => ({
// TabsMenu height + TabsMenu bottom padding - grid item top padding
@@ -58,7 +58,7 @@ const TitleSizeTag = (props: React.ComponentProps) => (
);
-export default function Library() {
+export function Library() {
const { t } = useTranslation();
const { options } = useLibraryOptionsContext();
@@ -91,7 +91,7 @@ export default function Library() {
refetch();
}, [refetch]);
- const { setTitle, setAction } = useContext(NavbarContext);
+ const { setTitle, setAction } = useContext(NavBarContext);
useEffect(() => {
const title = t('library.title');
const navBarTitle = (
diff --git a/src/screens/Manga.tsx b/src/screens/Manga.tsx
index 7768d0a1..a6f0a58e 100644
--- a/src/screens/Manga.tsx
+++ b/src/screens/Manga.tsx
@@ -12,21 +12,21 @@ import React, { useContext, useEffect, useRef } from 'react';
import { useTranslation } from 'react-i18next';
import { useParams } from 'react-router-dom';
import { isNetworkRequestInFlight } from '@apollo/client/core/networkStatus';
-import requestManager from '@/lib/requests/RequestManager.ts';
-import NavbarContext, { useSetDefaultBackTo } from '@/components/context/NavbarContext';
-import ChapterList from '@/components/manga/ChapterList';
+import { requestManager } from '@/lib/requests/RequestManager.ts';
+import { NavBarContext, useSetDefaultBackTo } from '@/components/context/NavbarContext';
+import { ChapterList } from '@/components/manga/ChapterList';
import { useRefreshManga } from '@/components/manga/hooks';
-import MangaDetails from '@/components/manga/MangaDetails';
-import MangaToolbarMenu from '@/components/manga/MangaToolbarMenu';
-import EmptyView from '@/components/util/EmptyView';
-import LoadingPlaceholder from '@/components/util/LoadingPlaceholder';
+import { MangaDetails } from '@/components/manga/MangaDetails';
+import { MangaToolbarMenu } from '@/components/manga/MangaToolbarMenu';
+import { EmptyView } from '@/components/util/EmptyView';
+import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder';
const AUTOFETCH_AGE = 1000 * 60 * 60 * 24; // 24 hours
-const Manga: React.FC = () => {
+export const Manga: React.FC = () => {
const { t } = useTranslation();
- const { setTitle, setAction } = useContext(NavbarContext);
+ const { setTitle, setAction } = useContext(NavBarContext);
const { id } = useParams<{ id: string }>();
const autofetchedRef = useRef(false);
@@ -100,5 +100,3 @@ const Manga: React.FC = () => {
);
};
-
-export default Manga;
diff --git a/src/screens/Reader.tsx b/src/screens/Reader.tsx
index e6baa514..f0ce2908 100644
--- a/src/screens/Reader.tsx
+++ b/src/screens/Reader.tsx
@@ -12,21 +12,21 @@ import { useLocation, useNavigate, useParams } from 'react-router-dom';
import { Box } from '@mui/material';
import { useTranslation } from 'react-i18next';
import { ChapterOffset, IReaderSettings, ReaderType, TChapter, TManga, TranslationKey } from '@/typings';
-import requestManager from '@/lib/requests/RequestManager.ts';
+import { requestManager } from '@/lib/requests/RequestManager.ts';
import {
checkAndHandleMissingStoredReaderSettings,
getReaderSettingsFor,
useDefaultReaderSettings,
} from '@/util/readerSettings';
import { requestUpdateMangaMetadata } from '@/util/metadata';
-import HorizontalPager from '@/components/reader/pager/HorizontalPager';
-import PageNumber from '@/components/reader/PageNumber';
-import PagedPager from '@/components/reader/pager/PagedPager';
-import DoublePagedPager from '@/components/reader/pager/DoublePagedPager';
-import VerticalPager from '@/components/reader/pager/VerticalPager';
-import ReaderNavBar from '@/components/navbar/ReaderNavBar';
-import NavbarContext from '@/components/context/NavbarContext';
-import makeToast from '@/components/util/Toast';
+import { HorizontalPager } from '@/components/reader/pager/HorizontalPager';
+import { PageNumber } from '@/components/reader/PageNumber';
+import { PagedPager } from '@/components/reader/pager/PagedPager';
+import { DoublePagedPager } from '@/components/reader/pager/DoublePagedPager';
+import { VerticalPager } from '@/components/reader/pager/VerticalPager';
+import { ReaderNavBar } from '@/components/navbar/ReaderNavBar';
+import { makeToast } from '@/components/util/Toast';
+import { NavBarContext } from '@/components/context/NavbarContext.tsx';
const isDupChapter = async (chapterIndex: number, currentChapter: TChapter) => {
const nextChapter = await requestManager.getChapter(currentChapter.manga.id, chapterIndex).response;
@@ -87,7 +87,7 @@ const initialChapter = {
name: 'Loading...',
} as unknown as TChapter;
-export default function Reader() {
+export function Reader() {
const { t } = useTranslation();
const navigate = useNavigate();
const location = useLocation();
@@ -148,7 +148,7 @@ export default function Reader() {
const [wasLastPageReadSet, setWasLastPageReadSet] = useState(false);
const [curPage, setCurPage] = useState(0);
const [pageToScrollTo, setPageToScrollTo] = useState(undefined);
- const { setOverride, setTitle } = useContext(NavbarContext);
+ const { setOverride, setTitle } = useContext(NavBarContext);
const [retrievingNextChapter, setRetrievingNextChapter] = useState(false);
const { settings: defaultSettings, loading: areDefaultSettingsLoading } = useDefaultReaderSettings();
diff --git a/src/screens/SearchAll.tsx b/src/screens/SearchAll.tsx
index 903956d3..1fa62daf 100644
--- a/src/screens/SearchAll.tsx
+++ b/src/screens/SearchAll.tsx
@@ -12,15 +12,15 @@ import { Link } from 'react-router-dom';
import { StringParam, useQueryParam } from 'use-query-params';
import { useTranslation } from 'react-i18next';
import { ISource } from '@/typings';
-import requestManager from '@/lib/requests/RequestManager.ts';
-import useLocalStorage from '@/util/useLocalStorage';
+import { requestManager } from '@/lib/requests/RequestManager.ts';
+import { useLocalStorage } from '@/util/useLocalStorage';
import { langSortCmp, sourceDefualtLangs, sourceForcedDefaultLangs } from '@/util/language';
import { translateExtensionLanguage } from '@/screens/util/Extensions';
-import AppbarSearch from '@/components/util/AppbarSearch';
-import LangSelect from '@/components/navbar/action/LangSelect';
-import MangaGrid from '@/components/MangaGrid';
-import NavbarContext from '@/components/context/NavbarContext';
+import { AppbarSearch } from '@/components/util/AppbarSearch';
+import { LangSelect } from '@/components/navbar/action/LangSelect';
+import { MangaGrid } from '@/components/MangaGrid';
import { useDebounce } from '@/components/manga/hooks';
+import { NavBarContext } from '@/components/context/NavbarContext.tsx';
type SourceLoadingState = { isLoading: boolean; hasResults: boolean; emptySearch: boolean };
type SourceToLoadingStateMap = Map;
@@ -155,10 +155,10 @@ const SourceSearchPreview = React.memo(
},
);
-const SearchAll: React.FC = () => {
+export const SearchAll: React.FC = () => {
const { t } = useTranslation();
- const { setTitle, setAction } = useContext(NavbarContext);
+ const { setTitle, setAction } = useContext(NavBarContext);
const [query] = useQueryParam('query', StringParam);
const searchString = useDebounce(query, TRIGGER_SEARCH_THRESHOLD);
@@ -236,5 +236,3 @@ const SearchAll: React.FC = () => {
>
);
};
-
-export default SearchAll;
diff --git a/src/screens/Settings.tsx b/src/screens/Settings.tsx
index 8cc66045..256d74e8 100644
--- a/src/screens/Settings.tsx
+++ b/src/screens/Settings.tsx
@@ -35,17 +35,17 @@ import ViewModuleIcon from '@mui/icons-material/ViewModule';
import { useTranslation } from 'react-i18next';
import LanguageIcon from '@mui/icons-material/Language';
import CollectionsOutlinedBookmarkIcon from '@mui/icons-material/CollectionsBookmarkOutlined';
-import requestManager from '@/lib/requests/RequestManager.ts';
+import { requestManager } from '@/lib/requests/RequestManager.ts';
import { langCodeToName } from '@/util/language';
-import useLocalStorage from '@/util/useLocalStorage';
-import ListItemLink from '@/components/util/ListItemLink';
-import DarkTheme from '@/components/context/DarkTheme';
-import NavbarContext from '@/components/context/NavbarContext';
+import { useLocalStorage } from '@/util/useLocalStorage';
+import { ListItemLink } from '@/components/util/ListItemLink';
+import { DarkTheme } from '@/components/context/DarkTheme';
+import { NavBarContext } from '@/components/context/NavbarContext.tsx';
-export default function Settings() {
+export function Settings() {
const { t, i18n } = useTranslation();
- const { setTitle, setAction } = useContext(NavbarContext);
+ const { setTitle, setAction } = useContext(NavBarContext);
useEffect(() => {
setTitle(t('settings.title'));
setAction(null);
diff --git a/src/screens/SourceConfigure.tsx b/src/screens/SourceConfigure.tsx
index 243106bd..3055c4e4 100644
--- a/src/screens/SourceConfigure.tsx
+++ b/src/screens/SourceConfigure.tsx
@@ -10,14 +10,14 @@ import { createElement, useContext, useEffect } from 'react';
import { useParams } from 'react-router-dom';
import List from '@mui/material/List';
import { useTranslation } from 'react-i18next';
-import requestManager from '@/lib/requests/RequestManager.ts';
-import cloneObject from '@/util/cloneObject';
-import NavbarContext from '@/components/context/NavbarContext';
+import { requestManager } from '@/lib/requests/RequestManager.ts';
+import { cloneObject } from '@/util/cloneObject';
import { SwitchPreferenceCompat, CheckBoxPreference } from '@/components/sourceConfiguration/TwoStatePreference';
-import ListPreference from '@/components/sourceConfiguration/ListPreference';
-import EditTextPreference from '@/components/sourceConfiguration/EditTextPreference';
-import MultiSelectListPreference from '@/components/sourceConfiguration/MultiSelectListPreference';
+import { ListPreference } from '@/components/sourceConfiguration/ListPreference';
+import { EditTextPreference } from '@/components/sourceConfiguration/EditTextPreference';
+import { MultiSelectListPreference } from '@/components/sourceConfiguration/MultiSelectListPreference';
import { PreferenceProps } from '@/typings.ts';
+import { NavBarContext } from '@/components/context/NavbarContext.tsx';
function getPrefComponent(type: string) {
switch (type) {
@@ -36,9 +36,9 @@ function getPrefComponent(type: string) {
}
}
-export default function SourceConfigure() {
+export function SourceConfigure() {
const { t } = useTranslation();
- const { setTitle, setAction } = useContext(NavbarContext);
+ const { setTitle, setAction } = useContext(NavBarContext);
useEffect(() => {
setTitle(t('source.configuration.title'));
diff --git a/src/screens/SourceMangas.tsx b/src/screens/SourceMangas.tsx
index 442a6012..4c98d451 100644
--- a/src/screens/SourceMangas.tsx
+++ b/src/screens/SourceMangas.tsx
@@ -18,18 +18,18 @@ import FavoriteIcon from '@mui/icons-material/Favorite';
import NewReleasesIcon from '@mui/icons-material/NewReleases';
import FilterListIcon from '@mui/icons-material/FilterList';
import { TPartialManga, TranslationKey } from '@/typings';
-import requestManager, { AbortableApolloUseMutationPaginatedResponse } from '@/lib/requests/RequestManager.ts';
+import { requestManager, AbortableApolloUseMutationPaginatedResponse } from '@/lib/requests/RequestManager.ts';
import { useDebounce } from '@/components/manga/hooks';
import { useLibraryOptionsContext } from '@/components/context/LibraryOptionsContext';
-import SourceGridLayout from '@/components/source/GridLayouts';
-import AppbarSearch from '@/components/util/AppbarSearch';
-import SourceOptions from '@/components/source/SourceOptions';
-import NavbarContext from '@/components/context/NavbarContext';
-import SourceMangaGrid from '@/components/source/SourceMangaGrid';
+import { SourceGridLayout } from '@/components/source/GridLayouts';
+import { AppbarSearch } from '@/components/util/AppbarSearch';
+import { SourceOptions } from '@/components/source/SourceOptions';
+import { SourceMangaGrid } from '@/components/source/SourceMangaGrid';
import {
GetSourceMangasFetchMutation,
GetSourceMangasFetchMutationVariables,
} from '@/lib/graphql/generated/graphql.ts';
+import { NavBarContext } from '@/components/context/NavbarContext.tsx';
const ContentTypeMenu = styled('div')(({ theme }) => ({
display: 'flex',
@@ -191,9 +191,9 @@ const useSourceManga = (
];
};
-export default function SourceMangas() {
+export function SourceMangas() {
const { t } = useTranslation();
- const { setTitle, setAction } = useContext(NavbarContext);
+ const { setTitle, setAction } = useContext(NavBarContext);
const theme = useTheme();
const isLargeScreen = useMediaQuery(theme.breakpoints.up('sm'));
diff --git a/src/screens/Sources.tsx b/src/screens/Sources.tsx
index c4412c9c..78675555 100644
--- a/src/screens/Sources.tsx
+++ b/src/screens/Sources.tsx
@@ -12,14 +12,14 @@ import TravelExploreIcon from '@mui/icons-material/TravelExplore';
import { useNavigate } from 'react-router-dom';
import { useTranslation } from 'react-i18next';
import { ISource } from '@/typings';
-import requestManager from '@/lib/requests/RequestManager.ts';
-import useLocalStorage from '@/util/useLocalStorage';
+import { requestManager } from '@/lib/requests/RequestManager.ts';
+import { useLocalStorage } from '@/util/useLocalStorage';
import { sourceDefualtLangs, sourceForcedDefaultLangs, langSortCmp } from '@/util/language';
import { translateExtensionLanguage } from '@/screens/util/Extensions';
-import LoadingPlaceholder from '@/components/util/LoadingPlaceholder';
-import NavbarContext from '@/components/context/NavbarContext';
-import SourceCard from '@/components/SourceCard';
-import LangSelect from '@/components/navbar/action/LangSelect';
+import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder';
+import { SourceCard } from '@/components/SourceCard';
+import { LangSelect } from '@/components/navbar/action/LangSelect';
+import { NavBarContext } from '@/components/context/NavbarContext.tsx';
function sourceToLangList(sources: ISource[]) {
const result: string[] = [];
@@ -46,9 +46,9 @@ function groupByLang(sources: ISource[]) {
return result;
}
-export default function Sources() {
+export function Sources() {
const { t } = useTranslation();
- const { setTitle, setAction } = useContext(NavbarContext);
+ const { setTitle, setAction } = useContext(NavBarContext);
const [shownLangs, setShownLangs] = useLocalStorage('shownSourceLangs', sourceDefualtLangs());
const [showNsfw] = useLocalStorage('showNsfw', true);
diff --git a/src/screens/Updates.tsx b/src/screens/Updates.tsx
index 2776e252..8e30d0d9 100644
--- a/src/screens/Updates.tsx
+++ b/src/screens/Updates.tsx
@@ -18,13 +18,13 @@ import { Link, useLocation } from 'react-router-dom';
import { useTranslation } from 'react-i18next';
import { t as translate } from 'i18next';
import { GroupedVirtuoso } from 'react-virtuoso';
-import requestManager from '@/lib/requests/RequestManager.ts';
-import LoadingPlaceholder from '@/components/util/LoadingPlaceholder';
-import EmptyView from '@/components/util/EmptyView';
-import DownloadStateIndicator from '@/components/molecules/DownloadStateIndicator';
-import NavbarContext from '@/components/context/NavbarContext';
+import { requestManager } from '@/lib/requests/RequestManager.ts';
+import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder';
+import { EmptyView } from '@/components/util/EmptyView';
+import { DownloadStateIndicator } from '@/components/molecules/DownloadStateIndicator';
import { DownloadType } from '@/lib/graphql/generated/graphql.ts';
import { TChapter } from '@/typings.ts';
+import { NavBarContext } from '@/components/context/NavbarContext.tsx';
const StyledGroupedVirtuoso = styled(GroupedVirtuoso)(({ theme }) => ({
// 64px header
@@ -96,11 +96,11 @@ const groupByDate = (updates: TChapter[]): [date: string, items: number][] => {
return [...dateToItemMap.entries()];
};
-const Updates: React.FC = () => {
+export const Updates: React.FC = () => {
const { t } = useTranslation();
const location = useLocation();
- const { setTitle, setAction } = useContext(NavbarContext);
+ const { setTitle, setAction } = useContext(NavBarContext);
const {
data: chapterUpdateData,
loading: isLoading,
@@ -229,5 +229,3 @@ const Updates: React.FC = () => {
/>
);
};
-
-export default Updates;
diff --git a/src/screens/settings/About.tsx b/src/screens/settings/About.tsx
index a46289c6..85cad6e1 100644
--- a/src/screens/settings/About.tsx
+++ b/src/screens/settings/About.tsx
@@ -11,14 +11,14 @@ import List from '@mui/material/List';
import ListItem from '@mui/material/ListItem';
import ListItemText from '@mui/material/ListItemText';
import { useTranslation } from 'react-i18next';
-import requestManager from '@/lib/requests/RequestManager.ts';
-import ListItemLink from '@/components/util/ListItemLink';
-import NavbarContext, { useSetDefaultBackTo } from '@/components/context/NavbarContext';
-import LoadingPlaceholder from '@/components/util/LoadingPlaceholder';
+import { requestManager } from '@/lib/requests/RequestManager.ts';
+import { ListItemLink } from '@/components/util/ListItemLink';
+import { NavBarContext, useSetDefaultBackTo } from '@/components/context/NavbarContext';
+import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder';
-export default function About() {
+export function About() {
const { t } = useTranslation();
- const { setTitle, setAction } = useContext(NavbarContext);
+ const { setTitle, setAction } = useContext(NavBarContext);
useEffect(() => {
setTitle(t('settings.about.title'));
diff --git a/src/screens/settings/Backup.tsx b/src/screens/settings/Backup.tsx
index d6171b01..48e22117 100644
--- a/src/screens/settings/Backup.tsx
+++ b/src/screens/settings/Backup.tsx
@@ -12,14 +12,14 @@ import ListItemText from '@mui/material/ListItemText';
import { fromEvent } from 'file-selector';
import { useTranslation } from 'react-i18next';
import { ListItemButton } from '@mui/material';
-import requestManager from '@/lib/requests/RequestManager.ts';
-import makeToast from '@/components/util/Toast';
-import ListItemLink from '@/components/util/ListItemLink';
-import NavbarContext, { useSetDefaultBackTo } from '@/components/context/NavbarContext';
+import { requestManager } from '@/lib/requests/RequestManager.ts';
+import { makeToast } from '@/components/util/Toast';
+import { ListItemLink } from '@/components/util/ListItemLink';
+import { NavBarContext, useSetDefaultBackTo } from '@/components/context/NavbarContext';
-export default function Backup() {
+export function Backup() {
const { t } = useTranslation();
- const { setTitle, setAction } = useContext(NavbarContext);
+ const { setTitle, setAction } = useContext(NavBarContext);
useEffect(() => {
setTitle(t('settings.backup.title'));
setAction(null);
diff --git a/src/screens/settings/Categories.tsx b/src/screens/settings/Categories.tsx
index c348a733..f566d12c 100644
--- a/src/screens/settings/Categories.tsx
+++ b/src/screens/settings/Categories.tsx
@@ -24,10 +24,10 @@ import DialogTitle from '@mui/material/DialogTitle';
import Checkbox from '@mui/material/Checkbox';
import FormControlLabel from '@mui/material/FormControlLabel';
import { useTranslation } from 'react-i18next';
-import requestManager from '@/lib/requests/RequestManager.ts';
-import StrictModeDroppable from '@/lib/StrictModeDroppable';
+import { requestManager } from '@/lib/requests/RequestManager.ts';
+import { StrictModeDroppable } from '@/lib/StrictModeDroppable';
import { DEFAULT_FULL_FAB_HEIGHT } from '@/components/util/StyledFab';
-import NavbarContext, { useSetDefaultBackTo } from '@/components/context/NavbarContext';
+import { NavBarContext, useSetDefaultBackTo } from '@/components/context/NavbarContext';
import { TCategory } from '@/typings.ts';
const getItemStyle = (
@@ -43,10 +43,10 @@ const getItemStyle = (
}),
});
-export default function Categories() {
+export function Categories() {
const { t } = useTranslation();
- const { setTitle, setAction } = useContext(NavbarContext);
+ const { setTitle, setAction } = useContext(NavBarContext);
useEffect(() => {
setTitle(t('category.title.categories'));
setAction(null);
diff --git a/src/screens/settings/DefaultReaderSettings.tsx b/src/screens/settings/DefaultReaderSettings.tsx
index a71ae4cb..88cad0c3 100644
--- a/src/screens/settings/DefaultReaderSettings.tsx
+++ b/src/screens/settings/DefaultReaderSettings.tsx
@@ -17,13 +17,13 @@ import {
getDefaultSettings,
useDefaultReaderSettings,
} from '@/util/readerSettings';
-import ReaderSettingsOptions from '@/components/reader/ReaderSettingsOptions';
-import makeToast from '@/components/util/Toast';
-import NavbarContext, { useSetDefaultBackTo } from '@/components/context/NavbarContext';
+import { ReaderSettingsOptions } from '@/components/reader/ReaderSettingsOptions';
+import { makeToast } from '@/components/util/Toast';
+import { NavBarContext, useSetDefaultBackTo } from '@/components/context/NavbarContext';
-export default function DefaultReaderSettings() {
+export function DefaultReaderSettings() {
const { t } = useTranslation();
- const { setTitle, setAction } = useContext(NavbarContext);
+ const { setTitle, setAction } = useContext(NavBarContext);
useEffect(() => {
setTitle(t('reader.settings.title.default_reader_settings'));
setAction(null);
diff --git a/src/screens/settings/LibrarySettings.tsx b/src/screens/settings/LibrarySettings.tsx
index 9133426e..0acc6233 100644
--- a/src/screens/settings/LibrarySettings.tsx
+++ b/src/screens/settings/LibrarySettings.tsx
@@ -8,13 +8,13 @@
import { useTranslation } from 'react-i18next';
import { useContext, useEffect } from 'react';
-import NavbarContext, { useSetDefaultBackTo } from '@/components/context/NavbarContext.tsx';
+import { NavBarContext, useSetDefaultBackTo } from '@/components/context/NavbarContext.tsx';
import { GlobalUpdateSettings } from '@/components/globalUpdate/GlobalUpdateSettings.tsx';
-import SearchSettings from '@/screens/settings/SearchSettings.tsx';
+import { SearchSettings } from '@/screens/settings/SearchSettings.tsx';
-export default function LibrarySettings() {
+export function LibrarySettings() {
const { t } = useTranslation();
- const { setTitle, setAction } = useContext(NavbarContext);
+ const { setTitle, setAction } = useContext(NavBarContext);
useEffect(() => {
setTitle(t('library.settings.title'));
diff --git a/src/screens/settings/SearchSettings.tsx b/src/screens/settings/SearchSettings.tsx
index 3474c2f9..932067e1 100644
--- a/src/screens/settings/SearchSettings.tsx
+++ b/src/screens/settings/SearchSettings.tsx
@@ -15,10 +15,10 @@ import ListSubheader from '@mui/material/ListSubheader';
import { SearchMetadataKeys } from '@/typings';
import { convertToGqlMeta, requestUpdateServerMetadata } from '@/util/metadata';
import { useSearchSettings } from '@/util/searchSettings';
-import makeToast from '@/components/util/Toast';
+import { makeToast } from '@/components/util/Toast';
import { useSetDefaultBackTo } from '@/components/context/NavbarContext';
-export default function SearchSettings() {
+export function SearchSettings() {
const { t } = useTranslation();
const { metadata, settings } = useSearchSettings();
diff --git a/src/theme.ts b/src/theme.ts
index 1294b450..509f4e00 100644
--- a/src/theme.ts
+++ b/src/theme.ts
@@ -21,7 +21,7 @@ declare module '@mui/material/styles/createPalette' {
type DefaultMuiPalette = Omit;
type DefaultMuiTheme = Omit & { palette: DefaultMuiPalette };
-const createTheme = (dark?: boolean) => {
+export const createTheme = (dark?: boolean) => {
const baseTheme: DefaultMuiTheme = createMuiTheme({
palette: {
mode: dark ? 'dark' : 'light',
@@ -62,5 +62,3 @@ const createTheme = (dark?: boolean) => {
return tachideskTheme;
};
-
-export default createTheme;
diff --git a/src/util/cloneObject.tsx b/src/util/cloneObject.tsx
index bb7bb4c2..2f7cfbbf 100644
--- a/src/util/cloneObject.tsx
+++ b/src/util/cloneObject.tsx
@@ -6,6 +6,6 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
-export default function cloneObject(obj: T) {
+export function cloneObject(obj: T) {
return JSON.parse(JSON.stringify(obj)) as T;
}
diff --git a/src/util/localStorage.tsx b/src/util/localStorage.tsx
index 5da9219b..89e9a3dc 100644
--- a/src/util/localStorage.tsx
+++ b/src/util/localStorage.tsx
@@ -6,7 +6,7 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
-function getItem(key: string, defaultValue: T): T {
+export function getItem(key: string, defaultValue: T): T {
const item = window.localStorage.getItem(key);
if (item !== null) {
@@ -17,8 +17,6 @@ function getItem(key: string, defaultValue: T): T {
return defaultValue;
}
-function setItem(key: string, value: T): void {
+export function setItem(key: string, value: T): void {
window.localStorage.setItem(key, JSON.stringify(value));
}
-
-export default { getItem, setItem };
diff --git a/src/util/metadata.ts b/src/util/metadata.ts
index d16bd040..78847f59 100644
--- a/src/util/metadata.ts
+++ b/src/util/metadata.ts
@@ -18,7 +18,7 @@ import {
TChapter,
TManga,
} from '@/typings';
-import requestManager from '@/lib/requests/RequestManager.ts';
+import { requestManager } from '@/lib/requests/RequestManager.ts';
import { MetaType } from '@/lib/graphql/generated/graphql.ts';
const APP_METADATA_KEY_PREFIX = 'webUI_';
diff --git a/src/util/readerSettings.ts b/src/util/readerSettings.ts
index bfd61325..65bbeb53 100644
--- a/src/util/readerSettings.ts
+++ b/src/util/readerSettings.ts
@@ -7,7 +7,7 @@
*/
import { Metadata, IReaderSettings, MetadataKeyValuePair, GqlMetaHolder, TManga } from '@/typings';
-import requestManager from '@/lib/requests/RequestManager.ts';
+import { requestManager } from '@/lib/requests/RequestManager.ts';
import {
convertFromGqlMeta,
getMetadataFrom,
diff --git a/src/util/searchSettings.ts b/src/util/searchSettings.ts
index 5b8a7fc9..046cd9de 100644
--- a/src/util/searchSettings.ts
+++ b/src/util/searchSettings.ts
@@ -7,7 +7,7 @@
*/
import { Metadata, ISearchSettings } from '@/typings';
-import requestManager from '@/lib/requests/RequestManager.ts';
+import { requestManager } from '@/lib/requests/RequestManager.ts';
import { convertFromGqlMeta, getMetadataFrom } from '@/util/metadata';
export const getDefaultSettings = (): ISearchSettings => ({
diff --git a/src/util/useHistory.ts b/src/util/useHistory.ts
index 55307465..fee813de 100644
--- a/src/util/useHistory.ts
+++ b/src/util/useHistory.ts
@@ -9,7 +9,6 @@
import { useEffect, useState } from 'react';
import { NavigationType, useLocation, useNavigationType } from 'react-router-dom';
-// eslint-disable-next-line import/prefer-default-export
export const useHistory = () => {
const location = useLocation();
const navigationType = useNavigationType();
diff --git a/src/util/useLocalStorage.tsx b/src/util/useLocalStorage.tsx
index 59673849..348fc9da 100644
--- a/src/util/useLocalStorage.tsx
+++ b/src/util/useLocalStorage.tsx
@@ -7,9 +7,9 @@
*/
import { useState, Dispatch, SetStateAction, useReducer, Reducer, useCallback } from 'react';
-import storage from '@/util/localStorage';
+import * as storage from '@/util/localStorage';
-export default function useLocalStorage(key: string, defaultValue: T | (() => T)): [T, Dispatch>] {
+export function useLocalStorage(key: string, defaultValue: T | (() => T)): [T, Dispatch>] {
const initialState = defaultValue instanceof Function ? defaultValue() : defaultValue;
const [storedValue, setStoredValue] = useState(storage.getItem(key, initialState));