diff --git a/client/ui/chat-fragment/ChatFragment.tsx b/client/ui/chat-fragment/ChatFragment.tsx index 904aa68..800c5bf 100644 --- a/client/ui/chat-fragment/ChatFragment.tsx +++ b/client/ui/chat-fragment/ChatFragment.tsx @@ -12,6 +12,7 @@ import TextFieldPreference from "../preference/TextFieldPreference" import * as React from 'react' import ChatMessageContainer from "./ChatMessageContainer" import AppStateContext from "../app-state/AppStateContext" +import ChatPanel, { ChatPanelRef } from "./ChatPanel" interface MduiTabFitSizeArgs extends React.HTMLAttributes { value: string @@ -41,6 +42,9 @@ export default function ChatFragment({ const chatPanelRef = React.useRef() const inputRef = React.useRef() + const chatPagePanelRef = React.useRef() + + return (
{/* 这里显示一些提示 */}
- + { // 输入框 } @@ -180,8 +185,10 @@ export default function ChatFragment({ }}> { + }} onClick={async () => { // 发送消息 + await chatInfo.sendMessageOrThrow(inputRef.current!.value) + inputRef.current!.value = '' }}>
() - +export default function ChatMessageContainer({ messages }: { messages: Message[] }) { return (
) { + const [messages, setMessages] = React.useState([]) + const [offset, setOffset] = React.useState(0) + + React.useImperativeHandle(ref, () => { + return { + setOffset: (offset: number) => setOffset(offset), + getOffset: () => offset, + } + }, [chat]) + + useAsyncEffect(async () => { + const messages = await chat.getMessagesOrThrow({ offset }) + setMessages(messages) + }, [chat, offset]) + + return +} + +const ChatPanel = React.forwardRef(ChatPanelInner) + +export type ChatPanelRef = { + setOffset: (offset: number) => void + getOffset: () => number +} + +export default ChatPanel