|
- // property.interceptor.ts
-
- import { Injectable } from '@angular/core';
- import {
- HttpInterceptor,
- HttpRequest,
- HttpHandler,
- HttpEvent, HttpResponse,
- } from '@angular/common/http';
- import { Observable } from 'rxjs';
- import { map } from 'rxjs/operators';
-
- @Injectable()
- export class PropertyInterceptor implements HttpInterceptor {
- intercept(
- request: HttpRequest<any>,
- next: HttpHandler
- ): Observable<HttpEvent<any>> {
- return next.handle(request).pipe(
- map((event) => {
- if (event instanceof HttpResponse && event.body) {
- let modifiedBody;
-
- if (event.body['hydra:member']) {
- modifiedBody = {
- ...event.body,
- 'hydra:member': this.mapDataItems(
- event.body['hydra:member']
- ),
- };
- } else {
- // Wenn keine 'hydra:member' vorhanden ist, betrachte das gesamte Objekt
- modifiedBody = this.mapDataItem(event.body);
- }
-
- return event.clone({
- body: modifiedBody,
- });
- }
-
- return event;
- })
- );
- }
-
- private mapDataItems(items: any[]): any[] {
- return items.map((item) => this.mapDataItem(item));
- }
-
- private mapDataItem(item: any): any {
- if (item && item['@id']) {
- return {
- ...item,
- id: item['@id'],
- };
- }
- return item;
- }
- }
|