NEWONE1 / invokeai /frontend /web /src /features /gallery /components /ImageContextMenu /ImageMenuItemSelectForCompare.tsx
| import { createSelector } from '@reduxjs/toolkit'; | |
| import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; | |
| import { IconMenuItem } from 'common/components/IconMenuItem'; | |
| import { useImageDTOContext } from 'features/gallery/contexts/ImageDTOContext'; | |
| import { imageToCompareChanged, selectGallerySlice } from 'features/gallery/store/gallerySlice'; | |
| import { memo, useCallback, useMemo } from 'react'; | |
| import { useTranslation } from 'react-i18next'; | |
| import { PiImagesBold } from 'react-icons/pi'; | |
| export const ImageMenuItemSelectForCompare = memo(() => { | |
| const { t } = useTranslation(); | |
| const dispatch = useAppDispatch(); | |
| const imageDTO = useImageDTOContext(); | |
| const selectMaySelectForCompare = useMemo( | |
| () => createSelector(selectGallerySlice, (gallery) => gallery.imageToCompare?.image_name !== imageDTO.image_name), | |
| [imageDTO.image_name] | |
| ); | |
| const maySelectForCompare = useAppSelector(selectMaySelectForCompare); | |
| const onClick = useCallback(() => { | |
| dispatch(imageToCompareChanged(imageDTO)); | |
| }, [dispatch, imageDTO]); | |
| return ( | |
| <IconMenuItem | |
| icon={<PiImagesBold />} | |
| isDisabled={!maySelectForCompare} | |
| onClick={onClick} | |
| aria-label={t('gallery.selectForCompare')} | |
| tooltip={t('gallery.selectForCompare')} | |
| /> | |
| ); | |
| }); | |
| ImageMenuItemSelectForCompare.displayName = 'ImageMenuItemSelectForCompare'; | |