Move core files into new folder
This commit is contained in:
@@ -12,14 +12,14 @@ import { Navigate, Route, Routes, useLocation } from 'react-router-dom';
|
|||||||
import { loadErrorMessages, loadDevMessages } from '@apollo/client/dev';
|
import { loadErrorMessages, loadDevMessages } from '@apollo/client/dev';
|
||||||
import { loadable } from 'react-lazily/loadable';
|
import { loadable } from 'react-lazily/loadable';
|
||||||
import Box from '@mui/material/Box';
|
import Box from '@mui/material/Box';
|
||||||
import { AppContext } from '@/components/context/AppContext';
|
import { AppContext } from '@/modules/core/contexts/AppContext.tsx';
|
||||||
import '@/i18n';
|
import '@/i18n';
|
||||||
import { DefaultNavBar } from '@/components/navbar/DefaultNavBar';
|
import { DefaultNavBar } from '@/components/navbar/DefaultNavBar';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/requests/RequestManager.ts';
|
||||||
import { WebUIUpdateChecker } from '@/components/util/WebUIUpdateChecker.tsx';
|
import { WebUIUpdateChecker } from '@/components/util/WebUIUpdateChecker.tsx';
|
||||||
import { ServerUpdateChecker } from '@/components/util/ServerUpdateChecker.tsx';
|
import { ServerUpdateChecker } from '@/components/util/ServerUpdateChecker.tsx';
|
||||||
import { lazyLoadFallback } from '@/util/LazyLoad.tsx';
|
import { lazyLoadFallback } from '@/modules/core/utils/LazyLoad.tsx';
|
||||||
import { ErrorBoundary } from '@/util/ErrorBoundary.tsx';
|
import { ErrorBoundary } from '@/modules/core/components/ErrorBoundary.tsx';
|
||||||
import { useNavBarContext } from '@/components/context/NavbarContext.tsx';
|
import { useNavBarContext } from '@/components/context/NavbarContext.tsx';
|
||||||
|
|
||||||
const { Browse } = loadable(() => import('@/screens/Browse'), lazyLoadFallback);
|
const { Browse } = loadable(() => import('@/screens/Browse'), lazyLoadFallback);
|
||||||
|
|||||||
18
src/Base.types.ts
Normal file
18
src/Base.types.ts
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
/*
|
||||||
|
* 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 { ParseKeys } from 'i18next';
|
||||||
|
|
||||||
|
export enum DirectionOffset {
|
||||||
|
PREVIOUS = -1,
|
||||||
|
NEXT = 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
export type NullAndUndefined<T> = T | null | undefined;
|
||||||
|
|
||||||
|
export type TranslationKey = ParseKeys;
|
||||||
@@ -14,12 +14,12 @@ import Avatar from '@mui/material/Avatar';
|
|||||||
import Typography from '@mui/material/Typography';
|
import Typography from '@mui/material/Typography';
|
||||||
import Box from '@mui/material/Box';
|
import Box from '@mui/material/Box';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { TranslationKey } from '@/typings';
|
import { requestManager } from '@/lib/requests/requests/RequestManager.ts';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { makeToast } from '@/lib/ui/Toast.ts';
|
||||||
import { makeToast } from '@/components/util/Toast.tsx';
|
import { SpinnerImage } from '@/modules/core/components/SpinnerImage.tsx';
|
||||||
import { SpinnerImage } from '@/components/util/SpinnerImage.tsx';
|
|
||||||
import { TExtension } from '@/screens/util/Extensions.ts';
|
import { TExtension } from '@/screens/util/Extensions.ts';
|
||||||
|
import { TranslationKey } from '@/Base.types.ts';
|
||||||
|
|
||||||
interface IProps {
|
interface IProps {
|
||||||
extension: TExtension;
|
extension: TExtension;
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import { useMemo, useState } from 'react';
|
|||||||
import { useLongPress } from 'use-long-press';
|
import { useLongPress } from 'use-long-press';
|
||||||
import { GridLayout, useLibraryOptionsContext } from '@/components/context/LibraryOptionsContext';
|
import { GridLayout, useLibraryOptionsContext } from '@/components/context/LibraryOptionsContext';
|
||||||
import { MangaActionMenuItems, SingleModeProps } from '@/components/manga/MangaActionMenuItems.tsx';
|
import { MangaActionMenuItems, SingleModeProps } from '@/components/manga/MangaActionMenuItems.tsx';
|
||||||
import { Menu } from '@/components/menu/Menu.tsx';
|
import { Menu } from '@/modules/core/components/menu/Menu.tsx';
|
||||||
import { MigrateDialog } from '@/components/MigrateDialog.tsx';
|
import { MigrateDialog } from '@/components/MigrateDialog.tsx';
|
||||||
import { useManageMangaLibraryState } from '@/components/manga/useManageMangaLibraryState.tsx';
|
import { useManageMangaLibraryState } from '@/components/manga/useManageMangaLibraryState.tsx';
|
||||||
import { MangaGridCard } from '@/components/manga/MangaGridCard.tsx';
|
import { MangaGridCard } from '@/components/manga/MangaGridCard.tsx';
|
||||||
|
|||||||
@@ -21,17 +21,17 @@ import Box, { BoxProps } from '@mui/material/Box';
|
|||||||
import { GridItemProps, GridStateSnapshot, VirtuosoGrid } from 'react-virtuoso';
|
import { GridItemProps, GridStateSnapshot, VirtuosoGrid } from 'react-virtuoso';
|
||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { EmptyViewAbsoluteCentered } from '@/components/util/EmptyViewAbsoluteCentered.tsx';
|
import { EmptyViewAbsoluteCentered } from '@/modules/core/components/placeholder/EmptyViewAbsoluteCentered.tsx';
|
||||||
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder';
|
import { LoadingPlaceholder } from '@/modules/core/components/placeholder/LoadingPlaceholder.tsx';
|
||||||
import { MangaCard } from '@/components/MangaCard';
|
import { MangaCard } from '@/components/MangaCard';
|
||||||
import { GridLayout } from '@/components/context/LibraryOptionsContext';
|
import { GridLayout } from '@/components/context/LibraryOptionsContext';
|
||||||
import { useLocalStorage, useSessionStorage } from '@/util/useStorage.tsx';
|
import { useLocalStorage, useSessionStorage } from '@/modules/core/hooks/useStorage.tsx';
|
||||||
import { SelectableCollectionReturnType } from '@/components/collection/useSelectableCollection.ts';
|
import { SelectableCollectionReturnType } from '@/components/collection/useSelectableCollection.ts';
|
||||||
import { DEFAULT_FULL_FAB_HEIGHT } from '@/components/util/StyledFab.tsx';
|
import { DEFAULT_FULL_FAB_HEIGHT } from '@/modules/core/components/buttons/StyledFab.tsx';
|
||||||
import { AppStorage } from '@/util/AppStorage.ts';
|
import { AppStorage } from '@/lib/AppStorage.ts';
|
||||||
import { MangaCardProps } from '@/components/manga/MangaCard.types.tsx';
|
import { MangaCardProps } from '@/components/manga/MangaCard.types.tsx';
|
||||||
import { MangaType } from '@/lib/graphql/generated/graphql.ts';
|
import { MangaType } from '@/lib/graphql/generated/graphql.ts';
|
||||||
import { useResizeObserver } from '@/util/useResizeObserver.tsx';
|
import { useResizeObserver } from '@/modules/core/hooks/useResizeObserver.tsx';
|
||||||
import { useNavBarContext } from '@/components/context/NavbarContext.tsx';
|
import { useNavBarContext } from '@/components/context/NavbarContext.tsx';
|
||||||
|
|
||||||
const GridContainer = React.forwardRef<HTMLDivElement, GridTypeMap['props']>(({ children, ...props }, ref) => (
|
const GridContainer = React.forwardRef<HTMLDivElement, GridTypeMap['props']>(({ children, ...props }, ref) => (
|
||||||
|
|||||||
@@ -16,15 +16,15 @@ import Stack from '@mui/material/Stack';
|
|||||||
import { Link, useNavigate, useParams } from 'react-router-dom';
|
import { Link, useNavigate, useParams } from 'react-router-dom';
|
||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
import FormGroup from '@mui/material/FormGroup';
|
import FormGroup from '@mui/material/FormGroup';
|
||||||
import { CheckboxInput } from '@/components/atoms/CheckboxInput.tsx';
|
import { CheckboxInput } from '@/modules/core/components/inputs/CheckboxInput.tsx';
|
||||||
import { Mangas, MigrateMode } from '@/lib/data/Mangas.ts';
|
import { Mangas, MigrateMode } from '@/lib/data/Mangas.ts';
|
||||||
import { makeToast } from '@/components/util/Toast.tsx';
|
import { makeToast } from '@/lib/ui/Toast.ts';
|
||||||
import {
|
import {
|
||||||
createUpdateMetadataServerSettings,
|
createUpdateMetadataServerSettings,
|
||||||
useMetadataServerSettings,
|
useMetadataServerSettings,
|
||||||
} from '@/lib/metadata/metadataServerSettings.ts';
|
} from '@/lib/metadata/metadataServerSettings.ts';
|
||||||
import { MetadataMigrationSettings } from '@/typings.ts';
|
import { MetadataMigrationSettings } from '@/typings.ts';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
||||||
|
|
||||||
export const MigrateDialog = ({ mangaIdToMigrateTo, onClose }: { mangaIdToMigrateTo: number; onClose: () => void }) => {
|
export const MigrateDialog = ({ mangaIdToMigrateTo, onClose }: { mangaIdToMigrateTo: number; onClose: () => void }) => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|||||||
@@ -15,10 +15,10 @@ import Avatar from '@mui/material/Avatar';
|
|||||||
import Typography from '@mui/material/Typography';
|
import Typography from '@mui/material/Typography';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/requests/RequestManager.ts';
|
||||||
import { GetMigratableSourcesQuery } from '@/lib/graphql/generated/graphql.ts';
|
import { GetMigratableSourcesQuery } from '@/lib/graphql/generated/graphql.ts';
|
||||||
import { translateExtensionLanguage } from '@/screens/util/Extensions.ts';
|
import { translateExtensionLanguage } from '@/screens/util/Extensions.ts';
|
||||||
import { SpinnerImage } from '@/components/util/SpinnerImage.tsx';
|
import { SpinnerImage } from '@/modules/core/components/SpinnerImage.tsx';
|
||||||
|
|
||||||
export type TMigratableSource = NonNullable<GetMigratableSourcesQuery['mangas']['nodes'][number]['source']> & {
|
export type TMigratableSource = NonNullable<GetMigratableSourcesQuery['mangas']['nodes'][number]['source']> & {
|
||||||
mangaCount: number;
|
mangaCount: number;
|
||||||
|
|||||||
@@ -17,10 +17,10 @@ import React from 'react';
|
|||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import Stack from '@mui/material/Stack';
|
import Stack from '@mui/material/Stack';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/requests/RequestManager.ts';
|
||||||
import { translateExtensionLanguage } from '@/screens/util/Extensions';
|
import { translateExtensionLanguage } from '@/screens/util/Extensions';
|
||||||
import { SourceContentType } from '@/screens/SourceMangas';
|
import { SourceContentType } from '@/screens/SourceMangas';
|
||||||
import { SpinnerImage } from '@/components/util/SpinnerImage.tsx';
|
import { SpinnerImage } from '@/modules/core/components/SpinnerImage.tsx';
|
||||||
import { GetSourcesListQuery } from '@/lib/graphql/generated/graphql.ts';
|
import { GetSourcesListQuery } from '@/lib/graphql/generated/graphql.ts';
|
||||||
import { MediaQuery } from '@/lib/ui/MediaQuery.tsx';
|
import { MediaQuery } from '@/lib/ui/MediaQuery.tsx';
|
||||||
|
|
||||||
|
|||||||
@@ -29,11 +29,15 @@ import {
|
|||||||
ChapterRealUrlInfo,
|
ChapterRealUrlInfo,
|
||||||
Chapters,
|
Chapters,
|
||||||
} from '@/lib/data/Chapters.ts';
|
} from '@/lib/data/Chapters.ts';
|
||||||
import { MenuItem } from '@/components/menu/MenuItem.tsx';
|
import { MenuItem } from '@/modules/core/components/menu/MenuItem.tsx';
|
||||||
import { IChapterWithMeta } from '@/components/chapter/ChapterList.tsx';
|
import { IChapterWithMeta } from '@/components/chapter/ChapterList.tsx';
|
||||||
import { ChaptersWithMeta } from '@/lib/data/ChaptersWithMeta.ts';
|
import { ChaptersWithMeta } from '@/lib/data/ChaptersWithMeta.ts';
|
||||||
import { createGetMenuItemTitle, createIsMenuItemDisabled, createShouldShowMenuItem } from '@/components/menu/util.ts';
|
import {
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
createGetMenuItemTitle,
|
||||||
|
createIsMenuItemDisabled,
|
||||||
|
createShouldShowMenuItem,
|
||||||
|
} from '@/modules/core/components/menu/Menu.utils.ts';
|
||||||
|
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
||||||
import { useMetadataServerSettings } from '@/lib/metadata/metadataServerSettings.ts';
|
import { useMetadataServerSettings } from '@/lib/metadata/metadataServerSettings.ts';
|
||||||
|
|
||||||
type BaseProps = { onClose: () => void };
|
type BaseProps = { onClose: () => void };
|
||||||
|
|||||||
@@ -22,12 +22,12 @@ import { Link } from 'react-router-dom';
|
|||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import PopupState, { bindMenu, bindTrigger } from 'material-ui-popup-state';
|
import PopupState, { bindMenu, bindTrigger } from 'material-ui-popup-state';
|
||||||
import { useLongPress } from 'use-long-press';
|
import { useLongPress } from 'use-long-press';
|
||||||
import { getDateString } from '@/util/date.ts';
|
import { getDateString } from '@/util/DateHelper.ts';
|
||||||
import { DownloadStateIndicator } from '@/components/molecules/DownloadStateIndicator.tsx';
|
import { DownloadStateIndicator } from '@/modules/core/components/DownloadStateIndicator.tsx';
|
||||||
import { ChapterType } from '@/lib/graphql/generated/graphql.ts';
|
import { ChapterType } from '@/lib/graphql/generated/graphql.ts';
|
||||||
import { ChapterActionMenuItems } from '@/components/chapter/ChapterActionMenuItems.tsx';
|
import { ChapterActionMenuItems } from '@/components/chapter/ChapterActionMenuItems.tsx';
|
||||||
import { Menu } from '@/components/menu/Menu.tsx';
|
import { Menu } from '@/modules/core/components/menu/Menu.tsx';
|
||||||
import { TypographyMaxLines } from '@/components/atoms/TypographyMaxLines.tsx';
|
import { TypographyMaxLines } from '@/modules/core/components/TypographyMaxLines.tsx';
|
||||||
import {
|
import {
|
||||||
ChapterBookmarkInfo,
|
ChapterBookmarkInfo,
|
||||||
ChapterDownloadInfo,
|
ChapterDownloadInfo,
|
||||||
|
|||||||
@@ -19,14 +19,14 @@ import DownloadIcon from '@mui/icons-material/Download';
|
|||||||
import DoneAllIcon from '@mui/icons-material/DoneAll';
|
import DoneAllIcon from '@mui/icons-material/DoneAll';
|
||||||
import PopupState, { bindMenu, bindTrigger } from 'material-ui-popup-state';
|
import PopupState, { bindMenu, bindTrigger } from 'material-ui-popup-state';
|
||||||
import Menu from '@mui/material/Menu';
|
import Menu from '@mui/material/Menu';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/requests/RequestManager.ts';
|
||||||
import { ChapterCard } from '@/components/chapter/ChapterCard.tsx';
|
import { ChapterCard } from '@/components/chapter/ChapterCard.tsx';
|
||||||
import { ResumeFab } from '@/components/manga/ResumeFAB.tsx';
|
import { ResumeFab } from '@/components/manga/ResumeFAB.tsx';
|
||||||
import { filterAndSortChapters, useChapterOptions } from '@/components/chapter/util.tsx';
|
import { filterAndSortChapters, useChapterOptions } from '@/components/chapter/util.tsx';
|
||||||
import { EmptyViewAbsoluteCentered } from '@/components/util/EmptyViewAbsoluteCentered.tsx';
|
import { EmptyViewAbsoluteCentered } from '@/modules/core/components/placeholder/EmptyViewAbsoluteCentered.tsx';
|
||||||
import { ChaptersToolbarMenu } from '@/components/chapter/ChaptersToolbarMenu.tsx';
|
import { ChaptersToolbarMenu } from '@/components/chapter/ChaptersToolbarMenu.tsx';
|
||||||
import { SelectionFAB } from '@/components/collection/SelectionFAB.tsx';
|
import { SelectionFAB } from '@/components/collection/SelectionFAB.tsx';
|
||||||
import { DEFAULT_FULL_FAB_HEIGHT } from '@/components/util/StyledFab.tsx';
|
import { DEFAULT_FULL_FAB_HEIGHT } from '@/modules/core/components/buttons/StyledFab.tsx';
|
||||||
import {
|
import {
|
||||||
GetChaptersMangaQuery,
|
GetChaptersMangaQuery,
|
||||||
GetChaptersMangaQueryVariables,
|
GetChaptersMangaQueryVariables,
|
||||||
@@ -38,14 +38,14 @@ import { Chapters } from '@/lib/data/Chapters.ts';
|
|||||||
import { ChaptersWithMeta, ChapterWithMetaType } from '@/lib/data/ChaptersWithMeta.ts';
|
import { ChaptersWithMeta, ChapterWithMetaType } from '@/lib/data/ChaptersWithMeta.ts';
|
||||||
import { ChapterActionMenuItems } from '@/components/chapter/ChapterActionMenuItems.tsx';
|
import { ChapterActionMenuItems } from '@/components/chapter/ChapterActionMenuItems.tsx';
|
||||||
import { ChaptersDownloadActionMenuItems } from '@/components/chapter/ChaptersDownloadActionMenuItems.tsx';
|
import { ChaptersDownloadActionMenuItems } from '@/components/chapter/ChaptersDownloadActionMenuItems.tsx';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
||||||
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
import { LoadingPlaceholder } from '@/modules/core/components/placeholder/LoadingPlaceholder.tsx';
|
||||||
import { GET_CHAPTERS_MANGA } from '@/lib/graphql/queries/ChapterQuery.ts';
|
import { GET_CHAPTERS_MANGA } from '@/lib/graphql/queries/ChapterQuery.ts';
|
||||||
import { Mangas } from '@/lib/data/Mangas';
|
import { Mangas } from '@/lib/data/Mangas';
|
||||||
import { useNavBarContext } from '@/components/context/NavbarContext.tsx';
|
import { useNavBarContext } from '@/components/context/NavbarContext.tsx';
|
||||||
import { useResizeObserver } from '@/util/useResizeObserver.tsx';
|
import { useResizeObserver } from '@/modules/core/hooks/useResizeObserver.tsx';
|
||||||
import { MediaQuery } from '@/lib/ui/MediaQuery.tsx';
|
import { MediaQuery } from '@/lib/ui/MediaQuery.tsx';
|
||||||
import { shouldForwardProp } from '@/lib/ui/ShouldForwardProp.ts';
|
import { shouldForwardProp } from '@/modules/core/utils/ShouldForwardProp.ts';
|
||||||
|
|
||||||
type ChapterListHeaderProps = {
|
type ChapterListHeaderProps = {
|
||||||
scrollbarWidth: number;
|
scrollbarWidth: number;
|
||||||
|
|||||||
@@ -9,12 +9,13 @@
|
|||||||
import RadioGroup from '@mui/material/RadioGroup';
|
import RadioGroup from '@mui/material/RadioGroup';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { ChapterListOptions, ChapterOptionsReducerAction, TranslationKey } from '@/typings.ts';
|
import { ChapterListOptions, ChapterOptionsReducerAction } from '@/typings.ts';
|
||||||
import { RadioInput } from '@/components/atoms/RadioInput.tsx';
|
import { RadioInput } from '@/modules/core/components/inputs/RadioInput.tsx';
|
||||||
import { SortRadioInput } from '@/components/atoms/SortRadioInput.tsx';
|
import { SortRadioInput } from '@/modules/core/components/inputs/SortRadioInput.tsx';
|
||||||
import { ThreeStateCheckboxInput } from '@/components/atoms/ThreeStateCheckboxInput.tsx';
|
import { ThreeStateCheckboxInput } from '@/modules/core/components/inputs/ThreeStateCheckboxInput.tsx';
|
||||||
import { OptionsTabs } from '@/components/molecules/OptionsTabs.tsx';
|
import { OptionsTabs } from '@/modules/core/components/OptionsTabs.tsx';
|
||||||
import { SORT_OPTIONS } from '@/components/chapter/util.tsx';
|
import { SORT_OPTIONS } from '@/components/chapter/util.tsx';
|
||||||
|
import { TranslationKey } from '@/Base.types.ts';
|
||||||
|
|
||||||
interface IProps {
|
interface IProps {
|
||||||
open: boolean;
|
open: boolean;
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import MenuItem from '@mui/material/MenuItem';
|
|||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { useMetadataServerSettings } from '@/lib/metadata/metadataServerSettings.ts';
|
import { useMetadataServerSettings } from '@/lib/metadata/metadataServerSettings.ts';
|
||||||
import { Mangas } from '@/lib/data/Mangas.ts';
|
import { Mangas } from '@/lib/data/Mangas.ts';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
||||||
import { MangaType } from '@/lib/graphql/generated/graphql.ts';
|
import { MangaType } from '@/lib/graphql/generated/graphql.ts';
|
||||||
|
|
||||||
const DownloadRange = {
|
const DownloadRange = {
|
||||||
|
|||||||
@@ -7,16 +7,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { t } from 'i18next';
|
import { t } from 'i18next';
|
||||||
import {
|
import { ChapterListOptions, ChapterOptionsReducerAction, ChapterSortMode } from '@/typings.ts';
|
||||||
ChapterListOptions,
|
import { useReducerLocalStorage } from '@/modules/core/hooks/useStorage.tsx';
|
||||||
ChapterOptionsReducerAction,
|
|
||||||
ChapterSortMode,
|
|
||||||
NullAndUndefined,
|
|
||||||
TranslationKey,
|
|
||||||
} from '@/typings.ts';
|
|
||||||
import { useReducerLocalStorage } from '@/util/useStorage.tsx';
|
|
||||||
import { ChapterBookmarkInfo, ChapterDownloadInfo, ChapterReadInfo } from '@/lib/data/Chapters.ts';
|
import { ChapterBookmarkInfo, ChapterDownloadInfo, ChapterReadInfo } from '@/lib/data/Chapters.ts';
|
||||||
import { ChapterType } from '@/lib/graphql/generated/graphql.ts';
|
import { ChapterType } from '@/lib/graphql/generated/graphql.ts';
|
||||||
|
import { NullAndUndefined, TranslationKey } from '@/Base.types.ts';
|
||||||
|
|
||||||
const defaultChapterOptions: ChapterListOptions = {
|
const defaultChapterOptions: ChapterListOptions = {
|
||||||
active: false,
|
active: false,
|
||||||
|
|||||||
@@ -13,9 +13,9 @@ import { styled } from '@mui/material/styles';
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import PopupState, { bindMenu, bindTrigger } from 'material-ui-popup-state';
|
import PopupState, { bindMenu, bindTrigger } from 'material-ui-popup-state';
|
||||||
import { DEFAULT_FAB_STYLE } from '@/components/util/StyledFab.tsx';
|
import { DEFAULT_FAB_STYLE } from '@/modules/core/components/buttons/StyledFab.tsx';
|
||||||
import { TranslationKey } from '@/typings.ts';
|
import { Menu } from '@/modules/core/components/menu/Menu.tsx';
|
||||||
import { Menu } from '@/components/menu/Menu.tsx';
|
import { TranslationKey } from '@/Base.types.ts';
|
||||||
|
|
||||||
interface SelectionFABProps {
|
interface SelectionFABProps {
|
||||||
children: (handleClose: () => void, setHideMenu: (hide: boolean) => void) => JSX.Element;
|
children: (handleClose: () => void, setHideMenu: (hide: boolean) => void) => JSX.Element;
|
||||||
|
|||||||
@@ -10,25 +10,26 @@ import FormLabel from '@mui/material/FormLabel';
|
|||||||
import RadioGroup from '@mui/material/RadioGroup';
|
import RadioGroup from '@mui/material/RadioGroup';
|
||||||
import { useMemo } from 'react';
|
import { useMemo } from 'react';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { LibrarySortMode, TranslationKey } from '@/typings';
|
import { LibrarySortMode } from '@/typings';
|
||||||
import { CheckboxInput } from '@/components/atoms/CheckboxInput';
|
import { CheckboxInput } from '@/modules/core/components/inputs/CheckboxInput.tsx';
|
||||||
import { RadioInput } from '@/components/atoms/RadioInput';
|
import { RadioInput } from '@/modules/core/components/inputs/RadioInput.tsx';
|
||||||
import { SortRadioInput } from '@/components/atoms/SortRadioInput';
|
import { SortRadioInput } from '@/modules/core/components/inputs/SortRadioInput.tsx';
|
||||||
import { ThreeStateCheckboxInput } from '@/components/atoms/ThreeStateCheckboxInput';
|
import { ThreeStateCheckboxInput } from '@/modules/core/components/inputs/ThreeStateCheckboxInput.tsx';
|
||||||
import { GridLayout } from '@/components/context/LibraryOptionsContext';
|
import { GridLayout } from '@/components/context/LibraryOptionsContext';
|
||||||
import { OptionsTabs } from '@/components/molecules/OptionsTabs';
|
import { OptionsTabs } from '@/modules/core/components/OptionsTabs.tsx';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/requests/RequestManager.ts';
|
||||||
import { Trackers } from '@/lib/data/Trackers.ts';
|
import { Trackers } from '@/lib/data/Trackers.ts';
|
||||||
import { GetTrackersSettingsQuery, MangaStatus } from '@/lib/graphql/generated/graphql.ts';
|
import { GetTrackersSettingsQuery, MangaStatus } from '@/lib/graphql/generated/graphql.ts';
|
||||||
import { GET_TRACKERS_SETTINGS } from '@/lib/graphql/queries/TrackerQuery.ts';
|
import { GET_TRACKERS_SETTINGS } from '@/lib/graphql/queries/TrackerQuery.ts';
|
||||||
import { statusToTranslationKey } from '@/lib/data/Mangas.ts';
|
import { statusToTranslationKey } from '@/lib/data/Mangas.ts';
|
||||||
import { CategoryMetadataInfo } from '@/lib/data/Categories.ts';
|
import { CategoryMetadataInfo } from '@/lib/data/Categories.ts';
|
||||||
import { createUpdateCategoryMetadata, getCategoryMetadata } from '@/lib/metadata/categoryMetadata.ts';
|
import { createUpdateCategoryMetadata, getCategoryMetadata } from '@/lib/metadata/categoryMetadata.ts';
|
||||||
import { makeToast } from '@/components/util/Toast.tsx';
|
import { makeToast } from '@/lib/ui/Toast.ts';
|
||||||
import {
|
import {
|
||||||
createUpdateMetadataServerSettings,
|
createUpdateMetadataServerSettings,
|
||||||
useMetadataServerSettings,
|
useMetadataServerSettings,
|
||||||
} from '@/lib/metadata/metadataServerSettings.ts';
|
} from '@/lib/metadata/metadataServerSettings.ts';
|
||||||
|
import { TranslationKey } from '@/Base.types.ts';
|
||||||
|
|
||||||
const TITLES: { [key in 'filter' | 'sort' | 'display']: TranslationKey } = {
|
const TITLES: { [key in 'filter' | 'sort' | 'display']: TranslationKey } = {
|
||||||
filter: 'global.label.filter',
|
filter: 'global.label.filter',
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import React, { useMemo } from 'react';
|
import React, { useMemo } from 'react';
|
||||||
import { LibraryOptions } from '@/typings';
|
import { LibraryOptions } from '@/typings';
|
||||||
import { useLocalStorage } from '@/util/useStorage.tsx';
|
import { useLocalStorage } from '@/modules/core/hooks/useStorage.tsx';
|
||||||
import { LibraryOptionsContext } from '@/components/context/LibraryOptionsContext';
|
import { LibraryOptionsContext } from '@/components/context/LibraryOptionsContext';
|
||||||
import { getDefaultCategoryMetadata } from '@/lib/metadata/categoryMetadata.ts';
|
import { getDefaultCategoryMetadata } from '@/lib/metadata/categoryMetadata.ts';
|
||||||
|
|
||||||
|
|||||||
@@ -8,13 +8,14 @@
|
|||||||
|
|
||||||
import { StringParam, useQueryParam } from 'use-query-params';
|
import { StringParam, useQueryParam } from 'use-query-params';
|
||||||
import { useMemo } from 'react';
|
import { useMemo } from 'react';
|
||||||
import { LibraryOptions, LibrarySortMode, NullAndUndefined } from '@/typings.ts';
|
import { LibraryOptions, LibrarySortMode } from '@/typings.ts';
|
||||||
import { useMetadataServerSettings } from '@/lib/metadata/metadataServerSettings.ts';
|
import { useMetadataServerSettings } from '@/lib/metadata/metadataServerSettings.ts';
|
||||||
import { ChapterType, MangaType, SourceType, TrackRecordType } from '@/lib/graphql/generated/graphql.ts';
|
import { ChapterType, MangaType, SourceType, TrackRecordType } from '@/lib/graphql/generated/graphql.ts';
|
||||||
import { MangaChapterCountInfo, MangaIdInfo } from '@/lib/data/Mangas.ts';
|
import { MangaChapterCountInfo, MangaIdInfo } from '@/lib/data/Mangas.ts';
|
||||||
import { enhancedCleanup } from '@/lib/data/Strings.ts';
|
import { enhancedCleanup } from '@/lib/data/Strings.ts';
|
||||||
import { CategoryMetadataInfo } from '@/lib/data/Categories.ts';
|
import { CategoryMetadataInfo } from '@/lib/data/Categories.ts';
|
||||||
import { getCategoryMetadata } from '@/lib/metadata/categoryMetadata.ts';
|
import { getCategoryMetadata } from '@/lib/metadata/categoryMetadata.ts';
|
||||||
|
import { NullAndUndefined } from '@/Base.types.ts';
|
||||||
|
|
||||||
const triStateFilter = (
|
const triStateFilter = (
|
||||||
triState: NullAndUndefined<boolean>,
|
triState: NullAndUndefined<boolean>,
|
||||||
|
|||||||
@@ -28,13 +28,17 @@ import {
|
|||||||
MangaUnreadInfo,
|
MangaUnreadInfo,
|
||||||
} from '@/lib/data/Mangas.ts';
|
} from '@/lib/data/Mangas.ts';
|
||||||
import { SelectableCollectionReturnType } from '@/components/collection/useSelectableCollection.ts';
|
import { SelectableCollectionReturnType } from '@/components/collection/useSelectableCollection.ts';
|
||||||
import { MenuItem } from '@/components/menu/MenuItem.tsx';
|
import { MenuItem } from '@/modules/core/components/menu/MenuItem.tsx';
|
||||||
import { createGetMenuItemTitle, createIsMenuItemDisabled, createShouldShowMenuItem } from '@/components/menu/util.ts';
|
import {
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
createGetMenuItemTitle,
|
||||||
|
createIsMenuItemDisabled,
|
||||||
|
createShouldShowMenuItem,
|
||||||
|
} from '@/modules/core/components/menu/Menu.utils.ts';
|
||||||
|
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
||||||
import { TrackManga } from '@/components/tracker/TrackManga.tsx';
|
import { TrackManga } from '@/components/tracker/TrackManga.tsx';
|
||||||
import { useCategorySelect } from '@/components/navbar/action/useCategorySelect.tsx';
|
import { useCategorySelect } from '@/components/navbar/action/useCategorySelect.tsx';
|
||||||
import { ChaptersDownloadActionMenuItems } from '@/components/chapter/ChaptersDownloadActionMenuItems.tsx';
|
import { ChaptersDownloadActionMenuItems } from '@/components/chapter/ChaptersDownloadActionMenuItems.tsx';
|
||||||
import { NestedMenuItem } from '@/components/menu/NestedMenuItem.tsx';
|
import { NestedMenuItem } from '@/modules/core/components/menu/NestedMenuItem.tsx';
|
||||||
import { MangaChapterStatFieldsFragment, MangaType } from '@/lib/graphql/generated/graphql.ts';
|
import { MangaChapterStatFieldsFragment, MangaType } from '@/lib/graphql/generated/graphql.ts';
|
||||||
|
|
||||||
const ACTION_DISABLES_SELECTION_MODE: MangaAction[] = ['remove_from_library'] as const;
|
const ACTION_DISABLES_SELECTION_MODE: MangaAction[] = ['remove_from_library'] as const;
|
||||||
|
|||||||
@@ -26,19 +26,19 @@ import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
|
|||||||
import OpenInFullIcon from '@mui/icons-material/OpenInFull';
|
import OpenInFullIcon from '@mui/icons-material/OpenInFull';
|
||||||
import Modal from '@mui/material/Modal';
|
import Modal from '@mui/material/Modal';
|
||||||
import { bindPopover, bindTrigger, usePopupState } from 'material-ui-popup-state/hooks';
|
import { bindPopover, bindTrigger, usePopupState } from 'material-ui-popup-state/hooks';
|
||||||
import { makeToast } from '@/components/util/Toast';
|
import { makeToast } from '@/lib/ui/Toast.ts';
|
||||||
import { Mangas, MangaThumbnailInfo, MangaTrackRecordInfo, statusToTranslationKey } from '@/lib/data/Mangas.ts';
|
import { Mangas, MangaThumbnailInfo, MangaTrackRecordInfo, statusToTranslationKey } from '@/lib/data/Mangas.ts';
|
||||||
import { SpinnerImage } from '@/components/util/SpinnerImage.tsx';
|
import { SpinnerImage } from '@/modules/core/components/SpinnerImage.tsx';
|
||||||
import { CustomIconButton } from '@/components/atoms/CustomIconButton';
|
import { CustomIconButton } from '@/modules/core/components/buttons/CustomIconButton.tsx';
|
||||||
import { TrackMangaButton } from '@/components/manga/TrackMangaButton.tsx';
|
import { TrackMangaButton } from '@/components/manga/TrackMangaButton.tsx';
|
||||||
import { useManageMangaLibraryState } from '@/components/manga/useManageMangaLibraryState.tsx';
|
import { useManageMangaLibraryState } from '@/components/manga/useManageMangaLibraryState.tsx';
|
||||||
import { Metadata as BaseMetadata } from '@/components/atoms/Metadata.tsx';
|
import { Metadata as BaseMetadata } from '@/modules/core/components/Metadata.tsx';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
||||||
import { MangaType, SourceType } from '@/lib/graphql/generated/graphql.ts';
|
import { MangaType, SourceType } from '@/lib/graphql/generated/graphql.ts';
|
||||||
import { useLocalStorage } from '@/util/useStorage.tsx';
|
import { useLocalStorage } from '@/modules/core/hooks/useStorage.tsx';
|
||||||
import { useResizeObserver } from '@/util/useResizeObserver.tsx';
|
import { useResizeObserver } from '@/modules/core/hooks/useResizeObserver.tsx';
|
||||||
import { useMetadataServerSettings } from '@/lib/metadata/metadataServerSettings.ts';
|
import { useMetadataServerSettings } from '@/lib/metadata/metadataServerSettings.ts';
|
||||||
import { shouldForwardProp } from '@/lib/ui/ShouldForwardProp.ts';
|
import { shouldForwardProp } from '@/modules/core/utils/ShouldForwardProp.ts';
|
||||||
|
|
||||||
const DetailsWrapper = styled('div')(({ theme }) => ({
|
const DetailsWrapper = styled('div')(({ theme }) => ({
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
|
|||||||
@@ -15,12 +15,12 @@ import Stack from '@mui/material/Stack';
|
|||||||
import Tooltip from '@mui/material/Tooltip';
|
import Tooltip from '@mui/material/Tooltip';
|
||||||
import { styled } from '@mui/material/styles';
|
import { styled } from '@mui/material/styles';
|
||||||
import { useRef } from 'react';
|
import { useRef } from 'react';
|
||||||
import { SpinnerImage } from '@/components/util/SpinnerImage.tsx';
|
import { SpinnerImage } from '@/modules/core/components/SpinnerImage.tsx';
|
||||||
import { MangaOptionButton } from '@/components/manga/MangaOptionButton.tsx';
|
import { MangaOptionButton } from '@/components/manga/MangaOptionButton.tsx';
|
||||||
import { GridLayout } from '@/components/context/LibraryOptionsContext.tsx';
|
import { GridLayout } from '@/components/context/LibraryOptionsContext.tsx';
|
||||||
import { Mangas } from '@/lib/data/Mangas.ts';
|
import { Mangas } from '@/lib/data/Mangas.ts';
|
||||||
import { SpecificMangaCardProps } from '@/components/manga/MangaCard.types.tsx';
|
import { SpecificMangaCardProps } from '@/components/manga/MangaCard.types.tsx';
|
||||||
import { TypographyMaxLines } from '@/components/atoms/TypographyMaxLines';
|
import { TypographyMaxLines } from '@/modules/core/components/TypographyMaxLines.tsx';
|
||||||
|
|
||||||
const BottomGradient = styled('div')({
|
const BottomGradient = styled('div')({
|
||||||
position: 'absolute',
|
position: 'absolute',
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ import Stack from '@mui/material/Stack';
|
|||||||
import Tooltip from '@mui/material/Tooltip';
|
import Tooltip from '@mui/material/Tooltip';
|
||||||
import { Link as RouterLink } from 'react-router-dom';
|
import { Link as RouterLink } from 'react-router-dom';
|
||||||
import { useRef } from 'react';
|
import { useRef } from 'react';
|
||||||
import { SpinnerImage } from '@/components/util/SpinnerImage.tsx';
|
import { SpinnerImage } from '@/modules/core/components/SpinnerImage.tsx';
|
||||||
import { TypographyMaxLines } from '@/components/atoms/TypographyMaxLines.tsx';
|
import { TypographyMaxLines } from '@/modules/core/components/TypographyMaxLines.tsx';
|
||||||
import { SpecificMangaCardProps } from '@/components/manga/MangaCard.types.tsx';
|
import { SpecificMangaCardProps } from '@/components/manga/MangaCard.types.tsx';
|
||||||
import { Mangas } from '@/lib/data/Mangas.ts';
|
import { Mangas } from '@/lib/data/Mangas.ts';
|
||||||
import { MangaOptionButton } from '@/components/manga/MangaOptionButton.tsx';
|
import { MangaOptionButton } from '@/components/manga/MangaOptionButton.tsx';
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import PlayArrow from '@mui/icons-material/PlayArrow';
|
import PlayArrow from '@mui/icons-material/PlayArrow';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { StyledFab } from '@/components/util/StyledFab';
|
import { StyledFab } from '@/modules/core/components/buttons/StyledFab.tsx';
|
||||||
|
|
||||||
interface ResumeFABProps {
|
interface ResumeFABProps {
|
||||||
chapterIndex: number;
|
chapterIndex: number;
|
||||||
|
|||||||
@@ -12,11 +12,11 @@ import { useTranslation } from 'react-i18next';
|
|||||||
import PopupState, { bindDialog, bindTrigger } from 'material-ui-popup-state';
|
import PopupState, { bindDialog, bindTrigger } from 'material-ui-popup-state';
|
||||||
import Dialog from '@mui/material/Dialog';
|
import Dialog from '@mui/material/Dialog';
|
||||||
import CheckIcon from '@mui/icons-material/Check';
|
import CheckIcon from '@mui/icons-material/Check';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/requests/RequestManager.ts';
|
||||||
import { makeToast } from '@/components/util/Toast.tsx';
|
import { makeToast } from '@/lib/ui/Toast.ts';
|
||||||
import { TrackManga } from '@/components/tracker/TrackManga.tsx';
|
import { TrackManga } from '@/components/tracker/TrackManga.tsx';
|
||||||
import { Trackers } from '@/lib/data/Trackers.ts';
|
import { Trackers } from '@/lib/data/Trackers.ts';
|
||||||
import { CustomIconButton } from '@/components/atoms/CustomIconButton.tsx';
|
import { CustomIconButton } from '@/modules/core/components/buttons/CustomIconButton.tsx';
|
||||||
import { GetTrackersSettingsQuery, MangaType } from '@/lib/graphql/generated/graphql.ts';
|
import { GetTrackersSettingsQuery, MangaType } from '@/lib/graphql/generated/graphql.ts';
|
||||||
import { GET_TRACKERS_SETTINGS } from '@/lib/graphql/queries/TrackerQuery.ts';
|
import { GET_TRACKERS_SETTINGS } from '@/lib/graphql/queries/TrackerQuery.ts';
|
||||||
import { MangaTrackRecordInfo } from '@/lib/data/Mangas.ts';
|
import { MangaTrackRecordInfo } from '@/lib/data/Mangas.ts';
|
||||||
|
|||||||
@@ -11,11 +11,11 @@ import { useTranslation } from 'react-i18next';
|
|||||||
import { useNavigate } from 'react-router-dom';
|
import { useNavigate } from 'react-router-dom';
|
||||||
import gql from 'graphql-tag';
|
import gql from 'graphql-tag';
|
||||||
import { useCategorySelect } from '@/components/navbar/action/useCategorySelect.tsx';
|
import { useCategorySelect } from '@/components/navbar/action/useCategorySelect.tsx';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/requests/RequestManager.ts';
|
||||||
import { makeToast } from '@/components/util/Toast.tsx';
|
import { makeToast } from '@/lib/ui/Toast.ts';
|
||||||
import { getMetadataServerSettings } from '@/lib/metadata/metadataServerSettings.ts';
|
import { getMetadataServerSettings } from '@/lib/metadata/metadataServerSettings.ts';
|
||||||
import { Categories } from '@/lib/data/Categories.ts';
|
import { Categories } from '@/lib/data/Categories.ts';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
||||||
import { Mangas } from '@/lib/data/Mangas.ts';
|
import { Mangas } from '@/lib/data/Mangas.ts';
|
||||||
import { awaitConfirmation } from '@/lib/ui/AwaitableDialog.tsx';
|
import { awaitConfirmation } from '@/lib/ui/AwaitableDialog.tsx';
|
||||||
import { GetCategoriesBaseQuery, GetCategoriesBaseQueryVariables, MangaType } from '@/lib/graphql/generated/graphql.ts';
|
import { GetCategoriesBaseQuery, GetCategoriesBaseQueryVariables, MangaType } from '@/lib/graphql/generated/graphql.ts';
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import { useCallback, useState } from 'react';
|
import { useCallback, useState } from 'react';
|
||||||
import { ApolloError } from '@apollo/client';
|
import { ApolloError } from '@apollo/client';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/requests/RequestManager.ts';
|
||||||
import { baseCleanup } from '@/lib/data/Strings.ts';
|
import { baseCleanup } from '@/lib/data/Strings.ts';
|
||||||
|
|
||||||
export const useRefreshManga = (mangaId: string) => {
|
export const useRefreshManga = (mangaId: string) => {
|
||||||
|
|||||||
@@ -28,11 +28,11 @@ import Stack from '@mui/material/Stack';
|
|||||||
import { useTheme } from '@mui/material/styles';
|
import { useTheme } from '@mui/material/styles';
|
||||||
import { NavbarItem } from '@/typings';
|
import { NavbarItem } from '@/typings';
|
||||||
import { NavBarContext } from '@/components/context/NavbarContext';
|
import { NavBarContext } from '@/components/context/NavbarContext';
|
||||||
import { useBackButton } from '@/util/useBackButton.ts';
|
import { useBackButton } from '@/modules/core/hooks/useBackButton.ts';
|
||||||
import { useGetOptionForDirection } from '@/theme.tsx';
|
import { useGetOptionForDirection } from '@/theme.tsx';
|
||||||
import { MediaQuery } from '@/lib/ui/MediaQuery.tsx';
|
import { MediaQuery } from '@/lib/ui/MediaQuery.tsx';
|
||||||
import { DesktopSideBar } from '@/components/navbar/navigation/DesktopSideBar.tsx';
|
import { DesktopSideBar } from '@/components/navbar/navigation/DesktopSideBar.tsx';
|
||||||
import { useResizeObserver } from '@/util/useResizeObserver.tsx';
|
import { useResizeObserver } from '@/modules/core/hooks/useResizeObserver.tsx';
|
||||||
import { MobileBottomBar } from '@/components/navbar/navigation/MobileBottomBar.tsx';
|
import { MobileBottomBar } from '@/components/navbar/navigation/MobileBottomBar.tsx';
|
||||||
|
|
||||||
const navbarItems: Array<NavbarItem> = [
|
const navbarItems: Array<NavbarItem> = [
|
||||||
|
|||||||
@@ -9,8 +9,8 @@
|
|||||||
import React, { useCallback, useMemo, useState } from 'react';
|
import React, { useCallback, useMemo, useState } from 'react';
|
||||||
import { INavbarOverride } from '@/typings';
|
import { INavbarOverride } from '@/typings';
|
||||||
import { NavBarContext } from '@/components/context/NavbarContext';
|
import { NavBarContext } from '@/components/context/NavbarContext';
|
||||||
import { useHistory } from '@/util/useHistory.ts';
|
import { useHistory } from '@/modules/core/hooks/useHistory.ts';
|
||||||
import { useLocalStorage } from '@/util/useStorage.tsx';
|
import { useLocalStorage } from '@/modules/core/hooks/useStorage.tsx';
|
||||||
|
|
||||||
interface IProps {
|
interface IProps {
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
|
|||||||
@@ -27,16 +27,17 @@ import ListItem from '@mui/material/ListItem';
|
|||||||
import ListItemText from '@mui/material/ListItemText';
|
import ListItemText from '@mui/material/ListItemText';
|
||||||
import Collapse from '@mui/material/Collapse';
|
import Collapse from '@mui/material/Collapse';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { AllowedMetadataValueTypes, ChapterOffset, IReaderSettings } from '@/typings';
|
import { AllowedMetadataValueTypes, IReaderSettings } from '@/typings';
|
||||||
import { ReaderSettingsOptions } from '@/components/reader/ReaderSettingsOptions';
|
import { ReaderSettingsOptions } from '@/components/reader/ReaderSettingsOptions';
|
||||||
import { useBackButton } from '@/util/useBackButton.ts';
|
import { useBackButton } from '@/modules/core/hooks/useBackButton.ts';
|
||||||
import { Select } from '@/components/atoms/Select.tsx';
|
import { Select } from '@/modules/core/components/inputs/Select.tsx';
|
||||||
import { useGetOptionForDirection } from '@/theme.tsx';
|
import { useGetOptionForDirection } from '@/theme.tsx';
|
||||||
import { ChapterType } from '@/lib/graphql/generated/graphql.ts';
|
import { ChapterType } from '@/lib/graphql/generated/graphql.ts';
|
||||||
import { MangaChapterCountInfo, MangaIdInfo } from '@/lib/data/Mangas.ts';
|
import { MangaChapterCountInfo, MangaIdInfo } from '@/lib/data/Mangas.ts';
|
||||||
import { useNavBarContext } from '@/components/context/NavbarContext.tsx';
|
import { useNavBarContext } from '@/components/context/NavbarContext.tsx';
|
||||||
import { useResizeObserver } from '@/util/useResizeObserver.tsx';
|
import { useResizeObserver } from '@/modules/core/hooks/useResizeObserver.tsx';
|
||||||
import { CustomIconButton } from '@/components/atoms/CustomIconButton.tsx';
|
import { CustomIconButton } from '@/modules/core/components/buttons/CustomIconButton.tsx';
|
||||||
|
import { DirectionOffset } from '@/Base.types.ts';
|
||||||
|
|
||||||
const Root = styled('div')({
|
const Root = styled('div')({
|
||||||
zIndex: 10,
|
zIndex: 10,
|
||||||
@@ -99,7 +100,7 @@ interface IProps {
|
|||||||
chapters: Pick<ChapterType, 'id' | 'sourceOrder' | 'name' | 'chapterNumber' | 'scanlator'>[];
|
chapters: Pick<ChapterType, 'id' | 'sourceOrder' | 'name' | 'chapterNumber' | 'scanlator'>[];
|
||||||
curPage: number;
|
curPage: number;
|
||||||
scrollToPage: (page: number) => void;
|
scrollToPage: (page: number) => void;
|
||||||
openNextChapter: (offset: ChapterOffset) => void;
|
openNextChapter: (offset: DirectionOffset) => void;
|
||||||
retrievingNextChapter: boolean;
|
retrievingNextChapter: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -319,7 +320,7 @@ export function ReaderNavBar(props: IProps) {
|
|||||||
<IconButton
|
<IconButton
|
||||||
sx={{ gridArea: 'pre' }}
|
sx={{ gridArea: 'pre' }}
|
||||||
disabled={disableChapterNavButtons || chapter.sourceOrder <= 1}
|
disabled={disableChapterNavButtons || chapter.sourceOrder <= 1}
|
||||||
onClick={() => openNextChapter(ChapterOffset.PREV)}
|
onClick={() => openNextChapter(DirectionOffset.PREVIOUS)}
|
||||||
>
|
>
|
||||||
{getOptionForDirection(<KeyboardArrowLeftIcon />, <KeyboardArrowRightIcon />)}
|
{getOptionForDirection(<KeyboardArrowLeftIcon />, <KeyboardArrowRightIcon />)}
|
||||||
</IconButton>
|
</IconButton>
|
||||||
@@ -358,7 +359,7 @@ export function ReaderNavBar(props: IProps) {
|
|||||||
chapter.sourceOrder < 1 ||
|
chapter.sourceOrder < 1 ||
|
||||||
chapter.sourceOrder >= manga.chapters.totalCount
|
chapter.sourceOrder >= manga.chapters.totalCount
|
||||||
}
|
}
|
||||||
onClick={() => openNextChapter(ChapterOffset.NEXT)}
|
onClick={() => openNextChapter(DirectionOffset.NEXT)}
|
||||||
>
|
>
|
||||||
{getOptionForDirection(<KeyboardArrowRightIcon />, <KeyboardArrowLeftIcon />)}
|
{getOptionForDirection(<KeyboardArrowRightIcon />, <KeyboardArrowLeftIcon />)}
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
|||||||
@@ -16,14 +16,14 @@ import FormGroup from '@mui/material/FormGroup';
|
|||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import Stack from '@mui/material/Stack';
|
import Stack from '@mui/material/Stack';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/requests/RequestManager.ts';
|
||||||
import { Mangas } from '@/lib/data/Mangas.ts';
|
import { Mangas } from '@/lib/data/Mangas.ts';
|
||||||
import { useSelectableCollection } from '@/components/collection/useSelectableCollection.ts';
|
import { useSelectableCollection } from '@/components/collection/useSelectableCollection.ts';
|
||||||
import { ThreeStateCheckboxInput } from '@/components/atoms/ThreeStateCheckboxInput.tsx';
|
import { ThreeStateCheckboxInput } from '@/modules/core/components/inputs/ThreeStateCheckboxInput.tsx';
|
||||||
import { Categories } from '@/lib/data/Categories.ts';
|
import { Categories } from '@/lib/data/Categories.ts';
|
||||||
import { CheckboxInput } from '@/components/atoms/CheckboxInput.tsx';
|
import { CheckboxInput } from '@/modules/core/components/inputs/CheckboxInput.tsx';
|
||||||
import { makeToast } from '@/components/util/Toast.tsx';
|
import { makeToast } from '@/lib/ui/Toast.ts';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
||||||
import { updateMetadataServerSettings } from '@/lib/metadata/metadataServerSettings.ts';
|
import { updateMetadataServerSettings } from '@/lib/metadata/metadataServerSettings.ts';
|
||||||
import {
|
import {
|
||||||
GetCategoriesBaseQuery,
|
GetCategoriesBaseQuery,
|
||||||
|
|||||||
@@ -22,10 +22,10 @@ import Box from '@mui/material/Box';
|
|||||||
import ListItem from '@mui/material/ListItem';
|
import ListItem from '@mui/material/ListItem';
|
||||||
import Tooltip from '@mui/material/Tooltip';
|
import Tooltip from '@mui/material/Tooltip';
|
||||||
import { NavbarItem } from '@/typings.ts';
|
import { NavbarItem } from '@/typings.ts';
|
||||||
import { ListItemLink } from '@/components/util/ListItemLink.tsx';
|
import { ListItemLink } from '@/modules/core/components/ListItemLink.tsx';
|
||||||
import { useGetOptionForDirection } from '@/theme.tsx';
|
import { useGetOptionForDirection } from '@/theme.tsx';
|
||||||
import { useNavBarContext } from '@/components/context/NavbarContext.tsx';
|
import { useNavBarContext } from '@/components/context/NavbarContext.tsx';
|
||||||
import { useResizeObserver } from '@/util/useResizeObserver.tsx';
|
import { useResizeObserver } from '@/modules/core/hooks/useResizeObserver.tsx';
|
||||||
|
|
||||||
const DrawerHeader = styled('div')(({ theme }) => ({
|
const DrawerHeader = styled('div')(({ theme }) => ({
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import Paper from '@mui/material/Paper';
|
|||||||
import { useCallback, useLayoutEffect, useRef, useState } from 'react';
|
import { useCallback, useLayoutEffect, useRef, useState } from 'react';
|
||||||
import { useLocation, useNavigate } from 'react-router-dom';
|
import { useLocation, useNavigate } from 'react-router-dom';
|
||||||
import { NavbarItem } from '@/typings.ts';
|
import { NavbarItem } from '@/typings.ts';
|
||||||
import { useResizeObserver } from '@/util/useResizeObserver.tsx';
|
import { useResizeObserver } from '@/modules/core/hooks/useResizeObserver.tsx';
|
||||||
import { useNavBarContext } from '@/components/context/NavbarContext.tsx';
|
import { useNavBarContext } from '@/components/context/NavbarContext.tsx';
|
||||||
|
|
||||||
export const MobileBottomBar = ({ navBarItems }: { navBarItems: NavbarItem[] }) => {
|
export const MobileBottomBar = ({ navBarItems }: { navBarItems: NavbarItem[] }) => {
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
import { CSSProperties, forwardRef } from 'react';
|
import { CSSProperties, forwardRef } from 'react';
|
||||||
import Box from '@mui/material/Box';
|
import Box from '@mui/material/Box';
|
||||||
import { IReaderSettings } from '@/typings';
|
import { IReaderSettings } from '@/typings';
|
||||||
import { SpinnerImage } from '@/components/util/SpinnerImage';
|
import { SpinnerImage } from '@/modules/core/components/SpinnerImage.tsx';
|
||||||
import { imageStyle } from '@/components/reader/Page';
|
import { imageStyle } from '@/components/reader/Page';
|
||||||
import { getOptionForDirection } from '@/theme.tsx';
|
import { getOptionForDirection } from '@/theme.tsx';
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import Box from '@mui/material/Box';
|
|||||||
import { useTheme } from '@mui/material/styles';
|
import { useTheme } from '@mui/material/styles';
|
||||||
import useMediaQuery from '@mui/material/useMediaQuery';
|
import useMediaQuery from '@mui/material/useMediaQuery';
|
||||||
import { IReaderSettings, ReaderType } from '@/typings';
|
import { IReaderSettings, ReaderType } from '@/typings';
|
||||||
import { SpinnerImage } from '@/components/util/SpinnerImage';
|
import { SpinnerImage } from '@/modules/core/components/SpinnerImage.tsx';
|
||||||
import { MediaQuery } from '@/lib/ui/MediaQuery.tsx';
|
import { MediaQuery } from '@/lib/ui/MediaQuery.tsx';
|
||||||
|
|
||||||
export const isHorizontalReaderType = (readerType: ReaderType): boolean =>
|
export const isHorizontalReaderType = (readerType: ReaderType): boolean =>
|
||||||
|
|||||||
@@ -13,9 +13,9 @@ import Switch from '@mui/material/Switch';
|
|||||||
import MenuItem from '@mui/material/MenuItem';
|
import MenuItem from '@mui/material/MenuItem';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { AllowedMetadataValueTypes, IReaderSettings } from '@/typings';
|
import { AllowedMetadataValueTypes, IReaderSettings } from '@/typings';
|
||||||
import { NumberSetting } from '@/components/settings/NumberSetting.tsx';
|
import { NumberSetting } from '@/modules/core/components/settings/NumberSetting.tsx';
|
||||||
import { isHorizontalReaderType } from '@/components/reader/Page.tsx';
|
import { isHorizontalReaderType } from '@/components/reader/Page.tsx';
|
||||||
import { Select } from '@/components/atoms/Select.tsx';
|
import { Select } from '@/modules/core/components/inputs/Select.tsx';
|
||||||
|
|
||||||
interface IProps extends IReaderSettings {
|
interface IProps extends IReaderSettings {
|
||||||
setSettingValue: (key: keyof IReaderSettings, value: AllowedMetadataValueTypes, persist?: boolean) => void;
|
setSettingValue: (key: keyof IReaderSettings, value: AllowedMetadataValueTypes, persist?: boolean) => void;
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import { MouseEvent as ReactMouseEvent, WheelEvent as ReactWheelEvent, useCallba
|
|||||||
import Box from '@mui/material/Box';
|
import Box from '@mui/material/Box';
|
||||||
import { IReaderProps } from '@/typings';
|
import { IReaderProps } from '@/typings';
|
||||||
import { Page } from '@/components/reader/Page';
|
import { Page } from '@/components/reader/Page';
|
||||||
import { useResizeObserver } from '@/util/useResizeObserver.tsx';
|
import { useResizeObserver } from '@/modules/core/hooks/useResizeObserver.tsx';
|
||||||
|
|
||||||
const findCurrentPageIndex = (wrapper: HTMLDivElement): number => {
|
const findCurrentPageIndex = (wrapper: HTMLDivElement): number => {
|
||||||
for (let i = 0; i < wrapper.children.length; i++) {
|
for (let i = 0; i < wrapper.children.length; i++) {
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import { useCallback, useEffect, useRef } from 'react';
|
|||||||
import Box from '@mui/material/Box';
|
import Box from '@mui/material/Box';
|
||||||
import { IReaderProps } from '@/typings';
|
import { IReaderProps } from '@/typings';
|
||||||
import { Page } from '@/components/reader/Page';
|
import { Page } from '@/components/reader/Page';
|
||||||
import { useResizeObserver } from '@/util/useResizeObserver.tsx';
|
import { useResizeObserver } from '@/modules/core/hooks/useResizeObserver.tsx';
|
||||||
|
|
||||||
const findCurrentPageIndex = (wrapper: HTMLDivElement): number => {
|
const findCurrentPageIndex = (wrapper: HTMLDivElement): number => {
|
||||||
for (let i = 0; i < wrapper.children.length; i++) {
|
for (let i = 0; i < wrapper.children.length; i++) {
|
||||||
|
|||||||
@@ -17,11 +17,11 @@ import DialogContentText from '@mui/material/DialogContentText';
|
|||||||
import DialogActions from '@mui/material/DialogActions';
|
import DialogActions from '@mui/material/DialogActions';
|
||||||
import Button from '@mui/material/Button';
|
import Button from '@mui/material/Button';
|
||||||
import { t as translate } from 'i18next';
|
import { t as translate } from 'i18next';
|
||||||
import { ThreeStateCheckboxInput } from '@/components/atoms/ThreeStateCheckboxInput.tsx';
|
import { ThreeStateCheckboxInput } from '@/modules/core/components/inputs/ThreeStateCheckboxInput.tsx';
|
||||||
import { makeToast } from '@/components/util/Toast.tsx';
|
import { makeToast } from '@/lib/ui/Toast.ts';
|
||||||
import { IncludeOrExclude } from '@/lib/graphql/generated/graphql.ts';
|
import { IncludeOrExclude } from '@/lib/graphql/generated/graphql.ts';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/requests/RequestManager.ts';
|
||||||
import { CheckboxContainer } from '@/components/settings/globalUpdate/CheckboxContainer.ts';
|
import { CheckboxContainer } from '@/modules/core/components/inputs/CheckboxContainer.ts';
|
||||||
import {
|
import {
|
||||||
CategoryDownloadInclusionInfo,
|
CategoryDownloadInclusionInfo,
|
||||||
CategoryIdInfo,
|
CategoryIdInfo,
|
||||||
|
|||||||
@@ -14,14 +14,14 @@ import { useTranslation } from 'react-i18next';
|
|||||||
import { useContext, useLayoutEffect } from 'react';
|
import { useContext, useLayoutEffect } from 'react';
|
||||||
import { updateMetadataServerSettings, useMetadataServerSettings } from '@/lib/metadata/metadataServerSettings.ts';
|
import { updateMetadataServerSettings, useMetadataServerSettings } from '@/lib/metadata/metadataServerSettings.ts';
|
||||||
import { MetadataServerSettingKeys, MetadataServerSettings } from '@/typings.ts';
|
import { MetadataServerSettingKeys, MetadataServerSettings } from '@/typings.ts';
|
||||||
import { makeToast } from '@/components/util/Toast.tsx';
|
import { makeToast } from '@/lib/ui/Toast.ts';
|
||||||
import { MutableListSetting } from '@/components/settings/MutableListSetting.tsx';
|
import { MutableListSetting } from '@/modules/core/components/settings/MutableListSetting.tsx';
|
||||||
import { NavBarContext } from '@/components/context/NavbarContext.tsx';
|
import { NavBarContext } from '@/components/context/NavbarContext.tsx';
|
||||||
import { ActiveDevice, DEFAULT_DEVICE } from '@/util/device.ts';
|
import { ActiveDevice, DEFAULT_DEVICE } from '@/util/device.ts';
|
||||||
import { Select } from '@/components/atoms/Select.tsx';
|
import { Select } from '@/modules/core/components/inputs/Select.tsx';
|
||||||
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
import { LoadingPlaceholder } from '@/modules/core/components/placeholder/LoadingPlaceholder.tsx';
|
||||||
import { EmptyViewAbsoluteCentered } from '@/components/util/EmptyViewAbsoluteCentered.tsx';
|
import { EmptyViewAbsoluteCentered } from '@/modules/core/components/placeholder/EmptyViewAbsoluteCentered.tsx';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
||||||
|
|
||||||
export const DeviceSetting = () => {
|
export const DeviceSetting = () => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import {
|
|||||||
SelectSetting,
|
SelectSetting,
|
||||||
SelectSettingValue,
|
SelectSettingValue,
|
||||||
SelectSettingValueDisplayInfo,
|
SelectSettingValueDisplayInfo,
|
||||||
} from '@/components/settings/SelectSetting.tsx';
|
} from '@/modules/core/components/settings/SelectSetting.tsx';
|
||||||
|
|
||||||
const CHAPTERS_TO_DELETE = [0, 1, 2, 3, 4, 5] as const;
|
const CHAPTERS_TO_DELETE = [0, 1, 2, 3, 4, 5] as const;
|
||||||
const CHAPTERS_TO_DELETE_TO_TRANSLATION_KEY: {
|
const CHAPTERS_TO_DELETE_TO_TRANSLATION_KEY: {
|
||||||
|
|||||||
@@ -11,11 +11,11 @@ import List from '@mui/material/List';
|
|||||||
import ListItem from '@mui/material/ListItem';
|
import ListItem from '@mui/material/ListItem';
|
||||||
import ListItemText from '@mui/material/ListItemText';
|
import ListItemText from '@mui/material/ListItemText';
|
||||||
import Switch from '@mui/material/Switch';
|
import Switch from '@mui/material/Switch';
|
||||||
import { NumberSetting } from '@/components/settings/NumberSetting.tsx';
|
import { NumberSetting } from '@/modules/core/components/settings/NumberSetting.tsx';
|
||||||
import { getPersistedServerSetting, usePersistedValue } from '@/util/usePersistedValue.tsx';
|
import { getPersistedServerSetting, usePersistedValue } from '@/modules/core/hooks/usePersistedValue.tsx';
|
||||||
import { updateMetadataServerSettings } from '@/lib/metadata/metadataServerSettings.ts';
|
import { updateMetadataServerSettings } from '@/lib/metadata/metadataServerSettings.ts';
|
||||||
import { MetadataDownloadSettings, MetadataServerSettings } from '@/typings.ts';
|
import { MetadataDownloadSettings, MetadataServerSettings } from '@/typings.ts';
|
||||||
import { makeToast } from '@/components/util/Toast.tsx';
|
import { makeToast } from '@/lib/ui/Toast.ts';
|
||||||
|
|
||||||
const MIN_LIMIT = 2;
|
const MIN_LIMIT = 2;
|
||||||
const MAX_LIMIT = 10;
|
const MAX_LIMIT = 10;
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ import {
|
|||||||
} from '@/components/settings/CategoriesInclusionSetting.tsx';
|
} from '@/components/settings/CategoriesInclusionSetting.tsx';
|
||||||
import { GlobalUpdateSettingsEntries } from '@/components/settings/globalUpdate/GlobalUpdateSettingsEntries.tsx';
|
import { GlobalUpdateSettingsEntries } from '@/components/settings/globalUpdate/GlobalUpdateSettingsEntries.tsx';
|
||||||
import { GlobalUpdateSettingsInterval } from '@/components/settings/globalUpdate/GlobalUpdateSettingsInterval.tsx';
|
import { GlobalUpdateSettingsInterval } from '@/components/settings/globalUpdate/GlobalUpdateSettingsInterval.tsx';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/requests/RequestManager.ts';
|
||||||
import { makeToast } from '@/components/util/Toast.tsx';
|
import { makeToast } from '@/lib/ui/Toast.ts';
|
||||||
import { ServerSettings } from '@/typings.ts';
|
import { ServerSettings } from '@/typings.ts';
|
||||||
|
|
||||||
type LibrarySettingsType = Pick<ServerSettings, 'updateMangas'>;
|
type LibrarySettingsType = Pick<ServerSettings, 'updateMangas'>;
|
||||||
|
|||||||
@@ -16,11 +16,12 @@ import Dialog from '@mui/material/Dialog';
|
|||||||
import DialogActions from '@mui/material/DialogActions';
|
import DialogActions from '@mui/material/DialogActions';
|
||||||
import DialogContent from '@mui/material/DialogContent';
|
import DialogContent from '@mui/material/DialogContent';
|
||||||
import DialogTitle from '@mui/material/DialogTitle';
|
import DialogTitle from '@mui/material/DialogTitle';
|
||||||
import { ServerSettings, TranslationKey } from '@/typings.ts';
|
import { ServerSettings } from '@/typings.ts';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/requests/RequestManager.ts';
|
||||||
import { makeToast } from '@/components/util/Toast.tsx';
|
import { makeToast } from '@/lib/ui/Toast.ts';
|
||||||
import { CheckboxContainer } from '@/components/settings/globalUpdate/CheckboxContainer.ts';
|
import { CheckboxContainer } from '@/modules/core/components/inputs/CheckboxContainer.ts';
|
||||||
import { CheckboxInput } from '@/components/atoms/CheckboxInput.tsx';
|
import { CheckboxInput } from '@/modules/core/components/inputs/CheckboxInput.tsx';
|
||||||
|
import { TranslationKey } from '@/Base.types.ts';
|
||||||
|
|
||||||
type GlobalUpdateSkipEntriesSettings = Pick<
|
type GlobalUpdateSkipEntriesSettings = Pick<
|
||||||
ServerSettings,
|
ServerSettings,
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ import ListItem from '@mui/material/ListItem';
|
|||||||
import ListItemText from '@mui/material/ListItemText';
|
import ListItemText from '@mui/material/ListItemText';
|
||||||
import Switch from '@mui/material/Switch';
|
import Switch from '@mui/material/Switch';
|
||||||
import { useCallback } from 'react';
|
import { useCallback } from 'react';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/requests/RequestManager.ts';
|
||||||
import { NumberSetting } from '@/components/settings/NumberSetting.tsx';
|
import { NumberSetting } from '@/modules/core/components/settings/NumberSetting.tsx';
|
||||||
import { getPersistedServerSetting, usePersistedValue } from '@/util/usePersistedValue.tsx';
|
import { getPersistedServerSetting, usePersistedValue } from '@/modules/core/hooks/usePersistedValue.tsx';
|
||||||
import { ServerSettings } from '@/typings.ts';
|
import { ServerSettings } from '@/typings.ts';
|
||||||
|
|
||||||
const DEFAULT_INTERVAL_HOURS = 12;
|
const DEFAULT_INTERVAL_HOURS = 12;
|
||||||
|
|||||||
@@ -12,11 +12,11 @@ import ListItem from '@mui/material/ListItem';
|
|||||||
import ListItemText from '@mui/material/ListItemText';
|
import ListItemText from '@mui/material/ListItemText';
|
||||||
import Switch from '@mui/material/Switch';
|
import Switch from '@mui/material/Switch';
|
||||||
import { useCallback } from 'react';
|
import { useCallback } from 'react';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/requests/RequestManager.ts';
|
||||||
import { NumberSetting } from '@/components/settings/NumberSetting.tsx';
|
import { NumberSetting } from '@/modules/core/components/settings/NumberSetting.tsx';
|
||||||
import { getPersistedServerSetting, usePersistedValue } from '@/util/usePersistedValue.tsx';
|
import { getPersistedServerSetting, usePersistedValue } from '@/modules/core/hooks/usePersistedValue.tsx';
|
||||||
import { ServerSettings } from '@/typings.ts';
|
import { ServerSettings } from '@/typings.ts';
|
||||||
import { makeToast } from '@/components/util/Toast.tsx';
|
import { makeToast } from '@/lib/ui/Toast.ts';
|
||||||
|
|
||||||
const DEFAULT_VALUE = 23;
|
const DEFAULT_VALUE = 23;
|
||||||
const MIN_VALUE = 1;
|
const MIN_VALUE = 1;
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import { GridLayout } from '@/components/context/LibraryOptionsContext';
|
import { GridLayout } from '@/components/context/LibraryOptionsContext';
|
||||||
import { GridLayouts } from '@/components/source/GridLayouts.tsx';
|
import { GridLayouts } from '@/components/source/GridLayouts.tsx';
|
||||||
import { useLocalStorage } from '@/util/useStorage.tsx';
|
import { useLocalStorage } from '@/modules/core/hooks/useStorage.tsx';
|
||||||
|
|
||||||
export function SourceGridLayout() {
|
export function SourceGridLayout() {
|
||||||
const [sourceGridLayout, setSourceGridLayout] = useLocalStorage('source-grid-layout', GridLayout.Compact);
|
const [sourceGridLayout, setSourceGridLayout] = useLocalStorage('source-grid-layout', GridLayout.Compact);
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ import DialogContent from '@mui/material/DialogContent';
|
|||||||
import TextField from '@mui/material/TextField';
|
import TextField from '@mui/material/TextField';
|
||||||
import Tooltip from '@mui/material/Tooltip';
|
import Tooltip from '@mui/material/Tooltip';
|
||||||
import { ISourceMetadata, SourceFilters } from '@/typings';
|
import { ISourceMetadata, SourceFilters } from '@/typings';
|
||||||
import { OptionsPanel } from '@/components/molecules/OptionsPanel';
|
import { OptionsPanel } from '@/modules/core/components/OptionsPanel.tsx';
|
||||||
import { CheckBoxFilter } from '@/components/source/filters/CheckBoxFilter';
|
import { CheckBoxFilter } from '@/components/source/filters/CheckBoxFilter';
|
||||||
import { HeaderFilter } from '@/components/source/filters/HeaderFilter';
|
import { HeaderFilter } from '@/components/source/filters/HeaderFilter';
|
||||||
import { SelectFilter } from '@/components/source/filters/SelectFilter';
|
import { SelectFilter } from '@/components/source/filters/SelectFilter';
|
||||||
@@ -36,9 +36,9 @@ import { TriStateFilter } from '@/components/source/filters/TriStateFilter';
|
|||||||
// eslint-disable-next-line import/no-cycle
|
// eslint-disable-next-line import/no-cycle
|
||||||
import { GroupFilter } from '@/components/source/filters/GroupFilter';
|
import { GroupFilter } from '@/components/source/filters/GroupFilter';
|
||||||
import { SeparatorFilter } from '@/components/source/filters/SeparatorFilter';
|
import { SeparatorFilter } from '@/components/source/filters/SeparatorFilter';
|
||||||
import { StyledFab } from '@/components/util/StyledFab';
|
import { StyledFab } from '@/modules/core/components/buttons/StyledFab.tsx';
|
||||||
import { awaitConfirmation } from '@/lib/ui/AwaitableDialog.tsx';
|
import { awaitConfirmation } from '@/lib/ui/AwaitableDialog.tsx';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
||||||
|
|
||||||
interface IFilters {
|
interface IFilters {
|
||||||
sourceFilter: SourceFilters[];
|
sourceFilter: SourceFilters[];
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { CheckboxInput } from '@/components/atoms/CheckboxInput';
|
import { CheckboxInput } from '@/modules/core/components/inputs/CheckboxInput.tsx';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
state: boolean;
|
state: boolean;
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import ListItemText from '@mui/material/ListItemText';
|
|||||||
import Stack from '@mui/material/Stack';
|
import Stack from '@mui/material/Stack';
|
||||||
import Box from '@mui/material/Box';
|
import Box from '@mui/material/Box';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { SortRadioInput } from '@/components/atoms/SortRadioInput';
|
import { SortRadioInput } from '@/modules/core/components/inputs/SortRadioInput.tsx';
|
||||||
import { SortSelectionInput } from '@/lib/graphql/generated/graphql.ts';
|
import { SortSelectionInput } from '@/lib/graphql/generated/graphql.ts';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import Input from '@mui/material/Input';
|
|||||||
import InputAdornment from '@mui/material/InputAdornment';
|
import InputAdornment from '@mui/material/InputAdornment';
|
||||||
import InputLabel from '@mui/material/InputLabel';
|
import InputLabel from '@mui/material/InputLabel';
|
||||||
import React, { useEffect } from 'react';
|
import React, { useEffect } from 'react';
|
||||||
import { useDebounce } from '@/util/useDebounce.ts';
|
import { useDebounce } from '@/modules/core/hooks/useDebounce.ts';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
state: string;
|
state: string;
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { ThreeStateCheckboxInput } from '@/components/atoms/ThreeStateCheckboxInput';
|
import { ThreeStateCheckboxInput } from '@/modules/core/components/inputs/ThreeStateCheckboxInput.tsx';
|
||||||
import { TriState } from '@/lib/graphql/generated/graphql.ts';
|
import { TriState } from '@/lib/graphql/generated/graphql.ts';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
|
|||||||
@@ -21,9 +21,9 @@ import DialogContent from '@mui/material/DialogContent';
|
|||||||
import TextField from '@mui/material/TextField';
|
import TextField from '@mui/material/TextField';
|
||||||
import DialogActions from '@mui/material/DialogActions';
|
import DialogActions from '@mui/material/DialogActions';
|
||||||
import Button from '@mui/material/Button';
|
import Button from '@mui/material/Button';
|
||||||
import { PasswordTextField } from '@/components/atoms/PasswordTextField.tsx';
|
import { PasswordTextField } from '@/modules/core/components/inputs/PasswordTextField.tsx';
|
||||||
import { makeToast } from '@/components/util/Toast.tsx';
|
import { makeToast } from '@/lib/ui/Toast.ts';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/requests/RequestManager.ts';
|
||||||
import { Trackers, TTrackerSearch } from '@/lib/data/Trackers.ts';
|
import { Trackers, TTrackerSearch } from '@/lib/data/Trackers.ts';
|
||||||
|
|
||||||
export const SettingsTrackerCard = ({ tracker }: { tracker: TTrackerSearch }) => {
|
export const SettingsTrackerCard = ({ tracker }: { tracker: TTrackerSearch }) => {
|
||||||
|
|||||||
@@ -11,13 +11,13 @@ import Box from '@mui/material/Box';
|
|||||||
import { useEffect, useMemo, useState } from 'react';
|
import { useEffect, useMemo, useState } from 'react';
|
||||||
import DialogContent from '@mui/material/DialogContent';
|
import DialogContent from '@mui/material/DialogContent';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/requests/RequestManager.ts';
|
||||||
import { EmptyViewAbsoluteCentered } from '@/components/util/EmptyViewAbsoluteCentered.tsx';
|
import { EmptyViewAbsoluteCentered } from '@/modules/core/components/placeholder/EmptyViewAbsoluteCentered.tsx';
|
||||||
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
import { LoadingPlaceholder } from '@/modules/core/components/placeholder/LoadingPlaceholder.tsx';
|
||||||
import { Trackers } from '@/lib/data/Trackers.ts';
|
import { Trackers } from '@/lib/data/Trackers.ts';
|
||||||
import { TrackerCard, TrackerMode } from '@/components/tracker/TrackerCard.tsx';
|
import { TrackerCard, TrackerMode } from '@/components/tracker/TrackerCard.tsx';
|
||||||
import { makeToast } from '@/components/util/Toast.tsx';
|
import { makeToast } from '@/lib/ui/Toast.ts';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
||||||
import { GetMangaTrackRecordsQuery, GetTrackersBindQuery, MangaType } from '@/lib/graphql/generated/graphql.ts';
|
import { GetMangaTrackRecordsQuery, GetTrackersBindQuery, MangaType } from '@/lib/graphql/generated/graphql.ts';
|
||||||
import { GET_TRACKERS_BIND } from '@/lib/graphql/queries/TrackerQuery.ts';
|
import { GET_TRACKERS_BIND } from '@/lib/graphql/queries/TrackerQuery.ts';
|
||||||
import { MangaIdInfo } from '@/lib/data/Mangas.ts';
|
import { MangaIdInfo } from '@/lib/data/Mangas.ts';
|
||||||
|
|||||||
@@ -28,17 +28,17 @@ import Typography from '@mui/material/Typography';
|
|||||||
import MoreVertIcon from '@mui/icons-material/MoreVert';
|
import MoreVertIcon from '@mui/icons-material/MoreVert';
|
||||||
import PopupState, { bindDialog, bindMenu, bindTrigger } from 'material-ui-popup-state';
|
import PopupState, { bindDialog, bindMenu, bindTrigger } from 'material-ui-popup-state';
|
||||||
import { useMemo, useState } from 'react';
|
import { useMemo, useState } from 'react';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/requests/RequestManager.ts';
|
||||||
import { Trackers, TTrackerBind, TTrackRecordBind, UNSET_DATE } from '@/lib/data/Trackers.ts';
|
import { Trackers, TTrackerBind, TTrackRecordBind, UNSET_DATE } from '@/lib/data/Trackers.ts';
|
||||||
import { ListPreference } from '@/components/sourceConfiguration/ListPreference.tsx';
|
import { ListPreference } from '@/components/sourceConfiguration/ListPreference.tsx';
|
||||||
import { NumberSetting } from '@/components/settings/NumberSetting.tsx';
|
import { NumberSetting } from '@/modules/core/components/settings/NumberSetting.tsx';
|
||||||
import { DateSetting } from '@/components/settings/DateSetting.tsx';
|
import { DateSetting } from '@/modules/core/components/settings/DateSetting.tsx';
|
||||||
import { makeToast } from '@/components/util/Toast.tsx';
|
import { makeToast } from '@/lib/ui/Toast.ts';
|
||||||
import { Menu } from '@/components/menu/Menu';
|
import { Menu } from '@/modules/core/components/menu/Menu';
|
||||||
import { CARD_STYLING } from '@/components/tracker/constants.ts';
|
import { CARD_STYLING } from '@/components/tracker/constants.ts';
|
||||||
import { TypographyMaxLines } from '@/components/atoms/TypographyMaxLines.tsx';
|
import { TypographyMaxLines } from '@/modules/core/components/TypographyMaxLines.tsx';
|
||||||
import { SelectSetting, SelectSettingValue } from '@/components/settings/SelectSetting.tsx';
|
import { SelectSetting, SelectSettingValue } from '@/modules/core/components/settings/SelectSetting.tsx';
|
||||||
import { CheckboxInput } from '@/components/atoms/CheckboxInput';
|
import { CheckboxInput } from '@/modules/core/components/inputs/CheckboxInput.tsx';
|
||||||
import { TrackRecordType } from '@/lib/graphql/generated/graphql.ts';
|
import { TrackRecordType } from '@/lib/graphql/generated/graphql.ts';
|
||||||
|
|
||||||
const TrackerActiveLink = ({ children, url }: { children: React.ReactNode; url: string }) => (
|
const TrackerActiveLink = ({ children, url }: { children: React.ReactNode; url: string }) => (
|
||||||
|
|||||||
@@ -22,9 +22,9 @@ import { useLayoutEffect, useRef, useState } from 'react';
|
|||||||
import parseHtml from 'html-react-parser';
|
import parseHtml from 'html-react-parser';
|
||||||
import CheckCircleIcon from '@mui/icons-material/CheckCircle';
|
import CheckCircleIcon from '@mui/icons-material/CheckCircle';
|
||||||
import sanitizeHtml from 'sanitize-html';
|
import sanitizeHtml from 'sanitize-html';
|
||||||
import { SpinnerImage } from '@/components/util/SpinnerImage.tsx';
|
import { SpinnerImage } from '@/modules/core/components/SpinnerImage.tsx';
|
||||||
import { TypographyMaxLines } from '@/components/atoms/TypographyMaxLines.tsx';
|
import { TypographyMaxLines } from '@/modules/core/components/TypographyMaxLines.tsx';
|
||||||
import { Metadata } from '@/components/atoms/Metadata.tsx';
|
import { Metadata } from '@/modules/core/components/Metadata.tsx';
|
||||||
import { MediaQuery } from '@/lib/ui/MediaQuery.tsx';
|
import { MediaQuery } from '@/lib/ui/MediaQuery.tsx';
|
||||||
import { TTrackerManga } from '@/lib/data/Trackers.ts';
|
import { TTrackerManga } from '@/lib/data/Trackers.ts';
|
||||||
|
|
||||||
|
|||||||
@@ -21,16 +21,16 @@ import InfoIcon from '@mui/icons-material/Info';
|
|||||||
import PopupState, { bindPopover, bindTrigger } from 'material-ui-popup-state';
|
import PopupState, { bindPopover, bindTrigger } from 'material-ui-popup-state';
|
||||||
import Popover from '@mui/material/Popover';
|
import Popover from '@mui/material/Popover';
|
||||||
import Typography from '@mui/material/Typography';
|
import Typography from '@mui/material/Typography';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/requests/RequestManager.ts';
|
||||||
import { EmptyViewAbsoluteCentered } from '@/components/util/EmptyViewAbsoluteCentered.tsx';
|
import { EmptyViewAbsoluteCentered } from '@/modules/core/components/placeholder/EmptyViewAbsoluteCentered.tsx';
|
||||||
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
import { LoadingPlaceholder } from '@/modules/core/components/placeholder/LoadingPlaceholder.tsx';
|
||||||
import { Tracker, TTrackerBase } from '@/lib/data/Trackers.ts';
|
import { Tracker, TTrackerBase } from '@/lib/data/Trackers.ts';
|
||||||
import { SearchTextField } from '@/components/atoms/SearchTextField.tsx';
|
import { SearchTextField } from '@/modules/core/components/inputs/SearchTextField.tsx';
|
||||||
import { makeToast } from '@/components/util/Toast.tsx';
|
import { makeToast } from '@/lib/ui/Toast.ts';
|
||||||
import { TrackerMangaCard } from '@/components/tracker/TrackerMangaCard.tsx';
|
import { TrackerMangaCard } from '@/components/tracker/TrackerMangaCard.tsx';
|
||||||
import { DIALOG_PADDING } from '@/components/tracker/constants.ts';
|
import { DIALOG_PADDING } from '@/components/tracker/constants.ts';
|
||||||
import { useGetOptionForDirection } from '@/theme.tsx';
|
import { useGetOptionForDirection } from '@/theme.tsx';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
||||||
import { MangaType } from '@/lib/graphql/generated/graphql.ts';
|
import { MangaType } from '@/lib/graphql/generated/graphql.ts';
|
||||||
import { MangaIdInfo } from '@/lib/data/Mangas.ts';
|
import { MangaIdInfo } from '@/lib/data/Mangas.ts';
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import Avatar from '@mui/material/Avatar';
|
|||||||
import Button from '@mui/material/Button';
|
import Button from '@mui/material/Button';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import Stack from '@mui/material/Stack';
|
import Stack from '@mui/material/Stack';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/requests/RequestManager.ts';
|
||||||
import { CARD_STYLING } from '@/components/tracker/constants.ts';
|
import { CARD_STYLING } from '@/components/tracker/constants.ts';
|
||||||
import { TTrackerBase } from '@/lib/data/Trackers.ts';
|
import { TTrackerBase } from '@/lib/data/Trackers.ts';
|
||||||
|
|
||||||
|
|||||||
@@ -14,12 +14,12 @@ import DialogContent from '@mui/material/DialogContent';
|
|||||||
import DialogContentText from '@mui/material/DialogContentText';
|
import DialogContentText from '@mui/material/DialogContentText';
|
||||||
import DialogActions from '@mui/material/DialogActions';
|
import DialogActions from '@mui/material/DialogActions';
|
||||||
import Button from '@mui/material/Button';
|
import Button from '@mui/material/Button';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/requests/RequestManager.ts';
|
||||||
import { getVersion } from '@/screens/settings/About.tsx';
|
import { getVersion } from '@/screens/settings/About.tsx';
|
||||||
import { useUpdateChecker } from '@/util/useUpdateChecker.tsx';
|
import { useUpdateChecker } from '@/util/useUpdateChecker.tsx';
|
||||||
import { VersionUpdateInfoDialog } from '@/components/util/VersionUpdateInfoDialog.tsx';
|
import { VersionUpdateInfoDialog } from '@/components/util/VersionUpdateInfoDialog.tsx';
|
||||||
import { useMetadataServerSettings } from '@/lib/metadata/metadataServerSettings.ts';
|
import { useMetadataServerSettings } from '@/lib/metadata/metadataServerSettings.ts';
|
||||||
import { useLocalStorage } from '@/util/useStorage.tsx';
|
import { useLocalStorage } from '@/modules/core/hooks/useStorage.tsx';
|
||||||
|
|
||||||
const disabledUpdateCheck = () => Promise.resolve();
|
const disabledUpdateCheck = () => Promise.resolve();
|
||||||
|
|
||||||
|
|||||||
@@ -14,11 +14,11 @@ import DialogContent from '@mui/material/DialogContent';
|
|||||||
import DialogContentText from '@mui/material/DialogContentText';
|
import DialogContentText from '@mui/material/DialogContentText';
|
||||||
import DialogActions from '@mui/material/DialogActions';
|
import DialogActions from '@mui/material/DialogActions';
|
||||||
import Button from '@mui/material/Button';
|
import Button from '@mui/material/Button';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
||||||
import { UpdateState, WebUiChannel, WebUiUpdateStatus } from '@/lib/graphql/generated/graphql.ts';
|
import { UpdateState, WebUiChannel, WebUiUpdateStatus } from '@/lib/graphql/generated/graphql.ts';
|
||||||
import { useLocalStorage } from '@/util/useStorage.tsx';
|
import { useLocalStorage } from '@/modules/core/hooks/useStorage.tsx';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/requests/RequestManager.ts';
|
||||||
import { makeToast } from '@/components/util/Toast.tsx';
|
import { makeToast } from '@/lib/ui/Toast.ts';
|
||||||
import { ABOUT_WEBUI, WEBUI_UPDATE_CHECK } from '@/lib/graphql/fragments/InfoFragments.ts';
|
import { ABOUT_WEBUI, WEBUI_UPDATE_CHECK } from '@/lib/graphql/fragments/InfoFragments.ts';
|
||||||
import { VersionUpdateInfoDialog } from '@/components/util/VersionUpdateInfoDialog.tsx';
|
import { VersionUpdateInfoDialog } from '@/components/util/VersionUpdateInfoDialog.tsx';
|
||||||
import { useUpdateChecker } from '@/util/useUpdateChecker';
|
import { useUpdateChecker } from '@/util/useUpdateChecker';
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import { App } from '@/App';
|
|||||||
import '@/index.css';
|
import '@/index.css';
|
||||||
// roboto font
|
// roboto font
|
||||||
import '@fontsource/roboto';
|
import '@fontsource/roboto';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
||||||
import '@/lib/dayjs/Setup.ts';
|
import '@/lib/dayjs/Setup.ts';
|
||||||
|
|
||||||
if ('serviceWorker' in navigator) {
|
if ('serviceWorker' in navigator) {
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ export type ISOLanguage = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// full list: https://github.com/meikidd/iso-639-1/blob/master/src/data.js
|
// full list: https://github.com/meikidd/iso-639-1/blob/master/src/data.js
|
||||||
export const ISOLanguages: { [languageCode in I18nResourceCode]: ISOLanguage } & Record<string, ISOLanguage> = {
|
export const IsoLanguages: { [languageCode in I18nResourceCode]: ISOLanguage } & Record<string, ISOLanguage> = {
|
||||||
// #############################
|
// #############################
|
||||||
// ### ###
|
// ### ###
|
||||||
// ### START: manually added ###
|
// ### START: manually added ###
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { t } from 'i18next';
|
import { t } from 'i18next';
|
||||||
import { ISOLanguage, ISOLanguages } from '@/util/isoLanguages.ts';
|
import { ISOLanguage, IsoLanguages } from '@/lib/IsoLanguages.ts';
|
||||||
|
|
||||||
export enum DefaultLanguage {
|
export enum DefaultLanguage {
|
||||||
ALL = 'all',
|
ALL = 'all',
|
||||||
@@ -16,18 +16,18 @@ export enum DefaultLanguage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getISOLanguage(code: string): ISOLanguage | null {
|
function getISOLanguage(code: string): ISOLanguage | null {
|
||||||
if (ISOLanguages[code]) {
|
if (IsoLanguages[code]) {
|
||||||
return ISOLanguages[code];
|
return IsoLanguages[code];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ISOLanguages[code.toLocaleLowerCase()]) {
|
if (IsoLanguages[code.toLocaleLowerCase()]) {
|
||||||
return ISOLanguages[code.toLocaleLowerCase()];
|
return IsoLanguages[code.toLocaleLowerCase()];
|
||||||
}
|
}
|
||||||
|
|
||||||
const whereToCut = code.indexOf('-') !== -1 ? code.indexOf('-') : code.length;
|
const whereToCut = code.indexOf('-') !== -1 ? code.indexOf('-') : code.length;
|
||||||
const processedCode = code.toLocaleLowerCase().substring(0, whereToCut);
|
const processedCode = code.toLocaleLowerCase().substring(0, whereToCut);
|
||||||
if (ISOLanguages[processedCode]) {
|
if (IsoLanguages[processedCode]) {
|
||||||
return ISOLanguages[processedCode];
|
return IsoLanguages[processedCode];
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
@@ -9,9 +9,8 @@
|
|||||||
import { t as translate } from 'i18next';
|
import { t as translate } from 'i18next';
|
||||||
import gql from 'graphql-tag';
|
import gql from 'graphql-tag';
|
||||||
import { DocumentNode } from '@apollo/client';
|
import { DocumentNode } from '@apollo/client';
|
||||||
import { ChapterOffset, TranslationKey } from '@/typings.ts';
|
import { makeToast } from '@/lib/ui/Toast.ts';
|
||||||
import { makeToast } from '@/components/util/Toast.tsx';
|
import { requestManager } from '@/lib/requests/requests/RequestManager.ts';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
|
||||||
import { getMetadataServerSettings } from '@/lib/metadata/metadataServerSettings.ts';
|
import { getMetadataServerSettings } from '@/lib/metadata/metadataServerSettings.ts';
|
||||||
import {
|
import {
|
||||||
ChapterListFieldsFragment,
|
ChapterListFieldsFragment,
|
||||||
@@ -21,6 +20,8 @@ import {
|
|||||||
import { CHAPTER_LIST_FIELDS } from '@/lib/graphql/fragments/ChapterFragments.ts';
|
import { CHAPTER_LIST_FIELDS } from '@/lib/graphql/fragments/ChapterFragments.ts';
|
||||||
import { MangaIdInfo } from '@/lib/data/Mangas.ts';
|
import { MangaIdInfo } from '@/lib/data/Mangas.ts';
|
||||||
|
|
||||||
|
import { DirectionOffset, TranslationKey } from '@/Base.types.ts';
|
||||||
|
|
||||||
export type ChapterAction = 'download' | 'delete' | 'bookmark' | 'unbookmark' | 'mark_as_read' | 'mark_as_unread';
|
export type ChapterAction = 'download' | 'delete' | 'bookmark' | 'unbookmark' | 'mark_as_read' | 'mark_as_unread';
|
||||||
|
|
||||||
export const actionToTranslationKey: {
|
export const actionToTranslationKey: {
|
||||||
@@ -348,13 +349,13 @@ export class Chapters {
|
|||||||
currentChapter: Chapter,
|
currentChapter: Chapter,
|
||||||
chapters: Chapter[],
|
chapters: Chapter[],
|
||||||
{
|
{
|
||||||
offset = ChapterOffset.NEXT,
|
offset = DirectionOffset.NEXT,
|
||||||
...options
|
...options
|
||||||
}: { offset?: ChapterOffset; onlyUnread?: boolean; skipDupe?: boolean; skipDupeChapter?: Chapter } = {},
|
}: { offset?: DirectionOffset; onlyUnread?: boolean; skipDupe?: boolean; skipDupeChapter?: Chapter } = {},
|
||||||
): Chapter | undefined {
|
): Chapter | undefined {
|
||||||
const nextChapters = Chapters.getNextChapters(currentChapter, chapters, { offset, ...options });
|
const nextChapters = Chapters.getNextChapters(currentChapter, chapters, { offset, ...options });
|
||||||
|
|
||||||
const isNextChapterOffset = offset === ChapterOffset.NEXT;
|
const isNextChapterOffset = offset === DirectionOffset.NEXT;
|
||||||
const sliceStartIndex = isNextChapterOffset ? -1 : 0;
|
const sliceStartIndex = isNextChapterOffset ? -1 : 0;
|
||||||
const sliceEndIndex = isNextChapterOffset ? undefined : 1;
|
const sliceEndIndex = isNextChapterOffset ? undefined : 1;
|
||||||
|
|
||||||
@@ -365,15 +366,15 @@ export class Chapters {
|
|||||||
fromChapter: Chapter,
|
fromChapter: Chapter,
|
||||||
chapters: Chapter[],
|
chapters: Chapter[],
|
||||||
{
|
{
|
||||||
offset = ChapterOffset.NEXT,
|
offset = DirectionOffset.NEXT,
|
||||||
onlyUnread = false,
|
onlyUnread = false,
|
||||||
skipDupe = false,
|
skipDupe = false,
|
||||||
skipDupeChapter = fromChapter,
|
skipDupeChapter = fromChapter,
|
||||||
}: { offset?: ChapterOffset; onlyUnread?: boolean; skipDupe?: boolean; skipDupeChapter?: Chapter } = {},
|
}: { offset?: DirectionOffset; onlyUnread?: boolean; skipDupe?: boolean; skipDupeChapter?: Chapter } = {},
|
||||||
): Chapter[] {
|
): Chapter[] {
|
||||||
const fromChapterIndex = chapters.findIndex((chapter) => chapter.id === fromChapter.id);
|
const fromChapterIndex = chapters.findIndex((chapter) => chapter.id === fromChapter.id);
|
||||||
|
|
||||||
const isNextChapterOffset = offset === ChapterOffset.NEXT;
|
const isNextChapterOffset = offset === DirectionOffset.NEXT;
|
||||||
const sliceStartIndex = isNextChapterOffset ? 0 : fromChapterIndex;
|
const sliceStartIndex = isNextChapterOffset ? 0 : fromChapterIndex;
|
||||||
const sliceEndIndex = isNextChapterOffset ? fromChapterIndex + 1 : undefined;
|
const sliceEndIndex = isNextChapterOffset ? fromChapterIndex + 1 : undefined;
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,8 @@
|
|||||||
|
|
||||||
import { t as translate } from 'i18next';
|
import { t as translate } from 'i18next';
|
||||||
import { DocumentNode } from '@apollo/client/core';
|
import { DocumentNode } from '@apollo/client/core';
|
||||||
import { MetadataMigrationSettings, TranslationKey } from '@/typings.ts';
|
import { MetadataMigrationSettings } from '@/typings.ts';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/requests/RequestManager.ts';
|
||||||
import {
|
import {
|
||||||
ChapterConditionInput,
|
ChapterConditionInput,
|
||||||
GetMangasBaseQuery,
|
GetMangasBaseQuery,
|
||||||
@@ -25,10 +25,11 @@ import {
|
|||||||
UpdateMangaCategoriesPatchInput,
|
UpdateMangaCategoriesPatchInput,
|
||||||
} from '@/lib/graphql/generated/graphql.ts';
|
} from '@/lib/graphql/generated/graphql.ts';
|
||||||
import { Chapters } from '@/lib/data/Chapters.ts';
|
import { Chapters } from '@/lib/data/Chapters.ts';
|
||||||
import { makeToast } from '@/components/util/Toast.tsx';
|
import { makeToast } from '@/lib/ui/Toast.ts';
|
||||||
import { getMetadataServerSettings } from '@/lib/metadata/metadataServerSettings.ts';
|
import { getMetadataServerSettings } from '@/lib/metadata/metadataServerSettings.ts';
|
||||||
import { GET_MANGAS_BASE } from '@/lib/graphql/queries/MangaQuery.ts';
|
import { GET_MANGAS_BASE } from '@/lib/graphql/queries/MangaQuery.ts';
|
||||||
import { MANGA_BASE_FIELDS } from '@/lib/graphql/fragments/MangaFragments.ts';
|
import { MANGA_BASE_FIELDS } from '@/lib/graphql/fragments/MangaFragments.ts';
|
||||||
|
import { TranslationKey } from '@/Base.types.ts';
|
||||||
|
|
||||||
export type MangaAction =
|
export type MangaAction =
|
||||||
| 'download'
|
| 'download'
|
||||||
|
|||||||
@@ -15,9 +15,9 @@ import {
|
|||||||
LibraryOptions,
|
LibraryOptions,
|
||||||
Metadata,
|
Metadata,
|
||||||
} from '@/typings.ts';
|
} from '@/typings.ts';
|
||||||
import { jsonSaveParse } from '@/util/HelperFunctions.ts';
|
import { jsonSaveParse } from '@/lib/HelperFunctions.ts';
|
||||||
import { convertFromGqlMeta, getMetadataFrom, requestUpdateCategoryMetadata } from '@/lib/metadata/metadata.ts';
|
import { convertFromGqlMeta, getMetadataFrom, requestUpdateCategoryMetadata } from '@/lib/metadata/metadata.ts';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
||||||
import { CategoryIdInfo } from '@/lib/data/Categories.ts';
|
import { CategoryIdInfo } from '@/lib/data/Categories.ts';
|
||||||
import { GridLayout } from '@/components/context/LibraryOptionsContext.tsx';
|
import { GridLayout } from '@/components/context/LibraryOptionsContext.tsx';
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import {
|
|||||||
MetadataHolder,
|
MetadataHolder,
|
||||||
MetadataKeyValuePair,
|
MetadataKeyValuePair,
|
||||||
} from '@/typings.ts';
|
} from '@/typings.ts';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/requests/RequestManager.ts';
|
||||||
import { MetaType, SourceType } from '@/lib/graphql/generated/graphql.ts';
|
import { MetaType, SourceType } from '@/lib/graphql/generated/graphql.ts';
|
||||||
import { DEFAULT_DEVICE, getActiveDevice } from '@/util/device.ts';
|
import { DEFAULT_DEVICE, getActiveDevice } from '@/util/device.ts';
|
||||||
import { CategoryIdInfo } from '@/lib/data/Categories.ts';
|
import { CategoryIdInfo } from '@/lib/data/Categories.ts';
|
||||||
|
|||||||
@@ -15,11 +15,11 @@ import {
|
|||||||
MetadataServerSettings,
|
MetadataServerSettings,
|
||||||
MetadataThemeSettings,
|
MetadataThemeSettings,
|
||||||
} from '@/typings.ts';
|
} from '@/typings.ts';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/requests/RequestManager.ts';
|
||||||
import { convertFromGqlMeta, getMetadataFrom, requestUpdateServerMetadata } from '@/lib/metadata/metadata.ts';
|
import { convertFromGqlMeta, getMetadataFrom, requestUpdateServerMetadata } from '@/lib/metadata/metadata.ts';
|
||||||
import { jsonSaveParse } from '@/util/HelperFunctions.ts';
|
import { jsonSaveParse } from '@/lib/HelperFunctions.ts';
|
||||||
import { DEFAULT_DEVICE } from '@/util/device.ts';
|
import { DEFAULT_DEVICE } from '@/util/device.ts';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
||||||
import { DEFAULT_SORT_SETTINGS } from '@/screens/Migration.constants.ts';
|
import { DEFAULT_SORT_SETTINGS } from '@/screens/Migration.constants.ts';
|
||||||
|
|
||||||
export const getDefaultSettings = (): MetadataServerSettings => ({
|
export const getDefaultSettings = (): MetadataServerSettings => ({
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { Metadata, IReaderSettings, MetadataKeyValuePair, GqlMetaHolder } from '@/typings.ts';
|
import { Metadata, IReaderSettings, MetadataKeyValuePair, GqlMetaHolder } from '@/typings.ts';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/requests/RequestManager.ts';
|
||||||
import {
|
import {
|
||||||
convertFromGqlMeta,
|
convertFromGqlMeta,
|
||||||
getMetadataFrom,
|
getMetadataFrom,
|
||||||
|
|||||||
@@ -14,9 +14,9 @@ import {
|
|||||||
Metadata,
|
Metadata,
|
||||||
SourceMetadataKeys,
|
SourceMetadataKeys,
|
||||||
} from '@/typings.ts';
|
} from '@/typings.ts';
|
||||||
import { jsonSaveParse } from '@/util/HelperFunctions.ts';
|
import { jsonSaveParse } from '@/lib/HelperFunctions.ts';
|
||||||
import { convertFromGqlMeta, getMetadataFrom, requestUpdateSourceMetadata } from '@/lib/metadata/metadata.ts';
|
import { convertFromGqlMeta, getMetadataFrom, requestUpdateSourceMetadata } from '@/lib/metadata/metadata.ts';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
||||||
import { SourceType } from '@/lib/graphql/generated/graphql.ts';
|
import { SourceType } from '@/lib/graphql/generated/graphql.ts';
|
||||||
|
|
||||||
const convertAppMetadataToGqlMetadata = (
|
const convertAppMetadataToGqlMetadata = (
|
||||||
|
|||||||
17
src/lib/reader-router-dom/ReactRouterDom.types.d.ts
vendored
Normal file
17
src/lib/reader-router-dom/ReactRouterDom.types.d.ts
vendored
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
/*
|
||||||
|
* 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 { Location } from 'react-router-dom';
|
||||||
|
|
||||||
|
type GenericLocation<State = any> = Omit<Location, 'state'> & { state?: State };
|
||||||
|
|
||||||
|
declare module 'react-router-dom' {
|
||||||
|
export function useParams<Params extends { [K in keyof Params]: string } = {}>(): Params;
|
||||||
|
|
||||||
|
export function useLocation<State = any>(): GenericLocation<State>;
|
||||||
|
}
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { AppStorage } from '@/util/AppStorage.ts';
|
import { AppStorage } from '@/lib/AppStorage.ts';
|
||||||
|
|
||||||
export abstract class BaseClient<Client, ClientConfig, Fetcher> {
|
export abstract class BaseClient<Client, ClientConfig, Fetcher> {
|
||||||
protected abstract client: Client;
|
protected abstract client: Client;
|
||||||
|
|||||||
@@ -276,7 +276,7 @@ import {
|
|||||||
UPDATE_LIBRARY_MANGAS,
|
UPDATE_LIBRARY_MANGAS,
|
||||||
} from '@/lib/graphql/mutations/UpdaterMutation.ts';
|
} from '@/lib/graphql/mutations/UpdaterMutation.ts';
|
||||||
import { GET_LAST_UPDATE_TIMESTAMP, GET_UPDATE_STATUS } from '@/lib/graphql/queries/UpdaterQuery.ts';
|
import { GET_LAST_UPDATE_TIMESTAMP, GET_UPDATE_STATUS } from '@/lib/graphql/queries/UpdaterQuery.ts';
|
||||||
import { CustomCache } from '@/lib/requests/CustomCache.ts';
|
import { CustomCache } from '@/lib/CustomCache.ts';
|
||||||
import { RESTORE_BACKUP } from '@/lib/graphql/mutations/BackupMutation.ts';
|
import { RESTORE_BACKUP } from '@/lib/graphql/mutations/BackupMutation.ts';
|
||||||
import { GET_RESTORE_STATUS, VALIDATE_BACKUP } from '@/lib/graphql/queries/BackupQuery.ts';
|
import { GET_RESTORE_STATUS, VALIDATE_BACKUP } from '@/lib/graphql/queries/BackupQuery.ts';
|
||||||
import { DOWNLOAD_STATUS_SUBSCRIPTION } from '@/lib/graphql/subscriptions/DownloaderSubscription.ts';
|
import { DOWNLOAD_STATUS_SUBSCRIPTION } from '@/lib/graphql/subscriptions/DownloaderSubscription.ts';
|
||||||
@@ -287,7 +287,7 @@ import { CLEAR_SERVER_CACHE } from '@/lib/graphql/mutations/ImageMutation.ts';
|
|||||||
import { RESET_WEBUI_UPDATE_STATUS, UPDATE_WEBUI } from '@/lib/graphql/mutations/ServerInfoMutation.ts';
|
import { RESET_WEBUI_UPDATE_STATUS, UPDATE_WEBUI } from '@/lib/graphql/mutations/ServerInfoMutation.ts';
|
||||||
import { WEBUI_UPDATE_SUBSCRIPTION } from '@/lib/graphql/subscriptions/ServerInfoSubscription.ts';
|
import { WEBUI_UPDATE_SUBSCRIPTION } from '@/lib/graphql/subscriptions/ServerInfoSubscription.ts';
|
||||||
import { GET_DOWNLOAD_STATUS } from '@/lib/graphql/queries/DownloaderQuery.ts';
|
import { GET_DOWNLOAD_STATUS } from '@/lib/graphql/queries/DownloaderQuery.ts';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
||||||
import { Queue, QueuePriority } from '@/lib/Queue.ts';
|
import { Queue, QueuePriority } from '@/lib/Queue.ts';
|
||||||
import { TRACKER_SEARCH } from '@/lib/graphql/queries/TrackerQuery.ts';
|
import { TRACKER_SEARCH } from '@/lib/graphql/queries/TrackerQuery.ts';
|
||||||
import {
|
import {
|
||||||
@@ -305,7 +305,7 @@ import { DOWNLOAD_STATUS_FIELDS } from '@/lib/graphql/fragments/DownloadFragment
|
|||||||
import { EXTENSION_LIST_FIELDS } from '@/lib/graphql/fragments/ExtensionFragments.ts';
|
import { EXTENSION_LIST_FIELDS } from '@/lib/graphql/fragments/ExtensionFragments.ts';
|
||||||
import { MANGA_BASE_FIELDS, MANGA_META_FIELDS } from '@/lib/graphql/fragments/MangaFragments.ts';
|
import { MANGA_BASE_FIELDS, MANGA_META_FIELDS } from '@/lib/graphql/fragments/MangaFragments.ts';
|
||||||
import { MangaIdInfo } from '@/lib/data/Mangas.ts';
|
import { MangaIdInfo } from '@/lib/data/Mangas.ts';
|
||||||
import { GLOBAL_METADATA } from '@/lib/graphql/fragments/Fragments';
|
import { GLOBAL_METADATA } from '@/lib/graphql/fragments/Fragments.ts';
|
||||||
import { CATEGORY_META_FIELDS } from '@/lib/graphql/fragments/CategoryFragments.ts';
|
import { CATEGORY_META_FIELDS } from '@/lib/graphql/fragments/CategoryFragments.ts';
|
||||||
import { SOURCE_META_FIELDS } from '@/lib/graphql/fragments/SourceFragments.ts';
|
import { SOURCE_META_FIELDS } from '@/lib/graphql/fragments/SourceFragments.ts';
|
||||||
import { CHAPTER_META_FIELDS } from '@/lib/graphql/fragments/ChapterFragments.ts';
|
import { CHAPTER_META_FIELDS } from '@/lib/graphql/fragments/ChapterFragments.ts';
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
import { ThemeOptions } from '@mui/material/styles';
|
import { ThemeOptions } from '@mui/material/styles';
|
||||||
import { t as translate } from 'i18next';
|
import { t as translate } from 'i18next';
|
||||||
import WebFont from 'webfontloader';
|
import WebFont from 'webfontloader';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
||||||
import { ControlledPromise } from '@/lib/ControlledPromise.ts';
|
import { ControlledPromise } from '@/lib/ControlledPromise.ts';
|
||||||
|
|
||||||
type Theme = { isCustom: boolean; getName: () => string; muiTheme: ThemeOptions };
|
type Theme = { isCustom: boolean; getName: () => string; muiTheme: ThemeOptions };
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import { createRoot } from 'react-dom/client';
|
import { createRoot } from 'react-dom/client';
|
||||||
import { ThemeProvider } from '@mui/material/styles';
|
import { ThemeProvider } from '@mui/material/styles';
|
||||||
import { ConfirmDialog } from '@/components/molecules/ConfirmDialog.tsx';
|
import { ConfirmDialog } from '@/modules/core/components/ConfirmDialog.tsx';
|
||||||
import { ControlledPromise } from '@/lib/ControlledPromise.ts';
|
import { ControlledPromise } from '@/lib/ControlledPromise.ts';
|
||||||
import { getCurrentTheme } from '@/theme.tsx';
|
import { getCurrentTheme } from '@/theme.tsx';
|
||||||
|
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ import { Breakpoint } from '@mui/material/styles';
|
|||||||
import { useCallback, useState } from 'react';
|
import { useCallback, useState } from 'react';
|
||||||
import { getCurrentTheme } from '@/theme.tsx';
|
import { getCurrentTheme } from '@/theme.tsx';
|
||||||
import { ThemeMode } from '@/components/context/ThemeModeContext.tsx';
|
import { ThemeMode } from '@/components/context/ThemeModeContext.tsx';
|
||||||
import { AppStorage } from '@/util/AppStorage.ts';
|
import { AppStorage } from '@/lib/AppStorage.ts';
|
||||||
import { useResizeObserver } from '@/util/useResizeObserver.tsx';
|
import { useResizeObserver } from '@/modules/core/hooks/useResizeObserver.tsx';
|
||||||
|
|
||||||
export class MediaQuery {
|
export class MediaQuery {
|
||||||
static useIsTouchDevice(): boolean {
|
static useIsTouchDevice(): boolean {
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import { useQueryParam, StringParam } from 'use-query-params';
|
|||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom';
|
||||||
import { useTheme } from '@mui/material/styles';
|
import { useTheme } from '@mui/material/styles';
|
||||||
import { SearchTextField } from '@/components/atoms/SearchTextField.tsx';
|
import { SearchTextField } from '@/modules/core/components/inputs/SearchTextField.tsx';
|
||||||
|
|
||||||
interface IProps {
|
interface IProps {
|
||||||
isClosable?: boolean;
|
isClosable?: boolean;
|
||||||
@@ -10,9 +10,9 @@ import CircularProgress from '@mui/material/CircularProgress';
|
|||||||
import Box from '@mui/material/Box';
|
import Box from '@mui/material/Box';
|
||||||
import Typography from '@mui/material/Typography';
|
import Typography from '@mui/material/Typography';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { TranslationKey } from '@/typings';
|
|
||||||
import { DownloadState } from '@/lib/graphql/generated/graphql.ts';
|
import { DownloadState } from '@/lib/graphql/generated/graphql.ts';
|
||||||
import { ChapterDownloadStatus } from '@/lib/data/Chapters.ts';
|
import { ChapterDownloadStatus } from '@/lib/data/Chapters.ts';
|
||||||
|
import { TranslationKey } from '@/Base.types.ts';
|
||||||
|
|
||||||
const DOWNLOAD_STATE_TO_TRANSLATION_KEY_MAP: { [state in DownloadState]: TranslationKey } = {
|
const DOWNLOAD_STATE_TO_TRANSLATION_KEY_MAP: { [state in DownloadState]: TranslationKey } = {
|
||||||
DOWNLOADING: 'download.state.label.downloading',
|
DOWNLOADING: 'download.state.label.downloading',
|
||||||
@@ -10,8 +10,8 @@ import Stack from '@mui/material/Stack';
|
|||||||
import Tab from '@mui/material/Tab';
|
import Tab from '@mui/material/Tab';
|
||||||
import Tabs from '@mui/material/Tabs';
|
import Tabs from '@mui/material/Tabs';
|
||||||
import React, { useState } from 'react';
|
import React, { useState } from 'react';
|
||||||
import { TabPanel } from '@/components/tabs/TabPanel.tsx';
|
import { TabPanel } from '@/modules/core/components/tabs/TabPanel.tsx';
|
||||||
import { OptionsPanel } from '@/components/molecules/OptionsPanel';
|
import { OptionsPanel } from '@/modules/core/components/OptionsPanel.tsx';
|
||||||
|
|
||||||
interface IProps<T = string> {
|
interface IProps<T = string> {
|
||||||
open: boolean;
|
open: boolean;
|
||||||
@@ -16,7 +16,7 @@ import RefreshIcon from '@mui/icons-material/Refresh';
|
|||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import ImageIcon from '@mui/icons-material/Image';
|
import ImageIcon from '@mui/icons-material/Image';
|
||||||
import { SxProps, Theme } from '@mui/material/styles';
|
import { SxProps, Theme } from '@mui/material/styles';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/requests/RequestManager.ts';
|
||||||
import { Priority } from '@/lib/Queue.ts';
|
import { Priority } from '@/lib/Queue.ts';
|
||||||
|
|
||||||
interface IProps {
|
interface IProps {
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import styled from '@emotion/styled';
|
import styled from '@emotion/styled';
|
||||||
import Typography, { TypographyProps } from '@mui/material/Typography';
|
import Typography, { TypographyProps } from '@mui/material/Typography';
|
||||||
import { shouldForwardProp } from '@/lib/ui/ShouldForwardProp.ts';
|
import { shouldForwardProp } from '@/modules/core/utils/ShouldForwardProp.ts';
|
||||||
|
|
||||||
type TypographyMaxLinesProps = {
|
type TypographyMaxLinesProps = {
|
||||||
lines?: number;
|
lines?: number;
|
||||||
@@ -16,12 +16,12 @@ import Menu from '@mui/material/Menu';
|
|||||||
import MenuItem from '@mui/material/MenuItem';
|
import MenuItem from '@mui/material/MenuItem';
|
||||||
import ClearIcon from '@mui/icons-material/Clear';
|
import ClearIcon from '@mui/icons-material/Clear';
|
||||||
import Stack from '@mui/material/Stack';
|
import Stack from '@mui/material/Stack';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/requests/RequestManager.ts';
|
||||||
import { makeToast } from '@/components/util/Toast';
|
import { makeToast } from '@/lib/ui/Toast.ts';
|
||||||
import { UpdaterSubscription } from '@/lib/graphql/generated/graphql.ts';
|
import { UpdaterSubscription } from '@/lib/graphql/generated/graphql.ts';
|
||||||
import { Progress } from '@/components/util/Progress';
|
import { Progress } from '@/modules/core/components/Progress.tsx';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
||||||
import { dateTimeFormatter } from '@/util/date.ts';
|
import { dateTimeFormatter } from '@/util/DateHelper.ts';
|
||||||
import { MediaQuery } from '@/lib/ui/MediaQuery.tsx';
|
import { MediaQuery } from '@/lib/ui/MediaQuery.tsx';
|
||||||
import { CategoryIdInfo } from '@/lib/data/Categories.ts';
|
import { CategoryIdInfo } from '@/lib/data/Categories.ts';
|
||||||
|
|
||||||
@@ -20,8 +20,8 @@ import ListItemText from '@mui/material/ListItemText';
|
|||||||
import Tooltip from '@mui/material/Tooltip';
|
import Tooltip from '@mui/material/Tooltip';
|
||||||
import ListItem from '@mui/material/ListItem';
|
import ListItem from '@mui/material/ListItem';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { cloneObject } from '@/util/cloneObject';
|
import { cloneObject } from '@/util/cloneObject.tsx';
|
||||||
import { translateExtensionLanguage } from '@/screens/util/Extensions';
|
import { translateExtensionLanguage } from '@/screens/util/Extensions.ts';
|
||||||
|
|
||||||
function removeAll(firstList: any[], secondList: any[]) {
|
function removeAll(firstList: any[], secondList: any[]) {
|
||||||
secondList.forEach((item) => {
|
secondList.forEach((item) => {
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user