diff --git a/frontend/src/app/pages/publication/publication.component.html b/frontend/src/app/pages/publication/publication.component.html index f600aea..e031a83 100644 --- a/frontend/src/app/pages/publication/publication.component.html +++ b/frontend/src/app/pages/publication/publication.component.html @@ -1,14 +1,18 @@ -@if (isLoading) { +@if (isLoading()) {

Publication content loading...

} @else { - @if (publication) { + @if (isPublicationUndefined()) { +
+

Publication failed to load...

+
+ } @else {
- +
-

{{ publication.title }}

-

{{ publication.description }}

- @if (isAuthorAndUserEquals) { +

{{ publication()?.title }}

+

{{ publication()?.description }}

+ @if (isAuthorAndUserEquals()) { }
-
+
- } @else { -
-

Publication failed to load...

-
} } \ No newline at end of file diff --git a/frontend/src/app/pages/publication/publication.component.scss b/frontend/src/app/pages/publication/publication.component.scss index 10f845d..16d138d 100644 --- a/frontend/src/app/pages/publication/publication.component.scss +++ b/frontend/src/app/pages/publication/publication.component.scss @@ -2,7 +2,8 @@ $cardBorderRadius: .5em; :host { display: flex; - justify-content: center; + flex-direction: column; + align-items: center; .card { display: flex; diff --git a/frontend/src/app/pages/publication/publication.component.ts b/frontend/src/app/pages/publication/publication.component.ts index 8593ac8..edd09bb 100644 --- a/frontend/src/app/pages/publication/publication.component.ts +++ b/frontend/src/app/pages/publication/publication.component.ts @@ -1,4 +1,4 @@ -import { Component, OnDestroy, OnInit, inject } from '@angular/core'; +import { Component, OnDestroy, OnInit, computed, inject, signal } from '@angular/core'; import { PublicationRestService } from '../../core/rest-services/publications/publication.rest-service'; import { ActivatedRoute, Router, RouterModule } from '@angular/router'; import { Subscription } from 'rxjs'; @@ -30,9 +30,10 @@ export class PublicationComponent implements OnInit, OnDestroy { private readonly snackBar = inject(MatSnackBar); private paramMapSubscription?: Subscription; private afterDialogCloseSubscription?: Subscription; - isLoading: boolean = false; - isAuthorAndUserEquals: boolean = false; - publication?: Publication; + isLoading = signal(false); + isAuthorAndUserEquals = computed(() => this.authenticationService.getAuthenticatedUser()?.id === this.publication()?.author.id); + publication = signal(undefined); + isPublicationUndefined = computed(() => !this.publication()) ngOnInit(): void { this.paramMapSubscription = this.activatedRoute @@ -41,12 +42,11 @@ export class PublicationComponent implements OnInit, OnDestroy { const publicationId = params.get('publicationId'); if (publicationId) { - this.isLoading = true; + this.isLoading.set(true); this.publicationRestService.getById(publicationId) .then(publication => { - this.publication = publication; - this.isAuthorAndUserEquals = this.authenticationService.getAuthenticatedUser()?.id === this.publication.author.id; + this.publication.set(publication); setTimeout(() => Prism.highlightAll(), 100); }) .catch(error => { @@ -55,7 +55,7 @@ export class PublicationComponent implements OnInit, OnDestroy { console.error(errorMessage, error); }) .finally(() => { - this.isLoading = false; + this.isLoading.set(false); }); } }); @@ -79,8 +79,8 @@ export class PublicationComponent implements OnInit, OnDestroy { this.afterDialogCloseSubscription = dialogRef.afterClosed() .subscribe(response => { - if (response && this.publication?.id) { - this.publicationRestService.delete(this.publication.id); + if (response && !this.isPublicationUndefined()) { + this.publicationRestService.delete(this.publication()?.id!!); this.snackBar.open($localize`Publication deleted`, $localize`Close`, { duration: 5000 }); this.location.back(); }