diff --git a/src/app/_components/album-image.tsx b/src/app/_components/album-image.tsx
index 514a6c7..fb8368c 100644
--- a/src/app/_components/album-image.tsx
+++ b/src/app/_components/album-image.tsx
@@ -1,7 +1,11 @@
-import React from "react";
+import { api } from "@/trpc/react";
+import React, { useEffect, useState } from "react";
import Tilt from "react-parallax-tilt";
+import SadFaceIcon from "./sad-face-icon";
interface AlbumImageProps {
+ number?: number;
+ entry: { data: any; isLoading: boolean };
showSpookyImage: boolean;
imageSource: string;
spookyImageSource: string | null;
@@ -9,13 +13,27 @@ interface AlbumImageProps {
generateSpookyImageData: string | null;
lastSpookyImageLoaded: number;
place: number;
- spookyImageLoaded: boolean;
- onImageLoad: () => void;
loadGeneratedImage: boolean;
onQueue: boolean;
+ saveImage: {
+ mutate: (arg0: {
+ entry: {
+ type: "album" | "artist";
+ image: string;
+ name: string;
+ number?: number;
+ };
+ }) => void;
+ };
+ setLastSpookyImageLoaded: (
+ arg0: number | ((state: number) => number),
+ ) => void;
+ error: boolean;
}
export function AlbumImage({
+ number,
+ entry,
showSpookyImage,
imageSource,
spookyImageSource,
@@ -23,11 +41,42 @@ export function AlbumImage({
generateSpookyImageData,
lastSpookyImageLoaded,
place,
- spookyImageLoaded,
- onImageLoad,
loadGeneratedImage,
onQueue,
+ saveImage,
+ setLastSpookyImageLoaded,
+ error,
}: AlbumImageProps) {
+ const [spookyImageLoaded, setSpookyImageLoaded] = useState(false);
+
+ const handleSaveImage = async () => {
+ if (!entry.data && !entry.isLoading) {
+ saveImage.mutate({
+ entry: {
+ type: "album",
+ image: imageSource,
+ name: album.name,
+ number,
+ },
+ });
+ }
+ };
+
+ useEffect(() => {
+ if (spookyImageLoaded) {
+ handleSaveImage();
+ }
+ }, [spookyImageLoaded]);
+
+ const onImageLoad = () => {
+ if (!spookyImageLoaded) {
+ setSpookyImageLoaded(true);
+ setLastSpookyImageLoaded((state: number) =>
+ state > place ? state : place,
+ );
+ }
+ };
+
return (
Error
- {loadGeneratedImage && spookyImageSource && (
+ {loadGeneratedImage && spookyImageSource && !error && (
)}
- {showSpookyImage && !spookyImageLoaded && (
+ {showSpookyImage && !spookyImageLoaded && !error && (
]*>/);
- const spookyImageSource = spookyImageMatch ? spookyImageMatch[0] : "";
+ return spookyImageMatch && spookyImageMatch[1] ? spookyImageMatch[1] : "";
+ }, [entry.data, generateSpookyImage.data]);
const secondEntry = api.entry.get.useQuery(
{
@@ -62,13 +70,12 @@ export default function AlbumShowcase({
number: 2,
},
{
- enabled: !!spookyImageSource,
+ refetchInterval: false,
+ refetchOnReconnect: false,
+ refetchOnWindowFocus: false,
},
);
- const saveImage = api.entry.save.useMutation();
- const saveSecondImage = api.entry.save.useMutation();
-
const handleGenerateSpookyImage = async () => {
if (!entry.data && !entry.isLoading) {
generateSpookyImage.mutate({
@@ -82,61 +89,44 @@ export default function AlbumShowcase({
};
const handleSecondGenerateSpookyImage = async () => {
- if (!secondEntry.data && !secondEntry.isLoading) {
+ if (!secondEntry.data && !secondEntry.isLoading && spookyImageSource) {
generateSecondSpookyImage.mutate({
entry: {
type: "album",
name: album.name,
- image: spookyImageSource as string,
+ image: spookyImageSource,
+ number: 2,
},
});
}
};
- const handleSaveImage = async () => {
- if (!entry.data && !entry.isLoading) {
- saveImage.mutate({
- entry: {
- type: "album",
- image: imageSource,
- name: album.name,
- },
- });
- }
- };
-
- const handleSecondSaveImage = async () => {
- if (!secondEntry.data && !secondEntry.isLoading) {
- saveSecondImage.mutate({
- entry: {
- type: "album",
- image: spookyImageSource as string,
- name: album.name,
- },
- });
- }
- };
+ const saveImage = api.entry.save.useMutation();
+ const saveSecondImage = api.entry.save.useMutation();
useEffect(() => {
handleGenerateSpookyImage();
}, [entry.data]);
useEffect(() => {
- if (spookyImageLoaded) {
- handleSaveImage();
- }
- }, [spookyImageLoaded]);
+ handleSecondGenerateSpookyImage();
+ }, [secondEntry.data, entry.data]);
- //TODO ERROR HANDLING
+ const secondSpookyImageMatch = (
+ (secondEntry.data?.value || generateSecondSpookyImage?.data || "") as string
+ ).match(/
]*>/);
+ const secondSpookyImageSource =
+ secondSpookyImageMatch && secondSpookyImageMatch[1]
+ ? secondSpookyImageMatch[1]
+ : "";
- const onImageLoad = () => {
- if (!spookyImageLoaded) {
- setSpookyImageLoaded(true);
- setLastSpookyImageLoaded((state: number) =>
- state > place ? state : place,
- );
- }
- };
+ const firstPlace = places[0] || 0;
+ const secondPlace = places[1] || 0;
+
+ const firstImageError = !!(entry.error || generateSpookyImage.error);
+ const secondImageError = !!(
+ secondEntry.error || generateSecondSpookyImage.error
+ );
return (