You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

60 rivejä
1.6 KiB

  1. // property.interceptor.ts
  2. import { Injectable } from '@angular/core';
  3. import {
  4. HttpInterceptor,
  5. HttpRequest,
  6. HttpHandler,
  7. HttpEvent, HttpResponse,
  8. } from '@angular/common/http';
  9. import { Observable } from 'rxjs';
  10. import { map } from 'rxjs/operators';
  11. @Injectable()
  12. export class PropertyInterceptor implements HttpInterceptor {
  13. intercept(
  14. request: HttpRequest<any>,
  15. next: HttpHandler
  16. ): Observable<HttpEvent<any>> {
  17. return next.handle(request).pipe(
  18. map((event) => {
  19. if (event instanceof HttpResponse && event.body) {
  20. let modifiedBody;
  21. if (event.body['hydra:member']) {
  22. modifiedBody = {
  23. ...event.body,
  24. 'hydra:member': this.mapDataItems(
  25. event.body['hydra:member']
  26. ),
  27. };
  28. } else {
  29. // Wenn keine 'hydra:member' vorhanden ist, betrachte das gesamte Objekt
  30. modifiedBody = this.mapDataItem(event.body);
  31. }
  32. return event.clone({
  33. body: modifiedBody,
  34. });
  35. }
  36. return event;
  37. })
  38. );
  39. }
  40. private mapDataItems(items: any[]): any[] {
  41. return items.map((item) => this.mapDataItem(item));
  42. }
  43. private mapDataItem(item: any): any {
  44. if (item && item['@id']) {
  45. return {
  46. ...item,
  47. id: item['@id'],
  48. };
  49. }
  50. return item;
  51. }
  52. }