Move "core" folder out of "features" into "base"
This commit is contained in:
10
src/App.tsx
10
src/App.tsx
@@ -12,20 +12,20 @@ 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 '@/features/core/contexts/AppContext.tsx';
|
import { AppContext } from '@/base/contexts/AppContext.tsx';
|
||||||
import '@/i18n';
|
import '@/i18n';
|
||||||
import { DefaultNavBar } from '@/features/navigation-bar/components/DefaultNavBar.tsx';
|
import { DefaultNavBar } from '@/features/navigation-bar/components/DefaultNavBar.tsx';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
||||||
import { WebUIUpdateChecker } from '@/features/app-updates/components/WebUIUpdateChecker.tsx';
|
import { WebUIUpdateChecker } from '@/features/app-updates/components/WebUIUpdateChecker.tsx';
|
||||||
import { ServerUpdateChecker } from '@/features/app-updates/components/ServerUpdateChecker.tsx';
|
import { ServerUpdateChecker } from '@/features/app-updates/components/ServerUpdateChecker.tsx';
|
||||||
import { lazyLoadFallback } from '@/features/core/utils/LazyLoad.tsx';
|
import { lazyLoadFallback } from '@/base/utils/LazyLoad.tsx';
|
||||||
import { ErrorBoundary } from '@/features/core/components/feedback/ErrorBoundary.tsx';
|
import { ErrorBoundary } from '@/base/components/feedback/ErrorBoundary.tsx';
|
||||||
import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx';
|
import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx';
|
||||||
|
|
||||||
import { AppRoutes } from '@/features/core/AppRoute.constants.ts';
|
import { AppRoutes } from '@/base/AppRoute.constants.ts';
|
||||||
|
|
||||||
import { useMetadataServerSettings } from '@/features/settings/services/ServerSettingsMetadata.ts';
|
import { useMetadataServerSettings } from '@/features/settings/services/ServerSettingsMetadata.ts';
|
||||||
import { MediaQuery } from '@/features/core/utils/MediaQuery.tsx';
|
import { MediaQuery } from '@/base/utils/MediaQuery.tsx';
|
||||||
import { BrowseTab } from '@/features/browse/Browse.types.ts';
|
import { BrowseTab } from '@/features/browse/Browse.types.ts';
|
||||||
|
|
||||||
const { Browse } = loadable(() => import('@/features/browse/screens/Browse.tsx'), lazyLoadFallback);
|
const { Browse } = loadable(() => import('@/features/browse/screens/Browse.tsx'), lazyLoadFallback);
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) Contributors to the Suwayomi project
|
|
||||||
*
|
|
||||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { ParseKeys } from 'i18next';
|
|
||||||
|
|
||||||
export enum DirectionOffset {
|
|
||||||
PREVIOUS = -1,
|
|
||||||
NEXT = 1,
|
|
||||||
}
|
|
||||||
|
|
||||||
export type NullAndUndefined<T> = T | null | undefined;
|
|
||||||
|
|
||||||
export type TranslationKey = ParseKeys;
|
|
||||||
@@ -11,7 +11,7 @@ import { MangaIdInfo } from '@/features/manga/Manga.types.ts';
|
|||||||
|
|
||||||
import { ChapterSourceOrderInfo } from '@/features/chapter/Chapter.types.ts';
|
import { ChapterSourceOrderInfo } from '@/features/chapter/Chapter.types.ts';
|
||||||
import { BrowseTab } from '@/features/browse/Browse.types.ts';
|
import { BrowseTab } from '@/features/browse/Browse.types.ts';
|
||||||
import { SearchParam } from '@/features/core/Core.types.ts';
|
import { SearchParam } from '@/base/Base.types.ts';
|
||||||
|
|
||||||
type AppRouteInfo = {
|
type AppRouteInfo = {
|
||||||
match: string;
|
match: string;
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { ReactNode } from 'react';
|
import { ReactNode } from 'react';
|
||||||
import { TranslationKey } from '@/Base.types.ts';
|
import { ParseKeys } from 'i18next';
|
||||||
|
|
||||||
export enum GridLayout {
|
export enum GridLayout {
|
||||||
Compact = 0,
|
Compact = 0,
|
||||||
@@ -15,6 +15,15 @@ export enum GridLayout {
|
|||||||
List = 2,
|
List = 2,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export enum DirectionOffset {
|
||||||
|
PREVIOUS = -1,
|
||||||
|
NEXT = 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
export type NullAndUndefined<T> = T | null | undefined;
|
||||||
|
|
||||||
|
export type TranslationKey = ParseKeys;
|
||||||
|
|
||||||
interface DisplayDataTranslationKey {
|
interface DisplayDataTranslationKey {
|
||||||
isTitleString?: never;
|
isTitleString?: never;
|
||||||
title: TranslationKey;
|
title: TranslationKey;
|
||||||
@@ -14,9 +14,9 @@ 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 { useHotkeys } from 'react-hotkeys-hook';
|
import { useHotkeys } from 'react-hotkeys-hook';
|
||||||
import { CustomTooltip } from '@/features/core/components/CustomTooltip.tsx';
|
import { CustomTooltip } from '@/base/components/CustomTooltip.tsx';
|
||||||
import { SearchTextField } from '@/features/core/components/inputs/SearchTextField.tsx';
|
import { SearchTextField } from '@/base/components/inputs/SearchTextField.tsx';
|
||||||
import { SearchParam } from '@/features/core/Core.types.ts';
|
import { SearchParam } from '@/base/Base.types.ts';
|
||||||
|
|
||||||
interface IProps {
|
interface IProps {
|
||||||
isClosable?: boolean;
|
isClosable?: boolean;
|
||||||
@@ -14,9 +14,9 @@ import Radio from '@mui/material/Radio';
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import ViewModuleIcon from '@mui/icons-material/ViewModule';
|
import ViewModuleIcon from '@mui/icons-material/ViewModule';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { CustomTooltip } from '@/features/core/components/CustomTooltip.tsx';
|
import { CustomTooltip } from '@/base/components/CustomTooltip.tsx';
|
||||||
|
|
||||||
import { GridLayout } from '@/features/core/Core.types.ts';
|
import { GridLayout } from '@/base/Base.types.ts';
|
||||||
|
|
||||||
// TODO: clean up this to use a FormControl, and remove dependency on name o radio button
|
// TODO: clean up this to use a FormControl, and remove dependency on name o radio button
|
||||||
export function GridLayouts({
|
export function GridLayouts({
|
||||||
@@ -18,8 +18,8 @@ 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/RequestManager.ts';
|
||||||
import { Priority } from '@/lib/Queue.ts';
|
import { Priority } from '@/lib/Queue.ts';
|
||||||
import { applyStyles } from '@/features/core/utils/ApplyStyles.ts';
|
import { applyStyles } from '@/base/utils/ApplyStyles.ts';
|
||||||
import { useIntersectionObserver } from '@/features/core/hooks/useIntersectionObserver.tsx';
|
import { useIntersectionObserver } from '@/base/hooks/useIntersectionObserver.tsx';
|
||||||
|
|
||||||
export interface SpinnerImageProps {
|
export interface SpinnerImageProps {
|
||||||
shouldLoad?: boolean;
|
shouldLoad?: boolean;
|
||||||
@@ -9,9 +9,9 @@
|
|||||||
import Stack from '@mui/material/Stack';
|
import Stack from '@mui/material/Stack';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import Button from '@mui/material/Button';
|
import Button from '@mui/material/Button';
|
||||||
import { CustomTooltip } from '@/features/core/components/CustomTooltip.tsx';
|
import { CustomTooltip } from '@/base/components/CustomTooltip.tsx';
|
||||||
import { MultiValueButtonProps } from '@/features/core/Core.types.ts';
|
import { MultiValueButtonProps } from '@/base/Base.types.ts';
|
||||||
import { Superscript } from '@/features/core/components/texts/Superscript.tsx';
|
import { Superscript } from '@/base/components/texts/Superscript.tsx';
|
||||||
|
|
||||||
export const ButtonSelect = <Value extends string | number>({
|
export const ButtonSelect = <Value extends string | number>({
|
||||||
value,
|
value,
|
||||||
@@ -10,7 +10,7 @@ import Button, { ButtonProps } from '@mui/material/Button';
|
|||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import RestartAltIcon from '@mui/icons-material/RestartAlt';
|
import RestartAltIcon from '@mui/icons-material/RestartAlt';
|
||||||
import IconButton, { IconButtonProps } from '@mui/material/IconButton';
|
import IconButton, { IconButtonProps } from '@mui/material/IconButton';
|
||||||
import { CustomTooltip } from '@/features/core/components/CustomTooltip.tsx';
|
import { CustomTooltip } from '@/base/components/CustomTooltip.tsx';
|
||||||
|
|
||||||
type PropsIconButton = { asIconButton: true } & IconButtonProps;
|
type PropsIconButton = { asIconButton: true } & IconButtonProps;
|
||||||
type PropsButton = { asIconButton?: false } & ButtonProps;
|
type PropsButton = { asIconButton?: false } & ButtonProps;
|
||||||
@@ -9,10 +9,10 @@
|
|||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { ReactNode, useMemo } from 'react';
|
import { ReactNode, useMemo } from 'react';
|
||||||
import Button from '@mui/material/Button';
|
import Button from '@mui/material/Button';
|
||||||
import { CustomTooltip } from '@/features/core/components/CustomTooltip.tsx';
|
import { CustomTooltip } from '@/base/components/CustomTooltip.tsx';
|
||||||
import { MultiValueButtonProps } from '@/features/core/Core.types.ts';
|
import { MultiValueButtonProps } from '@/base/Base.types.ts';
|
||||||
import { getNextRotationValue } from '@/features/core/utils/ValueRotationButton.utils.ts';
|
import { getNextRotationValue } from '@/base/utils/ValueRotationButton.utils.ts';
|
||||||
import { Superscript } from '@/features/core/components/texts/Superscript.tsx';
|
import { Superscript } from '@/base/components/texts/Superscript.tsx';
|
||||||
|
|
||||||
export const ValueRotationButton = <Value extends string | number>({
|
export const ValueRotationButton = <Value extends string | number>({
|
||||||
tooltip,
|
tooltip,
|
||||||
@@ -12,8 +12,8 @@ import Typography from '@mui/material/Typography';
|
|||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { DownloadState } from '@/lib/graphql/generated/graphql.ts';
|
import { DownloadState } from '@/lib/graphql/generated/graphql.ts';
|
||||||
import { Chapters } from '@/features/chapter/services/Chapters.ts';
|
import { Chapters } from '@/features/chapter/services/Chapters.ts';
|
||||||
import { TranslationKey } from '@/Base.types.ts';
|
|
||||||
import { ChapterIdInfo } from '@/features/chapter/Chapter.types.ts';
|
import { ChapterIdInfo } from '@/features/chapter/Chapter.types.ts';
|
||||||
|
import { TranslationKey } from '@/base/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',
|
||||||
@@ -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 { EmptyView, EmptyViewProps } from '@/features/core/components/feedback/EmptyView.tsx';
|
import { EmptyView, EmptyViewProps } from '@/base/components/feedback/EmptyView.tsx';
|
||||||
|
|
||||||
export function EmptyViewAbsoluteCentered({ sx, ...emptyViewProps }: EmptyViewProps) {
|
export function EmptyViewAbsoluteCentered({ sx, ...emptyViewProps }: EmptyViewProps) {
|
||||||
return (
|
return (
|
||||||
@@ -10,7 +10,7 @@ import { Component, ErrorInfo, ReactNode, useEffect, useRef, useState } from 're
|
|||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom';
|
||||||
import { t } from 'i18next';
|
import { t } from 'i18next';
|
||||||
import { getErrorMessage } from '@/lib/HelperFunctions.ts';
|
import { getErrorMessage } from '@/lib/HelperFunctions.ts';
|
||||||
import { EmptyView } from '@/features/core/components/feedback/EmptyView.tsx';
|
import { EmptyView } from '@/base/components/feedback/EmptyView.tsx';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
children?: ReactNode;
|
children?: ReactNode;
|
||||||
@@ -13,11 +13,11 @@ import AlertTitle from '@mui/material/AlertTitle';
|
|||||||
import Button from '@mui/material/Button';
|
import Button from '@mui/material/Button';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { useTheme } from '@mui/material/styles';
|
import { useTheme } from '@mui/material/styles';
|
||||||
import { awaitConfirmation } from '@/features/core/utils/AwaitableDialog.tsx';
|
import { awaitConfirmation } from '@/base/utils/AwaitableDialog.tsx';
|
||||||
import { TranslationKey } from '@/Base.types.ts';
|
|
||||||
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
||||||
import { MediaQuery } from '@/features/core/utils/MediaQuery.tsx';
|
import { MediaQuery } from '@/base/utils/MediaQuery.tsx';
|
||||||
import { extractGraphqlExceptionInfo } from '@/lib/HelperFunctions.ts';
|
import { extractGraphqlExceptionInfo } from '@/lib/HelperFunctions.ts';
|
||||||
|
import { TranslationKey } from '@/base/Base.types.ts';
|
||||||
|
|
||||||
const MAX_DESCRIPTION_LENGTH = 200;
|
const MAX_DESCRIPTION_LENGTH = 200;
|
||||||
|
|
||||||
@@ -10,7 +10,7 @@ import Stack from '@mui/material/Stack';
|
|||||||
import Typography from '@mui/material/Typography';
|
import Typography from '@mui/material/Typography';
|
||||||
import { ComponentProps } from 'react';
|
import { ComponentProps } from 'react';
|
||||||
|
|
||||||
import { ButtonSelect } from '@/features/core/components/buttons/ButtonSelect.tsx';
|
import { ButtonSelect } from '@/base/components/buttons/ButtonSelect.tsx';
|
||||||
|
|
||||||
export const ButtonSelectInput = <Value extends string | number>({
|
export const ButtonSelectInput = <Value extends string | number>({
|
||||||
label,
|
label,
|
||||||
@@ -19,9 +19,9 @@ import ListItemText from '@mui/material/ListItemText';
|
|||||||
import ListItem from '@mui/material/ListItem';
|
import ListItem from '@mui/material/ListItem';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { Virtuoso } from 'react-virtuoso';
|
import { Virtuoso } from 'react-virtuoso';
|
||||||
import { CustomTooltip } from '@/features/core/components/CustomTooltip.tsx';
|
import { CustomTooltip } from '@/base/components/CustomTooltip.tsx';
|
||||||
import { translateExtensionLanguage } from '@/features/extension/Extensions.utils.ts';
|
import { translateExtensionLanguage } from '@/features/extension/Extensions.utils.ts';
|
||||||
import { languageSortComparator, toUniqueLanguageCodes } from '@/features/core/utils/Languages.ts';
|
import { languageSortComparator, toUniqueLanguageCodes } from '@/base/utils/Languages.ts';
|
||||||
|
|
||||||
interface IProps {
|
interface IProps {
|
||||||
selectedLanguages: string[];
|
selectedLanguages: string[];
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
import Slider, { SliderProps } from '@mui/material/Slider';
|
import Slider, { SliderProps } from '@mui/material/Slider';
|
||||||
import Typography, { TypographyProps } from '@mui/material/Typography';
|
import Typography, { TypographyProps } from '@mui/material/Typography';
|
||||||
import Stack from '@mui/material/Stack';
|
import Stack from '@mui/material/Stack';
|
||||||
import { ResetButton } from '@/features/core/components/buttons/ResetButton.tsx';
|
import { ResetButton } from '@/base/components/buttons/ResetButton.tsx';
|
||||||
|
|
||||||
export const SliderInput = ({
|
export const SliderInput = ({
|
||||||
label,
|
label,
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
import ArrowDownward from '@mui/icons-material/ArrowDownward';
|
import ArrowDownward from '@mui/icons-material/ArrowDownward';
|
||||||
import ArrowUpward from '@mui/icons-material/ArrowUpward';
|
import ArrowUpward from '@mui/icons-material/ArrowUpward';
|
||||||
import { memo } from 'react';
|
import { memo } from 'react';
|
||||||
import { RadioInput, RadioInputProps } from '@/features/core/components/inputs/RadioInput.tsx';
|
import { RadioInput, RadioInputProps } from '@/base/components/inputs/RadioInput.tsx';
|
||||||
|
|
||||||
interface IProps extends RadioInputProps {
|
interface IProps extends RadioInputProps {
|
||||||
sortDescending?: boolean | null | undefined;
|
sortDescending?: boolean | null | undefined;
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import FormControlLabel from '@mui/material/FormControlLabel';
|
import FormControlLabel from '@mui/material/FormControlLabel';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { ThreeStateCheckbox, ThreeStateCheckboxProps } from '@/features/core/components/inputs/ThreeStateCheckbox.tsx';
|
import { ThreeStateCheckbox, ThreeStateCheckboxProps } from '@/base/components/inputs/ThreeStateCheckbox.tsx';
|
||||||
|
|
||||||
interface IProps extends ThreeStateCheckboxProps {
|
interface IProps extends ThreeStateCheckboxProps {
|
||||||
label?: string;
|
label?: string;
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import Avatar, { AvatarProps } from '@mui/material/Avatar';
|
import Avatar, { AvatarProps } from '@mui/material/Avatar';
|
||||||
import { SpinnerImage, SpinnerImageProps } from '@/features/core/components/SpinnerImage.tsx';
|
import { SpinnerImage, SpinnerImageProps } from '@/base/components/SpinnerImage.tsx';
|
||||||
|
|
||||||
export const ListCardAvatar = ({
|
export const ListCardAvatar = ({
|
||||||
iconUrl,
|
iconUrl,
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import { t as translate } from 'i18next';
|
import { t as translate } from 'i18next';
|
||||||
|
|
||||||
import { TranslationKey } from '@/Base.types.ts';
|
import { TranslationKey } from '@/base/Base.types.ts';
|
||||||
|
|
||||||
export const createGetMenuItemTitle =
|
export const createGetMenuItemTitle =
|
||||||
<Action extends string>(
|
<Action extends string>(
|
||||||
@@ -33,9 +33,9 @@ import Box from '@mui/material/Box';
|
|||||||
import { OverridableComponent } from '@mui/material/OverridableComponent';
|
import { OverridableComponent } from '@mui/material/OverridableComponent';
|
||||||
import { SvgIconTypeMap } from '@mui/material/SvgIcon';
|
import { SvgIconTypeMap } from '@mui/material/SvgIcon';
|
||||||
import { useMergedRef } from '@mantine/hooks';
|
import { useMergedRef } from '@mantine/hooks';
|
||||||
import { IconMenuItem } from '@/features/core/components/menu/IconMenuItem.tsx';
|
import { IconMenuItem } from '@/base/components/menu/IconMenuItem.tsx';
|
||||||
import { getOptionForDirection } from '@/features/theme/services/ThemeCreator.ts';
|
import { getOptionForDirection } from '@/features/theme/services/ThemeCreator.ts';
|
||||||
import { MediaQuery } from '@/features/core/utils/MediaQuery.tsx';
|
import { MediaQuery } from '@/base/utils/MediaQuery.tsx';
|
||||||
|
|
||||||
export type NestedMenuItemProps = Omit<MuiMenuItemProps, 'button'> & {
|
export type NestedMenuItemProps = Omit<MuiMenuItemProps, 'button'> & {
|
||||||
parentMenuOpen: boolean;
|
parentMenuOpen: boolean;
|
||||||
@@ -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 '@/features/core/components/tabs/TabPanel.tsx';
|
import { TabPanel } from '@/base/components/tabs/TabPanel.tsx';
|
||||||
import { OptionsPanel } from '@/features/core/components/modals/OptionsPanel.tsx';
|
import { OptionsPanel } from '@/base/components/modals/OptionsPanel.tsx';
|
||||||
|
|
||||||
interface IProps<T = string> {
|
interface IProps<T = string> {
|
||||||
open: boolean;
|
open: boolean;
|
||||||
@@ -16,7 +16,7 @@ import { useTranslation } from 'react-i18next';
|
|||||||
import Stack from '@mui/material/Stack';
|
import Stack from '@mui/material/Stack';
|
||||||
import { useCallback, useMemo } from 'react';
|
import { useCallback, useMemo } from 'react';
|
||||||
import { CheckboxProps } from '@mui/material/Checkbox';
|
import { CheckboxProps } from '@mui/material/Checkbox';
|
||||||
import { CheckboxInput } from '@/features/core/components/inputs/CheckboxInput.tsx';
|
import { CheckboxInput } from '@/base/components/inputs/CheckboxInput.tsx';
|
||||||
import { useSelectableCollection } from '@/features/collection/hooks/useSelectableCollection.ts';
|
import { useSelectableCollection } from '@/features/collection/hooks/useSelectableCollection.ts';
|
||||||
|
|
||||||
export function CheckboxListSetting<Item>({
|
export function CheckboxListSetting<Item>({
|
||||||
@@ -23,10 +23,10 @@ import DeleteIcon from '@mui/icons-material/Delete';
|
|||||||
import IconButton from '@mui/material/IconButton';
|
import IconButton from '@mui/material/IconButton';
|
||||||
import DialogContentText from '@mui/material/DialogContentText';
|
import DialogContentText from '@mui/material/DialogContentText';
|
||||||
import InfoIcon from '@mui/icons-material/Info';
|
import InfoIcon from '@mui/icons-material/Info';
|
||||||
import { CustomTooltip } from '@/features/core/components/CustomTooltip.tsx';
|
import { CustomTooltip } from '@/base/components/CustomTooltip.tsx';
|
||||||
import { TextSetting, TextSettingProps } from '@/features/core/components/settings/text/TextSetting.tsx';
|
import { TextSetting, TextSettingProps } from '@/base/components/settings/text/TextSetting.tsx';
|
||||||
import { TextSettingDialog } from '@/features/core/components/settings/text/TextSettingDialog.tsx';
|
import { TextSettingDialog } from '@/base/components/settings/text/TextSettingDialog.tsx';
|
||||||
import { makeToast } from '@/features/core/utils/Toast.ts';
|
import { makeToast } from '@/base/utils/Toast.ts';
|
||||||
|
|
||||||
const MutableListItem = ({
|
const MutableListItem = ({
|
||||||
handleDelete,
|
handleDelete,
|
||||||
@@ -21,8 +21,9 @@ import { useEffect, useMemo, useState } from 'react';
|
|||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import DialogContentText from '@mui/material/DialogContentText';
|
import DialogContentText from '@mui/material/DialogContentText';
|
||||||
import InfoIcon from '@mui/icons-material/Info';
|
import InfoIcon from '@mui/icons-material/Info';
|
||||||
import { Select } from '@/features/core/components/inputs/Select.tsx';
|
import { Select } from '@/base/components/inputs/Select.tsx';
|
||||||
import { TranslationKey } from '@/Base.types.ts';
|
|
||||||
|
import { TranslationKey } from '@/base/Base.types.ts';
|
||||||
|
|
||||||
export type SelectSettingValueDisplayInfo = {
|
export type SelectSettingValueDisplayInfo = {
|
||||||
text: TranslationKey | string;
|
text: TranslationKey | string;
|
||||||
@@ -9,10 +9,7 @@
|
|||||||
import ListItemText from '@mui/material/ListItemText';
|
import ListItemText from '@mui/material/ListItemText';
|
||||||
import ListItemButton from '@mui/material/ListItemButton';
|
import ListItemButton from '@mui/material/ListItemButton';
|
||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
import {
|
import { TextSettingDialog, TextSettingDialogProps } from '@/base/components/settings/text/TextSettingDialog.tsx';
|
||||||
TextSettingDialog,
|
|
||||||
TextSettingDialogProps,
|
|
||||||
} from '@/features/core/components/settings/text/TextSettingDialog.tsx';
|
|
||||||
|
|
||||||
export type TextSettingProps = Omit<TextSettingDialogProps, 'isDialogOpen' | 'setIsDialogOpen' | 'value'> &
|
export type TextSettingProps = Omit<TextSettingDialogProps, 'isDialogOpen' | 'setIsDialogOpen' | 'value'> &
|
||||||
Required<Pick<TextSettingDialogProps, 'value'>> & {
|
Required<Pick<TextSettingDialogProps, 'value'>> & {
|
||||||
@@ -15,7 +15,7 @@ import TextField from '@mui/material/TextField';
|
|||||||
import DialogActions from '@mui/material/DialogActions';
|
import DialogActions from '@mui/material/DialogActions';
|
||||||
import { useEffect, useMemo, useState } from 'react';
|
import { useEffect, useMemo, useState } from 'react';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { PasswordTextField } from '@/features/core/components/inputs/PasswordTextField.tsx';
|
import { PasswordTextField } from '@/base/components/inputs/PasswordTextField.tsx';
|
||||||
|
|
||||||
export type TextSettingDialogProps = {
|
export type TextSettingDialogProps = {
|
||||||
settingName: string;
|
settingName: string;
|
||||||
@@ -9,7 +9,8 @@
|
|||||||
import Stack from '@mui/material/Stack';
|
import Stack from '@mui/material/Stack';
|
||||||
import Typography from '@mui/material/Typography';
|
import Typography from '@mui/material/Typography';
|
||||||
import { Trans, useTranslation } from 'react-i18next';
|
import { Trans, useTranslation } from 'react-i18next';
|
||||||
import { TranslationKey } from '@/Base.types.ts';
|
|
||||||
|
import { TranslationKey } from '@/base/Base.types.ts';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Expects a translation key of format "{{value}}<0>superscript</0>"
|
* Expects a translation key of format "{{value}}<0>superscript</0>"
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import { styled, Theme, TypographyVariant } from '@mui/material/styles';
|
import { styled, Theme, TypographyVariant } from '@mui/material/styles';
|
||||||
import Typography, { TypographyProps } from '@mui/material/Typography';
|
import Typography, { TypographyProps } from '@mui/material/Typography';
|
||||||
import { shouldForwardProp } from '@/features/core/utils/ShouldForwardProp.ts';
|
import { shouldForwardProp } from '@/base/utils/ShouldForwardProp.ts';
|
||||||
|
|
||||||
const DEFAULT_LINE_HEIGHT = '1.5';
|
const DEFAULT_LINE_HEIGHT = '1.5';
|
||||||
|
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
import { styled } from '@mui/material/styles';
|
import { styled } from '@mui/material/styles';
|
||||||
import { TypographyProps } from '@mui/material/Typography';
|
import { TypographyProps } from '@mui/material/Typography';
|
||||||
import Stack from '@mui/material/Stack';
|
import Stack from '@mui/material/Stack';
|
||||||
import { shouldForwardProp } from '@/features/core/utils/ShouldForwardProp.ts';
|
import { shouldForwardProp } from '@/base/utils/ShouldForwardProp.ts';
|
||||||
|
|
||||||
type StyledGroupHeaderProps = {
|
type StyledGroupHeaderProps = {
|
||||||
isFirstItem: boolean;
|
isFirstItem: boolean;
|
||||||
@@ -15,8 +15,8 @@ import { SnackbarProvider } from 'notistack';
|
|||||||
import { ActiveDeviceContextProvider } from '@/features/device/DeviceContext.tsx';
|
import { ActiveDeviceContextProvider } from '@/features/device/DeviceContext.tsx';
|
||||||
import { ReaderContextProvider } from '@/features/reader/contexts/ReaderContextProvider.tsx';
|
import { ReaderContextProvider } from '@/features/reader/contexts/ReaderContextProvider.tsx';
|
||||||
import { AppHotkeysProvider } from '@/features/hotkeys/AppHotkeysProvider.tsx';
|
import { AppHotkeysProvider } from '@/features/hotkeys/AppHotkeysProvider.tsx';
|
||||||
import { SnackbarWithDescription } from '@/features/core/components/feedback/SnackbarWithDescription.tsx';
|
import { SnackbarWithDescription } from '@/base/components/feedback/SnackbarWithDescription.tsx';
|
||||||
import { AppPageHistoryContextProvider } from '@/features/core/contexts/AppPageHistoryContext.tsx';
|
import { AppPageHistoryContextProvider } from '@/base/contexts/AppPageHistoryContext.tsx';
|
||||||
import { AppThemeContextProvider } from '@/features/theme/AppThemeContext.tsx';
|
import { AppThemeContextProvider } from '@/features/theme/AppThemeContext.tsx';
|
||||||
import { NavBarContextProvider } from '@/features/navigation-bar/NavbarContext.tsx';
|
import { NavBarContextProvider } from '@/features/navigation-bar/NavbarContext.tsx';
|
||||||
|
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { createContext, useContext } from 'react';
|
import { createContext, useContext } from 'react';
|
||||||
import { useHistory } from '@/features/core/hooks/useHistory.ts';
|
import { useHistory } from '@/base/hooks/useHistory.ts';
|
||||||
|
|
||||||
export const AppPageHistoryContext = createContext<string[]>([]);
|
export const AppPageHistoryContext = createContext<string[]>([]);
|
||||||
|
|
||||||
@@ -7,8 +7,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { MutableRefObject, useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
import { MutableRefObject, useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
||||||
import { ScrollDirection } from '@/features/core/Core.types.ts';
|
import { ScrollDirection } from '@/base/Base.types.ts';
|
||||||
import { useResizeObserver } from '@/features/core/hooks/useResizeObserver.tsx';
|
import { useResizeObserver } from '@/base/hooks/useResizeObserver.tsx';
|
||||||
|
|
||||||
// "scrollBy" and "scrollTo" both require at least a change of 1px, otherwise, nothing happens
|
// "scrollBy" and "scrollTo" both require at least a change of 1px, otherwise, nothing happens
|
||||||
const MIN_SCROLL_AMOUNT_PX = 1;
|
const MIN_SCROLL_AMOUNT_PX = 1;
|
||||||
@@ -8,8 +8,8 @@
|
|||||||
|
|
||||||
import { useLocation, useNavigate } from 'react-router-dom';
|
import { useLocation, useNavigate } from 'react-router-dom';
|
||||||
import { useCallback } from 'react';
|
import { useCallback } from 'react';
|
||||||
import { AppRoutes } from '@/features/core/AppRoute.constants.ts';
|
import { AppRoutes } from '@/base/AppRoute.constants.ts';
|
||||||
import { useAppPageHistoryContext } from '@/features/core/contexts/AppPageHistoryContext.tsx';
|
import { useAppPageHistoryContext } from '@/base/contexts/AppPageHistoryContext.tsx';
|
||||||
|
|
||||||
const PAGES_TO_IGNORE: readonly RegExp[] = [/\/manga\/[0-9]+\/chapter\/[0-9]+/g];
|
const PAGES_TO_IGNORE: readonly RegExp[] = [/\/manga\/[0-9]+\/chapter\/[0-9]+/g];
|
||||||
|
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { MutableRefObject, useEffect, useRef, useState } from 'react';
|
import { MutableRefObject, useEffect, useRef, useState } from 'react';
|
||||||
import { ScrollDirection } from '@/features/core/Core.types.ts';
|
import { ScrollDirection } from '@/base/Base.types.ts';
|
||||||
import { coerceIn } from '@/lib/HelperFunctions.ts';
|
import { coerceIn } from '@/lib/HelperFunctions.ts';
|
||||||
|
|
||||||
type Positions = [OldestPos: number, SecondOldestPos: number, LatestPos: number];
|
type Positions = [OldestPos: number, SecondOldestPos: number, LatestPos: number];
|
||||||
@@ -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 { useLocalStorage } from '@/features/core/hooks/useStorage.tsx';
|
import { useLocalStorage } from '@/base/hooks/useStorage.tsx';
|
||||||
|
|
||||||
export const getPersistedServerSetting = <T,>(serverValue: T | undefined, lastValue: T): T => {
|
export const getPersistedServerSetting = <T,>(serverValue: T | undefined, lastValue: T): T => {
|
||||||
const isDisabled = serverValue === 0;
|
const isDisabled = serverValue === 0;
|
||||||
@@ -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 '@/features/core/components/modals/ConfirmDialog.tsx';
|
import { ConfirmDialog } from '@/base/components/modals/ConfirmDialog.tsx';
|
||||||
import { ControlledPromise } from '@/lib/ControlledPromise.ts';
|
import { ControlledPromise } from '@/lib/ControlledPromise.ts';
|
||||||
import { getCurrentTheme } from '@/features/theme/services/ThemeCreator.ts';
|
import { getCurrentTheme } from '@/features/theme/services/ThemeCreator.ts';
|
||||||
|
|
||||||
@@ -7,8 +7,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { t } from 'i18next';
|
import { t } from 'i18next';
|
||||||
import { ISOLanguage, IsoLanguages } from '@/features/core/IsoLanguages.ts';
|
import { ISOLanguage, IsoLanguages } from '@/base/IsoLanguages.ts';
|
||||||
import { TranslationKey } from '@/Base.types.ts';
|
|
||||||
|
import { TranslationKey } from '@/base/Base.types.ts';
|
||||||
|
|
||||||
export enum DefaultLanguage {
|
export enum DefaultLanguage {
|
||||||
ALL = 'all',
|
ALL = 'all',
|
||||||
@@ -6,6 +6,6 @@
|
|||||||
* 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 { LoadingPlaceholder } from '@/features/core/components/feedback/LoadingPlaceholder.tsx';
|
import { LoadingPlaceholder } from '@/base/components/feedback/LoadingPlaceholder.tsx';
|
||||||
|
|
||||||
export const lazyLoadFallback = { fallback: <LoadingPlaceholder /> };
|
export const lazyLoadFallback = { fallback: <LoadingPlaceholder /> };
|
||||||
@@ -11,7 +11,7 @@ import { Breakpoint, SxProps, Theme } from '@mui/material/styles';
|
|||||||
import { useCallback, useState } from 'react';
|
import { useCallback, useState } from 'react';
|
||||||
import { getCurrentTheme } from '@/features/theme/services/ThemeCreator.ts';
|
import { getCurrentTheme } from '@/features/theme/services/ThemeCreator.ts';
|
||||||
import { ThemeMode } from '@/features/theme/AppThemeContext.tsx';
|
import { ThemeMode } from '@/features/theme/AppThemeContext.tsx';
|
||||||
import { useResizeObserver } from '@/features/core/hooks/useResizeObserver.tsx';
|
import { useResizeObserver } from '@/base/hooks/useResizeObserver.tsx';
|
||||||
|
|
||||||
export class MediaQuery {
|
export class MediaQuery {
|
||||||
static readonly MOBILE_WIDTH: Breakpoint | number = 'sm';
|
static readonly MOBILE_WIDTH: Breakpoint | number = 'sm';
|
||||||
@@ -18,8 +18,8 @@ import { requestManager } from '@/lib/requests/RequestManager.ts';
|
|||||||
import { useUpdateChecker } from '@/features/app-updates/hooks/useUpdateChecker.tsx';
|
import { useUpdateChecker } from '@/features/app-updates/hooks/useUpdateChecker.tsx';
|
||||||
import { VersionUpdateInfoDialog } from '@/features/app-updates/components/VersionUpdateInfoDialog.tsx';
|
import { VersionUpdateInfoDialog } from '@/features/app-updates/components/VersionUpdateInfoDialog.tsx';
|
||||||
import { useMetadataServerSettings } from '@/features/settings/services/ServerSettingsMetadata.ts';
|
import { useMetadataServerSettings } from '@/features/settings/services/ServerSettingsMetadata.ts';
|
||||||
import { useLocalStorage } from '@/features/core/hooks/useStorage.tsx';
|
import { useLocalStorage } from '@/base/hooks/useStorage.tsx';
|
||||||
import { AppRoutes } from '@/features/core/AppRoute.constants.ts';
|
import { AppRoutes } from '@/base/AppRoute.constants.ts';
|
||||||
|
|
||||||
const disabledUpdateCheck = () => Promise.resolve();
|
const disabledUpdateCheck = () => Promise.resolve();
|
||||||
|
|
||||||
|
|||||||
@@ -16,9 +16,9 @@ import DialogActions from '@mui/material/DialogActions';
|
|||||||
import Button from '@mui/material/Button';
|
import Button from '@mui/material/Button';
|
||||||
import { defaultPromiseErrorHandler } from '@/lib/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 '@/features/core/hooks/useStorage.tsx';
|
import { useLocalStorage } from '@/base/hooks/useStorage.tsx';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
||||||
import { makeToast } from '@/features/core/utils/Toast.ts';
|
import { makeToast } from '@/base/utils/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 '@/features/app-updates/components/VersionUpdateInfoDialog.tsx';
|
import { VersionUpdateInfoDialog } from '@/features/app-updates/components/VersionUpdateInfoDialog.tsx';
|
||||||
import { useUpdateChecker } from '@/features/app-updates/hooks/useUpdateChecker.tsx';
|
import { useUpdateChecker } from '@/features/app-updates/hooks/useUpdateChecker.tsx';
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
import { useCallback, useEffect, useMemo } from 'react';
|
import { useCallback, useEffect, useMemo } from 'react';
|
||||||
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
||||||
import { useLocalStorage } from '@/features/core/hooks/useStorage.tsx';
|
import { useLocalStorage } from '@/base/hooks/useStorage.tsx';
|
||||||
|
|
||||||
const UPDATE_CHECK_INTERVAL = 1000 * 60 * 60; // 1 hour
|
const UPDATE_CHECK_INTERVAL = 1000 * 60 * 60; // 1 hour
|
||||||
const UPDATE_REMINDER_THRESHOLD = 1000 * 60 * 60; // 1 hour
|
const UPDATE_REMINDER_THRESHOLD = 1000 * 60 * 60; // 1 hour
|
||||||
|
|||||||
@@ -25,17 +25,17 @@ import { Link } from 'react-router-dom';
|
|||||||
import Stack from '@mui/material/Stack';
|
import Stack from '@mui/material/Stack';
|
||||||
import { useEventListener, useMergedRef, useWindowEvent } from '@mantine/hooks';
|
import { useEventListener, useMergedRef, useWindowEvent } from '@mantine/hooks';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
||||||
import { makeToast } from '@/features/core/utils/Toast.ts';
|
import { makeToast } from '@/base/utils/Toast.ts';
|
||||||
import { BackupRestoreState, ValidateBackupQuery } from '@/lib/graphql/generated/graphql.ts';
|
import { BackupRestoreState, ValidateBackupQuery } from '@/lib/graphql/generated/graphql.ts';
|
||||||
import { Progress } from '@/features/core/components/feedback/Progress.tsx';
|
import { Progress } from '@/base/components/feedback/Progress.tsx';
|
||||||
import { TextSetting } from '@/features/core/components/settings/text/TextSetting.tsx';
|
import { TextSetting } from '@/base/components/settings/text/TextSetting.tsx';
|
||||||
import { NumberSetting } from '@/features/core/components/settings/NumberSetting.tsx';
|
import { NumberSetting } from '@/base/components/settings/NumberSetting.tsx';
|
||||||
import { TimeSetting } from '@/features/core/components/settings/TimeSetting.tsx';
|
import { TimeSetting } from '@/base/components/settings/TimeSetting.tsx';
|
||||||
import { LoadingPlaceholder } from '@/features/core/components/feedback/LoadingPlaceholder.tsx';
|
import { LoadingPlaceholder } from '@/base/components/feedback/LoadingPlaceholder.tsx';
|
||||||
import { EmptyViewAbsoluteCentered } from '@/features/core/components/feedback/EmptyViewAbsoluteCentered.tsx';
|
import { EmptyViewAbsoluteCentered } from '@/base/components/feedback/EmptyViewAbsoluteCentered.tsx';
|
||||||
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
||||||
import { ServerSettings } from '@/features/settings/Settings.types.ts';
|
import { ServerSettings } from '@/features/settings/Settings.types.ts';
|
||||||
import { AppRoutes } from '@/features/core/AppRoute.constants.ts';
|
import { AppRoutes } from '@/base/AppRoute.constants.ts';
|
||||||
import { getErrorMessage } from '@/lib/HelperFunctions.ts';
|
import { getErrorMessage } from '@/lib/HelperFunctions.ts';
|
||||||
import { useAppTitle } from '@/features/navigation-bar/hooks/useAppTitle.ts';
|
import { useAppTitle } from '@/features/navigation-bar/hooks/useAppTitle.ts';
|
||||||
import { BrowseTab } from '@/features/browse/Browse.types.ts';
|
import { BrowseTab } from '@/features/browse/Browse.types.ts';
|
||||||
|
|||||||
@@ -12,15 +12,15 @@ import { useTranslation } from 'react-i18next';
|
|||||||
import { StringParam, useQueryParam } from 'use-query-params';
|
import { StringParam, useQueryParam } from 'use-query-params';
|
||||||
import { Sources } from '@/features/source/screens/Sources.tsx';
|
import { Sources } from '@/features/source/screens/Sources.tsx';
|
||||||
import { Extensions } from '@/features/extension/screens/Extensions.tsx';
|
import { Extensions } from '@/features/extension/screens/Extensions.tsx';
|
||||||
import { TabPanel } from '@/features/core/components/tabs/TabPanel.tsx';
|
import { TabPanel } from '@/base/components/tabs/TabPanel.tsx';
|
||||||
import { TabsWrapper } from '@/features/core/components/tabs/TabsWrapper.tsx';
|
import { TabsWrapper } from '@/base/components/tabs/TabsWrapper.tsx';
|
||||||
import { TabsMenu } from '@/features/core/components/tabs/TabsMenu.tsx';
|
import { TabsMenu } from '@/base/components/tabs/TabsMenu.tsx';
|
||||||
import { Migration } from '@/features/migration/screens/Migration.tsx';
|
import { Migration } from '@/features/migration/screens/Migration.tsx';
|
||||||
import { useResizeObserver } from '@/features/core/hooks/useResizeObserver.tsx';
|
import { useResizeObserver } from '@/base/hooks/useResizeObserver.tsx';
|
||||||
import { useAppTitle } from '@/features/navigation-bar/hooks/useAppTitle.ts';
|
import { useAppTitle } from '@/features/navigation-bar/hooks/useAppTitle.ts';
|
||||||
import { BrowseTab } from '@/features/browse/Browse.types.ts';
|
import { BrowseTab } from '@/features/browse/Browse.types.ts';
|
||||||
import { GROUPED_VIRTUOSO_Z_INDEX } from '@/lib/virtuoso/Virtuoso.constants.ts';
|
import { GROUPED_VIRTUOSO_Z_INDEX } from '@/lib/virtuoso/Virtuoso.constants.ts';
|
||||||
import { SearchParam } from '@/features/core/Core.types.ts';
|
import { SearchParam } from '@/base/Base.types.ts';
|
||||||
|
|
||||||
export function Browse() {
|
export function Browse() {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|||||||
@@ -12,17 +12,17 @@ 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 { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
||||||
import { NumberSetting } from '@/features/core/components/settings/NumberSetting.tsx';
|
import { NumberSetting } from '@/base/components/settings/NumberSetting.tsx';
|
||||||
import { MutableListSetting } from '@/features/core/components/settings/MutableListSetting.tsx';
|
import { MutableListSetting } from '@/base/components/settings/MutableListSetting.tsx';
|
||||||
import { TextSetting } from '@/features/core/components/settings/text/TextSetting.tsx';
|
import { TextSetting } from '@/base/components/settings/text/TextSetting.tsx';
|
||||||
import {
|
import {
|
||||||
createUpdateMetadataServerSettings,
|
createUpdateMetadataServerSettings,
|
||||||
useMetadataServerSettings,
|
useMetadataServerSettings,
|
||||||
} from '@/features/settings/services/ServerSettingsMetadata.ts';
|
} from '@/features/settings/services/ServerSettingsMetadata.ts';
|
||||||
import { LoadingPlaceholder } from '@/features/core/components/feedback/LoadingPlaceholder.tsx';
|
import { LoadingPlaceholder } from '@/base/components/feedback/LoadingPlaceholder.tsx';
|
||||||
import { EmptyViewAbsoluteCentered } from '@/features/core/components/feedback/EmptyViewAbsoluteCentered.tsx';
|
import { EmptyViewAbsoluteCentered } from '@/base/components/feedback/EmptyViewAbsoluteCentered.tsx';
|
||||||
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
||||||
import { makeToast } from '@/features/core/utils/Toast.ts';
|
import { makeToast } from '@/base/utils/Toast.ts';
|
||||||
import { MetadataBrowseSettings } from '@/features/browse/Browse.types.ts';
|
import { MetadataBrowseSettings } from '@/features/browse/Browse.types.ts';
|
||||||
import { ServerSettings as GqlServerSettings } from '@/features/settings/Settings.types.ts';
|
import { ServerSettings as GqlServerSettings } from '@/features/settings/Settings.types.ts';
|
||||||
import { getErrorMessage } from '@/lib/HelperFunctions.ts';
|
import { getErrorMessage } from '@/lib/HelperFunctions.ts';
|
||||||
|
|||||||
@@ -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 '@/features/core/components/inputs/ThreeStateCheckboxInput.tsx';
|
import { ThreeStateCheckboxInput } from '@/base/components/inputs/ThreeStateCheckboxInput.tsx';
|
||||||
import { makeToast } from '@/features/core/utils/Toast.ts';
|
import { makeToast } from '@/base/utils/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/RequestManager.ts';
|
||||||
import { CheckboxContainer } from '@/features/core/components/inputs/CheckboxContainer.ts';
|
import { CheckboxContainer } from '@/base/components/inputs/CheckboxContainer.ts';
|
||||||
import {
|
import {
|
||||||
CategoryDownloadInclusionInfo,
|
CategoryDownloadInclusionInfo,
|
||||||
CategoryIdInfo,
|
CategoryIdInfo,
|
||||||
|
|||||||
@@ -19,10 +19,10 @@ import Stack from '@mui/material/Stack';
|
|||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
||||||
import { Mangas } from '@/features/manga/services/Mangas.ts';
|
import { Mangas } from '@/features/manga/services/Mangas.ts';
|
||||||
import { useSelectableCollection } from '@/features/collection/hooks/useSelectableCollection.ts';
|
import { useSelectableCollection } from '@/features/collection/hooks/useSelectableCollection.ts';
|
||||||
import { ThreeStateCheckboxInput } from '@/features/core/components/inputs/ThreeStateCheckboxInput.tsx';
|
import { ThreeStateCheckboxInput } from '@/base/components/inputs/ThreeStateCheckboxInput.tsx';
|
||||||
import { Categories } from '@/features/category/services/Categories.ts';
|
import { Categories } from '@/features/category/services/Categories.ts';
|
||||||
import { CheckboxInput } from '@/features/core/components/inputs/CheckboxInput.tsx';
|
import { CheckboxInput } from '@/base/components/inputs/CheckboxInput.tsx';
|
||||||
import { makeToast } from '@/features/core/utils/Toast.ts';
|
import { makeToast } from '@/base/utils/Toast.ts';
|
||||||
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
||||||
import { updateMetadataServerSettings } from '@/features/settings/services/ServerSettingsMetadata.ts';
|
import { updateMetadataServerSettings } from '@/features/settings/services/ServerSettingsMetadata.ts';
|
||||||
import {
|
import {
|
||||||
@@ -33,7 +33,7 @@ import {
|
|||||||
} from '@/lib/graphql/generated/graphql.ts';
|
} from '@/lib/graphql/generated/graphql.ts';
|
||||||
import { GET_CATEGORIES_BASE } from '@/lib/graphql/queries/CategoryQuery.ts';
|
import { GET_CATEGORIES_BASE } from '@/lib/graphql/queries/CategoryQuery.ts';
|
||||||
import { GET_MANGA_CATEGORIES } from '@/lib/graphql/queries/MangaQuery.ts';
|
import { GET_MANGA_CATEGORIES } from '@/lib/graphql/queries/MangaQuery.ts';
|
||||||
import { AppRoutes } from '@/features/core/AppRoute.constants.ts';
|
import { AppRoutes } from '@/base/AppRoute.constants.ts';
|
||||||
import { getErrorMessage } from '@/lib/HelperFunctions.ts';
|
import { getErrorMessage } from '@/lib/HelperFunctions.ts';
|
||||||
|
|
||||||
type BaseProps = {
|
type BaseProps = {
|
||||||
|
|||||||
@@ -15,10 +15,10 @@ import Box from '@mui/material/Box';
|
|||||||
import Card from '@mui/material/Card';
|
import Card from '@mui/material/Card';
|
||||||
import Stack from '@mui/material/Stack';
|
import Stack from '@mui/material/Stack';
|
||||||
import Typography from '@mui/material/Typography';
|
import Typography from '@mui/material/Typography';
|
||||||
import { CustomTooltip } from '@/features/core/components/CustomTooltip.tsx';
|
import { CustomTooltip } from '@/base/components/CustomTooltip.tsx';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
||||||
import { CategoryType } from '@/lib/graphql/generated/graphql.ts';
|
import { CategoryType } from '@/lib/graphql/generated/graphql.ts';
|
||||||
import { ListCardContent } from '@/features/core/components/lists/cards/ListCardContent.tsx';
|
import { ListCardContent } from '@/base/components/lists/cards/ListCardContent.tsx';
|
||||||
|
|
||||||
export const CategorySettingsCard = ({
|
export const CategorySettingsCard = ({
|
||||||
category,
|
category,
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ import { useTranslation } from 'react-i18next';
|
|||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
||||||
import { CategoryDefaultInfo, CategoryIdInfo, CategoryNameInfo } from '@/features/category/Category.types.ts';
|
import { CategoryDefaultInfo, CategoryIdInfo, CategoryNameInfo } from '@/features/category/Category.types.ts';
|
||||||
import { getErrorMessage } from '@/lib/HelperFunctions.ts';
|
import { getErrorMessage } from '@/lib/HelperFunctions.ts';
|
||||||
import { makeToast } from '@/features/core/utils/Toast.ts';
|
import { makeToast } from '@/base/utils/Toast.ts';
|
||||||
import { assertIsDefined } from '@/Asserts.ts';
|
import { assertIsDefined } from '@/base/Asserts.ts';
|
||||||
|
|
||||||
export const CreateOrEditCategoryDialog = ({
|
export const CreateOrEditCategoryDialog = ({
|
||||||
category,
|
category,
|
||||||
|
|||||||
@@ -14,9 +14,9 @@ import Box from '@mui/material/Box';
|
|||||||
import { closestCenter, DndContext, DragEndEvent } from '@dnd-kit/core';
|
import { closestCenter, DndContext, DragEndEvent } from '@dnd-kit/core';
|
||||||
import { SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable';
|
import { SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
||||||
import { DEFAULT_FULL_FAB_HEIGHT } from '@/features/core/components/buttons/StyledFab.tsx';
|
import { DEFAULT_FULL_FAB_HEIGHT } from '@/base/components/buttons/StyledFab.tsx';
|
||||||
import { LoadingPlaceholder } from '@/features/core/components/feedback/LoadingPlaceholder.tsx';
|
import { LoadingPlaceholder } from '@/base/components/feedback/LoadingPlaceholder.tsx';
|
||||||
import { EmptyViewAbsoluteCentered } from '@/features/core/components/feedback/EmptyViewAbsoluteCentered.tsx';
|
import { EmptyViewAbsoluteCentered } from '@/base/components/feedback/EmptyViewAbsoluteCentered.tsx';
|
||||||
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
||||||
import { GetCategoriesSettingsQuery, GetCategoriesSettingsQueryVariables } from '@/lib/graphql/generated/graphql.ts';
|
import { GetCategoriesSettingsQuery, GetCategoriesSettingsQueryVariables } from '@/lib/graphql/generated/graphql.ts';
|
||||||
import { GET_CATEGORIES_SETTINGS } from '@/lib/graphql/queries/CategoryQuery.ts';
|
import { GET_CATEGORIES_SETTINGS } from '@/lib/graphql/queries/CategoryQuery.ts';
|
||||||
|
|||||||
@@ -6,8 +6,8 @@
|
|||||||
* 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 { TranslationKey } from '@/Base.types.ts';
|
|
||||||
import { ChapterAction, ChapterListOptions, ChapterSortMode } from '@/features/chapter/Chapter.types.ts';
|
import { ChapterAction, ChapterListOptions, ChapterSortMode } from '@/features/chapter/Chapter.types.ts';
|
||||||
|
import { TranslationKey } from '@/base/Base.types.ts';
|
||||||
|
|
||||||
export const FALLBACK_CHAPTER = { id: -1, name: '', realUrl: '', isBookmarked: false };
|
export const FALLBACK_CHAPTER = { id: -1, name: '', realUrl: '', isBookmarked: false };
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user