Fixing Angular 21 by migrating all values by signals. (#11)
Some checks failed
Build and Deploy Java Gradle Application / build-and-deploy (push) Failing after 53s

This commit was merged in pull request #11.
This commit is contained in:
2026-02-03 15:07:55 +01:00
parent 1ca2f872f7
commit 0cce8b2982
102 changed files with 4102 additions and 4852 deletions

View File

@@ -1,32 +1,32 @@
import { CommonModule, Location } from '@angular/common';
import { Component, OnDestroy, OnInit, inject } from '@angular/core';
import { MatRippleModule } from '@angular/material/core';
import { MatDialog } from '@angular/material/dialog';
import { MatIcon } from '@angular/material/icon';
import { MatProgressSpinner } from '@angular/material/progress-spinner';
import { MatSnackBar } from '@angular/material/snack-bar';
import { MatTooltipModule } from '@angular/material/tooltip';
import { ActivatedRoute, RouterModule } from '@angular/router';
import { Subscription } from 'rxjs';
import { ConfirmationDialog } from '../../components/confirmation-dialog/confirmation-dialog.component';
import { Publication } from '../../core/rest-services/publications/model/publication';
import { PublicationRestService } from '../../core/rest-services/publications/publication.rest-service';
import { AuthenticationService } from '../../core/service/authentication.service';
import {CommonModule, Location} from '@angular/common';
import {Component, inject, OnDestroy, OnInit, signal} from '@angular/core';
import {MatRippleModule} from '@angular/material/core';
import {MatDialog} from '@angular/material/dialog';
import {MatIcon} from '@angular/material/icon';
import {MatProgressSpinner} from '@angular/material/progress-spinner';
import {MatSnackBar} from '@angular/material/snack-bar';
import {MatTooltipModule} from '@angular/material/tooltip';
import {ActivatedRoute, RouterModule} from '@angular/router';
import {Subscription} from 'rxjs';
import {ConfirmationDialog} from '../../components/confirmation-dialog/confirmation-dialog.component';
import {Publication} from '../../core/rest-services/publications/model/publication';
import {PublicationRestService} from '../../core/rest-services/publications/publication.rest-service';
import {AuthenticationService} from '../../core/service/authentication.service';
declare let Prism: any;
@Component({
selector: 'app-publication',
templateUrl: './publication.component.html',
styleUrl: './publication.component.scss',
imports: [
CommonModule,
MatIcon,
MatRippleModule,
MatProgressSpinner,
MatTooltipModule,
RouterModule
]
selector: 'app-publication',
templateUrl: './publication.component.html',
styleUrl: './publication.component.scss',
imports: [
CommonModule,
MatIcon,
MatRippleModule,
MatProgressSpinner,
MatTooltipModule,
RouterModule
]
})
export class PublicationComponent implements OnInit, OnDestroy {
private readonly activatedRoute = inject(ActivatedRoute);
@@ -37,35 +37,35 @@ 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 = signal(false);
publication = signal<Publication | null>(null);
ngOnInit(): void {
this.paramMapSubscription = this.activatedRoute
.paramMap
.subscribe(params => {
const publicationId = params.get('publicationId');
.paramMap
.subscribe(params => {
const publicationId = params.get('publicationId');
if (publicationId) {
this.isLoading = true;
if (publicationId) {
this.isLoading.set(true);
this.publicationRestService.getById(publicationId)
.then(publication => {
this.publication = publication;
this.isAuthorAndUserEquals = this.authenticationService.getAuthenticatedUser()?.id === this.publication.author.id;
setTimeout(() => Prism.highlightAll(), 100);
})
.catch(error => {
const errorMessage = $localize`An error occurred while loading publication...`;
this.snackBar.open(errorMessage, $localize`Close`, { duration: 5000 });
console.error(errorMessage, error);
})
.finally(() => {
this.isLoading = false;
});
}
});
this.publicationRestService.getById(publicationId)
.then(publication => {
this.publication.set(publication);
this.isAuthorAndUserEquals.set(this.authenticationService.getAuthenticatedUser()?.id === this.publication()?.author.id);
setTimeout(() => Prism.highlightAll(), 100);
})
.catch(error => {
const errorMessage = $localize`An error occurred while loading publication...`;
this.snackBar.open(errorMessage, $localize`Close`, {duration: 5000});
console.error(errorMessage, error);
})
.finally(() => {
this.isLoading.set(false);
});
}
});
}
ngOnDestroy(): void {
@@ -86,9 +86,10 @@ export class PublicationComponent implements OnInit, OnDestroy {
this.afterDialogCloseSubscription = dialogRef.afterClosed()
.subscribe(response => {
if (response && this.publication?.id) {
this.publicationRestService.delete(this.publication.id);
this.snackBar.open($localize`Publication deleted`, $localize`Close`, { duration: 5000 });
const publication = this.publication();
if (response && publication?.id) {
this.publicationRestService.delete(publication.id);
this.snackBar.open($localize`Publication deleted`, $localize`Close`, {duration: 5000});
this.location.back();
}
});