Rework search page to use signals.
This commit is contained in:
@@ -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,27 +15,25 @@ 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(() => {
|
||||||
const categoryId = params.get('category-id');
|
let params = queryParams();
|
||||||
if (categoryId) {
|
if (params) {
|
||||||
this.searchPublicationsService.loadPublications(`category_id=${categoryId}`);
|
const categoryId = params.get('category-id');
|
||||||
}
|
if (categoryId) {
|
||||||
const query = params.get('query')
|
this.searchPublicationsService.loadPublications(`category_id=${categoryId}`);
|
||||||
if (query) {
|
}
|
||||||
this.searchPublicationsService.loadPublications(query);
|
const query = params.get('query')
|
||||||
}
|
if (query) {
|
||||||
});
|
this.searchPublicationsService.loadPublications(query);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
ngOnDestroy(): void {
|
});
|
||||||
this.queryParamsSubscription?.unsubscribe();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
get publications$(): Observable<Publication[]> {
|
get publications$(): Observable<Publication[]> {
|
||||||
@@ -48,4 +47,4 @@ export class SearchPublicationsComponent implements OnInit, OnDestroy {
|
|||||||
get isLoaded$(): Observable<boolean> {
|
get isLoaded$(): Observable<boolean> {
|
||||||
return this.searchPublicationsService.isLoaded$;
|
return this.searchPublicationsService.isLoaded$;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
@@ -16,7 +15,7 @@ export class SearchPublicationsService {
|
|||||||
get publications$(): Observable<Publication[]> {
|
get publications$(): Observable<Publication[]> {
|
||||||
return this.publicationsSubject.asObservable();
|
return this.publicationsSubject.asObservable();
|
||||||
}
|
}
|
||||||
|
|
||||||
get isLoading$(): Observable<boolean> {
|
get isLoading$(): Observable<boolean> {
|
||||||
return this.isLoadingSubject.asObservable();
|
return this.isLoadingSubject.asObservable();
|
||||||
}
|
}
|
||||||
@@ -46,4 +45,4 @@ export class SearchPublicationsService {
|
|||||||
this.isLoadedSubject.next(true);
|
this.isLoadedSubject.next(true);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user