From 505f01f8dc14c7c600f2c85f1b58fcf98fc26703 Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Wed, 12 Aug 2026 14:28:53 +0000 Subject: [PATCH] feat: add high density UI components for email detail --- frontend/src/components/EmailDetail.tsx | 77 ++++++++++++++++++++++++- frontend/src/lib/email-threading.ts | 25 ++++++++ 2 files changed, 101 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/EmailDetail.tsx b/frontend/src/components/EmailDetail.tsx index 35263d783..4c4ebe298 100644 --- a/frontend/src/components/EmailDetail.tsx +++ b/frontend/src/components/EmailDetail.tsx @@ -8,7 +8,7 @@ import { Checkbox } from "@/components/ui/checkbox"; import { Button } from "@/components/ui/button"; import { Textarea } from "@/components/ui/textarea"; import { Input } from "@/components/ui/input"; -import { Loader2, MessagesSquare } from "lucide-react"; +import { Loader2, MessagesSquare, Paperclip, Calendar } from "lucide-react"; import { DecisionPointCard } from "@/components/DecisionPointCard"; import { SourceDrawer } from "@/components/SourceDrawer"; import { @@ -631,6 +631,21 @@ export function EmailDetail({ emailId, actionCommand = null }: { emailId: number
답장 주소: {safeReplyTo}
+ {email.participants && email.participants.length > 0 && ( +
+
+ {email.participants.slice(0, 5).map((p, i) => ( + + {p.name.charAt(0).toUpperCase()} + + ))} +
+ {email.participants.length > 5 && ( + +{email.participants.length - 5} + )} + 참석자 {email.participants.length}명 +
+ )}
@@ -649,6 +664,66 @@ export function EmailDetail({ emailId, actionCommand = null }: { emailId: number
+ {email.attachments && email.attachments.length > 0 && ( +
+

+ 첨부 파일 +

+
+ {email.attachments.map((file) => ( +
+
+ +
+
+ {file.filename} + {Math.round(file.size / 1024)} KB +
+
+ ))} +
+
+ )} + + {email.meeting_proposal && ( +
+

+ 회의 제안 +

+
+
+ {email.meeting_proposal.title} +
+ {email.meeting_proposal.date} {email.meeting_proposal.time} + {email.meeting_proposal.duration && ( + <> + + {email.meeting_proposal.duration} + + )} + {email.meeting_proposal.location && ( + <> + + {email.meeting_proposal.location} + + )} +
+
+
+ + + +
+
+
+ )} +