【m】聊天相关逻辑迁移
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user