diff --git a/src/app/services/chat-message-handler.ts b/src/app/services/chat-message-handler.ts index 056b721..8e19047 100644 --- a/src/app/services/chat-message-handler.ts +++ b/src/app/services/chat-message-handler.ts @@ -1,8 +1,8 @@ -import { Observable, Subject } from 'rxjs'; import { MatrixClient } from 'matrix-js-sdk/src/client'; import { MatrixEvent } from 'matrix-js-sdk/src/models/event'; import { EventTimeline } from 'matrix-js-sdk/src/models/event-timeline'; import { Room } from 'matrix-js-sdk/src/models/room'; +import { Subject } from 'rxjs'; export class ChatMessageHandler { constructor( diff --git a/src/app/services/chat.service.ts b/src/app/services/chat.service.ts index 6610470..2b04e93 100644 --- a/src/app/services/chat.service.ts +++ b/src/app/services/chat.service.ts @@ -1,16 +1,14 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import * as olm from 'olm'; -global.Olm = olm; import * as matrix from 'matrix-js-sdk'; import { MatrixClient } from 'matrix-js-sdk/src/client'; -import { RoomMember } from 'matrix-js-sdk/src/models/room'; -import { Room } from 'matrix-js-sdk/src/models/room'; -import { EventTimeline } from 'matrix-js-sdk/src/models/event-timeline'; -import { MatrixLoginDto } from '../entities/matrix-login-dto'; import { MatrixEvent } from 'matrix-js-sdk/src/models/event'; -import { Observable, Subject } from 'rxjs'; +import { Room, RoomMember } from 'matrix-js-sdk/src/models/room'; +import * as olm from 'olm'; +import { Observable } from 'rxjs'; +import { MatrixLoginDto } from '../entities/matrix-login-dto'; import { ChatMessageHandler } from './chat-message-handler'; +global.Olm = olm; @Injectable({ providedIn: 'root' @@ -67,6 +65,14 @@ 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.css b/src/app/views/chat/chat.component.css index 5e48686..7f1b137 100644 --- a/src/app/views/chat/chat.component.css +++ b/src/app/views/chat/chat.component.css @@ -3,3 +3,7 @@ height: 100%; overflow-y: scroll; } + +.send-message-input { + width: 100%; +} \ No newline at end of file diff --git a/src/app/views/chat/chat.component.html b/src/app/views/chat/chat.component.html index 1d1667b..aba3eae 100644 --- a/src/app/views/chat/chat.component.html +++ b/src/app/views/chat/chat.component.html @@ -1,18 +1,28 @@ - - - - {{message.getSender()}} - - {{message.getContent().body}} - - - - + + + + {{message.getSender()}} + + {{message.getContent().body}} + + + + - - - Miembros - - - \ No newline at end of file + + + Miembros + + + + + + + + + + + Send + + \ No newline at end of file diff --git a/src/app/views/chat/chat.component.ts b/src/app/views/chat/chat.component.ts index ca3a392..afda294 100644 --- a/src/app/views/chat/chat.component.ts +++ b/src/app/views/chat/chat.component.ts @@ -1,9 +1,7 @@ -import { Component, Input, OnInit, AfterViewInit, ElementRef, ViewChildren, ChangeDetectorRef } from '@angular/core'; +import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, Input, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core'; +import { MatrixEvent } from 'matrix-js-sdk/src/models/event'; import { ChatService } from 'src/app/services/chat.service'; -import { MatrixEvent } from 'matrix-js-sdk/src/models/event'; -import { QueryList } from '@angular/core'; -import { Observable } from 'rxjs'; @Component({ selector: 'app-chat', @@ -12,8 +10,10 @@ import { Observable } from 'rxjs'; }) export class ChatComponent implements OnInit, AfterViewInit { @Input() roomId: string; + @ViewChild('messageList', { read: ElementRef }) messageList: ElementRef; @ViewChildren('messageItem', { read: ElementRef }) messageItems: QueryList; messages: MatrixEvent[] = new Array(); + messageInput: string; constructor( private chatService: ChatService, @@ -27,20 +27,30 @@ export class ChatComponent implements OnInit, AfterViewInit { messages$.subscribe({ next: (event: MatrixEvent) => { this.messages.push(event); - this.changeDetection.detectChanges(); + this.changeDetection.detectChanges(); // TODO theoretically it is not needed } }); } } + // Always scroll to last chat message. ngAfterViewInit(): void { - // Always scroll to last chat message. this.messageItems.last?.nativeElement?.scrollIntoView(false); this.messageItems.changes.subscribe({ next: (c) => { - this.messageItems.last?.nativeElement?.scrollIntoView(false); + // this.messageItems.last?.nativeElement?.scrollIntoView(false); + this.messageList.nativeElement.scrollTop = this.messageItems.last?.nativeElement?.offsetTop; } }); } + sendMessage(): void { + this.chatService.sendMessage(this.roomId, this.messageInput); + this.messageInput = ''; + } + + getMessageId(index: number, message: any): string { + return message.getId(); + } + }
- {{message.getContent().body}} -
+ {{message.getContent().body}} +