Rename "EmptyView"
This commit is contained in:
@@ -11,7 +11,7 @@ import Grid, { GridTypeMap } from '@mui/material/Grid';
|
|||||||
import Box from '@mui/material/Box';
|
import Box 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 { EmptyView } from '@/components/util/EmptyView';
|
import { EmptyViewAbsoluteCentered } from '@/components/util/EmptyViewAbsoluteCentered.tsx';
|
||||||
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder';
|
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder';
|
||||||
import { MangaCard } from '@/components/MangaCard';
|
import { MangaCard } from '@/components/MangaCard';
|
||||||
import { GridLayout } from '@/components/context/LibraryOptionsContext';
|
import { GridLayout } from '@/components/context/LibraryOptionsContext';
|
||||||
@@ -213,7 +213,7 @@ const VerticalGrid = forwardRef(
|
|||||||
|
|
||||||
export interface IMangaGridProps
|
export interface IMangaGridProps
|
||||||
extends Omit<DefaultGridProps, 'GridItemContainer'>,
|
extends Omit<DefaultGridProps, 'GridItemContainer'>,
|
||||||
Partial<React.ComponentProps<typeof EmptyView>> {
|
Partial<React.ComponentProps<typeof EmptyViewAbsoluteCentered>> {
|
||||||
hasNextPage: boolean;
|
hasNextPage: boolean;
|
||||||
loadMore: () => void;
|
loadMore: () => void;
|
||||||
horizontal?: boolean | undefined;
|
horizontal?: boolean | undefined;
|
||||||
@@ -314,7 +314,9 @@ export const MangaGrid: React.FC<IMangaGridProps> = (props) => {
|
|||||||
|
|
||||||
const hasNoItems = !isLoading && mangas.length === 0;
|
const hasNoItems = !isLoading && mangas.length === 0;
|
||||||
if (hasNoItems) {
|
if (hasNoItems) {
|
||||||
return <EmptyView noFaces={noFaces} message={message!} messageExtra={messageExtra} retry={retry} />;
|
return (
|
||||||
|
<EmptyViewAbsoluteCentered noFaces={noFaces} message={message!} messageExtra={messageExtra} retry={retry} />
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import { requestManager } from '@/lib/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 { EmptyView } from '@/components/util/EmptyView.tsx';
|
import { EmptyViewAbsoluteCentered } from '@/components/util/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 '@/components/util/StyledFab.tsx';
|
||||||
@@ -149,7 +149,7 @@ export const ChapterList: React.FC<IProps> = ({ manga, isRefreshing }) => {
|
|||||||
if (error) {
|
if (error) {
|
||||||
return (
|
return (
|
||||||
<Stack sx={{ justifyContent: 'center', position: 'relative', flexGrow: 1 }}>
|
<Stack sx={{ justifyContent: 'center', position: 'relative', flexGrow: 1 }}>
|
||||||
<EmptyView
|
<EmptyViewAbsoluteCentered
|
||||||
message={t('global.error.label.failed_to_load_data')}
|
message={t('global.error.label.failed_to_load_data')}
|
||||||
messageExtra={error.message}
|
messageExtra={error.message}
|
||||||
retry={() => refetch().catch(defaultPromiseErrorHandler('ChapterList::refetch'))}
|
retry={() => refetch().catch(defaultPromiseErrorHandler('ChapterList::refetch'))}
|
||||||
@@ -214,8 +214,10 @@ export const ChapterList: React.FC<IProps> = ({ manga, isRefreshing }) => {
|
|||||||
</Stack>
|
</Stack>
|
||||||
</ChapterListHeader>
|
</ChapterListHeader>
|
||||||
|
|
||||||
{noChaptersFound && <EmptyView message={t('chapter.error.label.no_chapter_found')} />}
|
{noChaptersFound && <EmptyViewAbsoluteCentered message={t('chapter.error.label.no_chapter_found')} />}
|
||||||
{noChaptersMatchingFilter && <EmptyView message={t('chapter.error.label.no_matches')} />}
|
{noChaptersMatchingFilter && (
|
||||||
|
<EmptyViewAbsoluteCentered message={t('chapter.error.label.no_matches')} />
|
||||||
|
)}
|
||||||
|
|
||||||
<StyledVirtuoso
|
<StyledVirtuoso
|
||||||
style={{
|
style={{
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import { NavBarContext, useSetDefaultBackTo } from '@/components/context/NavbarC
|
|||||||
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 '@/components/atoms/Select.tsx';
|
||||||
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
||||||
import { EmptyView } from '@/components/util/EmptyView.tsx';
|
import { EmptyViewAbsoluteCentered } from '@/components/util/EmptyViewAbsoluteCentered.tsx';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
||||||
|
|
||||||
export const DeviceSetting = () => {
|
export const DeviceSetting = () => {
|
||||||
@@ -72,7 +72,7 @@ export const DeviceSetting = () => {
|
|||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
return (
|
return (
|
||||||
<EmptyView
|
<EmptyViewAbsoluteCentered
|
||||||
message={t('global.error.label.failed_to_load_data')}
|
message={t('global.error.label.failed_to_load_data')}
|
||||||
messageExtra={error.message}
|
messageExtra={error.message}
|
||||||
retry={() => refetch().catch(defaultPromiseErrorHandler('DeviceSetting::refetch'))}
|
retry={() => refetch().catch(defaultPromiseErrorHandler('DeviceSetting::refetch'))}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ 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/RequestManager.ts';
|
||||||
import { EmptyView } from '@/components/util/EmptyView.tsx';
|
import { EmptyViewAbsoluteCentered } from '@/components/util/EmptyViewAbsoluteCentered.tsx';
|
||||||
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
import { LoadingPlaceholder } from '@/components/util/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';
|
||||||
@@ -81,7 +81,7 @@ export const TrackManga = ({ manga }: { manga: Pick<TManga, 'id' | 'trackRecords
|
|||||||
|
|
||||||
if (trackerList.error) {
|
if (trackerList.error) {
|
||||||
return (
|
return (
|
||||||
<EmptyView
|
<EmptyViewAbsoluteCentered
|
||||||
message={t('global.error.label.failed_to_load_data')}
|
message={t('global.error.label.failed_to_load_data')}
|
||||||
messageExtra={trackerList.error.message}
|
messageExtra={trackerList.error.message}
|
||||||
retry={() => trackerList.refetch().catch(defaultPromiseErrorHandler('TrackManga::refetch'))}
|
retry={() => trackerList.refetch().catch(defaultPromiseErrorHandler('TrackManga::refetch'))}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import ArrowForwardIcon from '@mui/icons-material/ArrowForward';
|
|||||||
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 { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
||||||
import { EmptyView } from '@/components/util/EmptyView.tsx';
|
import { EmptyViewAbsoluteCentered } from '@/components/util/EmptyViewAbsoluteCentered.tsx';
|
||||||
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
||||||
import { TBaseTracker } from '@/lib/data/Trackers.ts';
|
import { TBaseTracker } from '@/lib/data/Trackers.ts';
|
||||||
import { SearchTextField } from '@/components/atoms/SearchTextField.tsx';
|
import { SearchTextField } from '@/components/atoms/SearchTextField.tsx';
|
||||||
@@ -108,11 +108,11 @@ export const TrackerSearch = ({
|
|||||||
</DialogTitle>
|
</DialogTitle>
|
||||||
<DialogContent dividers sx={{ padding: DIALOG_PADDING, height: '100vh' }}>
|
<DialogContent dividers sx={{ padding: DIALOG_PADDING, height: '100vh' }}>
|
||||||
{!trackerSearch.loading && !trackerSearch.error && !hasResults && (
|
{!trackerSearch.loading && !trackerSearch.error && !hasResults && (
|
||||||
<EmptyView message={t('manga.error.label.no_mangas_found')} />
|
<EmptyViewAbsoluteCentered message={t('manga.error.label.no_mangas_found')} />
|
||||||
)}
|
)}
|
||||||
{trackerSearch.loading && <LoadingPlaceholder />}
|
{trackerSearch.loading && <LoadingPlaceholder />}
|
||||||
{trackerSearch.error && !trackerSearch.loading && (
|
{trackerSearch.error && !trackerSearch.loading && (
|
||||||
<EmptyView
|
<EmptyViewAbsoluteCentered
|
||||||
message={t('global.error.label.failed_to_load_data')}
|
message={t('global.error.label.failed_to_load_data')}
|
||||||
messageExtra={trackerSearch.error.message}
|
messageExtra={trackerSearch.error.message}
|
||||||
retry={() =>
|
retry={() =>
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ interface IProps {
|
|||||||
noFaces?: boolean;
|
noFaces?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function EmptyView({ message, messageExtra, retry, noFaces }: IProps) {
|
export function EmptyViewAbsoluteCentered({ message, messageExtra, retry, noFaces }: IProps) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const isMobileWidth = useMediaQuery(theme.breakpoints.down('sm'));
|
const isMobileWidth = useMediaQuery(theme.breakpoints.down('sm'));
|
||||||
@@ -60,6 +60,6 @@ export function EmptyView({ message, messageExtra, retry, noFaces }: IProps) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
EmptyView.defaultProps = {
|
EmptyViewAbsoluteCentered.defaultProps = {
|
||||||
messageExtra: undefined,
|
messageExtra: undefined,
|
||||||
};
|
};
|
||||||
@@ -27,7 +27,7 @@ import { requestManager } from '@/lib/requests/RequestManager.ts';
|
|||||||
import { StrictModeDroppable } from '@/lib/StrictModeDroppable';
|
import { StrictModeDroppable } from '@/lib/StrictModeDroppable';
|
||||||
import { makeToast } from '@/components/util/Toast';
|
import { makeToast } from '@/components/util/Toast';
|
||||||
import { DownloadStateIndicator } from '@/components/molecules/DownloadStateIndicator';
|
import { DownloadStateIndicator } from '@/components/molecules/DownloadStateIndicator';
|
||||||
import { EmptyView } from '@/components/util/EmptyView';
|
import { EmptyViewAbsoluteCentered } from '@/components/util/EmptyViewAbsoluteCentered.tsx';
|
||||||
import { ChapterType, DownloadType } from '@/lib/graphql/generated/graphql.ts';
|
import { ChapterType, DownloadType } from '@/lib/graphql/generated/graphql.ts';
|
||||||
import { TChapter } from '@/typings.ts';
|
import { TChapter } from '@/typings.ts';
|
||||||
import { NavBarContext } from '@/components/context/NavbarContext.tsx';
|
import { NavBarContext } from '@/components/context/NavbarContext.tsx';
|
||||||
@@ -225,7 +225,7 @@ export const DownloadQueue: React.FC = () => {
|
|||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
return (
|
return (
|
||||||
<EmptyView
|
<EmptyViewAbsoluteCentered
|
||||||
message={t('global.error.label.failed_to_load_data')}
|
message={t('global.error.label.failed_to_load_data')}
|
||||||
messageExtra={error.message}
|
messageExtra={error.message}
|
||||||
retry={() => refetch().catch(defaultPromiseErrorHandler('DownloadQueue::refetch'))}
|
retry={() => refetch().catch(defaultPromiseErrorHandler('DownloadQueue::refetch'))}
|
||||||
@@ -234,7 +234,7 @@ export const DownloadQueue: React.FC = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (isQueueEmpty) {
|
if (isQueueEmpty) {
|
||||||
return <EmptyView message={t('download.queue.label.no_downloads')} />;
|
return <EmptyViewAbsoluteCentered message={t('download.queue.label.no_downloads')} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ import { NavBarContext } from '@/components/context/NavbarContext.tsx';
|
|||||||
import { StyledGroupedVirtuoso } from '@/components/virtuoso/StyledGroupedVirtuoso.tsx';
|
import { StyledGroupedVirtuoso } from '@/components/virtuoso/StyledGroupedVirtuoso.tsx';
|
||||||
import { StyledGroupHeader } from '@/components/virtuoso/StyledGroupHeader.tsx';
|
import { StyledGroupHeader } from '@/components/virtuoso/StyledGroupHeader.tsx';
|
||||||
import { StyledGroupItemWrapper } from '@/components/virtuoso/StyledGroupItemWrapper.tsx';
|
import { StyledGroupItemWrapper } from '@/components/virtuoso/StyledGroupItemWrapper.tsx';
|
||||||
import { EmptyView } from '@/components/util/EmptyView.tsx';
|
import { EmptyViewAbsoluteCentered } from '@/components/util/EmptyViewAbsoluteCentered.tsx';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
||||||
|
|
||||||
const LANGUAGE = 0;
|
const LANGUAGE = 0;
|
||||||
@@ -237,7 +237,7 @@ export function Extensions() {
|
|||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
return (
|
return (
|
||||||
<EmptyView
|
<EmptyViewAbsoluteCentered
|
||||||
message={t('global.error.label.failed_to_load_data')}
|
message={t('global.error.label.failed_to_load_data')}
|
||||||
messageExtra={error.message}
|
messageExtra={error.message}
|
||||||
retry={() => fetchExtensions().catch(defaultPromiseErrorHandler('Extensions::refetch'))}
|
retry={() => fetchExtensions().catch(defaultPromiseErrorHandler('Extensions::refetch'))}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import React, { useCallback, useContext, useEffect, useMemo, useState } from 're
|
|||||||
import { useQueryParam, NumberParam } from 'use-query-params';
|
import { useQueryParam, NumberParam } from 'use-query-params';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
||||||
import { EmptyView } from '@/components/util/EmptyView';
|
import { EmptyViewAbsoluteCentered } from '@/components/util/EmptyViewAbsoluteCentered.tsx';
|
||||||
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder';
|
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder';
|
||||||
import { TabPanel } from '@/components/tabs/TabPanel.tsx';
|
import { TabPanel } from '@/components/tabs/TabPanel.tsx';
|
||||||
import { LibraryToolbarMenu } from '@/components/library/LibraryToolbarMenu';
|
import { LibraryToolbarMenu } from '@/components/library/LibraryToolbarMenu';
|
||||||
@@ -195,7 +195,7 @@ export function Library() {
|
|||||||
|
|
||||||
if (tabsError != null) {
|
if (tabsError != null) {
|
||||||
return (
|
return (
|
||||||
<EmptyView
|
<EmptyViewAbsoluteCentered
|
||||||
message={t('category.error.label.request_failure')}
|
message={t('category.error.label.request_failure')}
|
||||||
messageExtra={tabsError.message}
|
messageExtra={tabsError.message}
|
||||||
retry={() => refetchCategories().catch(defaultPromiseErrorHandler('Library::refetchCategories'))}
|
retry={() => refetchCategories().catch(defaultPromiseErrorHandler('Library::refetchCategories'))}
|
||||||
@@ -208,7 +208,7 @@ export function Library() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (tabs.length === 0) {
|
if (tabs.length === 0) {
|
||||||
return <EmptyView message={t('library.error.label.empty')} />;
|
return <EmptyViewAbsoluteCentered message={t('library.error.label.empty')} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tabs.length === 1) {
|
if (tabs.length === 1) {
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ import { ChapterList } from '@/components/chapter/ChapterList.tsx';
|
|||||||
import { useRefreshManga } from '@/components/manga/useRefreshManga.ts';
|
import { useRefreshManga } from '@/components/manga/useRefreshManga.ts';
|
||||||
import { MangaDetails } from '@/components/manga/MangaDetails';
|
import { MangaDetails } from '@/components/manga/MangaDetails';
|
||||||
import { MangaToolbarMenu } from '@/components/manga/MangaToolbarMenu';
|
import { MangaToolbarMenu } from '@/components/manga/MangaToolbarMenu';
|
||||||
import { EmptyView } from '@/components/util/EmptyView';
|
import { EmptyViewAbsoluteCentered } from '@/components/util/EmptyViewAbsoluteCentered.tsx';
|
||||||
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder';
|
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder';
|
||||||
|
|
||||||
export const Manga: React.FC = () => {
|
export const Manga: React.FC = () => {
|
||||||
@@ -92,7 +92,9 @@ export const Manga: React.FC = () => {
|
|||||||
}, [t, error, isValidating, refreshing, manga, refresh]);
|
}, [t, error, isValidating, refreshing, manga, refresh]);
|
||||||
|
|
||||||
if (error && !manga) {
|
if (error && !manga) {
|
||||||
return <EmptyView message={t('manga.error.label.request_failure')} messageExtra={error.message} />;
|
return (
|
||||||
|
<EmptyViewAbsoluteCentered message={t('manga.error.label.request_failure')} messageExtra={error.message} />
|
||||||
|
);
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<Box sx={{ display: { md: 'flex' }, overflow: 'hidden' }}>
|
<Box sx={{ display: { md: 'flex' }, overflow: 'hidden' }}>
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import { NavBarContext } from '@/components/context/NavbarContext.tsx';
|
|||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
||||||
import { TMigratableSource } from '@/components/MigrationCard.tsx';
|
import { TMigratableSource } from '@/components/MigrationCard.tsx';
|
||||||
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
||||||
import { EmptyView } from '@/components/util/EmptyView.tsx';
|
import { EmptyViewAbsoluteCentered } from '@/components/util/EmptyViewAbsoluteCentered.tsx';
|
||||||
import { MangaGrid } from '@/components/MangaGrid.tsx';
|
import { MangaGrid } from '@/components/MangaGrid.tsx';
|
||||||
import { TPartialManga } from '@/typings.ts';
|
import { TPartialManga } from '@/typings.ts';
|
||||||
import { GridLayouts } from '@/components/source/GridLayouts.tsx';
|
import { GridLayouts } from '@/components/source/GridLayouts.tsx';
|
||||||
@@ -99,7 +99,7 @@ export const Migrate = () => {
|
|||||||
if (hasError) {
|
if (hasError) {
|
||||||
const error = (hasErrorSource ? sourceError : mangasError)!;
|
const error = (hasErrorSource ? sourceError : mangasError)!;
|
||||||
return (
|
return (
|
||||||
<EmptyView
|
<EmptyViewAbsoluteCentered
|
||||||
message={t('global.error.label.failed_to_load_data')}
|
message={t('global.error.label.failed_to_load_data')}
|
||||||
messageExtra={error.message}
|
messageExtra={error.message}
|
||||||
retry={() => {
|
retry={() => {
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import { useMemo } from 'react';
|
|||||||
import List from '@mui/material/List';
|
import List from '@mui/material/List';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
||||||
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
||||||
import { EmptyView } from '@/components/util/EmptyView.tsx';
|
import { EmptyViewAbsoluteCentered } from '@/components/util/EmptyViewAbsoluteCentered.tsx';
|
||||||
import { GetMigratableSourcesQuery } from '@/lib/graphql/generated/graphql.ts';
|
import { GetMigratableSourcesQuery } from '@/lib/graphql/generated/graphql.ts';
|
||||||
import { MigrationCard, TMigratableSource } from '@/components/MigrationCard.tsx';
|
import { MigrationCard, TMigratableSource } from '@/components/MigrationCard.tsx';
|
||||||
import { StyledGroupItemWrapper } from '@/components/virtuoso/StyledGroupItemWrapper.tsx';
|
import { StyledGroupItemWrapper } from '@/components/virtuoso/StyledGroupItemWrapper.tsx';
|
||||||
@@ -55,7 +55,7 @@ export const Migration = () => {
|
|||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
return (
|
return (
|
||||||
<EmptyView
|
<EmptyViewAbsoluteCentered
|
||||||
message={t('global.error.label.failed_to_load_data')}
|
message={t('global.error.label.failed_to_load_data')}
|
||||||
messageExtra={error.message}
|
messageExtra={error.message}
|
||||||
retry={() => refetch().catch(defaultPromiseErrorHandler('Migration::refetch'))}
|
retry={() => refetch().catch(defaultPromiseErrorHandler('Migration::refetch'))}
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ import { UpdateChapterPatchInput } from '@/lib/graphql/generated/graphql.ts';
|
|||||||
import { useMetadataServerSettings } from '@/lib/metadata/metadataServerSettings.ts';
|
import { useMetadataServerSettings } from '@/lib/metadata/metadataServerSettings.ts';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
||||||
import { Chapters } from '@/lib/data/Chapters.ts';
|
import { Chapters } from '@/lib/data/Chapters.ts';
|
||||||
import { EmptyView } from '@/components/util/EmptyView.tsx';
|
import { EmptyViewAbsoluteCentered } from '@/components/util/EmptyViewAbsoluteCentered.tsx';
|
||||||
|
|
||||||
const getReaderComponent = (readerType: ReaderType) => {
|
const getReaderComponent = (readerType: ReaderType) => {
|
||||||
switch (readerType) {
|
switch (readerType) {
|
||||||
@@ -434,7 +434,7 @@ export function Reader() {
|
|||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
return (
|
return (
|
||||||
<EmptyView
|
<EmptyViewAbsoluteCentered
|
||||||
message={t('global.error.label.failed_to_load_data')}
|
message={t('global.error.label.failed_to_load_data')}
|
||||||
messageExtra={error.message}
|
messageExtra={error.message}
|
||||||
retry={() => {
|
retry={() => {
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ import { MultiSelectListPreference } from '@/components/sourceConfiguration/Mult
|
|||||||
import { PreferenceProps } from '@/typings.ts';
|
import { PreferenceProps } from '@/typings.ts';
|
||||||
import { NavBarContext } from '@/components/context/NavbarContext.tsx';
|
import { NavBarContext } from '@/components/context/NavbarContext.tsx';
|
||||||
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
||||||
import { EmptyView } from '@/components/util/EmptyView.tsx';
|
import { EmptyViewAbsoluteCentered } from '@/components/util/EmptyViewAbsoluteCentered.tsx';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
||||||
|
|
||||||
function getPrefComponent(type: string) {
|
function getPrefComponent(type: string) {
|
||||||
@@ -71,7 +71,7 @@ export function SourceConfigure() {
|
|||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
return (
|
return (
|
||||||
<EmptyView
|
<EmptyViewAbsoluteCentered
|
||||||
message={t('global.error.label.failed_to_load_data')}
|
message={t('global.error.label.failed_to_load_data')}
|
||||||
messageExtra={error.message}
|
messageExtra={error.message}
|
||||||
retry={() => refetch().catch(defaultPromiseErrorHandler('SourceConfigure::refetch'))}
|
retry={() => refetch().catch(defaultPromiseErrorHandler('SourceConfigure::refetch'))}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder';
|
|||||||
import { SourceCard } from '@/components/SourceCard';
|
import { SourceCard } from '@/components/SourceCard';
|
||||||
import { LangSelect } from '@/components/navbar/action/LangSelect';
|
import { LangSelect } from '@/components/navbar/action/LangSelect';
|
||||||
import { NavBarContext } from '@/components/context/NavbarContext.tsx';
|
import { NavBarContext } from '@/components/context/NavbarContext.tsx';
|
||||||
import { EmptyView } from '@/components/util/EmptyView.tsx';
|
import { EmptyViewAbsoluteCentered } from '@/components/util/EmptyViewAbsoluteCentered.tsx';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
||||||
|
|
||||||
function sourceToLangList(sources: ISource[]) {
|
function sourceToLangList(sources: ISource[]) {
|
||||||
@@ -118,7 +118,7 @@ export function Sources() {
|
|||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
return (
|
return (
|
||||||
<EmptyView
|
<EmptyViewAbsoluteCentered
|
||||||
message={t('global.error.label.failed_to_load_data')}
|
message={t('global.error.label.failed_to_load_data')}
|
||||||
messageExtra={error.message}
|
messageExtra={error.message}
|
||||||
retry={() => refetch().catch(defaultPromiseErrorHandler('Sources::refetch'))}
|
retry={() => refetch().catch(defaultPromiseErrorHandler('Sources::refetch'))}
|
||||||
@@ -127,7 +127,7 @@ export function Sources() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (sources?.length === 0) {
|
if (sources?.length === 0) {
|
||||||
return <EmptyView message={t('source.error.label.no_sources_found')} />;
|
return <EmptyViewAbsoluteCentered message={t('source.error.label.no_sources_found')} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ import { useTranslation } from 'react-i18next';
|
|||||||
import { t as translate } from 'i18next';
|
import { t as translate } from 'i18next';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
||||||
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder';
|
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder';
|
||||||
import { EmptyView } from '@/components/util/EmptyView';
|
import { EmptyViewAbsoluteCentered } from '@/components/util/EmptyViewAbsoluteCentered.tsx';
|
||||||
import { DownloadStateIndicator } from '@/components/molecules/DownloadStateIndicator';
|
import { DownloadStateIndicator } from '@/components/molecules/DownloadStateIndicator';
|
||||||
import { DownloadType } from '@/lib/graphql/generated/graphql.ts';
|
import { DownloadType } from '@/lib/graphql/generated/graphql.ts';
|
||||||
import { TChapter } from '@/typings.ts';
|
import { TChapter } from '@/typings.ts';
|
||||||
@@ -137,7 +137,7 @@ export const Updates: React.FC = () => {
|
|||||||
}, [hasNextPage, endCursor]);
|
}, [hasNextPage, endCursor]);
|
||||||
|
|
||||||
if (!isLoading && updateEntries.length === 0) {
|
if (!isLoading && updateEntries.length === 0) {
|
||||||
return <EmptyView message={t('updates.error.label.no_updates_available')} />;
|
return <EmptyViewAbsoluteCentered message={t('updates.error.label.no_updates_available')} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ import { NavBarContext, useSetDefaultBackTo } from '@/components/context/NavbarC
|
|||||||
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder';
|
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder';
|
||||||
import { GetAboutQuery, UpdateState } from '@/lib/graphql/generated/graphql.ts';
|
import { GetAboutQuery, UpdateState } from '@/lib/graphql/generated/graphql.ts';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
||||||
import { EmptyView } from '@/components/util/EmptyView.tsx';
|
import { EmptyViewAbsoluteCentered } from '@/components/util/EmptyViewAbsoluteCentered.tsx';
|
||||||
|
|
||||||
type AboutServer = GetAboutQuery['aboutServer'];
|
type AboutServer = GetAboutQuery['aboutServer'];
|
||||||
|
|
||||||
@@ -242,7 +242,7 @@ export function About() {
|
|||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
return (
|
return (
|
||||||
<EmptyView
|
<EmptyViewAbsoluteCentered
|
||||||
message={t('global.error.label.failed_to_load_data')}
|
message={t('global.error.label.failed_to_load_data')}
|
||||||
messageExtra={error.message}
|
messageExtra={error.message}
|
||||||
retry={() => refetch().catch(defaultPromiseErrorHandler('About::refetch'))}
|
retry={() => refetch().catch(defaultPromiseErrorHandler('About::refetch'))}
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ import { NumberSetting } from '@/components/settings/NumberSetting.tsx';
|
|||||||
import { TimeSetting } from '@/components/settings/TimeSetting.tsx';
|
import { TimeSetting } from '@/components/settings/TimeSetting.tsx';
|
||||||
import { ServerSettings } from '@/typings.ts';
|
import { ServerSettings } from '@/typings.ts';
|
||||||
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
||||||
import { EmptyView } from '@/components/util/EmptyView.tsx';
|
import { EmptyViewAbsoluteCentered } from '@/components/util/EmptyViewAbsoluteCentered.tsx';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
||||||
|
|
||||||
type BackupSettingsType = Pick<ServerSettings, 'backupPath' | 'backupTime' | 'backupInterval' | 'backupTTL'>;
|
type BackupSettingsType = Pick<ServerSettings, 'backupPath' | 'backupTime' | 'backupInterval' | 'backupTTL'>;
|
||||||
@@ -231,7 +231,7 @@ export function Backup() {
|
|||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
return (
|
return (
|
||||||
<EmptyView
|
<EmptyViewAbsoluteCentered
|
||||||
message={t('global.error.label.failed_to_load_data')}
|
message={t('global.error.label.failed_to_load_data')}
|
||||||
messageExtra={error.message}
|
messageExtra={error.message}
|
||||||
retry={() => refetch().catch(defaultPromiseErrorHandler('Backup::refetch'))}
|
retry={() => refetch().catch(defaultPromiseErrorHandler('Backup::refetch'))}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import {
|
|||||||
useMetadataServerSettings,
|
useMetadataServerSettings,
|
||||||
} from '@/lib/metadata/metadataServerSettings.ts';
|
} from '@/lib/metadata/metadataServerSettings.ts';
|
||||||
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
||||||
import { EmptyView } from '@/components/util/EmptyView.tsx';
|
import { EmptyViewAbsoluteCentered } from '@/components/util/EmptyViewAbsoluteCentered.tsx';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
||||||
|
|
||||||
type ExtensionsSettings = Pick<GqlServerSettings, 'maxSourcesInParallel' | 'localSourcePath' | 'extensionRepos'>;
|
type ExtensionsSettings = Pick<GqlServerSettings, 'maxSourcesInParallel' | 'localSourcePath' | 'extensionRepos'>;
|
||||||
@@ -71,7 +71,7 @@ export const BrowseSettings = () => {
|
|||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
return (
|
return (
|
||||||
<EmptyView
|
<EmptyViewAbsoluteCentered
|
||||||
message={t('global.error.label.failed_to_load_data')}
|
message={t('global.error.label.failed_to_load_data')}
|
||||||
messageExtra={error.message}
|
messageExtra={error.message}
|
||||||
retry={() => refetch().catch(defaultPromiseErrorHandler('BrowseSettings::refetch'))}
|
retry={() => refetch().catch(defaultPromiseErrorHandler('BrowseSettings::refetch'))}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ import { DEFAULT_FULL_FAB_HEIGHT } from '@/components/util/StyledFab';
|
|||||||
import { NavBarContext, useSetDefaultBackTo } from '@/components/context/NavbarContext';
|
import { NavBarContext, useSetDefaultBackTo } from '@/components/context/NavbarContext';
|
||||||
import { TCategory } from '@/typings.ts';
|
import { TCategory } from '@/typings.ts';
|
||||||
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
||||||
import { EmptyView } from '@/components/util/EmptyView.tsx';
|
import { EmptyViewAbsoluteCentered } from '@/components/util/EmptyViewAbsoluteCentered.tsx';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
||||||
|
|
||||||
const getItemStyle = (
|
const getItemStyle = (
|
||||||
@@ -144,7 +144,7 @@ export function Categories() {
|
|||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
return (
|
return (
|
||||||
<EmptyView
|
<EmptyViewAbsoluteCentered
|
||||||
message={t('category.error.label.request_failure')}
|
message={t('category.error.label.request_failure')}
|
||||||
messageExtra={error.message}
|
messageExtra={error.message}
|
||||||
retry={() => refetch().catch(defaultPromiseErrorHandler('Categories::refetch'))}
|
retry={() => refetch().catch(defaultPromiseErrorHandler('Categories::refetch'))}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ import { ReaderSettingsOptions } from '@/components/reader/ReaderSettingsOptions
|
|||||||
import { makeToast } from '@/components/util/Toast';
|
import { makeToast } from '@/components/util/Toast';
|
||||||
import { NavBarContext, useSetDefaultBackTo } from '@/components/context/NavbarContext';
|
import { NavBarContext, useSetDefaultBackTo } from '@/components/context/NavbarContext';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
||||||
import { EmptyView } from '@/components/util/EmptyView.tsx';
|
import { EmptyViewAbsoluteCentered } from '@/components/util/EmptyViewAbsoluteCentered.tsx';
|
||||||
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
||||||
|
|
||||||
export function DefaultReaderSettings() {
|
export function DefaultReaderSettings() {
|
||||||
@@ -58,7 +58,7 @@ export function DefaultReaderSettings() {
|
|||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
return (
|
return (
|
||||||
<EmptyView
|
<EmptyViewAbsoluteCentered
|
||||||
message={t('global.error.label.failed_to_load_data')}
|
message={t('global.error.label.failed_to_load_data')}
|
||||||
messageExtra={error.message}
|
messageExtra={error.message}
|
||||||
retry={() => refetch().catch(defaultPromiseErrorHandler('DefaultReaderSettings::refetch'))}
|
retry={() => refetch().catch(defaultPromiseErrorHandler('DefaultReaderSettings::refetch'))}
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ import { DeleteChaptersWhileReadingSetting } from '@/components/settings/downloa
|
|||||||
import { CategoriesInclusionSetting } from '@/components/settings/CategoriesInclusionSetting.tsx';
|
import { CategoriesInclusionSetting } from '@/components/settings/CategoriesInclusionSetting.tsx';
|
||||||
import { NumberSetting } from '@/components/settings/NumberSetting.tsx';
|
import { NumberSetting } from '@/components/settings/NumberSetting.tsx';
|
||||||
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
||||||
import { EmptyView } from '@/components/util/EmptyView.tsx';
|
import { EmptyViewAbsoluteCentered } from '@/components/util/EmptyViewAbsoluteCentered.tsx';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
||||||
|
|
||||||
type DownloadSettingsType = Pick<
|
type DownloadSettingsType = Pick<
|
||||||
@@ -82,7 +82,7 @@ export const DownloadSettings = () => {
|
|||||||
const error = serverSettings.error ?? metadataServerSettingsError ?? categories.error;
|
const error = serverSettings.error ?? metadataServerSettingsError ?? categories.error;
|
||||||
if (error) {
|
if (error) {
|
||||||
return (
|
return (
|
||||||
<EmptyView
|
<EmptyViewAbsoluteCentered
|
||||||
message={t('global.error.label.failed_to_load_data')}
|
message={t('global.error.label.failed_to_load_data')}
|
||||||
messageExtra={error.message}
|
messageExtra={error.message}
|
||||||
retry={() => {
|
retry={() => {
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ import {
|
|||||||
} from '@/lib/metadata/metadataServerSettings.ts';
|
} from '@/lib/metadata/metadataServerSettings.ts';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
||||||
import { Mangas } from '@/lib/data/Mangas.ts';
|
import { Mangas } from '@/lib/data/Mangas.ts';
|
||||||
import { EmptyView } from '@/components/util/EmptyView';
|
import { EmptyViewAbsoluteCentered } from '@/components/util/EmptyViewAbsoluteCentered.tsx';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
||||||
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
||||||
|
|
||||||
@@ -84,7 +84,7 @@ export function LibrarySettings() {
|
|||||||
const error = serverSettings.error ?? metadataServerSettingsError ?? categories.error;
|
const error = serverSettings.error ?? metadataServerSettingsError ?? categories.error;
|
||||||
if (error) {
|
if (error) {
|
||||||
return (
|
return (
|
||||||
<EmptyView
|
<EmptyViewAbsoluteCentered
|
||||||
message={t('global.error.label.failed_to_load_data')}
|
message={t('global.error.label.failed_to_load_data')}
|
||||||
messageExtra={error.message}
|
messageExtra={error.message}
|
||||||
retry={() => {
|
retry={() => {
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ import { ServerSettings as GqlServerSettings } from '@/typings.ts';
|
|||||||
import { NumberSetting } from '@/components/settings/NumberSetting.tsx';
|
import { NumberSetting } from '@/components/settings/NumberSetting.tsx';
|
||||||
import { SelectSetting } from '@/components/settings/SelectSetting.tsx';
|
import { SelectSetting } from '@/components/settings/SelectSetting.tsx';
|
||||||
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
||||||
import { EmptyView } from '@/components/util/EmptyView.tsx';
|
import { EmptyViewAbsoluteCentered } from '@/components/util/EmptyViewAbsoluteCentered.tsx';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
||||||
|
|
||||||
type ServerSettingsType = Pick<
|
type ServerSettingsType = Pick<
|
||||||
@@ -112,7 +112,7 @@ export const ServerSettings = () => {
|
|||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
return (
|
return (
|
||||||
<EmptyView
|
<EmptyViewAbsoluteCentered
|
||||||
message={t('global.error.label.failed_to_load_data')}
|
message={t('global.error.label.failed_to_load_data')}
|
||||||
messageExtra={error.message}
|
messageExtra={error.message}
|
||||||
retry={() => refetch().catch(defaultPromiseErrorHandler('ServerSettings::refetch'))}
|
retry={() => refetch().catch(defaultPromiseErrorHandler('ServerSettings::refetch'))}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import ListItemText from '@mui/material/ListItemText';
|
|||||||
import Switch from '@mui/material/Switch';
|
import Switch from '@mui/material/Switch';
|
||||||
import { NavBarContext } from '@/components/context/NavbarContext.tsx';
|
import { NavBarContext } from '@/components/context/NavbarContext.tsx';
|
||||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
||||||
import { EmptyView } from '@/components/util/EmptyView.tsx';
|
import { EmptyViewAbsoluteCentered } from '@/components/util/EmptyViewAbsoluteCentered.tsx';
|
||||||
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
||||||
import { SettingsTrackerCard } from '@/components/tracker/SettingsTrackerCard.tsx';
|
import { SettingsTrackerCard } from '@/components/tracker/SettingsTrackerCard.tsx';
|
||||||
import {
|
import {
|
||||||
@@ -45,7 +45,7 @@ export const TrackingSettings = () => {
|
|||||||
const trackers = data?.trackers.nodes ?? [];
|
const trackers = data?.trackers.nodes ?? [];
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
return <EmptyView message={error.message} />;
|
return <EmptyViewAbsoluteCentered message={error.message} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (loading) {
|
if (loading) {
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import {
|
|||||||
} from '@/components/settings/SelectSetting.tsx';
|
} from '@/components/settings/SelectSetting.tsx';
|
||||||
import { WebUiChannel, WebUiFlavor, WebUiInterface } from '@/lib/graphql/generated/graphql.ts';
|
import { WebUiChannel, WebUiFlavor, WebUiInterface } from '@/lib/graphql/generated/graphql.ts';
|
||||||
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
import { LoadingPlaceholder } from '@/components/util/LoadingPlaceholder.tsx';
|
||||||
import { EmptyView } from '@/components/util/EmptyView.tsx';
|
import { EmptyViewAbsoluteCentered } from '@/components/util/EmptyViewAbsoluteCentered.tsx';
|
||||||
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
import { defaultPromiseErrorHandler } from '@/util/defaultPromiseErrorHandler.ts';
|
||||||
|
|
||||||
type WebUISettingsType = Pick<
|
type WebUISettingsType = Pick<
|
||||||
@@ -149,7 +149,7 @@ export const WebUISettings = () => {
|
|||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
return (
|
return (
|
||||||
<EmptyView
|
<EmptyViewAbsoluteCentered
|
||||||
message={t('global.error.label.failed_to_load_data')}
|
message={t('global.error.label.failed_to_load_data')}
|
||||||
messageExtra={error.message}
|
messageExtra={error.message}
|
||||||
retry={() => refetch().catch(defaultPromiseErrorHandler('WebUISettings::refetch'))}
|
retry={() => refetch().catch(defaultPromiseErrorHandler('WebUISettings::refetch'))}
|
||||||
|
|||||||
Reference in New Issue
Block a user