--- import { cn } from '../lib/cn' import { formatDateShort } from '../lib/timeAgo' import UserBadge from './UserBadge.astro' import type { Prisma } from '@prisma/client' import type { HTMLAttributes } from 'astro/types' export type ChatMessage = { id: number content: string createdAt: Date user: Prisma.UserGetPayload<{ select: { id: true name: true displayName: true picture: true } }> } type Props = HTMLAttributes<'div'> & { messages: ChatMessage[] userId: number | null } const { messages, userId, class: className, ...htmlProps } = Astro.props ---

Refresh the page to see new messages Refreshing every 10s

{ messages.length > 0 ? ( messages .map((message) => ({ ...message, formattedCreatedAt: formatDateShort(message.createdAt, { prefix: false, hourPrecision: true, caseType: 'sentence', }), })) .map((message, index, messages) => { const isCurrentUser = message.user.id === userId const prev = messages[index - 1] const next = messages[index + 1] const isPrevFromSameUser = !!prev && prev.user.id === message.user.id const isPrevSameDate = !!prev && prev.formattedCreatedAt === message.formattedCreatedAt const isNextFromSameUser = !!next && next.user.id === message.user.id const isNextSameDate = !!next && next.formattedCreatedAt === message.formattedCreatedAt return (
{!isCurrentUser && !isNextFromSameUser && ( )}

{(!isPrevFromSameUser || !isPrevSameDate) && (

{message.formattedCreatedAt}

)}
) }) ) : (
No messages yet
) }