diff --git a/src/app/pages/chat/chat.page.html b/src/app/pages/chat/chat.page.html index 3fd8dbfac..3561f682e 100644 --- a/src/app/pages/chat/chat.page.html +++ b/src/app/pages/chat/chat.page.html @@ -28,7 +28,7 @@ - +
- -
- -
- - -
-
-
-
-

{{room.name.split('-').join(' ')}}

+ +
+
+ + +
+
+
+
+ + +
+
+ {{room.roomName}} +
+
+
+
+
+
-
{{room.duration }}
-
{{room.countDownTime }}
-
-
-
{{room.lastMessage.u.name}} : {{room.lastMessage.msg}}
-
{{room.userThatIsTyping}} está escrever ...
+
-
- + diff --git a/src/app/pages/chat/chat.page.ts b/src/app/pages/chat/chat.page.ts index 1f3d974e4..32b9867c0 100644 --- a/src/app/pages/chat/chat.page.ts +++ b/src/app/pages/chat/chat.page.ts @@ -24,12 +24,9 @@ import { environment } from 'src/environments/environment'; import { TimeService } from 'src/app/services/functions/time.service'; import { ThemeService } from 'src/app/services/theme.service' import { DataService } from 'src/app/services/data.service'; -import { SqliteService } from 'src/app/services/sqlite.service'; import { StorageService } from 'src/app/services/storage.service'; import { SessionStore } from 'src/app/store/session.service'; import { ChatDebuggingPage } from 'src/app/shared/popover/chat-debugging/chat-debugging.page'; -import { EventTrigger } from 'src/app/services/eventTrigger.service'; -import { RochetChatConnectorService } from 'src/app/services/chat/rochet-chat-connector.service'; import { RouteService } from 'src/app/services/route.service'; import { Plugins } from '@capacitor/core'; import { Store } from '@ngrx/store'; @@ -39,8 +36,6 @@ import { RoomListOutPutDTO } from 'src/app/services/Repositorys/chat/dto/room/ro import { Observable as DexieObservable } from 'Dexie'; -const { App } = Plugins; - @Component({ selector: 'app-chat', templateUrl: './chat.page.html', @@ -56,7 +51,7 @@ export class ChatPage implements OnInit { X_Auth_Token: any; loggedUser: any; - segment: string; + segment: string = 'Grupos' allGroups: any[]; privateGroups: any[]; publicGroups: any[]; @@ -149,7 +144,7 @@ export class ChatPage implements OnInit { this.showLoader = true; - this.segment = 'Contactos' + this.segment = 'Grupos' /* this.eventTriger.getObservable().subscribe((event) => { if (event.notification == "recive") { @@ -167,7 +162,6 @@ export class ChatPage implements OnInit { this.items$ = this.RoomRepositoryService.getItemsLive() this.RoomRepositoryService.list(); - this.segment = "Contactos"; this.authService.userData$.subscribe((res: any) => { this.loggedUser = res; diff --git a/src/app/services/Repositorys/chat/data-source/room/room-remote-data-source.service.ts b/src/app/services/Repositorys/chat/data-source/room/room-remote-data-source.service.ts index 05672cae7..97ee85bab 100644 --- a/src/app/services/Repositorys/chat/data-source/room/room-remote-data-source.service.ts +++ b/src/app/services/Repositorys/chat/data-source/room/room-remote-data-source.service.ts @@ -11,7 +11,8 @@ import { RoomByIdInputDTO, RoomByIdInputDTOSchema } from '../../dto/room/roomByI import { RoomByIdOutputDTO, RoomByIdOutputDTOSchema } from '../../dto/room/roomByIdOutputDTO'; import { APIReturn } from 'src/app/services/decorators/api-validate-schema.decorator'; import { UserRemoveListInputDTO, UserRemoveListInputDTOSchema } from '../../dto/room/userRemoveListInputDTO'; -import { RoomUpdateInputDTO } from '../../dto/room/roomUpdateInputDTO'; +import { RoomUpdateInputDTO, RoomUpdateInputDTOSchema } from '../../dto/room/roomUpdateInputDTO'; +import { RoomUpdateOutputDTO } from '../../dto/room/roomUpdateOutputDTO'; @Injectable({ providedIn: 'root' @@ -41,9 +42,9 @@ export class RoomRemoteDataSourceService { return await this.httpService.get(`${this.baseUrl}/Room/${id}`); } - @ValidateSchema(AddMemberToRoomInputDTOSchema) + @ValidateSchema(RoomUpdateInputDTOSchema) //@APIReturn(RoomByIdOutputDTOSchema,'update/Room/${id}') - async updateRoom(data: RoomUpdateInputDTO): Promise> { + async updateRoom(data: RoomUpdateInputDTO): Promise> { const id = data.roomId delete data.roomId return await this.httpService.put(`${this.baseUrl}/Room/${id}`, data); diff --git a/src/app/services/Repositorys/chat/dto/room/roomUpdateOutputDTO.ts b/src/app/services/Repositorys/chat/dto/room/roomUpdateOutputDTO.ts index d323e7bef..6dff2efb4 100644 --- a/src/app/services/Repositorys/chat/dto/room/roomUpdateOutputDTO.ts +++ b/src/app/services/Repositorys/chat/dto/room/roomUpdateOutputDTO.ts @@ -1,8 +1,30 @@ import { z } from "zod"; +const UserSchema = z.object({ + wxUserId: z.number(), + wxFullName: z.string(), + wxeMail: z.string(), + userPhoto: z.string().nullable(), +}); + +const MemberSchema = z.object({ + id: z.string(), + user: UserSchema, + joinAt: z.string(), +}); + export const RoomUpdateOutputDTOSchema = z.object({ - roomName: z.string(), - roomType: z.number(), + success: z.boolean(), + message: z.string(), + data: z.object({ + id: z.string(), + roomName: z.string(), + createdBy: UserSchema, + createdAt: z.string(), + expirationDate: z.string().nullable(), + roomType: z.number(), + members: z.array(MemberSchema), + }), }); export type RoomUpdateOutputDTO = z.infer diff --git a/src/app/services/Repositorys/chat/repository/room-repository.service.ts b/src/app/services/Repositorys/chat/repository/room-repository.service.ts index d18b9546d..c9d5e8628 100644 --- a/src/app/services/Repositorys/chat/repository/room-repository.service.ts +++ b/src/app/services/Repositorys/chat/repository/room-repository.service.ts @@ -28,17 +28,11 @@ export class RoomRepositoryService { async list() { const result = await this.roomRemoteDataSourceService.getRoomList() - if(result.isOk()) { - console.log(result.value) - } - const localList = await this.roomLocalDataSourceService.getRoomList() if(result.isOk()) { const { roomsToDelete, roomsToInsert, roomsToUpdate } = roomListDetermineChanges(result.value.data, localList) - console.log({roomsToDelete, roomsToInsert, roomsToUpdate}) - for( const roomData of roomsToInsert) { this.roomLocalDataSourceService.createRoom(roomData) } @@ -54,10 +48,22 @@ export class RoomRepositoryService { return result } - @captureAndReraiseAsync('RoomRepositoryService/updateRoomBy') async updateRoomBy(data: RoomUpdateInputDTO) { - this.roomRemoteDataSourceService.updateRoom(data) + + const result = await this.roomRemoteDataSourceService.updateRoom(data) + + if(result.isOk()) { + const localList = await this.roomLocalDataSourceService.getRoomList() + const { roomsToDelete, roomsToInsert, roomsToUpdate } = roomListDetermineChanges([result.value.data], localList) + + for( const roomData of roomsToUpdate) { + this.roomLocalDataSourceService.updateRoom(roomData) + } + + } + + return result } @captureAndReraiseAsync('RoomRepositoryService/getRoomById') diff --git a/src/app/shared/chat/edit-group/edit-group.page.html b/src/app/shared/chat/edit-group/edit-group.page.html index b636be1f0..a90c4ed70 100644 --- a/src/app/shared/chat/edit-group/edit-group.page.html +++ b/src/app/shared/chat/edit-group/edit-group.page.html @@ -16,6 +16,7 @@
+ @@ -41,4 +42,3 @@
- diff --git a/src/app/shared/chat/edit-group/edit-group.page.ts b/src/app/shared/chat/edit-group/edit-group.page.ts index 49be9b500..6e0437b02 100644 --- a/src/app/shared/chat/edit-group/edit-group.page.ts +++ b/src/app/shared/chat/edit-group/edit-group.page.ts @@ -4,7 +4,11 @@ import { ModalController, PickerController } from '@ionic/angular'; import { ChatService } from 'src/app/services/chat.service'; import { ThemeService } from 'src/app/services/theme.service' import { SessionStore } from 'src/app/store/session.service'; - +import { RoomRepositoryService } from 'src/app/services/Repositorys/chat/repository/room-repository.service' +import { HttpResponse } from '@microsoft/signalr'; +import { HttpErrorHandle } from 'src/app/services/http-error-handle.service'; +import { ToastService } from 'src/app/services/toast.service'; +import { ZodError } from 'zod'; @Component({ selector: 'app-edit-group', templateUrl: './edit-group.page.html', @@ -23,11 +27,15 @@ export class EditGroupPage implements OnInit { @Output() openGroupMessage:EventEmitter = new EventEmitter(); @Output() closeAllDesktopComponents:EventEmitter = new EventEmitter(); + constructor( private modalController: ModalController, private pickerController: PickerController, private chatService: ChatService, - public ThemeService: ThemeService + public ThemeService: ThemeService, + private RoomRepositoryService: RoomRepositoryService, + private httpErrorHandle: HttpErrorHandle, + private toastService: ToastService, ) { this.loggedUser = SessionStore.user.ChatData['data']; } @@ -56,24 +64,32 @@ export class EditGroupPage implements OnInit { this.openGroupMessage.emit(this.roomId); } - changeGroupName() { - if(this.groupName.trim().length > 1) { - let name = this.groupName.split(' ').join('-'); - let body = { - "roomId": this.room._id, - "name": name, - } - this.chatService.renameGroup(body).subscribe(res=>{ - this.modalController.dismiss(res['group']); - }); - } - else{ + async changeGroupName() { + this.showLoader = true + const result = await this.RoomRepositoryService.updateRoomBy({ + roomId: this.roomId, + roomName: this.groupName, + roomType: 0 + }) + + if(result.isOk()) { + this.openGroupMessage.emit(this.roomId); + } else if (result.error instanceof HttpResponse) { + this.httpErrorHandle.httpStatusHandle(result.error) + } else if (result.error instanceof ZodError) { + this.toastService._badRequest("Pedimos desculpa mas não foi possível executar a acção. Por favor, contacte o apoio técnico.") + console.log(result.error.errors) + } else { + this.toastService._badRequest("Pedimos desculpa mas não foi possível executar a acção. Por favor, contacte o apoio técnico.") + console.log(result.error) } - this.updateGroup(); + + this.showLoader = false + } - updateGroup(){ + updateGroup() { this.showLoader = true; this.chatService.getRoomInfo(this.roomId).subscribe(room=>{ this.room = room['room'];