fix portrait click

This commit is contained in:
dev.daminik00 2025-10-09 19:57:38 +02:00
parent 94c337428f
commit 3c1cbfa571
2 changed files with 16 additions and 11 deletions

View File

@ -1,6 +1,7 @@
"use client"; "use client";
import Image from "next/image"; import Image from "next/image";
import { useRouter } from "next/navigation";
import { Card, Icon, IconName, Typography } from "@/components/ui"; import { Card, Icon, IconName, Typography } from "@/components/ui";
import { PartnerPortrait } from "@/entities/dashboard/types"; import { PartnerPortrait } from "@/entities/dashboard/types";
@ -35,7 +36,7 @@ const getStatusConfig = (status: PartnerPortrait["status"]) => {
case "processing": case "processing":
return { return {
icon: <Icon name={IconName.Loader} className={styles.iconProcessing} size={{ width: 16, height: 16 }} />, icon: <Icon name={IconName.Loader} className={styles.iconProcessing} size={{ width: 16, height: 16 }} />,
text: "Generating...", text: "Processing...",
showCheckmark: false, showCheckmark: false,
className: styles.statusProcessing, className: styles.statusProcessing,
}; };
@ -62,6 +63,8 @@ export default function PortraitCard({
status: initialStatus, status: initialStatus,
imageUrl: initialImageUrl, imageUrl: initialImageUrl,
}: PortraitCardProps) { }: PortraitCardProps) {
const router = useRouter();
// Use polling hook to update status in real-time // Use polling hook to update status in real-time
const { status, imageUrl: polledImageUrl } = useGenerationStatus(_id, initialStatus); const { status, imageUrl: polledImageUrl } = useGenerationStatus(_id, initialStatus);
@ -71,8 +74,18 @@ export default function PortraitCard({
const statusConfig = getStatusConfig(status as PartnerPortrait["status"]); const statusConfig = getStatusConfig(status as PartnerPortrait["status"]);
const isReady = status === "done" && imageUrl; const isReady = status === "done" && imageUrl;
const handleClick = () => {
if (isReady) {
router.push(`/portraits/${_id}`);
}
};
return ( return (
<Card className={`${styles.card} ${!isReady ? styles.disabled : ""}`}> <Card
className={`${styles.card} ${!isReady ? styles.disabled : ""}`}
onClick={handleClick}
style={{ cursor: isReady ? 'pointer' : 'default' }}
>
<div className={styles.imageContainer}> <div className={styles.imageContainer}>
{imageUrl ? ( {imageUrl ? (
<Image <Image

View File

@ -1,5 +1,3 @@
import Link from "next/link";
import { Grid, Section } from "@/components/ui"; import { Grid, Section } from "@/components/ui";
import { PartnerPortrait } from "@/entities/dashboard/types"; import { PartnerPortrait } from "@/entities/dashboard/types";
@ -20,13 +18,7 @@ export default function PortraitsSection({ portraits }: PortraitsSectionProps) {
<Section title="Portraits" contentClassName={styles.sectionContent}> <Section title="Portraits" contentClassName={styles.sectionContent}>
<Grid columns={portraits.length} className={styles.grid}> <Grid columns={portraits.length} className={styles.grid}>
{portraits.map(portrait => ( {portraits.map(portrait => (
<Link <PortraitCard key={portrait._id} {...portrait} />
href={portrait.status === "done" && portrait.imageUrl ? `/portraits/${portrait._id}` : "#"}
key={portrait._id}
className={portrait.status === "done" && portrait.imageUrl ? "" : styles.disabledLink}
>
<PortraitCard {...portrait} />
</Link>
))} ))}
</Grid> </Grid>
</Section> </Section>