From 12f5a219f5966abbd642d288100f2c1d897f0998 Mon Sep 17 00:00:00 2001 From: Denys Vuika Date: Wed, 4 Oct 2017 15:03:11 +0100 Subject: [PATCH] support page picker for document list (#2424) --- .../src/services/alfresco-api.service.ts | 25 ++++++++++- .../components/document-list.component.html | 1 + .../document-list.component.spec.ts | 41 +++++++++++++----- .../src/components/document-list.component.ts | 42 ++++++------------- 4 files changed, 67 insertions(+), 42 deletions(-) diff --git a/ng2-components/ng2-alfresco-core/src/services/alfresco-api.service.ts b/ng2-components/ng2-alfresco-core/src/services/alfresco-api.service.ts index 50facc0dde..642709e384 100644 --- a/ng2-components/ng2-alfresco-core/src/services/alfresco-api.service.ts +++ b/ng2-components/ng2-alfresco-core/src/services/alfresco-api.service.ts @@ -16,7 +16,10 @@ */ import { Injectable } from '@angular/core'; -import { AlfrescoApi, ContentApi, NodesApi, RenditionsApi } from 'alfresco-js-api'; +import { + AlfrescoApi, ContentApi, FavoritesApi, NodesApi, + PeopleApi, RenditionsApi, SharedlinksApi, SitesApi +} from 'alfresco-js-api'; import * as alfrescoApi from 'alfresco-js-api'; import { AppConfigService } from './app-config.service'; import { StorageService } from './storage.service'; @@ -42,6 +45,26 @@ export class AlfrescoApiService { return this.getInstance().core.renditionsApi; } + get sharedLinksApi(): SharedlinksApi { + return this.getInstance().core.sharedlinksApi; + } + + get sitesApi(): SitesApi { + return this.getInstance().core.sitesApi; + } + + get favoritesApi(): FavoritesApi { + return this.getInstance().core.favoritesApi; + } + + get peopleApi(): PeopleApi { + return this.getInstance().core.peopleApi; + } + + get searchApi() { + return this.getInstance().search.searchApi; + } + constructor(private appConfig: AppConfigService, private storage: StorageService) { diff --git a/ng2-components/ng2-alfresco-documentlist/src/components/document-list.component.html b/ng2-components/ng2-alfresco-documentlist/src/components/document-list.component.html index 9187fcee58..a94e24f6e8 100644 --- a/ng2-components/ng2-alfresco-documentlist/src/components/document-list.component.html +++ b/ng2-components/ng2-alfresco-documentlist/src/components/document-list.component.html @@ -55,6 +55,7 @@ *ngIf="isPaginationNeeded()" class="adf-documentlist-pagination" (changePageSize)="onChangePageSize($event)" + (changePageNumber)="onChangePageNumber($event)" (nextPage)="onNextPage($event)" (prevPage)="onPrevPage($event)" [pagination]="pagination" diff --git a/ng2-components/ng2-alfresco-documentlist/src/components/document-list.component.spec.ts b/ng2-components/ng2-alfresco-documentlist/src/components/document-list.component.spec.ts index 5dd347ad17..a4e766c887 100644 --- a/ng2-components/ng2-alfresco-documentlist/src/components/document-list.component.spec.ts +++ b/ng2-components/ng2-alfresco-documentlist/src/components/document-list.component.spec.ts @@ -17,6 +17,7 @@ import { CUSTOM_ELEMENTS_SCHEMA, NgZone, SimpleChange, TemplateRef } from '@angular/core'; import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { Pagination } from 'alfresco-js-api'; import { AlfrescoApiService, AlfrescoTranslationService, CoreModule } from 'ng2-alfresco-core'; import { DataColumn, DataTableComponent } from 'ng2-alfresco-datatable'; import { DataTableModule } from 'ng2-alfresco-datatable'; @@ -76,7 +77,6 @@ describe('DocumentList', () => { fixture = TestBed.createComponent(DocumentListComponent); let translateService = TestBed.get(AlfrescoTranslationService); - // spyOn(translateService, 'addTranslationFolder').and.stub(); spyOn(translateService, 'get').and.callFake((key) => { return Observable.of(key); }); @@ -905,11 +905,10 @@ describe('DocumentList', () => { }); it('should fetch trashcan', () => { - const nodesApi = apiService.getInstance().core.nodesApi; - spyOn(nodesApi, 'getDeletedNodes').and.returnValue(Promise.resolve(null)); + spyOn(apiService.nodesApi, 'getDeletedNodes').and.returnValue(Promise.resolve(null)); documentList.loadFolderByNodeId('-trashcan-'); - expect(nodesApi.getDeletedNodes).toHaveBeenCalled(); + expect(apiService.nodesApi.getDeletedNodes).toHaveBeenCalled(); }); it('should fetch shared links', () => { @@ -937,20 +936,40 @@ describe('DocumentList', () => { }); it('should fetch recent', (done) => { - const person = { entry: { id: 'person '} }; - const peopleApi = apiService.getInstance().core.peopleApi; - const searchApi = apiService.getInstance().search.searchApi; - spyOn(peopleApi, 'getPerson').and.returnValue(Promise.resolve(person)); - spyOn(searchApi, 'search').and.returnValue(Promise.resolve(null)); + spyOn(apiService.peopleApi, 'getPerson').and.returnValue(Promise.resolve(person)); + spyOn(apiService.searchApi, 'search').and.returnValue(Promise.resolve(null)); documentList.loadFolderByNodeId('-recent-'); setTimeout(function() { - expect(peopleApi.getPerson).toHaveBeenCalledWith('-me-'); - expect(searchApi.search).toHaveBeenCalled(); + expect(apiService.peopleApi.getPerson).toHaveBeenCalledWith('-me-'); + expect(apiService.searchApi.search).toHaveBeenCalled(); done(); }, 100); }); + + it('should switch to another page', () => { + spyOn(documentList, 'reload').and.stub(); + + const page1: Pagination = { + maxItems: 5, + skipCount: 0 + }; + const page2: Pagination = { + maxItems: 5, + skipCount: 10 + }; + + documentList.onChangePageNumber(page1); + expect(documentList.pageSize).toBe(page1.maxItems); + expect(documentList.skipCount).toBe(page1.skipCount); + + documentList.onChangePageNumber(page2); + expect(documentList.pageSize).toBe(page2.maxItems); + expect(documentList.skipCount).toBe(page2.skipCount); + + expect(documentList.reload).toHaveBeenCalledTimes(2); + }); }); diff --git a/ng2-components/ng2-alfresco-documentlist/src/components/document-list.component.ts b/ng2-components/ng2-alfresco-documentlist/src/components/document-list.component.ts index 874db4daf3..bde3cef7ea 100644 --- a/ng2-components/ng2-alfresco-documentlist/src/components/document-list.component.ts +++ b/ng2-components/ng2-alfresco-documentlist/src/components/document-list.component.ts @@ -172,30 +172,6 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni this.supportedPageSizes = appConfig.get('document-list.supportedPageSizes', [5, 10, 15, 20]); } - private get nodesApi() { - return this.apiService.getInstance().core.nodesApi; - } - - private get sharedLinksApi() { - return this.apiService.getInstance().core.sharedlinksApi; - } - - private get sitesApi() { - return this.apiService.getInstance().core.sitesApi; - } - - private get favoritesApi() { - return this.apiService.getInstance().core.favoritesApi; - } - - private get peopleApi() { - return this.apiService.getInstance().core.peopleApi; - } - - private get searchApi() { - return this.apiService.getInstance().search.searchApi; - } - getContextActions(node: MinimalNodeEntity) { if (node && node.entry) { let actions = this.getNodeActions(node); @@ -495,7 +471,7 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni maxItems: this.pageSize, skipCount: this.skipCount }; - this.nodesApi.getDeletedNodes(options).then((page: NodePaging) => { + this.apiService.nodesApi.getDeletedNodes(options).then((page: NodePaging) => { this.onPageLoaded(page); }); } @@ -506,7 +482,7 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni maxItems: this.pageSize, skipCount: this.skipCount }; - this.sharedLinksApi.findSharedLinks(options).then((page: NodePaging) => { + this.apiService.sharedLinksApi.findSharedLinks(options).then((page: NodePaging) => { this.onPageLoaded(page); }); } @@ -518,7 +494,7 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni skipCount: this.skipCount }; - this.sitesApi.getSites(options).then((page: NodePaging) => { + this.apiService.sitesApi.getSites(options).then((page: NodePaging) => { this.onPageLoaded(page); }); } @@ -531,7 +507,7 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni include: [ 'properties', 'allowableOperations', 'path' ] }; - this.favoritesApi.getFavorites('-me-', options).then((result: NodePaging) => { + this.apiService.favoritesApi.getFavorites('-me-', options).then((result: NodePaging) => { let page: NodePaging = { list: { entries: result.list.entries @@ -553,7 +529,7 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni } private loadRecent(): void { - this.peopleApi.getPerson('-me-').then((person: PersonEntry) => { + this.apiService.peopleApi.getPerson('-me-').then((person: PersonEntry) => { const username = person.entry.id; const query = { query: { @@ -577,7 +553,7 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni } }; - this.searchApi.search(query).then(page => this.onPageLoaded(page)); + this.apiService.searchApi.search(query).then(page => this.onPageLoaded(page)); }); } @@ -733,6 +709,12 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni this.reload(); } + onChangePageNumber(page: Pagination): void { + this.pageSize = page.maxItems; + this.skipCount = page.skipCount; + this.reload(); + } + onNextPage(event: Pagination): void { this.skipCount = event.skipCount; this.reload();