From 9ba226244629a7054fb5365d8031211fd9c9bc93 Mon Sep 17 00:00:00 2001 From: asepharyana Date: Sun, 26 Jul 2026 17:31:44 +0700 Subject: [PATCH] refactor: improve image handling and accessibility in MessagesPage --- .../src/app/(dashboard)/messages/page.tsx | 60 +++++++++---------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/services/frontend/src/app/(dashboard)/messages/page.tsx b/services/frontend/src/app/(dashboard)/messages/page.tsx index ac3488b..eee2c10 100644 --- a/services/frontend/src/app/(dashboard)/messages/page.tsx +++ b/services/frontend/src/app/(dashboard)/messages/page.tsx @@ -5,14 +5,14 @@ import { ExternalLink, Flag, Hash, + ImageIcon, Loader2, MessageSquare, RefreshCw, Search, Sparkles, } from "lucide-react"; -import Image from "next/image"; -import { useCallback, useEffect, useMemo, useState } from "react"; +import { useCallback, useEffect, useState } from "react"; import { EmptyState, ErrorState, LoadingSkeleton } from "@/components/shared"; import { GuildSelector } from "@/components/shared/guild-selector"; import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; @@ -247,7 +247,10 @@ export default function MessagesPage() {
{!images || images.length === 0 ? (
- +

No images yet.

) : ( @@ -261,12 +264,10 @@ export default function MessagesPage() { >
{imgUrl ? ( - {msg.content ) : (
@@ -422,6 +423,17 @@ function MessageCard({ > {msg.content}

+ {(() => { + const u = extractFirstImage(msg.metadata); + if (!u) return null; + return ( + + ); + })()} {msg.ai_moderation_flags && msg.ai_moderation_flags !== "[]" && (
{safeParseJsonArray(msg.ai_moderation_flags).map((f) => ( @@ -651,7 +663,7 @@ function MiniStat({ // ── Helpers ────────────────────────────────────────────────────── -function extractImage(metadata: string | null | undefined): string | null { +function extractFirstImage(metadata: string | null | undefined): string | null { if (!metadata) return null; try { const m = JSON.parse(metadata); @@ -663,26 +675,14 @@ function extractImage(metadata: string | null | undefined): string | null { } } -function ImageIcon({ className }: { className?: string }) { - return ( - - Image - - - - - ); +function extractImage(metadata: string | null | undefined): string | null { + if (!metadata) return null; + try { + const m = JSON.parse(metadata); + const atts: Array<{ url: string; contentType?: string }> = + m.attachments ?? []; + return atts.find((a) => a.contentType?.startsWith("image/"))?.url ?? null; + } catch { + return null; + } }