diff --git a/src/app/pages/chat/chat.page.html b/src/app/pages/chat/chat.page.html index 770139c39..99fa196ef 100644 --- a/src/app/pages/chat/chat.page.html +++ b/src/app/pages/chat/chat.page.html @@ -67,7 +67,8 @@
{{room.value.duration}}
- {{room.value.lastMessage.msg}} + {{room.value.lastMessage.msg}} + A escrever ... @@ -121,7 +122,11 @@
{{countDownDate(group.value.customFields.countDownDate, group.value.id)}}
-
{{group.value.lastMessage.u.name}}: {{group.value.lastMessage.msg}}
+
{{group.value.lastMessage.u.name}}: {{group.value.lastMessage.msg}}
+ +
{{group.value.lastMessage.u.name}}: {{group.value.lastMessage.msg}}
+
{{group.value.userThatIsTyping}} A escrever ...
+
diff --git a/src/app/pages/chat/group-messages/group-messages.page.html b/src/app/pages/chat/group-messages/group-messages.page.html index 8f9430043..fba00d888 100644 --- a/src/app/pages/chat/group-messages/group-messages.page.html +++ b/src/app/pages/chat/group-messages/group-messages.page.html @@ -220,18 +220,18 @@
- +
- - diff --git a/src/app/pages/chat/group-messages/group-messages.page.ts b/src/app/pages/chat/group-messages/group-messages.page.ts index 406c41827..9ad1f4e7e 100644 --- a/src/app/pages/chat/group-messages/group-messages.page.ts +++ b/src/app/pages/chat/group-messages/group-messages.page.ts @@ -39,7 +39,6 @@ export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy { showLoader: boolean; isGroupCreated:boolean; loggedUser: any; - message:any; messages:any; room:any; @@ -184,6 +183,11 @@ export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy { this.currentPosition = scroll; } + + changeInput() { + this.wsChatMethodsService.getDmRoom(this.roomId).typing() + } + async goToEvent(eventId: any) { let classs; if (window.innerWidth < 701) { @@ -323,8 +327,7 @@ export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy { sendMessage() { - this.wsChatMethodsService.getGroupRoom(this.roomId).send(this.message) - this.message = ""; + this.wsChatMethodsService.getGroupRoom(this.roomId).send() } async openOptions() { diff --git a/src/app/pages/chat/messages/messages.page.html b/src/app/pages/chat/messages/messages.page.html index d9027acc9..43947b077 100644 --- a/src/app/pages/chat/messages/messages.page.html +++ b/src/app/pages/chat/messages/messages.page.html @@ -212,7 +212,7 @@
- +
- - diff --git a/src/app/pages/chat/messages/messages.page.ts b/src/app/pages/chat/messages/messages.page.ts index b5742811f..8627b05f1 100644 --- a/src/app/pages/chat/messages/messages.page.ts +++ b/src/app/pages/chat/messages/messages.page.ts @@ -343,6 +343,10 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy { window.removeEventListener('scroll', this.scrollChangeCallback, true); } + changeInput() { + this.wsChatMethodsService.getDmRoom(this.roomId).typing() + } + sendMessage() { let body = { "message": diff --git a/src/app/services/chat/room.service.ts b/src/app/services/chat/room.service.ts index 9d46dd229..e9d02ea06 100644 --- a/src/app/services/chat/room.service.ts +++ b/src/app/services/chat/room.service.ts @@ -10,6 +10,7 @@ import { Platform } from '@ionic/angular'; import { SqliteService } from 'src/app/services/sqlite.service'; import { NativeNotificationService } from 'src/app/services/native-notification.service'; import { SessionStore } from 'src/app/store/session.service'; +import { capitalizeTxt } from 'src/plugin/text' @Injectable({ providedIn: 'root' }) @@ -27,6 +28,12 @@ export class RoomService { _updatedAt = {} private hasLoadHistory = false duration = '' + isTyping = false + otherUserType = false + lastTimeType = null + message = '' + lastMessageTxt = '' + userThatIsTyping = '' private ToastService = ToastsService mgsArray = []; @@ -95,10 +102,67 @@ export class RoomService { } ) + + + + this.WsChatService.receiveStreamNotifyRoom((message) => { + + console.log(message.fields) + + if(message.fields.eventName == this.id+'/'+'typing') { + + this.userThatIsTyping = this.usernameToDisplayName(message.fields.args[0]) + this.isTyping = message.fields.args[1] + this.otherUserType = message.fields.args[1] + + } else if (message.fields.eventName == this.id+'/'+'deleteMessage') {} + + }) } - send(msg) { - this.WsChatService.send(this.id, msg) + send() { + this.WsChatService.send(this.id, this.message) + this.message= '' + } + + + typing(text:string = this.message) { + + if(this.lastMessageTxt == text) { return false } + this.lastTimeType = new Date().getTime() + + const lastIsTyping = this.isTyping + if(text.length >= 1) { + this.isTyping = true + } else { + this.isTyping = false + } + + if(lastIsTyping != this.isTyping) { + this.WsChatService.sendStreamNotifyRoom(this.id, SessionStore.user.RochetChatUser, 'typing', this.isTyping) + } + + + this.lastMessageTxt = this.message + this.typingWatch() + } + + + private typingWatch() { + setTimeout(()=>{ + const now = new Date().getTime() + + if((now - this.lastTimeType) >= 2888) { + + if(this.isTyping == true) { + this.isTyping = false + this.WsChatService.sendStreamNotifyRoom(this.id, SessionStore.user.RochetChatUser, 'typing', this.isTyping) + } + } else { + console.log(now - this.lastTimeType) + } + + }, 3000) } leave(rid?) { @@ -324,7 +388,11 @@ export class RoomService { } - // to add - countDownDate() { } + usernameToDisplayName(username) { + + const firstName = capitalizeTxt(username.split('.')[0]) + const lastName = capitalizeTxt(username.split('.')[1]) + return firstName + ' ' + lastName + } } diff --git a/src/app/services/chat/ws-chat-methods.service.ts b/src/app/services/chat/ws-chat-methods.service.ts index 8d7609575..b07a7737d 100644 --- a/src/app/services/chat/ws-chat-methods.service.ts +++ b/src/app/services/chat/ws-chat-methods.service.ts @@ -81,12 +81,16 @@ export class WsChatMethodsService { this.WsChatService.streamRoomMessages(id).then((subscription)=>{ console.log('streamRoomMessages', subscription) }) + + this.WsChatService.subStreamNotifyRoom(id, 'typing', false) } for (const id in this.group) { this.WsChatService.streamRoomMessages(id).then((subscription)=>{ console.log('streamRoomMessages', subscription) }) + + this.WsChatService.subStreamNotifyRoom(id, 'typing', false) } this.WsChatService.streamNotifyLogged().then((subscription=>{ diff --git a/src/app/services/chat/ws-chat.service.ts b/src/app/services/chat/ws-chat.service.ts index 872970ece..39f6327a2 100644 --- a/src/app/services/chat/ws-chat.service.ts +++ b/src/app/services/chat/ws-chat.service.ts @@ -231,8 +231,74 @@ export class WsChatService { deleteMessage() {} createRoom() {} + sendStreamNotifyRoom(roomId : string, username, event: 'typing', param: any) { + + const requestId = uuidv4() + + let message = { + msg: "method", + method: "stream-notify-room", + id: requestId, + params: [ + `${roomId}/${event}`, + username, + param + ] + }; + + this.ws.send({message, requestId}) + + return new Promise((resolve, reject) => { + this.ws.registerCallback({type:'Onmessage', funx:(message)=>{ + if(message.id == requestId || deepFind(message,'result.id') == requestId) { // same request send + resolve('') + return true + } + }}) + }); + + } + subStreamNotifyRoom(roomId : string , event: 'typing' | 'deleteMessage', param: any) { + + const requestId = uuidv4() + + let message = { + msg: "sub", + id: requestId, + name: "stream-notify-room", + params:[ + `${roomId}/${event}`, + param + ] + } + + + this.ws.send({message, requestId}) + + return new Promise((resolve, reject) => { + this.ws.registerCallback({type:'Onmessage', funx:(message)=>{ + if(message.id == requestId ) { // same request send + resolve('') + return true + } + }}) + }); + + } + + receiveStreamNotifyRoom(funx: Function) { + + this.ws.registerCallback({ + type:'Onmessage', + funx:(message)=> { + if(message.collection == "stream-notify-room" && message.msg == 'changed') { + funx(message) + } + }}) + } + loadHistory(roomId, limit: number = 50) { const requestId = uuidv4() diff --git a/src/app/shared/chat/group-messages/group-messages.page.html b/src/app/shared/chat/group-messages/group-messages.page.html index 7b1ee94b9..75dd39a56 100644 --- a/src/app/shared/chat/group-messages/group-messages.page.html +++ b/src/app/shared/chat/group-messages/group-messages.page.html @@ -260,18 +260,18 @@
- +
- - diff --git a/src/app/shared/chat/group-messages/group-messages.page.ts b/src/app/shared/chat/group-messages/group-messages.page.ts index 71a7b751c..227265f8f 100644 --- a/src/app/shared/chat/group-messages/group-messages.page.ts +++ b/src/app/shared/chat/group-messages/group-messages.page.ts @@ -216,6 +216,11 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe window.removeEventListener('scroll', this.scrollChangeCallback, true); } + + changeInput() { + this.wsChatMethodsService.getDmRoom(this.roomId).typing() + } + async getChatMembers() { //return await this.chatService.getMembers(roomId).toPromise(); this.chatService.getAllUsers().subscribe(res => { @@ -314,8 +319,7 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe } sendMessage() { - this.wsChatMethodsService.getGroupRoom(this.roomId).send(this.message) - this.message = ""; + this.wsChatMethodsService.getGroupRoom(this.roomId).send() } deleteMessage(msgId: string) { diff --git a/src/app/shared/chat/messages/messages.page.html b/src/app/shared/chat/messages/messages.page.html index 5ceb5633e..e8aff450e 100644 --- a/src/app/shared/chat/messages/messages.page.html +++ b/src/app/shared/chat/messages/messages.page.html @@ -206,20 +206,20 @@
+ class="message-input" rows="1" [(ngModel)]="wsChatMethodsService.getDmRoom(roomId).message" (ionChange)="changeInput()">
- -