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