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));