"use client";
import { useEffect, useMemo, useState } from "react";
import { TrackByAlbum } from "./spotify-data";
import { api } from "@/trpc/react";
import { quantum } from "ldrs";
import { ring2 } from "ldrs";
import { pulsar } from "ldrs";
import Swiper from "./swiper";
import { SwiperSlide } from "swiper/react";
import AlbumImage from "./album-image";
pulsar.register();
ring2.register();
quantum.register();
export default function AlbumShowcase({
spookify,
album,
position,
tracks,
places,
lastSpookyImageLoaded,
setLastSpookyImageLoaded,
}: TrackByAlbum & {
spookify: boolean;
places: number[];
lastSpookyImageLoaded: number;
setLastSpookyImageLoaded: any;
}) {
const imageSource = album.images[0]
? album.images[0].url
: "https://via.placeholder.com/150";
const [showSpookyImage, setShowSpookyImage] = useState(spookify);
useEffect(() => {
setShowSpookyImage(spookify);
}, [spookify]);
const entry = api.entry.get.useQuery(
{
type: "album",
name: album.name,
image: imageSource,
},
{
refetchInterval: false,
refetchOnReconnect: false,
refetchOnWindowFocus: false,
},
);
const generateSpookyImage = api.entry.generate.useMutation();
const generateSecondSpookyImage = api.entry.generate.useMutation();
const spookyImageSource = useMemo(() => {
const spookyImageMatch = (
(entry.data?.value || generateSpookyImage.data) as null | string
)?.match(/]*>/);
return spookyImageMatch && spookyImageMatch[1] ? spookyImageMatch[1] : "";
}, [entry.data, generateSpookyImage.data]);
const secondEntry = api.entry.get.useQuery(
{
type: "album",
name: album.name,
image: spookyImageSource,
number: 2,
},
{
refetchInterval: false,
refetchOnReconnect: false,
refetchOnWindowFocus: false,
},
);
const handleGenerateSpookyImage = async () => {
if (!entry.data && !entry.isLoading) {
generateSpookyImage.mutate({
entry: {
type: "album",
name: album.name,
image: imageSource,
},
});
}
};
const handleSecondGenerateSpookyImage = async () => {
if (!secondEntry.data && !secondEntry.isLoading && spookyImageSource) {
generateSecondSpookyImage.mutate({
entry: {
type: "album",
name: album.name,
image: spookyImageSource,
number: 2,
},
});
}
};
const saveImage = api.entry.save.useMutation();
const saveSecondImage = api.entry.save.useMutation();
useEffect(() => {
handleGenerateSpookyImage();
}, [entry.data]);
useEffect(() => {
handleSecondGenerateSpookyImage();
}, [secondEntry.data, entry.data]);
const secondSpookyImageMatch = (
(secondEntry.data?.value || generateSecondSpookyImage?.data || "") as string
).match(/
]*>/);
const secondSpookyImageSource =
secondSpookyImageMatch && secondSpookyImageMatch[1]
? secondSpookyImageMatch[1]
: "";
const firstPlace = places[0] || 0;
const secondPlace = places[1] || 0;
const firstImageError = !!(entry.error || generateSpookyImage.error);
const secondImageError = !!(
secondEntry.error || generateSecondSpookyImage.error
);
return (