feat(ui): 拉到最頂部加載更多消息

This commit is contained in:
CrescentLeaf
2025-09-22 23:05:21 +08:00
parent 43385780f8
commit fc197ea41a

View File

@@ -50,11 +50,11 @@ export default function ChatFragment({ target, ...props }: Args) {
if (checkApiSuccessOrSncakbar(re, "拉取歷史記錄失敗")) return
const returnMsgs = (re.data!.messages as Message[]).reverse()
if (returnMsgs.length == 0)
return snackbar({
message: "已經沒有消息了哦~",
placement: 'top',
})
if (returnMsgs.length == 0) {
setShowNoMoreMessagesTip(true)
setTimeout(() => setShowNoMoreMessagesTip(false), 1000)
return
}
setMessagesList(returnMsgs.concat(messagesList))
if (page.current == 0)
@@ -83,6 +83,8 @@ export default function ChatFragment({ target, ...props }: Args) {
})
const inputRef = React.useRef<TextField>(null)
const [showLoadingMoreMessagesTip, setShowLoadingMoreMessagesTip] = React.useState(false)
const [showNoMoreMessagesTip, setShowNoMoreMessagesTip] = React.useState(false)
async function sendMessage() {
const text = inputRef.current!.value
@@ -124,14 +126,37 @@ export default function ChatFragment({ target, ...props }: Args) {
display: tabItemSelected == "Chat" ? "flex" : "none",
flexDirection: "column",
height: "100%",
}} onScroll={async (e) => {
const scrollTop = (e.target as HTMLDivElement).scrollTop
if (scrollTop == 0 && !showLoadingMoreMessagesTip) {
setShowLoadingMoreMessagesTip(true)
await loadMore()
setShowLoadingMoreMessagesTip(false)
}
}}>
<div style={{
display: "flex",
display: 'flex',
justifyContent: "center",
paddingTop: "15px",
}}>
<mdui-button variant="text" onClick={() => ()}></mdui-button>
<div style={{
display: showLoadingMoreMessagesTip ? 'flex' : 'none',
}}>
<mdui-circular-progress style={{
width: '30px',
height: '30px',
}}></mdui-circular-progress>
<span style={{
alignSelf: 'center',
paddingLeft: '12px',
}}>...</span>
</div>
<div style={{
display: showNoMoreMessagesTip ? undefined : 'none',
alignSelf: 'center',
}}>
~
</div>
</div>
<MessageContainer style={{
paddingTop: "15px",