From a6be44789bdc4c1243a56a244a072f972b537288 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Mon, 1 May 2023 10:22:08 +1000 Subject: [PATCH] fix(ui): progress image rerender, checkbox --- .../frontend/web/src/app/components/App.tsx | 3 - .../parameters/components/ProgressImage.tsx | 67 +++++++++++++++ .../components/ProgressImagePreview.tsx | 81 +++++-------------- 3 files changed, 88 insertions(+), 63 deletions(-) create mode 100644 invokeai/frontend/web/src/features/parameters/components/ProgressImage.tsx diff --git a/invokeai/frontend/web/src/app/components/App.tsx b/invokeai/frontend/web/src/app/components/App.tsx index a7487fa323..3aebfa4097 100644 --- a/invokeai/frontend/web/src/app/components/App.tsx +++ b/invokeai/frontend/web/src/app/components/App.tsx @@ -28,9 +28,6 @@ import { configChanged } from 'features/system/store/configSlice'; import { useFeatureStatus } from 'features/system/hooks/useFeatureStatus'; import { useLogger } from 'app/logging/useLogger'; import ProgressImagePreview from 'features/parameters/components/ProgressImagePreview'; -// import { DndContext, DragEndEvent } from '@dnd-kit/core'; -import { floatingProgressImageMoved } from 'features/ui/store/uiSlice'; -// import { restrictToWindowEdges } from '@dnd-kit/modifiers'; const DEFAULT_CONFIG = {}; diff --git a/invokeai/frontend/web/src/features/parameters/components/ProgressImage.tsx b/invokeai/frontend/web/src/features/parameters/components/ProgressImage.tsx new file mode 100644 index 0000000000..869f4dbc63 --- /dev/null +++ b/invokeai/frontend/web/src/features/parameters/components/ProgressImage.tsx @@ -0,0 +1,67 @@ +import { Flex, Icon, Image } from '@chakra-ui/react'; +import { createSelector } from '@reduxjs/toolkit'; +import { useAppSelector } from 'app/store/storeHooks'; +import { systemSelector } from 'features/system/store/systemSelectors'; +import { isEqual } from 'lodash-es'; +import { memo } from 'react'; +import { FaImage } from 'react-icons/fa'; + +const selector = createSelector( + [systemSelector], + (system) => { + const { progressImage } = system; + + return { + progressImage, + }; + }, + { + memoizeOptions: { + resultEqualityCheck: isEqual, + }, + } +); + +const ProgressImage = () => { + const { progressImage } = useAppSelector(selector); + return progressImage ? ( + + + + ) : ( + + + + ); +}; + +export default memo(ProgressImage); diff --git a/invokeai/frontend/web/src/features/parameters/components/ProgressImagePreview.tsx b/invokeai/frontend/web/src/features/parameters/components/ProgressImagePreview.tsx index 28dd6adf4f..9a54e37463 100644 --- a/invokeai/frontend/web/src/features/parameters/components/ProgressImagePreview.tsx +++ b/invokeai/frontend/web/src/features/parameters/components/ProgressImagePreview.tsx @@ -1,9 +1,9 @@ -import { Flex, Icon, Image, Text } from '@chakra-ui/react'; +import { Flex, Text } from '@chakra-ui/react'; import { createSelector } from '@reduxjs/toolkit'; import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; import { systemSelector } from 'features/system/store/systemSelectors'; import { memo } from 'react'; -import { FaImage, FaStopwatch } from 'react-icons/fa'; +import { FaStopwatch } from 'react-icons/fa'; import { uiSelector } from 'features/ui/store/uiSelectors'; import IAIIconButton from 'common/components/IAIIconButton'; import { CloseIcon } from '@chakra-ui/icons'; @@ -16,11 +16,12 @@ import { import { Rnd } from 'react-rnd'; import { Rect } from 'features/ui/store/uiTypes'; import { isEqual } from 'lodash'; +import ProgressImage from './ProgressImage'; const selector = createSelector( [systemSelector, uiSelector], (system, ui) => { - const { progressImage, isProcessing } = system; + const { isProcessing } = system; const { floatingProgressImageRect, shouldShowProgressImages, @@ -33,7 +34,6 @@ const selector = createSelector( : shouldShowProgressImages; return { - progressImage, floatingProgressImageRect, showProgressWindow, }; @@ -48,13 +48,28 @@ const selector = createSelector( const ProgressImagePreview = () => { const dispatch = useAppDispatch(); - const { showProgressWindow, progressImage, floatingProgressImageRect } = + const { showProgressWindow, floatingProgressImageRect } = useAppSelector(selector); const { t } = useTranslation(); return ( <> + {' '} + + dispatch(setShouldShowProgressImages(!showProgressWindow)) + } + tooltip={t('ui.showProgressImages')} + isChecked={showProgressWindow} + sx={{ + position: 'absolute', + bottom: 4, + insetInlineStart: 4, + }} + aria-label={t('ui.showProgressImages')} + icon={} + /> {showProgressWindow && ( { variant="ghost" /> - {progressImage ? ( - - - - ) : ( - - - - )} + )} - - dispatch(setShouldShowProgressImages(!showProgressWindow)) - } - tooltip={t('ui.showProgressImages')} - sx={{ - position: 'absolute', - bottom: 4, - insetInlineStart: 4, - background: showProgressWindow ? 'accent.600' : 'base.700', - _hover: { - background: showProgressWindow ? 'accent.500' : 'base.600', - }, - }} - aria-label={t('ui.showProgressImages')} - icon={} - /> ); };