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 {SupplierForm} from "../supplier-form/supplier-form"; @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) deliverers = signal([]); deliverersLoading = signal(false); updateDeliverer = viewChild.required('delivererForm'); modal = viewChild.required('modalNav'); async ngOnInit() { await this.fetchDeliverers(); } async fetchDeliverers() { this.deliverersLoading.set(true) try { const deliverers = await firstValueFrom(this.deliverersService.getAllDelivererEndpoint()) this.deliverers.set(deliverers); } catch (e) { this.notificationService.error( 'Erreur', 'Erreur de communication avec l\'API' ) } this.deliverersLoading.set(false) } async delete(deliverer:number) { try { await firstValueFrom(this.deliverersService.deleteDelivererEndpoint(deliverer)) this.notificationService.success( 'Success', 'Suppression effectuée' ) } catch (e) { 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', 'Erreur d\'écriture dans le formulaire' ) return; } try { const deliverers = updateDelivererComponent.delivererForm.getRawValue(); await firstValueFrom(this.deliverersService.updateDelivererEndpoint(id, deliverers)) this.notificationService.success('Success', 'Transporteur modifié') } catch (e) { 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(); modal.isVisible = false; await this.fetchDeliverers(); } onModalCancel(modal: ModalNav) { modal.isVisible = false; } }