From a6e61ac3a48d75623e09b48997b0b6343a3929d1 Mon Sep 17 00:00:00 2001 From: davidcanonieto Date: Fri, 14 Sep 2018 17:54:22 +0100 Subject: [PATCH] [ADF-2921] New Icon for Smart Folders (#3747) * [ADF-2921] New Icon for Smart Folders * [ADF-2921] Smart folder icon now matches current theme * [ADF-2921] Unit tests added and fixed * [ADF-2921] Improved logic on Share Datatable Adapter --- .../data/share-datatable-adapter.spec.ts | 15 ++++++++++++++- .../data/share-datatable-adapter.ts | 11 ++++++++++- .../models/document-library.model.ts | 1 + .../mock/document-library.model.mock.ts | 14 ++++++++++++++ lib/core/assets/images/ft_ic_smart_folder.svg | 16 ++++++++++++++++ lib/core/services/thumbnail.service.ts | 1 + 6 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 lib/core/assets/images/ft_ic_smart_folder.svg diff --git a/lib/content-services/document-list/data/share-datatable-adapter.spec.ts b/lib/content-services/document-list/data/share-datatable-adapter.spec.ts index 7cdd2cb4be..98797fdf73 100644 --- a/lib/content-services/document-list/data/share-datatable-adapter.spec.ts +++ b/lib/content-services/document-list/data/share-datatable-adapter.spec.ts @@ -16,7 +16,7 @@ */ import { DataColumn, DataRow, DataSorting, ContentService } from '@alfresco/adf-core'; -import { FileNode, FolderNode } from './../../mock'; +import { FileNode, FolderNode, SmartFolderNode } from './../../mock'; import { DocumentListService } from './../services/document-list.service'; import { ShareDataRow } from './share-data-row.model'; import { ShareDataTableAdapter } from './share-datatable-adapter'; @@ -209,6 +209,19 @@ describe('ShareDataTableAdapter', () => { expect(value).toContain(`svg`); }); + it('should resolve smart folder icon', () => { + spyOn(documentListService, 'getMimeTypeIcon').and.returnValue(`assets/images/ft_ic_smart_folder.svg`); + + let adapter = new ShareDataTableAdapter(documentListService, null, null); + + let row = new ShareDataRow(new SmartFolderNode(), documentListService, null); + let col = { type: 'folder', key: '$thumbnail' }; + + let value = adapter.getValue(row, col); + expect(value).toContain(`assets/images/ft_ic_smart_folder`); + expect(value).toContain(`svg`); + }); + it('should resolve file thumbnail', () => { let imageUrl = 'http://'; let adapter = new ShareDataTableAdapter(documentListService, null, null); diff --git a/lib/content-services/document-list/data/share-datatable-adapter.ts b/lib/content-services/document-list/data/share-datatable-adapter.ts index f196150075..580c90f82b 100644 --- a/lib/content-services/document-list/data/share-datatable-adapter.ts +++ b/lib/content-services/document-list/data/share-datatable-adapter.ts @@ -104,7 +104,11 @@ export class ShareDataTableAdapter implements DataTableAdapter { const node = ( row).node; if (node.entry.isFolder) { - return this.documentListService.getMimeTypeIcon('folder'); + if (this.isSmartFolder(node)) { + return this.documentListService.getMimeTypeIcon('smartFolder'); + } else { + return this.documentListService.getMimeTypeIcon('folder'); + } } if (node.entry.isFile) { @@ -163,6 +167,11 @@ export class ShareDataTableAdapter implements DataTableAdapter { this.imageResolver = resolver; } + isSmartFolder(node: any) { + return node.entry.aspectNames.indexOf('smf:customConfigSmartFolder') > -1 || + (node.entry.aspectNames.indexOf('smf:systemConfigSmartFolder') > -1); + } + private sortRows(rows: DataRow[], sorting: DataSorting) { if (this.sortingMode === 'server') { return; diff --git a/lib/content-services/document-list/models/document-library.model.ts b/lib/content-services/document-list/models/document-library.model.ts index b1ab7253b6..f60f57f8c1 100644 --- a/lib/content-services/document-list/models/document-library.model.ts +++ b/lib/content-services/document-list/models/document-library.model.ts @@ -54,6 +54,7 @@ export class NodeMinimal implements MinimalNodeEntryEntity { content: ContentInfo; path: PathInfoEntity; properties: NodeProperties = {}; + aspectNames: string[]; } export class UserInfo { diff --git a/lib/content-services/mock/document-library.model.mock.ts b/lib/content-services/mock/document-library.model.mock.ts index 013b23e6dd..2a4b5209d9 100644 --- a/lib/content-services/mock/document-library.model.mock.ts +++ b/lib/content-services/mock/document-library.model.mock.ts @@ -55,5 +55,19 @@ export class FolderNode extends NodeMinimalEntry { this.entry.isFolder = true; this.entry.name = name; this.entry.path = new PathInfoEntity(); + this.entry.aspectNames = ['cm:folder']; + } +} + +export class SmartFolderNode extends NodeMinimalEntry { + constructor(name?: string) { + super(); + this.entry = new NodeMinimal(); + this.entry.id = 'smart-folder-id'; + this.entry.isFile = false; + this.entry.isFolder = true; + this.entry.name = name; + this.entry.path = new PathInfoEntity(); + this.entry.aspectNames = ['smf:systemConfigSmartFolder']; } } diff --git a/lib/core/assets/images/ft_ic_smart_folder.svg b/lib/core/assets/images/ft_ic_smart_folder.svg new file mode 100644 index 0000000000..8d88dbfe1d --- /dev/null +++ b/lib/core/assets/images/ft_ic_smart_folder.svg @@ -0,0 +1,16 @@ + + + + filetype/folder + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff --git a/lib/core/services/thumbnail.service.ts b/lib/core/services/thumbnail.service.ts index cb0a5d41bf..0b194fdc0d 100644 --- a/lib/core/services/thumbnail.service.ts +++ b/lib/core/services/thumbnail.service.ts @@ -145,6 +145,7 @@ export class ThumbnailService { 'application/wordperfect': './assets/images/ft_ic_document.svg', 'application/x-cpio': './assets/images/ft_ic_document.svg', 'folder': './assets/images/ft_ic_folder.svg', + 'smartFolder': './assets/images/ft_ic_smart_folder.svg', 'disable/folder': './assets/images/ft_ic_folder_disable.svg', 'selected': './assets/images/ft_ic_selected.svg' };