Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 
 

76 Zeilen
2.6 KiB

  1. import { Injectable } from '@angular/core';
  2. import {
  3. HttpInterceptor,
  4. HttpRequest,
  5. HttpHandler,
  6. HttpEvent, HttpResponse,
  7. } from '@angular/common/http';
  8. import { Observable } from 'rxjs';
  9. import { map } from 'rxjs/operators';
  10. @Injectable()
  11. export class PropertyInterceptor implements HttpInterceptor {
  12. intercept(
  13. request: HttpRequest<any>,
  14. next: HttpHandler
  15. ): Observable<HttpEvent<any>> {
  16. return next.handle(request).pipe(
  17. map((event) => {
  18. if (event instanceof HttpResponse && event.body) {
  19. let modifiedBody;
  20. if (Array.isArray(event.body)) {
  21. // Wenn es sich um ein Array von Ressourcen handelt
  22. modifiedBody = this.mapDataItems(event.body);
  23. } else if (event.body['hydra:member']) {
  24. // Wenn es sich um eine Ressourcenkollektion handelt
  25. modifiedBody = {
  26. ...event.body,
  27. 'hydra:member': this.mapDataItems(
  28. event.body['hydra:member']
  29. ),
  30. };
  31. } else {
  32. // Wenn es sich um eine einzelne Ressource handelt
  33. modifiedBody = this.mapDataItem(event.body);
  34. }
  35. return event.clone({
  36. body: modifiedBody,
  37. });
  38. }
  39. return event;
  40. })
  41. );
  42. }
  43. private mapDataItems(items: any[]): any[] {
  44. return items.map((item) => this.mapDataItem(item));
  45. }
  46. private mapDataItem(item: any): any {
  47. if (item && typeof item === 'object') {
  48. // Wenn es ein Objekt ist, überprüfe rekursiv
  49. const mappedItem = { ...item };
  50. for (const key in mappedItem) {
  51. if (mappedItem.hasOwnProperty(key) && key === '@id') {
  52. mappedItem['id'] = mappedItem[key];
  53. delete mappedItem[key];
  54. } else if (Array.isArray(mappedItem[key])) {
  55. // Wenn es sich um ein Array handelt, überprüfe rekursiv jedes Element
  56. mappedItem[key] = this.mapDataItems(mappedItem[key]);
  57. } else if (mappedItem[key] && typeof mappedItem[key] === 'object') {
  58. // Wenn es ein Objekt ist, überprüfe rekursiv
  59. mappedItem[key] = this.mapDataItem(mappedItem[key]);
  60. }
  61. }
  62. return mappedItem;
  63. }
  64. return item;
  65. }
  66. }