mirror of
https://code.equilibrium.co.ao/ITO/doneit-web.git
synced 2026-04-18 20:47:54 +00:00
287 lines
8.1 KiB
TypeScript
287 lines
8.1 KiB
TypeScript
import { HttpClient, HttpErrorResponse, HttpHeaders, HttpRequest, HttpResponse } from '@angular/common/http';
|
|
import { Component, OnInit } from '@angular/core';
|
|
import { ModalController, NavParams } from '@ionic/angular';
|
|
import * as _ from 'lodash';
|
|
import { AuthService } from 'src/app/services/auth.service';
|
|
import { GroupMessagesPage } from '../group-messages.page';
|
|
import { ThemeService } from 'src/app/services/theme.service'
|
|
import { SessionStore } from 'src/app/store/session.service';
|
|
import { HttpErrorHandle } from 'src/app/services/http-error-handle.service';
|
|
import { ContactRepositoryService } from 'src/app/services/Repositorys/contacts/repository/contacts-repository.service';
|
|
import { MemberListLocalRepository } from 'src/app/module/chat/data/repository/member/member-list-local-repository.service'
|
|
import { UserContacts } from 'src/app/services/Repositorys/contacts/data-source/contacts-data-source.service';
|
|
import { ToastService } from 'src/app/services/toast.service';
|
|
import { ChatServiceService } from 'src/app/module/chat/domain/chat-service.service';
|
|
import { ZodError } from 'zod';
|
|
|
|
|
|
@Component({
|
|
selector: 'app-group-contacts',
|
|
templateUrl: './group-contacts.page.html',
|
|
styleUrls: ['./group-contacts.page.scss'],
|
|
})
|
|
export class GroupContactsPage implements OnInit {
|
|
showLoader: boolean;
|
|
users = [];
|
|
|
|
contact: string[] = [" Ana M.", "Andre F.", "Bruno G.", "Catarina T", "Tiago"];
|
|
|
|
headers: HttpHeaders;
|
|
options:any;
|
|
listContacts: any[];
|
|
contacts: any;
|
|
textSearch:string;
|
|
room:any;
|
|
members:any;
|
|
dm:any;
|
|
isGroupCreated:boolean;
|
|
groupName:string;
|
|
selectedUserList:any;
|
|
sessionStore = SessionStore
|
|
|
|
|
|
objectUserSingleStone = []
|
|
userContainer = {}
|
|
roomId:string;
|
|
allChatUsers: UserContacts[] = [];
|
|
currentMembers:UserContacts[];
|
|
selectedUsers: number[] =[]
|
|
get hasMemberToUpload() {
|
|
return this.selectedUsers.length >= 1
|
|
}
|
|
|
|
constructor(
|
|
private modalController: ModalController,
|
|
public ThemeService: ThemeService,
|
|
public chatServiceService: ChatServiceService,
|
|
private navParams: NavParams,
|
|
private httpErrorHandle: HttpErrorHandle,
|
|
private contactsRepositoryService: ContactRepositoryService,
|
|
private MemberListLocalRepository: MemberListLocalRepository,
|
|
private toastService: ToastService,
|
|
)
|
|
{
|
|
|
|
// this.textSearch="";
|
|
// this.dm=null;
|
|
// this.room=null;
|
|
// this.isGroupCreated = this.navParams.get('isCreated');
|
|
// this.groupName = this.navParams.get('name');
|
|
this.room = this.navParams.get('roomId');
|
|
// this.members = this.navParams.get('members');
|
|
}
|
|
|
|
ngOnInit() {
|
|
// this.chatService.refreshtoken();
|
|
this.loadUsers();
|
|
// this.getMembers();
|
|
|
|
|
|
}
|
|
|
|
async loadUsers() {
|
|
|
|
const getallChatUsers = await this.contactsRepositoryService.getUsers()
|
|
const getRoomById = await this.chatServiceService.getRoomById(this.roomId)
|
|
|
|
console.log({getallChatUsers, getRoomById})
|
|
|
|
if(getallChatUsers.isOk() && getRoomById.isOk()) {
|
|
|
|
this.allChatUsers = getallChatUsers.value.data.result.sort((a,b) => {
|
|
if(a.wxFullName < b.wxFullName) {
|
|
return -1;
|
|
}
|
|
if(a.wxFullName > b.wxFullName) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
});
|
|
|
|
const currentMemberToMap = await this.MemberListLocalRepository.getRoomMemberById(this.roomId)
|
|
|
|
console.log({currentMemberToMap})
|
|
|
|
this.currentMembers = currentMemberToMap.map((e)=> ({
|
|
userPhoto: e.userPhoto,
|
|
wxeMail: e.wxeMail,
|
|
wxFullName: e.wxFullName,
|
|
wxUserId: e.wxUserId
|
|
}))
|
|
|
|
|
|
const currentMemberIds = this.currentMembers.map(e => e.wxUserId)
|
|
|
|
const allSelectableUsers = this.allChatUsers.filter(e => !currentMemberIds.includes(e.wxUserId))
|
|
|
|
for(const user of allSelectableUsers) {
|
|
const firstLetter = user.wxFullName.charAt(0)
|
|
|
|
if(!this.userContainer[firstLetter]) {
|
|
user['isChecked'] = false
|
|
this.userContainer[firstLetter] = [user as any]
|
|
} else {
|
|
const userIds = this.userContainer[firstLetter].map( e => e.wxUserId)
|
|
if(!userIds.includes(user.wxUserId)) {
|
|
user['isChecked'] = false
|
|
this.userContainer[firstLetter].push(user as any)
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
else if (getRoomById.isErr() && getRoomById.error instanceof HttpResponse) {
|
|
this.httpErrorHandle.httpStatusHandle(getRoomById.error)
|
|
} else if (getallChatUsers.isErr() && getallChatUsers.error instanceof HttpResponse) {
|
|
this.httpErrorHandle.httpStatusHandle(getallChatUsers.error)
|
|
} else if (getRoomById.isErr() ) {
|
|
console.log(getRoomById.error)
|
|
} else if (getallChatUsers.isErr() ) {
|
|
console.log(getallChatUsers.error)
|
|
} else {
|
|
this.toastService._badRequest("Pedimos desculpa mas não foi possível executar a acção. Por favor, contacte o apoio técnico.")
|
|
}
|
|
|
|
|
|
this.showLoader = false;
|
|
}
|
|
|
|
|
|
async updateGroup() {
|
|
|
|
if(this.hasMemberToUpload) {
|
|
this.showLoader = true;
|
|
const addMembers = await this.chatServiceService.addMemberToRoom({
|
|
id: this.roomId,
|
|
members: this.selectedUsers
|
|
})
|
|
|
|
|
|
if(addMembers.isOk()) {
|
|
// this.addContacts(this.roomId);
|
|
//this.openGroupMessage.emit(this.roomId);
|
|
await this.chatServiceService.getRoomById(this.roomId);
|
|
this.modalController.dismiss({roomId: this.roomId})
|
|
} else if(addMembers.error instanceof HttpRequest) {
|
|
this.httpErrorHandle.httpStatusHandle(addMembers.error)
|
|
}
|
|
} else {
|
|
// this.openGroupMessage.emit(this.roomId);
|
|
console.log('nothoing to add')
|
|
}
|
|
|
|
this.showLoader = false;
|
|
}
|
|
|
|
getMembers(){
|
|
|
|
}
|
|
|
|
separateLetter(record, recordIndex, records){
|
|
if(recordIndex == 0){
|
|
return record.name[0];
|
|
}
|
|
|
|
let first_prev = records[recordIndex - 1].name[0];
|
|
let first_current = record.name[0];
|
|
|
|
if(first_prev != first_current){
|
|
return first_current;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
|
|
|
|
doRefresh(ev){
|
|
this.loadUsers();
|
|
//this.getMembers();
|
|
ev.target.complete();
|
|
}
|
|
|
|
async close(){
|
|
this.modalController.dismiss();
|
|
}
|
|
|
|
FilterUserListedByTextSearch() {
|
|
return this.allChatUsers.filter( e => e.wxFullName.toLowerCase().includes(this.textSearch.toLowerCase())).sort((a,b) => {
|
|
if(a.wxFullName < b.wxFullName) {
|
|
return -1;
|
|
}
|
|
if(a.wxFullName > b.wxFullName) {
|
|
return 1;
|
|
}
|
|
return 0;
|
|
});
|
|
}
|
|
|
|
|
|
onChangeCheckBox(user: UserContacts & {isChecked: boolean}) {
|
|
console.log(user)
|
|
|
|
if(user.isChecked) {
|
|
|
|
this.selectedUsers.push(user.wxUserId)
|
|
} else {
|
|
this.selectedUsers = this.selectedUsers.filter(e => e!= user.wxUserId)
|
|
}
|
|
}
|
|
|
|
onChange(event) {
|
|
this.textSearch = event.detail.value;
|
|
|
|
const filteredUserList: (UserContacts & {isChecked: boolean})[] = this.FilterUserListedByTextSearch() as any
|
|
|
|
const userContainer = {}
|
|
for(const user of filteredUserList) {
|
|
const firstLetter = user.wxFullName.charAt(0)
|
|
|
|
if(!userContainer[firstLetter]) {
|
|
user.isChecked = this.selectedUsers.includes(user.wxUserId)
|
|
userContainer[firstLetter] = [user]
|
|
} else {
|
|
user.isChecked = this.selectedUsers.includes(user.wxUserId)
|
|
userContainer[firstLetter].push(user)
|
|
}
|
|
|
|
}
|
|
this.userContainer = userContainer
|
|
}
|
|
|
|
|
|
async deleteMember(user: UserContacts) {
|
|
this.showLoader = true;
|
|
|
|
const result = await this.chatServiceService.removeMemberToRoom({
|
|
id: this.roomId,
|
|
members: [ user.wxUserId]
|
|
})
|
|
|
|
if(result.isOk()) {
|
|
this.currentMembers = this.currentMembers.filter( e => e.wxUserId != user.wxUserId)
|
|
|
|
const firstLetter = user.wxFullName.charAt(0)
|
|
|
|
if(!this.userContainer[firstLetter]) {
|
|
user['isChecked'] = false
|
|
this.userContainer[firstLetter] = [user as any]
|
|
} else {
|
|
user['isChecked'] = false
|
|
this.userContainer[firstLetter].push(user as any)
|
|
}
|
|
|
|
} else if(result.error instanceof HttpRequest) {
|
|
this.httpErrorHandle.httpStatusHandle(result.error)
|
|
} else if(result.error instanceof ZodError) {
|
|
console.log(result.error.issues)
|
|
}
|
|
|
|
this.showLoader = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|