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 88f18fe6814858796bb0a2cab882d17890d70a65..9d784df21553e873cd3390c0606321166be2767f 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 90922c68665d85ef4b4657c3c7c3dde3c928af7f..76cefcf0b5e111f486cc72e3b20e201e8f7962d9 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), + ), + ); + } }