diff --git a/apps/web/components/email-list/EmailListItem.tsx b/apps/web/components/email-list/EmailListItem.tsx index 5b5130d4d1..c15a4056d9 100644 --- a/apps/web/components/email-list/EmailListItem.tsx +++ b/apps/web/components/email-list/EmailListItem.tsx @@ -21,6 +21,11 @@ import { Button } from "@/components/ui/button"; import { findCtaLink } from "@/utils/parse/parseHtml.client"; import { ErrorBoundary } from "@/components/ErrorBoundary"; import { internalDateToDate } from "@/utils/date"; +import { useLabels } from "@/hooks/useLabels"; +import { isDefined } from "@/utils/types"; +import { EmailLabels } from "@/components/email-list/EmailLabels"; + +const MAX_THREAD_LABELS = 3; export const EmailListItem = forwardRef( ( @@ -71,6 +76,21 @@ export const EmailListItem = forwardRef( const cta = findCtaLink(lastMessage.textHtml); + const { userLabels } = useLabels(); + + const threadLabels = useMemo(() => { + return thread.messages + .flatMap((message) => + message.labelIds + ?.map((id) => userLabels?.find((label) => label.id === id)) + .filter(Boolean), + ) + .filter(isDefined); + }, [thread.messages, userLabels]); + + const hasLabels = threadLabels.length > 0; + const hasMoreLabels = threadLabels.length > MAX_THREAD_LABELS; + return (
  • )} + {hasLabels && ( + + )}
    {lastMessage.headers.subject}
    diff --git a/apps/web/hooks/useLabels.ts b/apps/web/hooks/useLabels.ts index 14eba2b79e..601cf526f1 100644 --- a/apps/web/hooks/useLabels.ts +++ b/apps/web/hooks/useLabels.ts @@ -3,7 +3,15 @@ import useSWR from "swr"; import type { LabelsResponse } from "@/app/api/google/labels/route"; import type { gmail_v1 } from "@googleapis/gmail"; -export type UserLabel = { id: string; name: string; type: "user" }; +export type UserLabel = { + id: string; + name: string; + type: "user"; + color?: { + textColor: string; + backgroundColor: string; + }; +}; export function useLabels() { const { data, isLoading, error, mutate } =