Files
BeReadyFrontend/src/app/components/friends/friends-list.component.ts
T

87 lines
2.8 KiB
TypeScript

import {Component, inject, OnInit, signal} from '@angular/core';
import {IonicModule, ToastController} from "@ionic/angular";
import {closeCircleOutline} from 'ionicons/icons';
import {addIcons} from "ionicons";
import {FriendsService, GetUserDto, UsersService} from "../../services/api";
import {firstValueFrom} from "rxjs";
import {FriendsStateService} from "../../services/friends-state";
addIcons({
'close': closeCircleOutline,
});
@Component({
selector: 'app-friends-list',
templateUrl: './friends-list.component.html',
styleUrls: ['./friends-list.component.scss'],
imports: [
IonicModule
]
})
export class FriendsListComponent implements OnInit {
private friendsService = inject(FriendsService);
private usersService = inject(UsersService);
private toastCtrl = inject(ToastController);
private friendsState = inject(FriendsStateService);
selectedFriend = signal<GetUserDto>(null);
isModalOpen = false;
friends = this.friendsState.friends;
async ngOnInit() {
await this.fetchFriends();
}
async fetchFriends() {
try {
const friends = await firstValueFrom(this.friendsService.getAllFriendsEndpoint());
this.friendsState.setFriends(friends);
} catch (e) {
const toast = await this.toastCtrl.create({
message: 'Amis introuvables',
duration: 2000,
color: 'primary'
});
await toast.present();
}
}
async deleteFriend(friendId: number) {
try {
await firstValueFrom(this.friendsService.deleteFriendEndpoint(friendId));
const toast = await this.toastCtrl.create({
message: 'Vous avez supprimé cet ami',
duration: 2000,
color: 'success'
});
await toast.present();
} catch (e) {
const toast = await this.toastCtrl.create({
message: 'Vous ne pouvez pas supprimer cet ami',
duration: 2000,
color: 'danger'
});
await toast.present();
}
this.friendsState.removeFriend(friendId);
}
async setOpen(isOpen: boolean, userId: number) {
if (isOpen) {
try {
const userInfo = await firstValueFrom(this.usersService.getUserEndpoint(userId));
this.selectedFriend.set(userInfo);
} catch (e) {
const toast = await this.toastCtrl.create({
message: 'Impossible de charger les données du joueur',
duration: 2000,
color: 'primary'
});
await toast.present();
}
}
this.isModalOpen = isOpen;
}
}