import { Carousel } from "@mantine/carousel"; import { SearchResults } from "../../../../modules/search"; import { useState, useEffect } from "react"; import { Button, Group, rem, Stack, Transition, Text } from "@mantine/core"; import "@mantine/carousel/styles.css"; import Lightbox from "yet-another-react-lightbox"; import Captions from "yet-another-react-lightbox/plugins/captions"; import "yet-another-react-lightbox/styles.css"; import "yet-another-react-lightbox/plugins/captions.css"; import { addLogEntry } from "../../../../modules/logEntries"; import { getHostname } from "../../../../modules/stringFormatters"; export default function ImageResultsList({ imageResults, }: { imageResults: SearchResults["imageResults"]; }) { const [isLightboxOpen, setLightboxOpen] = useState(false); const [lightboxIndex, setLightboxIndex] = useState(0); const [isMounted, setMounted] = useState(false); useEffect(() => setMounted(true), []); const handleImageClick = (index: number) => { setLightboxIndex(index); setLightboxOpen(true); }; const imageStyle = { objectFit: "cover", height: rem(180), width: rem(240), borderRadius: rem(4), border: `${rem(2)} solid var(--mantine-color-default-border)`, cursor: "zoom-in", } as const; return ( <> {imageResults.map(([title, , thumbnailUrl], index) => ( {(styles) => ( {title} handleImageClick(index)} style={imageStyle} /> )} ))} setLightboxOpen(false)} plugins={[Captions]} index={lightboxIndex} slides={imageResults.map(([title, url, thumbnailUrl, sourceUrl]) => ({ src: thumbnailUrl, description: ( {title && ( {title} )} ), }))} /> ); }