Skip to content

Commit 760c5b5

Browse files
Add drag-and-drop comparison image target to ImageViewerPanel
Co-authored-by: kent <kent@invoke.ai>
1 parent 07517cf commit 760c5b5

File tree

1 file changed

+29
-5
lines changed

1 file changed

+29
-5
lines changed

invokeai/frontend/web/src/features/gallery/components/ImageViewer/ImageViewerPanel.tsx

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,41 @@
11
import { Divider, Flex } from '@invoke-ai/ui-library';
2-
import { ImageViewer } from 'features/gallery/components/ImageViewer/ImageViewer';
3-
import { ViewerToolbar } from 'features/gallery/components/ImageViewer/ViewerToolbar';
4-
import { memo } from 'react';
2+
import { useAppSelector } from 'app/store/storeHooks';
3+
import type { SetComparisonImageDndTargetData } from 'features/dnd/dnd';
4+
import { setComparisonImageDndTarget } from 'features/dnd/dnd';
5+
import { DndDropTarget } from 'features/dnd/DndDropTarget';
6+
import { selectImageToCompare, selectLastSelectedImage } from 'features/gallery/store/gallerySelectors';
7+
import { memo, useMemo } from 'react';
8+
import { useTranslation } from 'react-i18next';
59

610
import { ImageViewerContextProvider } from './context';
11+
import { ImageViewer } from './ImageViewer';
12+
import { ViewerToolbar } from './ViewerToolbar';
713

814
export const ImageViewerPanel = memo(() => {
15+
const { t } = useTranslation();
16+
const lastSelectedImage = useAppSelector(selectLastSelectedImage);
17+
const imageToCompare = useAppSelector(selectImageToCompare);
18+
19+
// Only show drop target when we have a selected image but no comparison image yet
20+
const shouldShowDropTarget = lastSelectedImage && !imageToCompare;
21+
22+
const dndTargetData = useMemo<SetComparisonImageDndTargetData>(() => setComparisonImageDndTarget.getData(), []);
23+
924
return (
1025
<ImageViewerContextProvider>
11-
<Flex flexDir="column" w="full" h="full" overflow="hidden" gap={2}>
26+
<Flex flexDir="column" w="full" h="full" overflow="hidden" gap={2} position="relative">
1227
<ViewerToolbar />
1328
<Divider />
14-
<ImageViewer />
29+
<Flex w="full" h="full" position="relative">
30+
<ImageViewer />
31+
{shouldShowDropTarget && (
32+
<DndDropTarget
33+
dndTarget={setComparisonImageDndTarget}
34+
dndTargetData={dndTargetData}
35+
label={t('gallery.selectForCompare')}
36+
/>
37+
)}
38+
</Flex>
1539
</Flex>
1640
</ImageViewerContextProvider>
1741
);

0 commit comments

Comments
 (0)