ui(client): improve Message loading
This commit is contained in:
@@ -116,6 +116,8 @@ const transformers: ChatParserTransformers = {
|
|||||||
export default function ChatMessage({ message, noUserDisplay, avatarMenuItems, messageMenuItems }: { message: Message, noUserDisplay?: boolean, avatarMenuItems?: globalThis.React.JSX.IntrinsicElements['mdui-menu-item'][], messageMenuItems?: globalThis.React.JSX.IntrinsicElements['mdui-menu-item'][] }) {
|
export default function ChatMessage({ message, noUserDisplay, avatarMenuItems, messageMenuItems }: { message: Message, noUserDisplay?: boolean, avatarMenuItems?: globalThis.React.JSX.IntrinsicElements['mdui-menu-item'][], messageMenuItems?: globalThis.React.JSX.IntrinsicElements['mdui-menu-item'][] }) {
|
||||||
const AppState = React.useContext(AppStateContext)
|
const AppState = React.useContext(AppStateContext)
|
||||||
|
|
||||||
|
const [show, setShown] = React.useState(false)
|
||||||
|
|
||||||
const [isAtRight, setAtRight] = React.useState(false)
|
const [isAtRight, setAtRight] = React.useState(false)
|
||||||
|
|
||||||
const messageDropDownRef = React.useRef<Dropdown>()
|
const messageDropDownRef = React.useRef<Dropdown>()
|
||||||
@@ -130,13 +132,14 @@ export default function ChatMessage({ message, noUserDisplay, avatarMenuItems, m
|
|||||||
setAvatarDropDownOpen(false)
|
setAvatarDropDownOpen(false)
|
||||||
})
|
})
|
||||||
|
|
||||||
const [nickName, setNickName] = React.useState('')
|
const [nickName, setNickName] = React.useState(message.getUserId()! || 'System')
|
||||||
const [avatarUrl, setAvatarUrl] = React.useState('')
|
const [avatarUrl, setAvatarUrl] = React.useState('')
|
||||||
useAsyncEffect(async () => {
|
useAsyncEffect(async () => {
|
||||||
const user = await ClientCache.getUser(message.getUserId()!)
|
const user = await ClientCache.getUser(message.getUserId()!)
|
||||||
setAtRight(await ClientCache.getMySelf().then((re) => re?.getId()) == user?.getId())
|
setAtRight(await ClientCache.getMySelf().then((re) => re?.getId()) == user?.getId())
|
||||||
setNickName(user?.getNickName() || '')
|
setNickName(user?.getNickName() || '')
|
||||||
setAvatarUrl(getClient().getUrlForFileByHash(user?.getAvatarFileHash() || '') || '')
|
setAvatarUrl(getClient().getUrlForFileByHash(user?.getAvatarFileHash() || '') || '')
|
||||||
|
setShown(true)
|
||||||
}, [message])
|
}, [message])
|
||||||
|
|
||||||
const messageInnerRef = React.useRef<HTMLSpanElement>(null)
|
const messageInnerRef = React.useRef<HTMLSpanElement>(null)
|
||||||
@@ -152,7 +155,11 @@ export default function ChatMessage({ message, noUserDisplay, avatarMenuItems, m
|
|||||||
})
|
})
|
||||||
}, [message])
|
}, [message])
|
||||||
|
|
||||||
return (
|
return <>
|
||||||
|
<div style={{
|
||||||
|
display: show ? 'none' : undefined,
|
||||||
|
padding: '5px',
|
||||||
|
}}>加载中...</div>
|
||||||
<div
|
<div
|
||||||
slot="trigger"
|
slot="trigger"
|
||||||
onContextMenu={(e) => {
|
onContextMenu={(e) => {
|
||||||
@@ -167,7 +174,7 @@ export default function ChatMessage({ message, noUserDisplay, avatarMenuItems, m
|
|||||||
}}
|
}}
|
||||||
style={{
|
style={{
|
||||||
width: "100%",
|
width: "100%",
|
||||||
display: "flex",
|
display: show ? 'flex' : 'none',
|
||||||
justifyContent: isAtRight ? "flex-end" : "flex-start",
|
justifyContent: isAtRight ? "flex-end" : "flex-start",
|
||||||
flexDirection: "column"
|
flexDirection: "column"
|
||||||
}}>
|
}}>
|
||||||
@@ -260,5 +267,5 @@ export default function ChatMessage({ message, noUserDisplay, avatarMenuItems, m
|
|||||||
</mdui-card>
|
</mdui-card>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
)
|
</>
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user