From d019dab14734020f73ccc0cba55f28881547a9ff Mon Sep 17 00:00:00 2001 From: Cilibiu Bogdan Date: Fri, 27 Oct 2017 00:54:49 +0300 Subject: [PATCH] [ADF-1794] Document List - users can see sites they are not members of (#2552) * member sites * SitePaging type --- demo-shell-ng2/src/app.config.json | 21 ++++++++++++++ .../files/custom-sources.component.ts | 1 + docs/document-list.component.md | 16 +++++++++++ .../document-list.component.spec.ts | 10 ++++++- .../src/components/document-list.component.ts | 28 +++++++++++++++++-- .../src/models/preset.model.ts | 21 ++++++++++++++ 6 files changed, 94 insertions(+), 3 deletions(-) diff --git a/demo-shell-ng2/src/app.config.json b/demo-shell-ng2/src/app.config.json index 658e97d439..3ac95a6105 100644 --- a/demo-shell-ng2/src/app.config.json +++ b/demo-shell-ng2/src/app.config.json @@ -138,6 +138,27 @@ "sortable": true } ], + "-mysites-": [ + { + "key": "$thumbnail", + "type": "image", + "srTitle": "ADF-DOCUMENT-LIST.LAYOUT.THUMBNAIL", + "sortable": false + }, + { + "key": "title", + "type": "text", + "title": "ADF-DOCUMENT-LIST.LAYOUT.NAME", + "cssClass": "full-width ellipsis-cell", + "sortable": true + }, + { + "key": "visibility", + "type": "text", + "title": "ADF-DOCUMENT-LIST.LAYOUT.STATUS", + "sortable": true + } + ], "-favorites-": [ { "key": "$thumbnail", diff --git a/demo-shell-ng2/src/app/components/files/custom-sources.component.ts b/demo-shell-ng2/src/app/components/files/custom-sources.component.ts index b1ac07fc3d..e767d9d423 100644 --- a/demo-shell-ng2/src/app/components/files/custom-sources.component.ts +++ b/demo-shell-ng2/src/app/components/files/custom-sources.component.ts @@ -35,6 +35,7 @@ export class CustomSourcesComponent { { title: 'Recent', value: '-recent-' }, { title: 'Shared Links', value: '-sharedlinks-' }, { title: 'Sites', value: '-sites-' }, + { title: 'My Sites', value: '-mysites-' }, { title: 'Trashcan', value: '-trashcan-' }, { title: 'Root', value: '-root-' }, { title: 'My', value: '-my-' }, diff --git a/docs/document-list.component.md b/docs/document-list.component.md index c5f73fb30b..6be203282e 100644 --- a/docs/document-list.component.md +++ b/docs/document-list.component.md @@ -157,6 +157,7 @@ The DocumentList component also provides support for the following reserved alia - `-trashcan-`, - `-sharedlinks-` - `-sites-` +- `-mysites-` - `-favorites-` - `-recent-` @@ -230,6 +231,20 @@ Default layout: - Title - Status +__My Sites__ + +```html + + +``` + +Default layout: + +- Icon +- Title +- Status + __Favorites__ ```html @@ -495,6 +510,7 @@ This column is used to display a clickable location link pointing to the parent You are going to use it with custom navigation or when displaying content from the sources like: - Sites +- My Sites - Shared Links - Recent Files - Favorites 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 4fa133d5e0..bf6a29dbde 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 @@ -892,7 +892,7 @@ describe('DocumentList', () => { }); it('should not perform navigation for virtual sources', () => { - const sources = ['-trashcan-', '-sharedlinks-', '-sites-', '-favorites-', '-recent-']; + const sources = ['-trashcan-', '-sharedlinks-', '-sites-', '-mysites-', '-favorites-', '-recent-']; const node = new FolderNode('folder'); documentList.currentFolderId = 'node-id'; @@ -927,6 +927,14 @@ describe('DocumentList', () => { expect(sitesApi.getSites).toHaveBeenCalled(); }); + it('should fetch user membership sites', () => { + const peopleApi = apiService.getInstance().core.peopleApi; + spyOn(peopleApi, 'getSiteMembership').and.returnValue(Promise.resolve()); + + documentList.loadFolderByNodeId('-mysites-'); + expect(peopleApi.getSiteMembership).toHaveBeenCalled(); + }); + it('should fetch favorites', () => { const favoritesApi = apiService.getInstance().core.favoritesApi; spyOn(favoritesApi, 'getFavorites').and.returnValue(Promise.resolve(null)); 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 2ff99bcfcd..5333b4be8d 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 @@ -19,7 +19,7 @@ import { AfterContentInit, Component, ContentChild, ElementRef, EventEmitter, HostListener, Input, NgZone, OnChanges, OnInit, Output, SimpleChanges, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core'; -import { DeletedNodesPaging, MinimalNodeEntity, MinimalNodeEntryEntity, NodePaging, Pagination, PersonEntry } from 'alfresco-js-api'; +import { DeletedNodesPaging, MinimalNodeEntity, MinimalNodeEntryEntity, NodePaging, Pagination, PersonEntry, SitePaging } from 'alfresco-js-api'; import { AlfrescoApiService, AppConfigService, DataColumnListComponent, UserPreferencesService } from 'ng2-alfresco-core'; import { DataCellEvent, DataColumn, DataRowActionEvent, DataSorting, DataTableComponent, ObjectDataColumn } from 'ng2-alfresco-datatable'; import { Observable, Subject } from 'rxjs/Rx'; @@ -420,6 +420,8 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni this.loadSharedLinks(); } else if (nodeId === '-sites-') { this.loadSites(); + } else if (nodeId === '-mysites-') { + this.loadMemberSites(); } else if (nodeId === '-favorites-') { this.loadFavorites(); } else if (nodeId === '-recent-') { @@ -513,6 +515,28 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni }); } + private loadMemberSites(): void { + const options = { + include: [ 'properties' ], + maxItems: this.pageSize, + skipCount: this.skipCount + }; + + this.apiService.peopleApi.getSiteMembership('-me-', options).then((result: SitePaging) => { + let page: NodePaging = { + list: { + entries: result.list.entries + .map(({ entry: { site }}: any) => ({ + entry: site + })), + pagination: result.list.pagination + } + }; + + this.onPageLoaded(page); + }); + } + private loadFavorites(): void { const options = { maxItems: this.pageSize, @@ -773,7 +797,7 @@ export class DocumentListComponent implements OnInit, OnChanges, AfterContentIni } isCustomSource(folderId: string): boolean { - const sources = ['-trashcan-', '-sharedlinks-', '-sites-', '-favorites-', '-recent-']; + const sources = ['-trashcan-', '-sharedlinks-', '-sites-', '-mysites-', '-favorites-', '-recent-']; if (sources.indexOf(folderId) > -1) { return true; diff --git a/ng2-components/ng2-alfresco-documentlist/src/models/preset.model.ts b/ng2-components/ng2-alfresco-documentlist/src/models/preset.model.ts index 112f7bc3a8..ab73b11d20 100644 --- a/ng2-components/ng2-alfresco-documentlist/src/models/preset.model.ts +++ b/ng2-components/ng2-alfresco-documentlist/src/models/preset.model.ts @@ -78,6 +78,27 @@ export let presetsDefaultModel = { sortable: true } ], + '-mysites-': [ + { + key: '$thumbnail', + type: 'image', + srTitle: 'ADF-DOCUMENT-LIST.LAYOUT.THUMBNAIL', + sortable: false + }, + { + key: 'title', + type: 'text', + title: 'ADF-DOCUMENT-LIST.LAYOUT.NAME', + cssClass: 'full-width ellipsis-cell', + sortable: true + }, + { + key: 'visibility', + type: 'text', + title: 'ADF-DOCUMENT-LIST.LAYOUT.STATUS', + sortable: true + } + ], '-favorites-': [ { key: '$thumbnail',