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) => (
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}
)}
),
}))}
/>
>
);
}