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();
}