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(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; } }