import { Message } from 'lingchair-client-protocol'
import * as React from 'react'
import ChatMessage from './ChatMessage.tsx'
import { dialog } from 'mdui'
export default function ChatMessageContainer({ messages }: { messages: Message[] }) {
return (
{
(() => {
// 添加时间
let date = new Date(0)
function timeAddZeroPrefix(t: number) {
if (t >= 0 && t < 10)
return '0' + t
return t + ''
}
// 合并同用户消息
let user: string | undefined
return messages?.map((msg) => {
// 添加时间
const lastDate = date
date = new Date(msg.getTime())
const shouldShowTime = msg.getUserId() != null &&
(date.getMinutes() != lastDate.getMinutes() || date.getDate() != lastDate.getDate() || date.getMonth() != lastDate.getMonth() || date.getFullYear() != lastDate.getFullYear())
// 合并同用户消息
const lastUser = user
user = msg.getUserId()
return <>
{
shouldShowTime &&
{
(date.getFullYear() != lastDate.getFullYear() ? `${date.getFullYear()}年` : '')
+ `${date.getMonth() + 1}月`
+ `${date.getDate()}日`
+ ` ${timeAddZeroPrefix(date.getHours())}:${timeAddZeroPrefix(date.getMinutes())}`
}
}
{
const user = await msg.getUser().then((re) => re?.bean) || {}
dialog({
headline: "Info",
body: `${Object.keys(user)
// @ts-ignore 懒
.map((k) => `${k} = ${user[k]}`)
.join('
')}`,
closeOnEsc: true,
closeOnOverlayClick: true,
actions: [
{
text: "关闭",
onClick: () => {
return true
},
}
]
}).addEventListener('click', (e) => e.stopPropagation())
}}>JSON
]}
messageMenuItems={[
dialog({
headline: "Info",
body: `${Object.keys(msg.bean)
// @ts-ignore 懒
.map((k) => `${k} = ${msg.bean[k]}`)
.join('
')}`,
closeOnEsc: true,
closeOnOverlayClick: true,
actions: [
{
text: "关闭",
onClick: () => {
return true
},
}
]
}).addEventListener('click', (e) => e.stopPropagation())}>Info
]}
/>
>
})
})()
}
)
}