import { Center, Flex, Image, useColorModeValue } from '@chakra-ui/react'; import { useAppDispatch, useAppSelector } from '../../app/hooks'; import { RootState } from '../../app/store'; import { setAllParameters, setInitialImagePath, setSeed } from '../sd/sdSlice'; import { useState } from 'react'; import ImageMetadataViewer from './ImageMetadataViewer'; import DeleteImageModalButton from './DeleteImageModalButton'; import SDButton from '../../components/SDButton'; import { runESRGAN, runGFPGAN } from '../../app/socketio'; import { createSelector } from '@reduxjs/toolkit'; import { SystemState } from '../system/systemSlice'; import { isEqual } from 'lodash'; const height = 'calc(100vh - 238px)'; const systemSelector = createSelector( (state: RootState) => state.system, (system: SystemState) => { return { isProcessing: system.isProcessing, isConnected: system.isConnected, isGFPGANAvailable: system.isGFPGANAvailable, isESRGANAvailable: system.isESRGANAvailable, }; }, { memoizeOptions: { resultEqualityCheck: isEqual, }, } ); const CurrentImage = () => { const { currentImage, intermediateImage } = useAppSelector( (state: RootState) => state.gallery ); const { isProcessing, isConnected, isGFPGANAvailable, isESRGANAvailable } = useAppSelector(systemSelector); const dispatch = useAppDispatch(); const bgColor = useColorModeValue( 'rgba(255, 255, 255, 0.85)', 'rgba(0, 0, 0, 0.8)' ); const [shouldShowImageDetails, setShouldShowImageDetails] = useState(false); const imageToDisplay = intermediateImage || currentImage; return ( {imageToDisplay && ( dispatch(setInitialImagePath(imageToDisplay.url)) } /> dispatch(setAllParameters(imageToDisplay.metadata)) } /> dispatch(setSeed(imageToDisplay.metadata.seed!)) } /> dispatch(runESRGAN(imageToDisplay))} /> dispatch(runGFPGAN(imageToDisplay))} /> setShouldShowImageDetails(!shouldShowImageDetails) } /> )}
{imageToDisplay && ( )} {imageToDisplay && shouldShowImageDetails && ( )}
); }; export default CurrentImage;