import {Component, inject, OnInit, signal, viewChild} from '@angular/core'; import {ModalNav} from "../modal-nav/modal-nav"; import {NzDividerComponent} from "ng-zorro-antd/divider"; import {NzIconDirective} from "ng-zorro-antd/icon"; import {NzTableComponent} from "ng-zorro-antd/table"; import {ModalButton} from "../modal-button/modal-button"; import {DatePipe} from "@angular/common"; import {DelivererForm} from "../deliverer-form/deliverer-form"; import {DeliverersService, GetDelivererDto, GetSupplierDto} from "../../services/api"; import {NzNotificationService} from "ng-zorro-antd/notification"; import {firstValueFrom} from "rxjs"; import {AuthService} from "../../services/auth.service"; @Component({ selector: 'app-deliverer-table', imports: [ ModalNav, NzDividerComponent, NzIconDirective, NzTableComponent, ModalButton, DatePipe, DelivererForm, ], templateUrl: './deliverer-table.html', styleUrl: './deliverer-table.css', }) export class DelivererTable implements OnInit { private deliverersService = inject(DeliverersService); private notificationService = inject(NzNotificationService) private authService = inject(AuthService); deliverers = signal([]); deliverersLoading = signal(false); admin = signal(false); modal = viewChild.required('modalNav'); async ngOnInit() { await this.fetchDeliverers(); this.admin.set(this.authService.isAdmin()); } async fetchDeliverers() { this.deliverersLoading.set(true) try { const deliverers = await firstValueFrom(this.deliverersService.getAllDelivererEndpoint()) this.deliverers.set(deliverers); } catch { this.notificationService.error('Erreur', 'Erreur lors du chargement des transporteurs'); } this.deliverersLoading.set(false) } async delete(deliverer: number) { try { await firstValueFrom(this.deliverersService.deleteDelivererEndpoint(deliverer)) this.notificationService.success('Success', 'Suppression effectuƩe'); } catch { this.notificationService.error( 'Erreur', 'Impossible de supprimer la ligne' ) } await this.fetchDeliverers(); } async edit(id: number, updateDelivererComponent: DelivererForm) { if (updateDelivererComponent.delivererForm.invalid) { this.notificationService.error('Erreur', 'Formulaire invalide'); return; } try { const deliverers = updateDelivererComponent.delivererForm.getRawValue(); await firstValueFrom(this.deliverersService.updateDelivererEndpoint(id, deliverers)) this.notificationService.success('Success', 'Transporteur modifiƩ') } catch { this.notificationService.error('Erreur', 'Erreur lors de la modification') } } selectedDeliverer: GetDelivererDto | null = null; openEditModal(supplier: GetSupplierDto) { this.selectedDeliverer = {...supplier}; this.modal().showModal(); } async onModalOk(supplierId: number, updateDelivererComponent: DelivererForm, modal: ModalNav) { if (!this.selectedDeliverer) return; await this.edit(supplierId, updateDelivererComponent); updateDelivererComponent.delivererForm.reset(); this.onModalCancel(modal); await this.fetchDeliverers(); } onModalCancel(modal: ModalNav) { modal.isVisible = false; } }