From 1f16f62ce6fffb9a7b12280b5e8cade860fd70c4 Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Wed, 15 May 2024 18:28:36 +0200
Subject: [PATCH] OZG-5012 impl getItems

---
 .../resource/list-resource.service.spec.ts    | 21 +++++++++++++++++++
 .../src/lib/resource/list-resource.service.ts | 21 ++++++++++++++++++-
 2 files changed, 41 insertions(+), 1 deletion(-)

diff --git a/alfa-client/libs/tech-shared/src/lib/resource/list-resource.service.spec.ts b/alfa-client/libs/tech-shared/src/lib/resource/list-resource.service.spec.ts
index 88f18fe681..9d784df215 100644
--- a/alfa-client/libs/tech-shared/src/lib/resource/list-resource.service.spec.ts
+++ b/alfa-client/libs/tech-shared/src/lib/resource/list-resource.service.spec.ts
@@ -473,4 +473,25 @@ describe('ListResourceService', () => {
       expect(isFirst).toBe(true);
     });
   });
+
+  describe('get items', () => {
+    it('should return empty array on empty stateResource', (done) => {
+      service.listResource.next(createEmptyStateResource());
+
+      service.getItems().subscribe((items) => {
+        expect(items).toEqual([]);
+        done();
+      });
+    });
+
+    it('should return listresource items', (done) => {
+      const listIems: Resource[] = [createDummyResource()];
+      service.listResource.next(createStateResource(createFilledDummyListResource(listIems)));
+
+      service.getItems().subscribe((items) => {
+        expect(items).toEqual(listIems);
+        done();
+      });
+    });
+  });
 });
diff --git a/alfa-client/libs/tech-shared/src/lib/resource/list-resource.service.ts b/alfa-client/libs/tech-shared/src/lib/resource/list-resource.service.ts
index 90922c6866..76cefcf0b5 100644
--- a/alfa-client/libs/tech-shared/src/lib/resource/list-resource.service.ts
+++ b/alfa-client/libs/tech-shared/src/lib/resource/list-resource.service.ts
@@ -1,6 +1,15 @@
 import { Resource, ResourceUri, getUrl, hasLink } from '@ngxp/rest';
 import { isEqual, isNull } from 'lodash-es';
-import { BehaviorSubject, Observable, combineLatest, filter, first, startWith, tap } from 'rxjs';
+import {
+  BehaviorSubject,
+  Observable,
+  combineLatest,
+  filter,
+  first,
+  map,
+  startWith,
+  tap,
+} from 'rxjs';
 import { isNotNull, isNotUndefined } from '../tech.util';
 import { CreateResourceData, ListItemResource, ListResourceServiceConfig } from './resource.model';
 import { ResourceRepository } from './resource.repository';
@@ -220,4 +229,14 @@ export class ResourceListService<
   private getListResource(): T {
     return this.listResource.value.resource;
   }
+
+  public getItems(): Observable<ListItemResource[]> {
+    return this.listResource
+      .asObservable()
+      .pipe(
+        map((listStateResource: StateResource<T>) =>
+          getEmbeddedResources<ListItemResource>(listStateResource, this.config.listLinkRel),
+        ),
+      );
+  }
 }
-- 
GitLab