DocumentList component improvements

- expose ‘properties’ for the Node model
- Row filtering support for Document List (refs #522)
- Custom image resolver for Document List (refs #532)
- readme updates
This commit is contained in:
Denys Vuika
2016-08-22 12:01:54 +01:00
parent 51f9b4b5b5
commit 328f37282a
5 changed files with 175 additions and 1 deletions

View File

@@ -45,7 +45,12 @@ import {
import { DocumentListService } from './../services/document-list.service';
import { MinimalNodeEntity } from './../models/document-library.model';
import { ContentActionModel } from './../models/content-action.model';
import { ShareDataTableAdapter, ShareDataRow } from './../data/share-datatable-adapter';
import {
ShareDataTableAdapter,
ShareDataRow,
RowFilter,
ImageResolver
} from './../data/share-datatable-adapter';
declare var componentHandler;
declare let __moduleName: string;
@@ -89,6 +94,20 @@ export class DocumentList implements OnInit, AfterViewInit, AfterViewChecked, Af
@Input()
pageSize: number = DocumentList.DEFAULT_PAGE_SIZE;
@Input()
set rowFilter(value: RowFilter) {
if (this.data) {
this.data.setFilter(value);
}
};
@Input()
set imageResolver(value: ImageResolver) {
if (this.data) {
this.data.setImageResolver(value);
}
}
@Output()
nodeClick: EventEmitter<any> = new EventEmitter();

View File

@@ -41,6 +41,9 @@ export class ShareDataTableAdapter implements DataTableAdapter, PaginationProvid
private page: NodePaging;
private currentPath: string;
private filter: RowFilter;
private imageResolver: ImageResolver;
private _count: number = 0;
private _hasMoreItems: boolean = false;
private _totalItems: number = 0;
@@ -130,6 +133,13 @@ export class ShareDataTableAdapter implements DataTableAdapter, PaginationProvid
if (col.type === 'image') {
if (this.imageResolver) {
let resolved = this.imageResolver(row, col);
if (resolved) {
return resolved;
}
}
if (col.key === '$thumbnail') {
let node = (<ShareDataRow> row).node;
@@ -221,6 +231,18 @@ export class ShareDataTableAdapter implements DataTableAdapter, PaginationProvid
}
}
setFilter(filter: RowFilter) {
this.filter = filter;
if (this.filter && this.currentPath) {
this.loadPath(this.currentPath);
}
}
setImageResolver(resolver: ImageResolver) {
this.imageResolver = resolver;
}
private loadPage(page: NodePaging) {
this.page = page;
this.resetPagination();
@@ -232,6 +254,10 @@ export class ShareDataTableAdapter implements DataTableAdapter, PaginationProvid
if (data && data.length > 0) {
rows = data.map(item => new ShareDataRow(item));
if (this.filter) {
rows = rows.filter(this.filter);
}
// Sort by first sortable or just first column
if (this.columns && this.columns.length > 0) {
let sortable = this.columns.filter(c => c.sortable);
@@ -289,3 +315,11 @@ export class ShareDataRow implements DataRow {
return this.getValue(key) ? true : false;
}
}
export interface RowFilter {
(value: ShareDataRow, index: number, array: ShareDataRow[]): boolean;
}
export interface ImageResolver {
(row: DataRow, column: DataColumn): string;
}

View File

@@ -53,6 +53,7 @@ export class MinimalNodeEntryEntity {
createdByUser: UserInfo;
content: ContentInfo;
path: PathInfoEntity;
properties: NodeProperties = {};
}
export class UserInfo {
@@ -77,3 +78,7 @@ export class PathElementEntity {
id: string;
name: string;
}
export interface NodeProperties {
[key: string]: any;
}