I have observabled data that I got from service:
public events$: Observable<IEvent[]> = of([]);
public filteredEvents$: BehaviorSubject<IEvent[]> = new BehaviorSubject([]);
this.events$ = this.eventsService.get();
When I call the function:
public checkAll(): void {
this.events$
.pipe(
map((events: IEvent[]) =>
events.filter(
(event: IEvent) => (event.checked_export = !event.checked_export)
)
)
)
.subscribe((events) => this.filteredEvents$.next(events));
}
It calls again this.events$ = this.eventsService.get();
with request to the server.
Template is:
<ng-container *ngIf="filteredEvents$ | async; else nodata">
I know that each .subscribe((events)
calls observer again, but how to modify observable array this.events$
and return to filteredEvents$
?
Why I get this error in code:
RangeError: Maximum call stack size exceeded
Component method is:
public delete(event: IEvent): void {
this.confirm
.open({})
.pipe(
filter(Boolean),
concatMap(() => this.eventService.delete(event))
)
.subscribe((response) => this.eventService.next(response));
}
Service is:
public next(events: IEvent[]): void {
this.events$.next(events);
}
public events(): Observable<any> {
return this.events$.asObservable();
}
public delete(event: IEvent): Observable<any> {
return this.eventsService
.delete(event)
.pipe(
concatMap(() =>
this.events$.pipe(
map((events: IEvent[]) =>
events.filter((e) => e.idEvent !== event.idEvent)
)
)
)
);
}