[ACA-903] Working copy is incorrectly displayed for a file locked for… (#110)

* [ACA-903] Working copy is incorrectly displayed for a file locked for offline editing

-use locked icon for locked nodes
-do not allow locked nodes to be selected

* [ACA-903] fix failing tests
This commit is contained in:
suzanadirla
2017-12-05 19:17:26 +02:00
committed by Cilibiu Bogdan
parent e1c027ba67
commit 38b4a83673
4 changed files with 85 additions and 13 deletions

View File

@@ -98,8 +98,10 @@
[contentActions]="false" [contentActions]="false"
[navigate]="false" [navigate]="false"
[selectionMode]="'multiple'" [selectionMode]="'multiple'"
[imageResolver]="imageResolver"
(node-dblclick)="onNodeDoubleClick($event.detail?.node?.entry)"> (node-dblclick)="onNodeDoubleClick($event)"
(node-select)="onNodeSelect($event)">
<data-columns> <data-columns>
<data-column <data-column

View File

@@ -262,7 +262,7 @@ describe('FilesComponent', () => {
it('calls getNode api with node id', () => { it('calls getNode api with node id', () => {
component.fetchNodes('nodeId'); component.fetchNodes('nodeId');
expect(nodesApi.getNodeChildren).toHaveBeenCalledWith('nodeId', {}); expect(nodesApi.getNodeChildren).toHaveBeenCalledWith('nodeId', jasmine.any(Object));
}); });
}); });
@@ -303,7 +303,14 @@ describe('FilesComponent', () => {
spyOn(router, 'navigate').and.stub(); spyOn(router, 'navigate').and.stub();
node.isFile = true; node.isFile = true;
component.onNodeDoubleClick(<any> node); const event: any = {
detail: {
node: {
entry: node
}
}
};
component.onNodeDoubleClick(event);
expect(router.navigate).toHaveBeenCalledWith(['/preview', node.id]); expect(router.navigate).toHaveBeenCalledWith(['/preview', node.id]);
}); });
@@ -312,9 +319,17 @@ describe('FilesComponent', () => {
spyOn(component, 'navigate').and.stub(); spyOn(component, 'navigate').and.stub();
node.isFolder = true; node.isFolder = true;
component.onNodeDoubleClick(<any> node);
expect(component.navigate).toHaveBeenCalled(); const event: any = {
detail: {
node: {
entry: node
}
}
};
component.onNodeDoubleClick(event);
expect(component.navigate).toHaveBeenCalledWith(node.id);
}); });
}); });

View File

@@ -16,13 +16,14 @@
*/ */
import { Observable, Subscription } from 'rxjs/Rx'; import { Observable, Subscription } from 'rxjs/Rx';
import { Component, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core'; import { Component, OnInit, OnDestroy, ChangeDetectorRef, ViewChild } from '@angular/core';
import { Router, ActivatedRoute, Params } from '@angular/router'; import { Router, ActivatedRoute, Params } from '@angular/router';
import { MinimalNodeEntity, MinimalNodeEntryEntity, PathElementEntity, NodePaging, PathElement } from 'alfresco-js-api'; import { MinimalNodeEntity, MinimalNodeEntryEntity, PathElementEntity, NodePaging, PathElement } from 'alfresco-js-api';
import { import {
UploadService, FileUploadEvent, NodesApiService, UploadService, FileUploadEvent, NodesApiService,
ContentService, AlfrescoApiService, UserPreferencesService ContentService, AlfrescoApiService, UserPreferencesService
} from '@alfresco/adf-core'; } from '@alfresco/adf-core';
import { DocumentListComponent, ShareDataRow } from '@alfresco/adf-content-services';
import { BrowsingFilesService } from '../../common/services/browsing-files.service'; import { BrowsingFilesService } from '../../common/services/browsing-files.service';
import { ContentManagementService } from '../../common/services/content-management.service'; import { ContentManagementService } from '../../common/services/content-management.service';
@@ -34,6 +35,9 @@ import { PageComponent } from '../page.component';
templateUrl: './files.component.html' templateUrl: './files.component.html'
}) })
export class FilesComponent extends PageComponent implements OnInit, OnDestroy { export class FilesComponent extends PageComponent implements OnInit, OnDestroy {
@ViewChild(DocumentListComponent)
documentList: DocumentListComponent;
private routeData: any = {}; private routeData: any = {};
isValidPath = true; isValidPath = true;
@@ -105,7 +109,13 @@ export class FilesComponent extends PageComponent implements OnInit, OnDestroy {
} }
fetchNodes(parentNodeId?: string, options: any = {}): Observable<NodePaging> { fetchNodes(parentNodeId?: string, options: any = {}): Observable<NodePaging> {
return this.nodesApi.getNodeChildren(parentNodeId, options); const defaults = {
include: [ 'isLocked' ]
};
const queryOptions = Object.assign(defaults, options);
return this.nodesApi.getNodeChildren(parentNodeId, queryOptions);
} }
navigate(nodeId: string = null) { navigate(nodeId: string = null) {
@@ -120,14 +130,50 @@ export class FilesComponent extends PageComponent implements OnInit, OnDestroy {
}); });
} }
onNodeDoubleClick(node: MinimalNodeEntryEntity) { onNodeDoubleClick(event) {
if (node) { if (!!event.detail && !!event.detail.node) {
if (node.isFolder) {
this.navigate(node.id); const node: MinimalNodeEntryEntity = event.detail.node.entry;
if (node) {
if (node.isFolder) {
this.navigate(node.id);
}
if (node.isLocked) {
event.preventDefault();
} else if (node.isFile) {
this.router.navigate(['/preview', node.id]);
}
} }
if (node.isFile) { }
this.router.navigate(['/preview', node.id]); }
onNodeSelect(event) {
if (!!event.detail && !!event.detail.node) {
const node: MinimalNodeEntryEntity = event.detail.node.entry;
if (node && node.isLocked) {
this.unSelectLockedNodes();
}
}
}
unSelectLockedNodes() {
this.documentList.selection = this.documentList.selection.filter(item => !item.entry.isLocked);
const dataTable = this.documentList.dataTable;
if (dataTable && dataTable.data) {
const rows = dataTable.data.getRows();
if (rows && rows.length > 0) {
rows.forEach(r => {
if (r.getValue('isLocked')) {
r.isSelected = false;
}
});
} }
} }
} }
@@ -267,4 +313,13 @@ export class FilesComponent extends PageComponent implements OnInit, OnDestroy {
} }
return false; return false;
} }
private imageResolver(row: ShareDataRow): string | null {
const entry: MinimalNodeEntryEntity = row.node.entry;
if (entry.isLocked) {
return '/assets/images/ic_lock_black_24dp_1x.png';
}
return null;
}
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 B