#1014 use document list to display search results (#1548)

* #1014 use document list to diplay search results

* #1014 refactor pagination

* #1014 documentation and scripts update

* fix random erros on tests executrion

* #1014 fix travis scripts and raise timeout jasmine

* #1014 fix appveyor script

* #1014 type nodeId
This commit is contained in:
Mario Romano
2017-01-27 12:22:25 +00:00
committed by Denys Vuika
parent 9e00b1d4f1
commit b05247dade
52 changed files with 917 additions and 414 deletions

View File

@@ -15,9 +15,22 @@
* limitations under the License.
*/
import { Component, OnInit, Input, OnChanges, Output, SimpleChanges, EventEmitter, AfterContentInit, TemplateRef, NgZone, ViewChild, HostListener } from '@angular/core';
import {
Component,
OnInit,
Input,
OnChanges,
Output,
SimpleChanges,
EventEmitter,
AfterContentInit,
TemplateRef,
NgZone,
ViewChild,
HostListener
} from '@angular/core';
import { Subject } from 'rxjs/Rx';
import { MinimalNodeEntity, MinimalNodeEntryEntity } from 'alfresco-js-api';
import { MinimalNodeEntity, MinimalNodeEntryEntity, NodePaging, Pagination } from 'alfresco-js-api';
import { AlfrescoTranslationService } from 'ng2-alfresco-core';
import { DataRowEvent, DataTableComponent, ObjectDataColumn } from 'ng2-alfresco-datatable';
import { DocumentListService } from './../services/document-list.service';
@@ -55,6 +68,9 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni
@Input()
multiselect: boolean = false;
@Input()
enablePagination: boolean = true;
@Input()
contentActions: boolean = false;
@@ -67,10 +83,15 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni
@Input()
pageSize: number = DocumentListComponent.DEFAULT_PAGE_SIZE;
skipCount: number = 0;
pagination: Pagination;
@Input()
set rowFilter(value: RowFilter) {
if (this.data) {
if (this.data && value && this.currentFolderId) {
this.data.setFilter(value);
this.loadFolderNodesByFolderNodeId(this.currentFolderId, this.pageSize, this.skipCount);
}
};
@@ -81,6 +102,16 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni
}
}
// The identifier of a node. You can also use one of these well-known aliases: -my- | -shared- | -root-
@Input()
currentFolderId: string = null;
@Input()
folderNode: MinimalNodeEntryEntity = null;
@Input()
node: NodePaging = null;
@Output()
nodeClick: EventEmitter<any> = new EventEmitter();
@@ -102,25 +133,17 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni
@ViewChild(DataTableComponent)
dataTable: DataTableComponent;
// The identifier of a node. You can also use one of these well-known aliases: -my- | -shared- | -root-
@Input()
currentFolderId: string = null;
@Input()
folderNode: MinimalNodeEntryEntity = null;
errorMessage;
actions: ContentActionModel[] = [];
emptyFolderTemplate: TemplateRef<any>;
contextActionHandler: Subject<any> = new Subject();
data: ShareDataTableAdapter;
constructor(
private documentListService: DocumentListService,
private ngZone: NgZone,
private translateService: AlfrescoTranslationService) {
constructor(private documentListService: DocumentListService,
private ngZone: NgZone,
private translateService: AlfrescoTranslationService) {
this.data = new ShareDataTableAdapter(this.documentListService, './', []);
this.data = new ShareDataTableAdapter(this.documentListService, this.baseComponentPath, []);
if (translateService) {
translateService.addTranslationFolder('ng2-alfresco-documentlist', 'node_modules/ng2-alfresco-documentlist/src');
@@ -151,15 +174,15 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni
ngOnInit() {
this.data.thumbnails = this.thumbnails;
this.data.maxItems = this.pageSize;
this.contextActionHandler.subscribe(val => this.contextActionCallback(val));
// Automatically enforce single-click navigation for mobile browsers
this.enforceSingleClickNavigationForMobile();
}
private enforceSingleClickNavigationForMobile(): void {
if (this.isMobile()) {
this.navigationMode = DocumentListComponent.SINGLE_CLICK_NAVIGATION;
}
this.loadFolder();
}
ngAfterContentInit() {
@@ -172,9 +195,37 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni
ngOnChanges(changes: SimpleChanges) {
if (changes['folderNode'] && changes['folderNode'].currentValue) {
this.loadFolder();
} else if (changes['currentFolderId'] && changes['currentFolderId'].currentValue) {
this.loadFolderByNodeId(changes['currentFolderId'].currentValue);
return;
}
if (changes['currentFolderId'] && changes['currentFolderId'].currentValue) {
this.loadFolderByNodeId(changes['currentFolderId'].currentValue);
return;
}
if (changes['node'] && changes['node'].currentValue) {
this.data.loadPage(changes['node'].currentValue);
return;
}
}
reload() {
this.ngZone.run(() => {
if (this.folderNode) {
this.loadFolder();
return;
}
if (this.currentFolderId) {
this.loadFolderByNodeId(this.currentFolderId);
return;
}
if (this.node) {
this.data.loadPage(this.node);
return;
}
});
}
isEmptyTemplateDefined() {
@@ -229,7 +280,7 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni
this.folderNode = node.entry;
this.loadFolder();
this.folderChange.emit({ node: node.entry });
this.folderChange.emit({node: node.entry});
return true;
}
return false;
@@ -246,21 +297,10 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni
}
}
loadFolderById(id: string): Promise<any> {
return this.data.loadById(id);
}
reload() {
this.ngZone.run(() => {
this.loadFolder();
});
}
loadFolder() {
let nodeId = this.folderNode ? this.folderNode.id : this.currentFolderId;
if (nodeId) {
this.loadFolderById(nodeId)
.catch(err => this.error.emit(err));
this.loadFolderNodesByFolderNodeId(nodeId, this.pageSize, this.skipCount).catch(err => this.error.emit(err));
}
}
@@ -269,9 +309,33 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni
this.documentListService.getFolderNode(nodeId).then(node => {
this.folderNode = node;
this.currentFolderId = node.id;
this.data.loadById(node.id).catch(err => this.error.emit(err));
this.loadFolderNodesByFolderNodeId(node.id, this.pageSize, this.skipCount).catch(err => this.error.emit(err));
})
.catch(err => this.error.emit(err));
.catch(err => this.error.emit(err));
}
loadFolderNodesByFolderNodeId(id: string, maxItems: number, skipCount: number): Promise<any> {
return new Promise((resolve, reject) => {
if (id && this.documentListService) {
this.documentListService
.getFolder(null, {
maxItems: maxItems,
skipCount: skipCount,
rootFolderId: id
})
.subscribe(val => {
this.data.loadPage(<NodePaging>val);
this.pagination = val.list.pagination;
resolve(true);
},
error => {
reject(error);
});
} else {
resolve(false);
}
});
}
/**
@@ -387,4 +451,19 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni
this.reload();
this.success.emit(event);
}
public onChangePageSize(event: Pagination): void {
this.pageSize = event.maxItems;
this.reload();
}
public onNextPage(event: Pagination): void {
this.skipCount = event.skipCount;
this.reload();
}
public onPrevPage(event: Pagination): void {
this.skipCount = event.skipCount;
this.reload();
}
}