From 48030a035ed9cee441a6f4d946c66811c7aea1c1 Mon Sep 17 00:00:00 2001 From: Francisco Pessano Date: Sat, 12 Oct 2024 19:16:35 -0300 Subject: [PATCH] Moved conditions and defined second queries/mutations --- src/app/_components/album-image.tsx | 38 +++++++-------- src/app/_components/album-showcase.tsx | 65 ++++++++++++++++++++++---- src/server/api/routers/entry.ts | 2 + src/server/utils/index.ts | 2 +- 4 files changed, 79 insertions(+), 28 deletions(-) diff --git a/src/app/_components/album-image.tsx b/src/app/_components/album-image.tsx index b0a9a5b..514a6c7 100644 --- a/src/app/_components/album-image.tsx +++ b/src/app/_components/album-image.tsx @@ -11,6 +11,8 @@ interface AlbumImageProps { place: number; spookyImageLoaded: boolean; onImageLoad: () => void; + loadGeneratedImage: boolean; + onQueue: boolean; } export function AlbumImage({ @@ -23,6 +25,8 @@ export function AlbumImage({ place, spookyImageLoaded, onImageLoad, + loadGeneratedImage, + onQueue, }: AlbumImageProps) { return ( @@ -34,30 +38,26 @@ export function AlbumImage({ src={imageSource} alt={album.name} /> - {spookyImageSource && - (generateSpookyImageData - ? lastSpookyImageLoaded >= place || - lastSpookyImageLoaded + 1 === place - : true) && ( - {album.name} { - onImageLoad(); - }} - /> - )} + {loadGeneratedImage && spookyImageSource && ( + {album.name} { + onImageLoad(); + }} + /> + )} {showSpookyImage && !spookyImageLoaded && (
{(() => { if (generateSpookyImageData) { - if (lastSpookyImageLoaded < place - 1) { + if (onQueue) { return ( <> { if (!entry.data && !entry.isLoading) { @@ -60,6 +81,18 @@ export default function AlbumShowcase({ } }; + const handleSecondGenerateSpookyImage = async () => { + if (!secondEntry.data && !secondEntry.isLoading) { + generateSecondSpookyImage.mutate({ + entry: { + type: "album", + name: album.name, + image: spookyImageSource as string, + }, + }); + } + }; + const handleSaveImage = async () => { if (!entry.data && !entry.isLoading) { saveImage.mutate({ @@ -72,6 +105,18 @@ export default function AlbumShowcase({ } }; + const handleSecondSaveImage = async () => { + if (!secondEntry.data && !secondEntry.isLoading) { + saveSecondImage.mutate({ + entry: { + type: "album", + image: spookyImageSource as string, + name: album.name, + }, + }); + } + }; + useEffect(() => { handleGenerateSpookyImage(); }, [entry.data]); @@ -84,12 +129,6 @@ export default function AlbumShowcase({ //TODO ERROR HANDLING - 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); @@ -120,9 +159,19 @@ export default function AlbumShowcase({ place={place} spookyImageLoaded={spookyImageLoaded} onImageLoad={onImageLoad} + loadGeneratedImage={ + !!( + spookyImageSource && + (generateSpookyImage.data + ? lastSpookyImageLoaded >= place || + lastSpookyImageLoaded + 1 === place + : true) + ) + } + onQueue={lastSpookyImageLoaded < place - 1} /> - + {/* - + */}
diff --git a/src/server/api/routers/entry.ts b/src/server/api/routers/entry.ts index 45768ed..dfccfca 100644 --- a/src/server/api/routers/entry.ts +++ b/src/server/api/routers/entry.ts @@ -11,6 +11,7 @@ export type Entry = { type: "artist" | "album"; name: string; image: string; + number?: number; }; export const entryRouter = createTRPCRouter({ @@ -20,6 +21,7 @@ export const entryRouter = createTRPCRouter({ type: z.enum(["artist", "album"]), name: z.string().min(1), image: z.string().min(1), + number: z.number().optional(), }), ) .query(async ({ ctx, input }) => { diff --git a/src/server/utils/index.ts b/src/server/utils/index.ts index d5506e5..0635147 100644 --- a/src/server/utils/index.ts +++ b/src/server/utils/index.ts @@ -2,7 +2,7 @@ import * as cloudinary from "cloudinary"; import { Entry } from "../api/routers/entry"; export const generateEntryUniqueKey = (entry: Entry): string => { - return `${entry.type}:${entry.name.trim().toLowerCase().replace(/\s/g, "-")}`; + return `${entry.type}:${entry.name.trim().toLowerCase().replace(/\s/g, "-")}:${entry.number || 1}`; }; export const uploadImage = async (