"use client"; import { api } from "@/trpc/react"; import { useEffect, useState } from "react"; import Tilt from "react-parallax-tilt"; // import { AiLoader } from "./ai-loader"; import { quantum } from "ldrs"; import { ring2 } from "ldrs"; ring2.register(); quantum.register(); export default function ArtistShowcase({ spookify, images, name, id, place, lastSpookyImageLoaded, setLastSpookyImageLoaded, }: { spookify: boolean; images: { url: string }[]; name: string; id: string; place: number; lastSpookyImageLoaded: number; setLastSpookyImageLoaded: any; }) { const [showSpookyImage, setShowSpookyImage] = useState(spookify); const [spookyImageLoaded, setSpookyImageLoaded] = useState(false); useEffect(() => { setShowSpookyImage(spookify); }, [spookify]); const imageSource = images[0] ? images[0].url : "https://via.placeholder.com/150"; const entry = api.entry.get.useQuery({ type: "artist", name, image: imageSource, }); const generateSpookyImage = api.entry.generate.useMutation(); const saveImage = api.entry.save.useMutation(); const handleGenerateSpookyImage = async () => { if (!entry.data && !entry.isLoading) { generateSpookyImage.mutate({ entry: { type: "artist", name, image: imageSource, }, }); } }; const handleSaveImage = async () => { if (!entry.data && !entry.isLoading) { saveImage.mutate({ entry: { type: "artist", image: imageSource, name, }, }); } }; useEffect(() => { handleGenerateSpookyImage(); }, [entry.data]); useEffect(() => { if (spookyImageLoaded) { handleSaveImage(); } }, [spookyImageLoaded]); const spookyImageMatch = ( (entry.data?.value || generateSpookyImage.data) as null | string )?.match(/https:\/\/res.cloudinary.com\/[^"]+/); const spookyImageSource = spookyImageMatch ? spookyImageMatch[0] : null; const onImageLoad = () => { if (!spookyImageLoaded) { setSpookyImageLoaded(true); setLastSpookyImageLoaded((state: number) => state > place ? state : place, ); } }; return (
setShowSpookyImage(!showSpookyImage)} > {name} {spookyImageSource && (generateSpookyImage.data ? lastSpookyImageLoaded >= place || lastSpookyImageLoaded + 1 === place : true) && ( { onImageLoad(); }} src={spookyImageSource} alt={name} /> )} {showSpookyImage && !spookyImageLoaded && (
{/* {generateSpookyImage.data ? ( <>

Generating...

) : ( <>

Getting image...

)} */} {(() => { if (generateSpookyImage.data) { if (lastSpookyImageLoaded < place - 1) { return ( <>

On queue...

); } return ( <>

Generating...

); } return ( <>

Getting image...

); })()}
)}

{name}

); }