Skip to content

Commit d38f809

Browse files
committed
Popover for image list in gallery
1 parent f870926 commit d38f809

File tree

2 files changed

+35
-5
lines changed

2 files changed

+35
-5
lines changed

smoosense-gui/src/components/common/ImageBlock.tsx

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,24 @@
11
'use client'
22

33
import { useAppSelector } from '@/lib/hooks'
4+
import CellPopover from '@/components/ui/CellPopover'
45

56
interface ImageBlockProps {
67
src: string
78
alt?: string
89
className?: string
910
style?: React.CSSProperties
1011
neverFitCover?: boolean
12+
showPopover?: boolean
1113
}
1214

1315
export default function ImageBlock({
1416
src,
1517
alt = 'Image',
1618
className = '',
1719
style,
18-
neverFitCover = false
20+
neverFitCover = false,
21+
showPopover = false
1922
}: ImageBlockProps) {
2023
const cropMediaToFitCover = useAppSelector((state) => state.ui.cropMediaToFitCover)
2124

@@ -27,7 +30,7 @@ export default function ImageBlock({
2730
target.src = 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48cGF0dGVybiBpZD0iZ3JpZCIgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiBwYXR0ZXJuVW5pdHM9InVzZXJTcGFjZU9uVXNlIj48cGF0aCBkPSJNIDIwIDAgTCAwIDAgMCAyMCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjY2NjIiBzdHJva2Utd2lkdGg9IjEiLz48L3BhdHRlcm4+PC9kZWZzPjxyZWN0IHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JpZCkiLz48dGV4dCB4PSI1MCUiIHk9IjUwJSIgZG9taW5hbnQtYmFzZWxpbmU9Im1pZGRsZSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZmlsbD0iIzk5OSI+SW52YWxpZCBJbWFnZTwvdGV4dD48L3N2Zz4='
2831
}
2932

30-
return (
33+
const imageContent = (
3134
<img
3235
src={src}
3336
alt={alt}
@@ -36,4 +39,29 @@ export default function ImageBlock({
3639
onError={handleError}
3740
/>
3841
)
42+
43+
if (!showPopover) {
44+
return imageContent
45+
}
46+
47+
return (
48+
<CellPopover
49+
cellContent={imageContent}
50+
popoverContent={
51+
<div className="p-2">
52+
<img
53+
src={src}
54+
alt={alt}
55+
className="max-w-full max-h-full object-contain"
56+
onError={handleError}
57+
/>
58+
</div>
59+
}
60+
url={src}
61+
popoverClassName="w-[500px] h-[500px]"
62+
cellContentClassName="items-center justify-center"
63+
copyValue={src}
64+
side="right"
65+
/>
66+
)
3967
}

smoosense-gui/src/components/gallery/ComplexDataGalleryItemVisual.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { FileType } from '@/lib/utils/fileTypes'
66
import { mayResolveUrl } from '@/lib/utils/mediaUrlUtils'
77
import { useAppSelector } from '@/lib/hooks'
88
import AudioPage from '@/lib/utils/mediaList/AudioPage'
9+
import ImageBlock from '@/components/common/ImageBlock'
910
import _ from 'lodash'
1011

1112
interface ComplexDataGalleryItemVisualProps {
@@ -53,13 +54,14 @@ const ComplexDataGalleryItemVisual = memo(function ComplexDataGalleryItemVisual(
5354
// Check for image list
5455
if (isAllUrlType(strings, FileType.Image)) {
5556
return (
56-
<div className="grid grid-cols-2 gap-1 p-1 h-full overflow-auto">
57+
<div className="grid grid-cols-2 gap-1 p-1 h-full overflow-auto content-start">
5758
{resolvedUrls.map((url, index) => (
58-
<img
59+
<ImageBlock
5960
key={index}
6061
src={url}
6162
alt={validUrls[index]}
62-
className="w-full h-auto object-cover rounded"
63+
showPopover={true}
64+
className="w-full h-auto rounded"
6365
/>
6466
))}
6567
</div>

0 commit comments

Comments
 (0)