mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-07-24 17:32:15 +00:00
[ADF-3606] added extra icon for special folders and fixed link navigation folder (#3960)
* [ADF-3606] added extra icon for special folders * [ADF-3606] changed icons and added tests * [ADF-3606] added navigation via linked folder * [ADF-3606] fixed problem in test * [ADF-3606] added extra documentation * [ADF-3606] fixed problem with folderchange event
This commit is contained in:
@@ -720,6 +720,18 @@ describe('DocumentList', () => {
|
||||
expect(documentList.performNavigation(null)).toBeFalsy();
|
||||
});
|
||||
|
||||
it('should perform navigation through corret linked folder', () => {
|
||||
let linkFolder = new FolderNode();
|
||||
linkFolder.entry.id = 'link-folder';
|
||||
linkFolder.entry.nodeType = 'app:folderlink';
|
||||
linkFolder.entry.properties['cm:destination'] = 'normal-folder';
|
||||
|
||||
spyOn(documentList, 'loadFolder').and.stub();
|
||||
|
||||
expect(documentList.performNavigation(linkFolder)).toBeTruthy();
|
||||
expect(documentList.currentFolderId).toBe('normal-folder');
|
||||
});
|
||||
|
||||
it('should require valid node for file preview', () => {
|
||||
let file = new FileNode();
|
||||
file.entry = null;
|
||||
@@ -977,6 +989,16 @@ describe('DocumentList', () => {
|
||||
documentList.loadFolderByNodeId('123');
|
||||
});
|
||||
|
||||
it('should emit folderChange event when a folder node is clicked', (done) => {
|
||||
spyOn(documentList, 'reload').and.stub();
|
||||
|
||||
documentList.folderChange.subscribe((folderNode) => {
|
||||
expect(folderNode.value.id).toBe('fake-node');
|
||||
done();
|
||||
});
|
||||
documentList.onNodeDblClick({ entry: { id: 'fake-node', isFolder: true } });
|
||||
});
|
||||
|
||||
it('should set no permission when getFolderNode fails with 403', (done) => {
|
||||
const error = { message: '{ "error": { "statusCode": 403 } }' };
|
||||
spyOn(documentListService, 'getFolderNode').and.returnValue(throwError(error));
|
||||
|
@@ -539,9 +539,18 @@ export class DocumentListComponent implements OnInit, OnChanges, OnDestroy, Afte
|
||||
|
||||
updateFolderData(node: MinimalNodeEntity): void {
|
||||
this.resetNewFolderPagination();
|
||||
this.currentFolderId = node.entry.id;
|
||||
this.currentFolderId = this.getNodeFolderDestinationId(node);
|
||||
this.folderChange.emit(new NodeEntryEvent({ id: this.currentFolderId }));
|
||||
this.reload();
|
||||
this.folderChange.emit(new NodeEntryEvent(node.entry));
|
||||
}
|
||||
|
||||
private getNodeFolderDestinationId(node: MinimalNodeEntity) {
|
||||
return this.isLinkFolder(node) ? node.entry.properties['cm:destination'] : node.entry.id;
|
||||
}
|
||||
|
||||
private isLinkFolder(node: MinimalNodeEntity) {
|
||||
return node.entry.nodeType === 'app:folderlink' && node.entry.properties &&
|
||||
node.entry.properties['cm:destination'];
|
||||
}
|
||||
|
||||
updateCustomSourceData(nodeId: string): void {
|
||||
|
@@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
import { DataColumn, DataRow, DataSorting, ContentService } from '@alfresco/adf-core';
|
||||
import { FileNode, FolderNode, SmartFolderNode } from './../../mock';
|
||||
import { FileNode, FolderNode, SmartFolderNode, RuleFolderNode, LinkFolderNode } from './../../mock';
|
||||
import { DocumentListService } from './../services/document-list.service';
|
||||
import { ShareDataRow } from './share-data-row.model';
|
||||
import { ShareDataTableAdapter } from './share-datatable-adapter';
|
||||
@@ -222,6 +222,32 @@ describe('ShareDataTableAdapter', () => {
|
||||
expect(value).toContain(`svg`);
|
||||
});
|
||||
|
||||
it('should resolve link folder icon', () => {
|
||||
spyOn(documentListService, 'getMimeTypeIcon').and.returnValue(`assets/images/ft_ic_folder_shortcut_link.svg`);
|
||||
|
||||
let adapter = new ShareDataTableAdapter(documentListService, null, null);
|
||||
|
||||
let row = new ShareDataRow(new LinkFolderNode(), documentListService, null);
|
||||
let col = <DataColumn> { type: 'folder', key: '$thumbnail' };
|
||||
|
||||
let value = adapter.getValue(row, col);
|
||||
expect(value).toContain(`assets/images/ft_ic_folder_shortcut_link`);
|
||||
expect(value).toContain(`svg`);
|
||||
});
|
||||
|
||||
it('should resolve rule folder icon', () => {
|
||||
spyOn(documentListService, 'getMimeTypeIcon').and.returnValue(`assets/images/ft_ic_folder_rule.svg`);
|
||||
|
||||
let adapter = new ShareDataTableAdapter(documentListService, null, null);
|
||||
|
||||
let row = new ShareDataRow(new RuleFolderNode(), documentListService, null);
|
||||
let col = <DataColumn> { type: 'folder', key: '$thumbnail' };
|
||||
|
||||
let value = adapter.getValue(row, col);
|
||||
expect(value).toContain(`assets/images/ft_ic_folder_rule`);
|
||||
expect(value).toContain(`svg`);
|
||||
});
|
||||
|
||||
it('should resolve file thumbnail', () => {
|
||||
let imageUrl = 'http://<addresss>';
|
||||
let adapter = new ShareDataTableAdapter(documentListService, null, null);
|
||||
|
@@ -104,11 +104,7 @@ export class ShareDataTableAdapter implements DataTableAdapter {
|
||||
const node = (<ShareDataRow> row).node;
|
||||
|
||||
if (node.entry.isFolder) {
|
||||
if (this.isSmartFolder(node)) {
|
||||
return this.documentListService.getMimeTypeIcon('smartFolder');
|
||||
} else {
|
||||
return this.documentListService.getMimeTypeIcon('folder');
|
||||
}
|
||||
return this.getFolderIcon(node);
|
||||
}
|
||||
|
||||
if (node.entry.isFile) {
|
||||
@@ -167,12 +163,35 @@ export class ShareDataTableAdapter implements DataTableAdapter {
|
||||
this.imageResolver = resolver;
|
||||
}
|
||||
|
||||
private getFolderIcon(node: any) {
|
||||
if (this.isSmartFolder(node)) {
|
||||
return this.documentListService.getMimeTypeIcon('smartFolder');
|
||||
} else if (this.isRuleFolder(node)) {
|
||||
return this.documentListService.getMimeTypeIcon('ruleFolder');
|
||||
} else if (this.isALinkFolder(node)) {
|
||||
return this.documentListService.getMimeTypeIcon('linkFolder');
|
||||
} else {
|
||||
return this.documentListService.getMimeTypeIcon('folder');
|
||||
}
|
||||
}
|
||||
|
||||
isSmartFolder(node: any) {
|
||||
let nodeAspects = this.getNodeAspectNames(node);
|
||||
return nodeAspects.indexOf('smf:customConfigSmartFolder') > -1 ||
|
||||
(nodeAspects.indexOf('smf:systemConfigSmartFolder') > -1);
|
||||
}
|
||||
|
||||
isRuleFolder(node: any) {
|
||||
let nodeAspects = this.getNodeAspectNames(node);
|
||||
return nodeAspects.indexOf('rule:rules') > -1 ||
|
||||
(nodeAspects.indexOf('rule:rules') > -1);
|
||||
}
|
||||
|
||||
isALinkFolder(node: any) {
|
||||
const nodeType = node.entry ? node.entry.nodeType : node.nodeType;
|
||||
return nodeType === 'app:folderlink';
|
||||
}
|
||||
|
||||
private getNodeAspectNames(node: any): any[] {
|
||||
return node.entry && node.entry.aspectNames ? node.entry.aspectNames : node.aspectNames ? node.aspectNames : [];
|
||||
}
|
||||
|
@@ -71,3 +71,29 @@ export class SmartFolderNode extends NodeMinimalEntry {
|
||||
this.entry.aspectNames = ['smf:systemConfigSmartFolder'];
|
||||
}
|
||||
}
|
||||
|
||||
export class RuleFolderNode extends NodeMinimalEntry {
|
||||
constructor(name?: string) {
|
||||
super();
|
||||
this.entry = new NodeMinimal();
|
||||
this.entry.id = 'rule-folder-id';
|
||||
this.entry.isFile = false;
|
||||
this.entry.isFolder = true;
|
||||
this.entry.name = name;
|
||||
this.entry.path = new PathInfoEntity();
|
||||
this.entry.aspectNames = ['rule:rules'];
|
||||
}
|
||||
}
|
||||
|
||||
export class LinkFolderNode extends NodeMinimalEntry {
|
||||
constructor(name?: string) {
|
||||
super();
|
||||
this.entry = new NodeMinimal();
|
||||
this.entry.id = 'link-folder-id';
|
||||
this.entry.isFile = false;
|
||||
this.entry.isFolder = true;
|
||||
this.entry.nodeType = 'app:folderlink';
|
||||
this.entry.name = name;
|
||||
this.entry.path = new PathInfoEntity();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user