From 3493c8119b725ba25e0580be8d972dfdab93129b Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Thu, 11 May 2023 13:56:51 +1000 Subject: [PATCH] feat(ui): improve image preview css and fallback --- .../components/CurrentImagePreview.tsx | 16 +++-------- ...eFallback.tsx => ImageFallbackSpinner.tsx} | 6 ++-- .../ImageToImage/InitialImagePreview.tsx | 28 ++++++------------- 3 files changed, 15 insertions(+), 35 deletions(-) rename invokeai/frontend/web/src/features/gallery/components/{CurrentImageFallback.tsx => ImageFallbackSpinner.tsx} (72%) diff --git a/invokeai/frontend/web/src/features/gallery/components/CurrentImagePreview.tsx b/invokeai/frontend/web/src/features/gallery/components/CurrentImagePreview.tsx index 18fe166cd8..a86407d5c8 100644 --- a/invokeai/frontend/web/src/features/gallery/components/CurrentImagePreview.tsx +++ b/invokeai/frontend/web/src/features/gallery/components/CurrentImagePreview.tsx @@ -11,7 +11,7 @@ import NextPrevImageButtons from './NextPrevImageButtons'; import CurrentImageHidden from './CurrentImageHidden'; import { DragEvent, memo, useCallback } from 'react'; import { systemSelector } from 'features/system/store/systemSelectors'; -import CurrentImageFallback from './CurrentImageFallback'; +import ImageFallbackSpinner from './ImageFallbackSpinner'; export const imagesSelector = createSelector( [uiSelector, gallerySelector, systemSelector], @@ -90,18 +90,10 @@ const CurrentImagePreview = () => { ) : ( image && ( - ) : ( - - ) - } + fallback={} + onDragStart={handleDragStart} sx={{ objectFit: 'contain', maxWidth: '100%', diff --git a/invokeai/frontend/web/src/features/gallery/components/CurrentImageFallback.tsx b/invokeai/frontend/web/src/features/gallery/components/ImageFallbackSpinner.tsx similarity index 72% rename from invokeai/frontend/web/src/features/gallery/components/CurrentImageFallback.tsx rename to invokeai/frontend/web/src/features/gallery/components/ImageFallbackSpinner.tsx index abcf5d4b18..394ff9db15 100644 --- a/invokeai/frontend/web/src/features/gallery/components/CurrentImageFallback.tsx +++ b/invokeai/frontend/web/src/features/gallery/components/ImageFallbackSpinner.tsx @@ -1,8 +1,8 @@ import { Flex, Spinner, SpinnerProps } from '@chakra-ui/react'; -type CurrentImageFallbackProps = SpinnerProps; +type ImageFallbackSpinnerProps = SpinnerProps; -const CurrentImageFallback = (props: CurrentImageFallbackProps) => { +const ImageFallbackSpinner = (props: ImageFallbackSpinnerProps) => { const { size = 'xl', ...rest } = props; return ( @@ -21,4 +21,4 @@ const CurrentImageFallback = (props: CurrentImageFallbackProps) => { ); }; -export default CurrentImageFallback; +export default ImageFallbackSpinner; diff --git a/invokeai/frontend/web/src/features/parameters/components/Parameters/ImageToImage/InitialImagePreview.tsx b/invokeai/frontend/web/src/features/parameters/components/Parameters/ImageToImage/InitialImagePreview.tsx index 757957934e..8c8a52c857 100644 --- a/invokeai/frontend/web/src/features/parameters/components/Parameters/ImageToImage/InitialImagePreview.tsx +++ b/invokeai/frontend/web/src/features/parameters/components/Parameters/ImageToImage/InitialImagePreview.tsx @@ -1,17 +1,18 @@ -import { Flex, Image, Spinner } from '@chakra-ui/react'; +import { Flex, Image } from '@chakra-ui/react'; import { createSelector } from '@reduxjs/toolkit'; import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; import SelectImagePlaceholder from 'common/components/SelectImagePlaceholder'; import { useGetUrl } from 'common/util/getUrl'; import { clearInitialImage } from 'features/parameters/store/generationSlice'; import { addToast } from 'features/system/store/systemSlice'; -import { DragEvent, useCallback, useState } from 'react'; +import { DragEvent, useCallback } from 'react'; import { useTranslation } from 'react-i18next'; import { ImageType } from 'services/api'; import ImageToImageOverlay from 'common/components/ImageToImageOverlay'; import { generationSelector } from 'features/parameters/store/generationSelectors'; import { initialImageSelected } from 'features/parameters/store/actions'; import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions'; +import ImageFallbackSpinner from 'features/gallery/components/ImageFallbackSpinner'; const selector = createSelector( [generationSelector], @@ -30,8 +31,6 @@ const InitialImagePreview = () => { const dispatch = useAppDispatch(); const { t } = useTranslation(); - const [isLoaded, setIsLoaded] = useState(false); - const onError = () => { dispatch( addToast({ @@ -42,13 +41,10 @@ const InitialImagePreview = () => { }) ); dispatch(clearInitialImage()); - setIsLoaded(false); }; const handleDrop = useCallback( (e: DragEvent) => { - setIsLoaded(false); - const name = e.dataTransfer.getData('invokeai/imageName'); const type = e.dataTransfer.getData('invokeai/imageType') as ImageType; @@ -71,6 +67,10 @@ const InitialImagePreview = () => { {initialImage?.url && ( <> } + onError={onError} sx={{ objectFit: 'contain', maxWidth: '100%', @@ -79,20 +79,8 @@ const InitialImagePreview = () => { position: 'absolute', borderRadius: 'base', }} - src={getUrl(initialImage?.url)} - onError={onError} - onLoad={() => { - setIsLoaded(true); - }} - fallback={ - - - - } /> - {isLoaded && } + )} {!initialImage?.url && }