From 7255ff96de9b4e65edc2bfc9b20e83ab0091855f Mon Sep 17 00:00:00 2001 From: Sebastian Date: Wed, 20 Nov 2019 18:43:44 +0100 Subject: [PATCH] Page size improved. --- .../administration/state/users.state.spec.ts | 26 +++++++++++++++---- .../app/shared/state/assets.state.spec.ts | 23 ++++++++++++---- frontend/app/shared/state/assets.state.ts | 16 ++++++++++-- .../shared/state/contributors.state.spec.ts | 9 +++++++ .../shared/state/rule-events.state.spec.ts | 2 +- 5 files changed, 63 insertions(+), 13 deletions(-) diff --git a/frontend/app/features/administration/state/users.state.spec.ts b/frontend/app/features/administration/state/users.state.spec.ts index eccc79f47..4ded26b20 100644 --- a/frontend/app/features/administration/state/users.state.spec.ts +++ b/frontend/app/features/administration/state/users.state.spec.ts @@ -64,6 +64,15 @@ describe('UsersState', () => { dialogs.verify(x => x.notifyInfo(It.isAnyString()), Times.never()); }); + it('should load page size from local store', () => { + localStore.setup(x => x.getInt('users.pageSize', 10)) + .returns(() => 25); + + const state = new UsersState(dialogs.object, localStore.object, usersService.object); + + expect(state.snapshot.usersPager.pageSize).toBe(25); + }); + it('should show notification on load when reload is true', () => { usersService.setup(x => x.getUsers(10, 0, undefined)) .returns(() => of(oldUsers)).verifiable(); @@ -95,14 +104,21 @@ describe('UsersState', () => { }); it('should load with new pagination when paging', () => { - usersService.setup(x => x.getUsers(10, 0, undefined)) - .returns(() => of(oldUsers)).verifiable(Times.once()); - usersService.setup(x => x.getUsers(10, 10, undefined)) .returns(() => of(new UsersDto(200, []))).verifiable(); - usersState.load().subscribe(); - usersState.setPager(new Pager(20, 1, 10)).subscribe(); + usersState.setPager(new Pager(200, 1, 10)).subscribe(); + + expect().nothing(); + }); + + it('should update page size in local store', () => { + usersService.setup(x => x.getUsers(50, 0, undefined)) + .returns(() => of(new UsersDto(200, []))).verifiable(); + + usersState.setPager(new Pager(0, 0, 50)); + + localStore.verify(x => x.setInt('users.pageSize', 50), Times.atLeastOnce()); expect().nothing(); }); diff --git a/frontend/app/shared/state/assets.state.spec.ts b/frontend/app/shared/state/assets.state.spec.ts index 6500fe63c..c29dec235 100644 --- a/frontend/app/shared/state/assets.state.spec.ts +++ b/frontend/app/shared/state/assets.state.spec.ts @@ -13,6 +13,7 @@ import { AssetsService, AssetsState, DialogService, + LocalStoreService, Pager, versioned } from '@app/shared/internal'; @@ -38,15 +39,20 @@ describe('AssetsState', () => { let dialogs: IMock; let assetsService: IMock; let assetsState: AssetsState; + let localStore: IMock; beforeEach(() => { dialogs = Mock.ofType(); + localStore = Mock.ofType(); + localStore.setup(x => x.getInt('assets.pageSize', 30)) + .returns(() => 30); + assetsService = Mock.ofType(); assetsService.setup(x => x.getTags(app)) .returns(() => of({ tag1: 1, shared: 2, tag2: 1 })).verifiable(Times.atLeastOnce()); - assetsState = new AssetsState(appsState.object, assetsService.object, dialogs.object); + assetsState = new AssetsState(appsState.object, assetsService.object, dialogs.object, localStore.object); }); afterEach(() => { @@ -119,14 +125,21 @@ describe('AssetsState', () => { }); it('should load with new pagination when paging', () => { - assetsService.setup(x => x.getAssets(app, 30, 0, undefined, It.isValue([]))) + assetsService.setup(x => x.getAssets(app, 30, 30, undefined, It.isValue([]))) .returns(() => of(new AssetsDto(200, []))).verifiable(); - assetsService.setup(x => x.getAssets(app, 30, 30, undefined, It.isValue([]))) + assetsState.setPager(new Pager(200, 1, 30)).subscribe(); + + expect().nothing(); + }); + + it('should update page size in local store', () => { + assetsService.setup(x => x.getAssets(app, 50, 0, undefined, It.isValue([]))) .returns(() => of(new AssetsDto(200, []))).verifiable(); - assetsState.load().subscribe(); - assetsState.setPager(new Pager(60, 1, 30)).subscribe(); + assetsState.setPager(new Pager(0, 0, 50)); + + localStore.verify(x => x.setInt('assets.pageSize', 50), Times.atLeastOnce()); expect().nothing(); }); diff --git a/frontend/app/shared/state/assets.state.ts b/frontend/app/shared/state/assets.state.ts index a9dd5d68e..b4481d7a3 100644 --- a/frontend/app/shared/state/assets.state.ts +++ b/frontend/app/shared/state/assets.state.ts @@ -12,6 +12,7 @@ import { tap } from 'rxjs/operators'; import { compareStrings, DialogService, + LocalStoreService, Pager, shareSubscribed, State @@ -83,9 +84,20 @@ export class AssetsState extends State { constructor( private readonly appsState: AppsState, private readonly assetsService: AssetsService, - private readonly dialogs: DialogService + private readonly dialogs: DialogService, + private readonly localStore: LocalStoreService ) { - super({ assets: [], assetsPager: new Pager(0, 0, 30), assetsQueryJson: '', tags: {}, tagsSelected: {} }); + super({ + assets: [], + assetsPager: Pager.fromLocalStore('assets', localStore, 30), + assetsQueryJson: '', + tags: {}, + tagsSelected: {} + }); + + this.assetsPager.subscribe(pager => { + pager.saveTo('assets', this.localStore); + }); } public load(isReload = false): Observable { diff --git a/frontend/app/shared/state/contributors.state.spec.ts b/frontend/app/shared/state/contributors.state.spec.ts index 46897e05e..d33ae4e68 100644 --- a/frontend/app/shared/state/contributors.state.spec.ts +++ b/frontend/app/shared/state/contributors.state.spec.ts @@ -100,6 +100,15 @@ describe('ContributorsState', () => { expect(contributorsState.snapshot.contributorsPager).toEqual(new Pager(20, 1, 10)); }); + it('should update page size in local store', () => { + contributorsState.load().subscribe(); + contributorsState.setPager(new Pager(0, 0, 50)); + + localStore.verify(x => x.setInt('contributors.pageSize', 50), Times.atLeastOnce()); + + expect().nothing(); + }); + it('should show filtered contributors when searching', () => { contributorsState.load().subscribe(); contributorsState.search('4'); diff --git a/frontend/app/shared/state/rule-events.state.spec.ts b/frontend/app/shared/state/rule-events.state.spec.ts index b694c377d..bd28d7543 100644 --- a/frontend/app/shared/state/rule-events.state.spec.ts +++ b/frontend/app/shared/state/rule-events.state.spec.ts @@ -70,7 +70,7 @@ describe('RuleEventsState', () => { rulesService.setup(x => x.getEvents(app, 10, 10, undefined)) .returns(() => of(new RuleEventsDto(200, []))); - ruleEventsState.setPager(new Pager(20, 1, 10)); + ruleEventsState.setPager(new Pager(200, 1, 10)); expect().nothing();