import {Component, inject, OnInit, signal} from "@angular/core"; import {PublicationEditionComponent} from "../../components/publication-edition/publication-edition.component"; import {PublicationRestService} from "../../core/rest-services/publications/publication.rest-service"; import {Router} from "@angular/router"; import {MatSnackBar} from "@angular/material/snack-bar"; import {DEFAULT_PUBLICATION, Publication} from "../../core/rest-services/publications/model/publication"; import {AuthenticationService} from "../../core/service/authentication.service"; import {Author} from "../../core/rest-services/publications/model/author"; @Component({ selector: 'app-publication-creation', templateUrl: './publication-creation.component.html', styleUrl: './publication-creation.component.scss', imports: [ PublicationEditionComponent ] }) export class PublicationCreationComponent implements OnInit { readonly #authenticationService = inject(AuthenticationService); readonly #publicationRestService = inject(PublicationRestService); readonly #router = inject(Router); readonly #snackBar = inject(MatSnackBar); isSaving = signal(false); publication = signal(DEFAULT_PUBLICATION); ngOnInit(): void { const authenticatedUser = this.#authenticationService.getAuthenticatedUser(); if (authenticatedUser) { const author: Author = { id: authenticatedUser.id, name: authenticatedUser.pseudo, image: authenticatedUser.photoId ?? '' }; const newPublication: Publication = {...DEFAULT_PUBLICATION, author}; this.publication.set(newPublication); } } onPublicationSave(publication: Publication): void { this.isSaving.set(true); this.#publicationRestService.create(publication) .then(() => { this.#snackBar.open($localize`Publication created succesfully!`, $localize`Close`, {duration: 5000}); this.#router.navigate(['/my-publications']); }) .catch(error => { const errorMessage = $localize`An error occured while saving new publication.`; console.error(errorMessage, error); this.#snackBar.open(errorMessage, $localize`Close`, {duration: 5000}); }) .finally(() => this.isSaving.set(false)); } }