Rework search page to use signals.

This commit is contained in:
Florian THIERRY
2026-02-02 17:26:30 +01:00
parent bf7e755c28
commit 987d187c44
2 changed files with 28 additions and 30 deletions

View File

@@ -1,11 +1,12 @@
import {CommonModule} from "@angular/common"; import {CommonModule} from "@angular/common";
import { Component, inject, OnDestroy, OnInit } from "@angular/core"; import {Component, effect, inject} from "@angular/core";
import {MatProgressSpinner} from "@angular/material/progress-spinner"; import {MatProgressSpinner} from "@angular/material/progress-spinner";
import {ActivatedRoute} from "@angular/router"; import {ActivatedRoute} from "@angular/router";
import { Observable, Subscription } from "rxjs"; import {Observable} from "rxjs";
import {PublicationListComponent} from "../../components/publication-list/publication-list.component"; import {PublicationListComponent} from "../../components/publication-list/publication-list.component";
import {Publication} from "../../core/rest-services/publications/model/publication"; import {Publication} from "../../core/rest-services/publications/model/publication";
import {SearchPublicationsService} from "./search-publications.service"; import {SearchPublicationsService} from "./search-publications.service";
import {toSignal} from "@angular/core/rxjs-interop";
@Component({ @Component({
selector: 'app-search-publications', selector: 'app-search-publications',
@@ -14,14 +15,15 @@ import { SearchPublicationsService } from "./search-publications.service";
imports: [CommonModule, MatProgressSpinner, PublicationListComponent], imports: [CommonModule, MatProgressSpinner, PublicationListComponent],
providers: [SearchPublicationsService] providers: [SearchPublicationsService]
}) })
export class SearchPublicationsComponent implements OnInit, OnDestroy { export class SearchPublicationsComponent {
private searchPublicationsService = inject(SearchPublicationsService); private searchPublicationsService = inject(SearchPublicationsService);
private activatedRoute = inject(ActivatedRoute); private activatedRoute = inject(ActivatedRoute);
private queryParamsSubscription?: Subscription;
ngOnInit(): void { constructor() {
this.queryParamsSubscription = this.activatedRoute.queryParamMap const queryParams = toSignal(this.activatedRoute.queryParamMap);
.subscribe(params => { effect(() => {
let params = queryParams();
if (params) {
const categoryId = params.get('category-id'); const categoryId = params.get('category-id');
if (categoryId) { if (categoryId) {
this.searchPublicationsService.loadPublications(`category_id=${categoryId}`); this.searchPublicationsService.loadPublications(`category_id=${categoryId}`);
@@ -30,11 +32,8 @@ export class SearchPublicationsComponent implements OnInit, OnDestroy {
if (query) { if (query) {
this.searchPublicationsService.loadPublications(query); this.searchPublicationsService.loadPublications(query);
} }
});
} }
});
ngOnDestroy(): void {
this.queryParamsSubscription?.unsubscribe();
} }
get publications$(): Observable<Publication[]> { get publications$(): Observable<Publication[]> {

View File

@@ -4,7 +4,6 @@ import { BehaviorSubject, Observable } from "rxjs";
import { Publication } from "../../core/rest-services/publications/model/publication"; import { Publication } from "../../core/rest-services/publications/model/publication";
import { MatSnackBar } from "@angular/material/snack-bar"; import { MatSnackBar } from "@angular/material/snack-bar";
@Injectable() @Injectable()
export class SearchPublicationsService { export class SearchPublicationsService {
private publicationRestService = inject(PublicationRestService); private publicationRestService = inject(PublicationRestService);