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 @@
-
{{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 @@
-
+
-
-
+
@@ -220,11 +220,11 @@
-
+
-
+
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()">
-
+
-
+