You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
front/src/app/components/friend-page/friend-page.component.ts

153 lines
4.5 KiB

import { CommonModule } from '@angular/common';
import { Component, OnInit } from '@angular/core';
import { FriendsService } from '../../services/friends/friends.service';
import { FormsModule, NgModel } from '@angular/forms';
import { UserService } from '../../services/user/user.service';
import { LocalStorageService } from '../../services/local-storage/local-storage.service';
@Component({
selector: 'app-friend-page',
imports: [CommonModule, FormsModule],
templateUrl: './friend-page.component.html',
})
export class FriendPageComponent implements OnInit {
protected listFriend: {
username: string;
status: string;
friend_user_id: string;
id: string;
}[] = [];
protected listUser: {
uid: string,
username: string
}[] = [];
userId: string = '';
status: string = '';
isFriendModalOpen: boolean = false;
hasAcceptedFriends: boolean = false;
hasPendingFriends: boolean = false;;
searchTerm: string = '';
constructor(private friendService: FriendsService, private userService:UserService, private localStorage: LocalStorageService) {}
ngOnInit(): void {
this.getFriendData();
}
protected searchUser(username: string) {
this.searchTerm = username
if (this.searchTerm) {
this.getUserData(this.searchTerm.trim())
}
else {
this.listUser = []
}
}
protected addUser(user_id:string): void {
this.friendService.addFriend(user_id).subscribe((data:any) => {
if(data.id){
const add_user = this.listUser.find(x => x.uid == user_id)
if (add_user){
this.listFriend.push({username:add_user.username, status:"pending", friend_user_id:add_user.uid, id:data.id})
this.searchTerm = '';
this.listUser = [];
}
}
})
}
private getUserData(search:string): void{
const username = this.localStorage.getUsername()
this.userService.getUser('^(?!'+username+')'+search).subscribe((data:any[]) => {
if (data.length > 0) {
const existingFriendIds = this.listFriend.map(friend => friend.friend_user_id);
this.listUser = data.filter(user => !existingFriendIds.includes(user.uid));
}
})
}
private getFriendData(): void {
this.friendService.getFriend().subscribe((data: any[]) => {
if (data.length > 0) {
data.forEach((friend) => {
let status = friend['status'];
let userId = friend['friend_user_id'];
let id = friend['id'];
this.friendService
.getFriendById(userId)
.subscribe((friendData: any) => {
this.listFriend.push({
username: friendData.username,
status: status,
friend_user_id: userId,
id: id,
});
});
});
}
});
}
onAcceptOrDeny(id: string, choice: string) {
if (choice == 'accept') {
// If return code is 200, then the friend has been accepted so we can change the status of the friend to accepted
this.friendService.acceptFriendById(id).subscribe((data: any) => {
if (data.message == 'Friend request accepted') {
this.listFriend.forEach((friend) => {
if (friend.id == id) {
friend.status = 'accepted';
}
});
}
});
} else {
// If return code is 200, then the friend has been denied so we can delete the friend from the list
this.friendService.denyFriendById(id).subscribe((data: any) => {
if (data.message == 'Friend request denied') {
this.listFriend.forEach((friend, index) => {
if (friend.id == id) {
this.listFriend.splice(index, 1);
}
});
}
});
}
}
openFriendModal() {
this.isFriendModalOpen = true;
}
closeFriendModal() {
this.isFriendModalOpen = false;
}
deleteFriend(id: string) {
this.friendService.deleteFriend(id).subscribe((data :any) => {
if (data.message == 'Friend deleted') {
this.listFriend.forEach((friend, index) => {
if(friend.id == id) {
this.listFriend.splice(index, 1)
}
})
}
});
}
hasNoAcceptedFriends(): boolean {
return this.listFriend.filter(friend => friend.status === 'accepted').length === 0;
}
hasPendingApprovalFriend(): boolean {
return this.listFriend.filter(friend => friend.status === 'pending_approval').length !== 0;
}
hasPendingFriend(): boolean {
return this.listFriend.filter(friend => friend.status === 'pending').length !== 0;
}
}