From c0ab5f93a1d26735d3c1a5429311639e59a24f3f Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Fri, 25 Apr 2025 00:50:51 +0200 Subject: [PATCH] Extract list card avatar --- .../components/cards/ChapterCardThumbnail.tsx | 30 +++----------- src/modules/core/components/SpinnerImage.tsx | 4 +- .../components/cards/list/ListCardAvatar.tsx | 41 +++++++++++++++++++ .../extension/components/ExtensionCard.tsx | 21 +--------- .../history/components/ChapterHistoryCard.tsx | 2 +- .../manga/components/cards/MangaListCard.tsx | 36 ++++++---------- .../migration/components/MigrationCard.tsx | 23 ++--------- .../reader/components/viewer/ReaderPage.tsx | 6 +-- src/modules/source/components/SourceCard.tsx | 21 +--------- .../updates/components/ChapterUpdateCard.tsx | 2 +- 10 files changed, 74 insertions(+), 112 deletions(-) create mode 100644 src/modules/core/components/cards/list/ListCardAvatar.tsx diff --git a/src/modules/chapter/components/cards/ChapterCardThumbnail.tsx b/src/modules/chapter/components/cards/ChapterCardThumbnail.tsx index 6dd29c1e..8502d550 100644 --- a/src/modules/chapter/components/cards/ChapterCardThumbnail.tsx +++ b/src/modules/chapter/components/cards/ChapterCardThumbnail.tsx @@ -7,12 +7,11 @@ */ import { Link } from 'react-router-dom'; -import Avatar from '@mui/material/Avatar'; import { AppRoutes } from '@/modules/core/AppRoute.constants.ts'; -import { SpinnerImage } from '@/modules/core/components/SpinnerImage.tsx'; import { Mangas } from '@/modules/manga/services/Mangas.ts'; import { MangaIdInfo, MangaThumbnailInfo } from '@/modules/manga/Manga.types.ts'; import { MangaType } from '@/lib/graphql/generated/graphql.ts'; +import { ListCardAvatar } from '@/modules/core/components/cards/list/ListCardAvatar.tsx'; export const ChapterCardThumbnail = ({ mangaId, @@ -24,27 +23,10 @@ export const ChapterCardThumbnail = ({ mangaTitle: MangaType['title']; }) => ( - - - + ); diff --git a/src/modules/core/components/SpinnerImage.tsx b/src/modules/core/components/SpinnerImage.tsx index 5cb296e1..59b66895 100644 --- a/src/modules/core/components/SpinnerImage.tsx +++ b/src/modules/core/components/SpinnerImage.tsx @@ -21,7 +21,7 @@ import { Priority } from '@/lib/Queue.ts'; import { applyStyles } from '@/modules/core/utils/ApplyStyles.ts'; import { useIntersectionObserver } from '@/modules/core/hooks/useIntersectionObserver.tsx'; -interface IProps { +export interface SpinnerImageProps { shouldLoad?: boolean; src: string; @@ -44,7 +44,7 @@ interface IProps { } export const SpinnerImage = forwardRef( - (props: IProps, imgRef: ForwardedRef) => { + (props: SpinnerImageProps, imgRef: ForwardedRef) => { const { shouldLoad = true, shouldDecode, diff --git a/src/modules/core/components/cards/list/ListCardAvatar.tsx b/src/modules/core/components/cards/list/ListCardAvatar.tsx new file mode 100644 index 00000000..e012a07c --- /dev/null +++ b/src/modules/core/components/cards/list/ListCardAvatar.tsx @@ -0,0 +1,41 @@ +/* + * 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 Avatar, { AvatarProps } from '@mui/material/Avatar'; +import { SpinnerImage, SpinnerImageProps } from '@/modules/core/components/SpinnerImage.tsx'; + +export const ListCardAvatar = ({ + iconUrl, + alt, + slots, +}: { + iconUrl: string; + alt: string; + slots?: { avatarProps?: Partial; spinnerImageProps?: Partial }; +}) => ( + + + +); diff --git a/src/modules/extension/components/ExtensionCard.tsx b/src/modules/extension/components/ExtensionCard.tsx index d91ef051..1cc85b59 100644 --- a/src/modules/extension/components/ExtensionCard.tsx +++ b/src/modules/extension/components/ExtensionCard.tsx @@ -10,7 +10,6 @@ import { useEffect, useState } from 'react'; import Card from '@mui/material/Card'; import CardContent from '@mui/material/CardContent'; import Button from '@mui/material/Button'; -import Avatar from '@mui/material/Avatar'; import Typography from '@mui/material/Typography'; import { useTranslation } from 'react-i18next'; import IconButton from '@mui/material/IconButton'; @@ -19,7 +18,6 @@ import Stack from '@mui/material/Stack'; import { requestManager } from '@/lib/requests/RequestManager.ts'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; import { makeToast } from '@/modules/core/utils/Toast.ts'; -import { SpinnerImage } from '@/modules/core/components/SpinnerImage.tsx'; import { ExtensionAction, ExtensionState, @@ -36,6 +34,7 @@ import { import { getInstalledState } from '@/modules/extension/Extensions.utils.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; import { CustomTooltip } from '@/modules/core/components/CustomTooltip'; +import { ListCardAvatar } from '@/modules/core/components/cards/list/ListCardAvatar.tsx'; interface IProps { extension: TExtension; @@ -130,23 +129,7 @@ export function ExtensionCard(props: IProps) { }, }} > - - - + - + - - - + /> & { mangaCount: number; @@ -43,24 +42,8 @@ export const MigrationCard = ({ id, name, lang, iconUrl, mangaCount }: TMigratab p: 1.5, }} > - - - - + + {sourceName} diff --git a/src/modules/reader/components/viewer/ReaderPage.tsx b/src/modules/reader/components/viewer/ReaderPage.tsx index b1a6bbb1..0caf1adc 100644 --- a/src/modules/reader/components/viewer/ReaderPage.tsx +++ b/src/modules/reader/components/viewer/ReaderPage.tsx @@ -6,8 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { ComponentProps, memo, useCallback } from 'react'; -import { SpinnerImage } from '@/modules/core/components/SpinnerImage.tsx'; +import { memo, useCallback } from 'react'; +import { SpinnerImage, SpinnerImageProps } from '@/modules/core/components/SpinnerImage.tsx'; import { IReaderSettings, ReaderCustomFilter, @@ -74,7 +74,7 @@ const BaseReaderPage = ({ readerNavBarWidth, isLoaded, ...props -}: Omit, 'ref' | 'spinnerStyle' | 'imgStyle' | 'onLoad' | 'onError'> & +}: Omit & Pick & Pick & Pick & { diff --git a/src/modules/source/components/SourceCard.tsx b/src/modules/source/components/SourceCard.tsx index 78db6721..fc151ae7 100644 --- a/src/modules/source/components/SourceCard.tsx +++ b/src/modules/source/components/SourceCard.tsx @@ -7,7 +7,6 @@ */ import CardActionArea from '@mui/material/CardActionArea'; -import Avatar from '@mui/material/Avatar'; import Button from '@mui/material/Button'; import Card from '@mui/material/Card'; import CardContent from '@mui/material/CardContent'; @@ -18,13 +17,13 @@ import { Link } from 'react-router-dom'; import Stack from '@mui/material/Stack'; import { requestManager } from '@/lib/requests/RequestManager.ts'; import { SourceContentType } from '@/modules/source/screens/SourceMangas.tsx'; -import { SpinnerImage } from '@/modules/core/components/SpinnerImage.tsx'; import { GetSourcesListQuery } from '@/lib/graphql/generated/graphql.ts'; import { MediaQuery } from '@/modules/core/utils/MediaQuery.tsx'; import { translateExtensionLanguage } from '@/modules/extension/Extensions.utils.ts'; import { AppRoutes } from '@/modules/core/AppRoute.constants.ts'; import { MUIUtil } from '@/lib/mui/MUI.util.ts'; import { Sources } from '@/modules/source/services/Sources.ts'; +import { ListCardAvatar } from '@/modules/core/components/cards/list/ListCardAvatar.tsx'; interface IProps { source: GetSourcesListQuery['sources']['nodes'][number]; @@ -69,23 +68,7 @@ export const SourceCard: React.FC = (props: IProps) => { p: 1.5, }} > - - - + - +