From 987d187c44fd029f2fd4bba4885baa7d4bce3c67 Mon Sep 17 00:00:00 2001 From: Florian THIERRY Date: Mon, 2 Feb 2026 17:26:30 +0100 Subject: [PATCH] Rework search page to use signals. --- .../search-publications.component.ts | 53 +++++++++---------- .../search-publications.service.ts | 5 +- 2 files changed, 28 insertions(+), 30 deletions(-) diff --git a/frontend/src/app/pages/search-publications/search-publications.component.ts b/frontend/src/app/pages/search-publications/search-publications.component.ts index 61a544b..b852a5e 100644 --- a/frontend/src/app/pages/search-publications/search-publications.component.ts +++ b/frontend/src/app/pages/search-publications/search-publications.component.ts @@ -1,11 +1,12 @@ -import { CommonModule } from "@angular/common"; -import { Component, inject, OnDestroy, OnInit } from "@angular/core"; -import { MatProgressSpinner } from "@angular/material/progress-spinner"; -import { ActivatedRoute } from "@angular/router"; -import { Observable, Subscription } from "rxjs"; -import { PublicationListComponent } from "../../components/publication-list/publication-list.component"; -import { Publication } from "../../core/rest-services/publications/model/publication"; -import { SearchPublicationsService } from "./search-publications.service"; +import {CommonModule} from "@angular/common"; +import {Component, effect, inject} from "@angular/core"; +import {MatProgressSpinner} from "@angular/material/progress-spinner"; +import {ActivatedRoute} from "@angular/router"; +import {Observable} from "rxjs"; +import {PublicationListComponent} from "../../components/publication-list/publication-list.component"; +import {Publication} from "../../core/rest-services/publications/model/publication"; +import {SearchPublicationsService} from "./search-publications.service"; +import {toSignal} from "@angular/core/rxjs-interop"; @Component({ selector: 'app-search-publications', @@ -14,27 +15,25 @@ import { SearchPublicationsService } from "./search-publications.service"; imports: [CommonModule, MatProgressSpinner, PublicationListComponent], providers: [SearchPublicationsService] }) -export class SearchPublicationsComponent implements OnInit, OnDestroy { +export class SearchPublicationsComponent { private searchPublicationsService = inject(SearchPublicationsService); private activatedRoute = inject(ActivatedRoute); - private queryParamsSubscription?: Subscription; - ngOnInit(): void { - this.queryParamsSubscription = this.activatedRoute.queryParamMap - .subscribe(params => { - const categoryId = params.get('category-id'); - if (categoryId) { - this.searchPublicationsService.loadPublications(`category_id=${categoryId}`); - } - const query = params.get('query') - if (query) { - this.searchPublicationsService.loadPublications(query); - } - }); - } - - ngOnDestroy(): void { - this.queryParamsSubscription?.unsubscribe(); + constructor() { + const queryParams = toSignal(this.activatedRoute.queryParamMap); + effect(() => { + let params = queryParams(); + if (params) { + const categoryId = params.get('category-id'); + if (categoryId) { + this.searchPublicationsService.loadPublications(`category_id=${categoryId}`); + } + const query = params.get('query') + if (query) { + this.searchPublicationsService.loadPublications(query); + } + } + }); } get publications$(): Observable { @@ -48,4 +47,4 @@ export class SearchPublicationsComponent implements OnInit, OnDestroy { get isLoaded$(): Observable { return this.searchPublicationsService.isLoaded$; } -} \ No newline at end of file +} diff --git a/frontend/src/app/pages/search-publications/search-publications.service.ts b/frontend/src/app/pages/search-publications/search-publications.service.ts index b1268be..d701015 100644 --- a/frontend/src/app/pages/search-publications/search-publications.service.ts +++ b/frontend/src/app/pages/search-publications/search-publications.service.ts @@ -4,7 +4,6 @@ import { BehaviorSubject, Observable } from "rxjs"; import { Publication } from "../../core/rest-services/publications/model/publication"; import { MatSnackBar } from "@angular/material/snack-bar"; - @Injectable() export class SearchPublicationsService { private publicationRestService = inject(PublicationRestService); @@ -16,7 +15,7 @@ export class SearchPublicationsService { get publications$(): Observable { return this.publicationsSubject.asObservable(); } - + get isLoading$(): Observable { return this.isLoadingSubject.asObservable(); } @@ -46,4 +45,4 @@ export class SearchPublicationsService { this.isLoadedSubject.next(true); }); } -} \ No newline at end of file +}