import { Component, effect, inject, Input, output } from '@angular/core'; import { AuthService } from '@app/core/services/authentication/auth.service'; import { NgClass } from '@angular/common'; import { environment } from '@env/environment'; import { ToastrService } from 'ngx-toastr'; import { ProjectViewModel } from '@app/ui/projects/project.presenter.model'; import { ProjectFacade } from '@app/ui/projects/project.facade'; import { ActionType } from '@app/domain/action-type.util'; @Component({ selector: 'app-project-picture-form', standalone: true, imports: [NgClass], templateUrl: './project-picture-form.component.html', styleUrl: './project-picture-form.component.scss', }) export class ProjectPictureFormComponent { @Input({ required: true }) project: ProjectViewModel | undefined = undefined; onFormSubmitted = output(); private readonly toastrService = inject(ToastrService); private readonly projectFacade = new ProjectFacade(); protected readonly loading = this.projectFacade.loading; protected readonly error = this.projectFacade.error; private readonly authService = inject(AuthService); file: File | null = null; // Variable to store file imagePreviewUrl: string | null = null; // URL for image preview constructor() { effect(() => { if (!this.loading().isLoading) { switch (this.loading().action) { case ActionType.UPDATE: this.authService.updateUser(); this.toastrService.success( `L'aperçu du projet ${this.project!.nom} ont bien été modifier !`, `Mise à jour`, { closeButton: true, progressAnimation: 'decreasing', progressBar: true, } ); this.onFormSubmitted.emit(''); break; } } }); } onSubmit() { if (this.file != null) { const formData = new FormData(); formData.append('fichier', this.file); // "fichier" est le nom du champ dans PocketBase this.projectFacade.update(this.project?.id!, formData); } } onPictureChange($event: Event) { const target: HTMLInputElement = $event.target as HTMLInputElement; if (target?.files?.[0]) { this.file = target.files[0]; this.readFile(this.file); } } private readFile(file: File) { const reader = new FileReader(); reader.onload = (e) => { this.imagePreviewUrl = e.target?.result as string; }; reader.readAsDataURL(file); } protected readonly environment = environment; }