mirror of
https://github.com/TangSengDaoDao/TangSengDaoDaoWeb
synced 2025-06-06 09:08:59 +00:00
fix: reddot not remote after clear message
This commit is contained in:
parent
41dd52904c
commit
1fa8523dfe
@ -1,4 +1,4 @@
|
||||
import { Channel, ChannelTypeGroup, ChannelTypePerson, ConversationAction, WKSDK, Mention, Message, MessageContent, Reminder, ReminderType, Reply,MessageText } from "wukongimjssdk";
|
||||
import { Channel, ChannelTypeGroup, ChannelTypePerson, ConversationAction, WKSDK, Mention, Message, MessageContent, Reminder, ReminderType, Reply, MessageText } from "wukongimjssdk";
|
||||
import React, { Component, HTMLProps } from "react";
|
||||
import Provider from "../../Service/Provider";
|
||||
import ConversationVM from "./vm";
|
||||
@ -6,7 +6,7 @@ import "./index.css"
|
||||
import { MessageWrap } from "../../Service/Model";
|
||||
import WKApp from "../../App";
|
||||
import { RevokeCell } from "../../Messages/Revoke";
|
||||
import { MessageContentTypeConst } from "../../Service/Const";
|
||||
import { MessageContentTypeConst } from "../../Service/Const";
|
||||
import ConversationContext from "./context";
|
||||
import MessageInput, { MentionModel, MessageInputContext } from "../MessageInput";
|
||||
import ContextMenus, { ContextMenusContext } from "../ContextMenus";
|
||||
@ -258,7 +258,7 @@ export class Conversation extends Component<ConversationProps> implements Conver
|
||||
}
|
||||
this.scrollTimer = window.setTimeout(() => {
|
||||
this.handleScrollEnd()
|
||||
}, 500)
|
||||
}, 500)
|
||||
this.contextMenusContext.hide()
|
||||
const targetScrollTop = e.target.scrollTop;
|
||||
const scrollOffsetTop = e.target.scrollHeight - (targetScrollTop + e.target.clientHeight);
|
||||
@ -284,6 +284,14 @@ export class Conversation extends Component<ConversationProps> implements Conver
|
||||
|
||||
}
|
||||
|
||||
// 判断内容是否满一屏幕
|
||||
isFullScreen(viewport: HTMLElement | null) {
|
||||
if (!viewport) {
|
||||
return false
|
||||
}
|
||||
return viewport.scrollHeight > viewport.clientHeight
|
||||
}
|
||||
|
||||
handleScrollEnd() {
|
||||
this.uploadReadedIfNeed()
|
||||
}
|
||||
@ -421,7 +429,7 @@ export class Conversation extends Component<ConversationProps> implements Conver
|
||||
}
|
||||
}
|
||||
// 所有可见的消息
|
||||
allVisiableMessages(vp: HTMLElement | null):Array<MessageWrap> {
|
||||
allVisiableMessages(vp: HTMLElement | null): Array<MessageWrap> {
|
||||
const visiableMessages = new Array<MessageWrap>()
|
||||
if (!this.vm.messages || this.vm.messages.length === 0) {
|
||||
return visiableMessages
|
||||
@ -433,7 +441,7 @@ export class Conversation extends Component<ConversationProps> implements Conver
|
||||
if (!viewport) {
|
||||
return visiableMessages
|
||||
}
|
||||
|
||||
|
||||
const targetScrollTop = viewport.scrollTop;
|
||||
for (let index = 0; index < this.vm.messages.length; index++) {
|
||||
const message = this.vm.messages[index];
|
||||
@ -505,7 +513,7 @@ export class Conversation extends Component<ConversationProps> implements Conver
|
||||
<ConversationPositionView onScrollToBottom={async () => {
|
||||
return this.vm.onDownArrow()
|
||||
}} onReminder={(reminder) => {
|
||||
return this.vm.syncMessages(reminder.messageSeq,()=>{
|
||||
return this.vm.syncMessages(reminder.messageSeq, () => {
|
||||
const newMessageWrap = this.vm.findMessageWithMessageSeq(reminder.messageSeq)
|
||||
if (newMessageWrap) {
|
||||
newMessageWrap.locateRemind = true // 设置为闪烁提醒
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { Channel, ChannelTypeGroup, ChannelTypePerson, ConversationAction, WKSDK, Message, MessageContent, MessageStatus, Subscriber, Conversation, MessageExtra, CMDContent, PullMode, MessageContentType, ChannelInfo } from "wukongimjssdk";
|
||||
import { Channel, ChannelTypeGroup, ChannelTypePerson, ConversationAction, WKSDK, Message, MessageContent, MessageStatus, Subscriber, Conversation, MessageExtra, CMDContent, PullMode, MessageContentType, ChannelInfo, ConversationListener } from "wukongimjssdk";
|
||||
import WKApp from "../../App";
|
||||
import { SyncMessageOptions } from "../../Service/DataSource/DataProvider";
|
||||
import { MessageWrap } from "../../Service/Model";
|
||||
@ -40,6 +40,7 @@ export default class ConversationVM extends ProviderListener {
|
||||
messageListener!: MessageListener // 消息监听
|
||||
cmdListener!: MessageListener // cmd消息监听
|
||||
messageStatusListener!: MessageStatusListener // 消息状态监听
|
||||
conversationListener!: ConversationListener // 会话监听
|
||||
lastMessage?: MessageWrap // 此会话的最后一条最新的消息
|
||||
lastLocalMessageElement?: HTMLElement | null // 最后一条消息的dom元素
|
||||
private _showScrollToBottomBtn?: boolean = false // 是否显示底部按钮
|
||||
@ -253,6 +254,17 @@ export default class ConversationVM extends ProviderListener {
|
||||
|
||||
didMount(): void {
|
||||
|
||||
this.conversationListener = (conversation: Conversation, action: ConversationAction) => {
|
||||
if(!conversation.channel.isEqual(this.channel)) {
|
||||
return
|
||||
}
|
||||
if(action == ConversationAction.update) {
|
||||
console.log("update-2--->",conversation.unread)
|
||||
this.unreadCount = conversation.unread
|
||||
}
|
||||
}
|
||||
WKSDK.shared().conversationManager.addConversationListener(this.conversationListener)
|
||||
|
||||
// 消息监听
|
||||
this.messageListener = (message: Message) => {
|
||||
if (!message.channel.isEqual(this.channel)) {
|
||||
@ -303,8 +315,12 @@ export default class ConversationVM extends ProviderListener {
|
||||
|
||||
WKApp.endpointManager.setMethod(EndpointID.clearChannelMessages, (channel: Channel) => {
|
||||
if (channel.isEqual(this.channel)) {
|
||||
if(this.messagesOfOrigin.length > 0) {
|
||||
this.browseToMessageSeq = this.messagesOfOrigin[this.messagesOfOrigin.length-1].messageSeq
|
||||
}
|
||||
this.messagesOfOrigin = []
|
||||
this.messages = []
|
||||
this.lastMessage = undefined
|
||||
this.notifyListener()
|
||||
}
|
||||
}, {})
|
||||
@ -381,6 +397,7 @@ export default class ConversationVM extends ProviderListener {
|
||||
WKSDK.shared().chatManager.removeCMDListener(this.cmdListener)
|
||||
|
||||
TypingManager.shared.removeTypingListener(this.typingListener)
|
||||
WKSDK.shared().conversationManager.removeConversationListener(this.conversationListener)
|
||||
|
||||
}
|
||||
|
||||
@ -664,13 +681,14 @@ export default class ConversationVM extends ProviderListener {
|
||||
this.lastMessage = message
|
||||
change = true
|
||||
}
|
||||
if (change) {
|
||||
if (change && this.showScrollToBottomBtn) {
|
||||
this.refreshNewMsgCount()
|
||||
}
|
||||
}
|
||||
|
||||
// 刷新新消息数量
|
||||
refreshNewMsgCount() {
|
||||
|
||||
const oldUnreadCount = this.unreadCount
|
||||
if (this.browseToMessageSeq == 0) {
|
||||
this.unreadCount = 0
|
||||
@ -689,6 +707,7 @@ export default class ConversationVM extends ProviderListener {
|
||||
if (oldUnreadCount != this.unreadCount) {
|
||||
const conversation = WKSDK.shared().conversationManager.findConversation(this.channel)
|
||||
if (conversation) {
|
||||
console.log("this.unreadCount--->",this.unreadCount)
|
||||
conversation.unread = this.unreadCount
|
||||
WKSDK.shared().conversationManager.notifyConversationListeners(conversation, ConversationAction.update)
|
||||
}
|
||||
|
@ -21,6 +21,7 @@ export interface ConversationListProps {
|
||||
conversations: ConversationWrap[]
|
||||
select?: Channel
|
||||
onClick?: (conversation: ConversationWrap) => void
|
||||
onClearMessages?: (channel: Channel) => void
|
||||
}
|
||||
|
||||
export interface ConversationListState {
|
||||
@ -234,14 +235,9 @@ export default class ConversationList extends Component<ConversationListProps, C
|
||||
}
|
||||
|
||||
async onClearMessages(channel: Channel) {
|
||||
const conversation = WKSDK.shared().conversationManager.findConversation(channel)
|
||||
if (!conversation) {
|
||||
return
|
||||
if(this.props.onClearMessages) {
|
||||
this.props.onClearMessages(channel)
|
||||
}
|
||||
await WKApp.conversationProvider.clearConversationMessages(conversation)
|
||||
conversation.lastMessage = undefined
|
||||
WKApp.endpointManager.invoke(EndpointID.clearChannelMessages, channel)
|
||||
this.setState({})
|
||||
}
|
||||
|
||||
render() {
|
||||
|
@ -15,6 +15,7 @@ import { Channel, ChannelInfo, WKSDK } from "wukongimjssdk";
|
||||
import { ChannelInfoListener } from "wukongimjssdk";
|
||||
import { ChatMenus } from "../../App";
|
||||
import ConversationContext from "../../Components/Conversation/context";
|
||||
import { EndpointID } from "../../Service/Const";
|
||||
|
||||
export interface ChatContentPageProps {
|
||||
channel: Channel;
|
||||
@ -51,6 +52,8 @@ export class ChatContentPage extends Component<
|
||||
WKSDK.shared().channelManager.removeListener(this.channelInfoListener);
|
||||
}
|
||||
|
||||
|
||||
|
||||
render(): React.ReactNode {
|
||||
const { channel, initLocateMessageSeq } = this.props;
|
||||
const { showChannelSetting } = this.state;
|
||||
@ -175,7 +178,17 @@ export default class ChatPage extends Component<any> {
|
||||
// WKApp.routeMain.replaceToRoot(<ChatContentPage vm={this.vm}></ChatContentPage>)
|
||||
}
|
||||
|
||||
componentWillUnmount() {}
|
||||
componentWillUnmount() { }
|
||||
|
||||
|
||||
|
||||
updateConversation(channel: Channel) {
|
||||
const conversation = WKSDK.shared().conversationManager.findConversation(channel)
|
||||
if(conversation) {
|
||||
conversation.unread = 0
|
||||
conversation.lastMessage = undefined
|
||||
}
|
||||
}
|
||||
|
||||
render(): ReactNode {
|
||||
return (
|
||||
@ -235,6 +248,7 @@ export default class ChatPage extends Component<any> {
|
||||
<ConversationList
|
||||
select={WKApp.shared.openChannel}
|
||||
conversations={vm.conversations}
|
||||
onClearMessages={this.vm.clearMessages.bind(this.vm)}
|
||||
onClick={(conversation: ConversationWrap) => {
|
||||
vm.selectedConversation = conversation;
|
||||
WKApp.endpoints.showConversation(
|
||||
|
@ -8,6 +8,7 @@ import { ConversationWrap } from "../../Service/Model";
|
||||
import { ProviderListener } from "../../Service/Provider";
|
||||
import { animateScroll, scroller } from 'react-scroll';
|
||||
import { ProhibitwordsService } from "../../Service/ProhibitwordsService";
|
||||
import { EndpointID } from "../../Service/Const";
|
||||
|
||||
export class ChatVM extends ProviderListener {
|
||||
conversations: ConversationWrap[] = new Array()
|
||||
@ -182,6 +183,21 @@ export class ChatVM extends ProviderListener {
|
||||
}
|
||||
}
|
||||
|
||||
async clearMessages(channel: Channel) {
|
||||
|
||||
const conversationWrap = this.findConversation(channel)
|
||||
if (!conversationWrap) {
|
||||
return
|
||||
}
|
||||
await WKApp.conversationProvider.clearConversationMessages(conversationWrap.conversation)
|
||||
conversationWrap.conversation.lastMessage = undefined
|
||||
conversationWrap.conversation.unread = 0
|
||||
WKApp.endpointManager.invoke(EndpointID.clearChannelMessages, channel)
|
||||
this.sortConversations()
|
||||
this.notifyListener()
|
||||
}
|
||||
|
||||
|
||||
setConnectTitleWithConnectStatus(connectStatus: ConnectStatus) {
|
||||
if (connectStatus === ConnectStatus.Connected) {
|
||||
this.connectTitle = WKApp.config.appName
|
||||
|
Loading…
x
Reference in New Issue
Block a user