diff --git a/src/app/services/chat.service.ts b/src/app/services/chat.service.ts index 2b04e93..60e6ae5 100644 --- a/src/app/services/chat.service.ts +++ b/src/app/services/chat.service.ts @@ -35,6 +35,55 @@ export class ChatService { return matrixClientPromise; } + getUserId = (): boolean => { + if (this.matrixClient === undefined) { return null; } + + return this.matrixClient.getUserId; + } + + isLogged = (): boolean => { + return (this.getUserId() !== null); + } + + getRoomMembers = (roomId: string): RoomMember[] => { + const room: Room = this.matrixClient?.getRoom(roomId) as Room; + return room?.getJoinedMembers(); + } + + isInRoom = (roomId: string): boolean => { + if (!this.isLogged()) { return false; } + + const room: Room = this.matrixClient.getRoom(roomId) as Room; + if (room === null) { return false; } + + return room.getMyMembership() === 'join'; + } + + isInvitedToRoom = (roomId: string): boolean => { + if (!this.isLogged()) { return false; } + + const room: Room = this.matrixClient.getRoom(roomId) as Room; + if (room === null) { return false; } + + return room.getMyMembership() === 'invite'; + } + + sendMessage = (roomId: string, body: string): Promise => { + const message = { + body, + msgtype: 'm.text' + }; + return this.matrixClient.sendMessage(roomId, message); + } + + joinRoom = async (roomId: string): Promise => { + return this.matrixClient.joinRoom(roomId); + } + + leaveRoom = async (roomId: string): Promise => { + return this.matrixClient.leave(roomId); + } + private async loginWithToken(loginToken: string): Promise { const matrixLogin = await this.http.post( 'http://synapse:8008/_matrix/client/r0/login', @@ -64,17 +113,4 @@ export class ChatService { return this.matrixClient; } - - sendMessage = (roomId: string, body: string) => { - const message = { - body, - msgtype: 'm.text' - }; - return this.matrixClient.sendMessage(roomId, message); - } - - getRoomMembers(roomId: string): RoomMember[] { - const room: Room = this.matrixClient?.getRoom(roomId) as Room; - return room?.getJoinedMembers(); - } } diff --git a/src/app/views/chat/chat.component.html b/src/app/views/chat/chat.component.html index aba3eae..eb3eda6 100644 --- a/src/app/views/chat/chat.component.html +++ b/src/app/views/chat/chat.component.html @@ -1,28 +1,40 @@ - - - - -

{{message.getSender()}}

-

- {{message.getContent().body}} -

-
-
-
- - - - Miembros - - - - - - - - - - - - -
\ No newline at end of file + +

Login for seeing the chat.

+
+ + + + + + + + + + +

{{message.getSender()}}

+

+ {{message.getContent().body}} +

+
+
+
+ + + + + {{ member.name }} + + + + + + + + + + + + + +
+
diff --git a/src/app/views/chat/chat.component.ts b/src/app/views/chat/chat.component.ts index e1c3ac9..b8105be 100644 --- a/src/app/views/chat/chat.component.ts +++ b/src/app/views/chat/chat.component.ts @@ -1,5 +1,5 @@ import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, Input, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core'; -import { MatrixEvent } from 'matrix-js-sdk/src/models/event'; +import { MatrixEvent, RoomMember } from 'matrix-js-sdk/src/models/event'; import { ChatService } from 'src/app/services/chat.service'; @@ -31,6 +31,8 @@ export class ChatComponent implements OnInit, AfterViewInit { } }); } + console.log('Is in room: ' + this.chatService.isInRoom(this.roomId)); + console.log('Is invited to room: ' + this.chatService.isInvitedToRoom(this.roomId)); } ngAfterViewInit(): void { @@ -48,12 +50,38 @@ export class ChatComponent implements OnInit, AfterViewInit { this.messageInput = ''; } + join(): void { + this.chatService.joinRoom(this.roomId); + } + + leave(): void { + this.chatService.leaveRoom(this.roomId); + } + getMessageId(index: number, message: any): string { return message.getId(); } + get isLogged(): boolean { + return this.chatService.isLogged(); + } + + get isInRoom(): boolean { + return this.chatService.isInRoom(this.roomId); + } + + get isInvitedToRoom(): boolean { + return this.chatService.isInvitedToRoom(this.roomId); + } + + get members(): RoomMember[] { + return this.chatService.getRoomMembers(this.roomId); + } + private scrollToLastMessage(): void { - this.messageList.nativeElement.scrollTop = this.messageItems.last?.nativeElement?.offsetTop; + if (this.messageList) { + this.messageList.nativeElement.scrollTop = this.messageItems.last?.nativeElement?.offsetTop; + } } }