【m】聊天相关逻辑迁移

This commit is contained in:
zhangzheng
2026-03-12 14:41:00 +08:00
parent 873ce3d940
commit 80ff58ba15
5 changed files with 296 additions and 283 deletions

View File

@@ -4,6 +4,7 @@
*/
import { formatTime, formatTimestamp, toggleElement, toggleButtonState } from './utils.js';
import { mockCallSession } from './models.js';
import chatMessage from './chatmessage.js';
class UIRenderer {
constructor(stateManager) {
this.stateManager = stateManager;
@@ -56,6 +57,8 @@ class UIRenderer {
// 订阅状态变化
this.unsubscribe = stateManager.subscribe(this.render.bind(this));
// 订阅消息状态变化
this.messageUnsubscribe = chatMessage.subscribe(this.renderMessageState.bind(this));
// 初始化渲染
this.render(this.stateManager.getState(), { type: 'INIT' });
@@ -71,6 +74,25 @@ class UIRenderer {
});
}
// 渲染消息状态变化
renderMessageState(messageState, changes) {
switch (changes.type) {
case 'NEW_MESSAGE':
this.renderChatMessages(messageState.messages);
this.renderUnreadCount(changes.unreadCount);
break;
case 'SIDEBAR_TOGGLE':
this.renderSidebar(changes.isOpen);
// 当侧边栏打开时,重置未读消息计数
if (changes.isOpen) {
this.renderUnreadCount(0);
} else {
this.renderUnreadCount(changes.unreadCount);
}
break;
}
}
// 绑定事件监听器
bindEventListeners() {
// 事件监听器
@@ -85,7 +107,7 @@ class UIRenderer {
this.renderRemoteVideo(state.session.remoteUser);
this.renderLocalVideo(state.session.localUser, state.localStream);
this.renderControlButtons(state.session.localUser.mediaState);
this.renderChatMessages(state.messages);
this.renderChatMessages(chatMessage.getMessageState().messages);
this.renderUserList(state.session.localUser, state.session.remoteUser);
// 初始化时检查远程流状态,显示或隐藏占位背景
@@ -121,19 +143,6 @@ class UIRenderer {
this.renderRemoteVideo(state.session.remoteUser);
this.renderUserList(state.session.localUser, state.session.remoteUser);
break;
case 'NEW_MESSAGE':
this.renderChatMessages(state.messages);
this.renderUnreadCount(changes.unreadCount);
break;
case 'SIDEBAR_TOGGLE':
this.renderSidebar(changes.isOpen);
// 当侧边栏打开时,重置未读消息计数
if (changes.isOpen) {
this.renderUnreadCount(0);
} else{
this.renderUnreadCount(changes.unreadCount);
}
break;
case 'NETWORK_CHANGE':
this.renderNetworkStatus(changes.quality);
break;
@@ -645,6 +654,9 @@ class UIRenderer {
if (this.unsubscribe) {
this.unsubscribe();
}
if (this.messageUnsubscribe) {
this.messageUnsubscribe();
}
}
}