import { Carousel } from "@mantine/carousel"; import { Button, Group, Stack, Text, Transition, rem } from "@mantine/core"; import { useEffect, useState } from "react"; import type { SearchResults } from "../../../../modules/search"; 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, sourceUrl, thumbnailUrl], index) => ( {(styles) => ( {title} handleImageClick(index)} onKeyDown={(e) => { if (e.key === "Enter") { handleImageClick(index); } }} style={imageStyle} /> )} ))} setLightboxOpen(false)} plugins={[Captions]} index={lightboxIndex} slides={imageResults.map(([title, url, thumbnailUrl, sourceUrl]) => ({ src: thumbnailUrl, description: ( {title && ( {title} )} ), }))} /> ); }