[ADF-2340] add trashcan in demo shell and definitely delete in delete directive (#2976)

* add trashcan in demo shell and definetly delete in delete directive

* fix delte directive test
This commit is contained in:
Eugenio Romano
2018-02-22 12:33:42 +00:00
committed by GitHub
parent 9bb2a0ae19
commit 6e14ff5470
12 changed files with 298 additions and 31 deletions

View File

@@ -36,7 +36,8 @@ class TestComponent {
@Component({
template: `
<div [adf-node-permission]="selection" [adf-delete]="selection"
<div [adf-node-permission]="selection"
[adf-delete]="selection"
(delete)="done()">
</div>`
})
@@ -46,13 +47,33 @@ class TestWithPermissionsComponent {
done = jasmine.createSpy('done');
}
@Component({
template: `
delete permanent
<div id="delete-permanent"
[adf-delete]="selection"
[permanent]="permanent"
(delete)="done()">
</div>`
})
class TestDeletePermanentComponent {
selection = [];
permanent = true;
done = jasmine.createSpy('done');
}
describe('NodeDeleteDirective', () => {
let fixture: ComponentFixture<TestComponent>;
let fixtureWithPermissions: ComponentFixture<TestWithPermissionsComponent>;
let fixtureWithPermanentComponent: ComponentFixture<TestDeletePermanentComponent>;
let element: DebugElement;
let elementWithPermissions: DebugElement;
let elementWithPermanentDelete: DebugElement;
let component: TestComponent;
let componentWithPermissions: TestWithPermissionsComponent;
let componentWithPermanentDelete: TestDeletePermanentComponent;
let alfrescoApi: AlfrescoApiService;
let notification: NotificationService;
let nodeApi;
@@ -62,17 +83,23 @@ describe('NodeDeleteDirective', () => {
declarations: [
TestComponent,
TestWithPermissionsComponent
TestWithPermissionsComponent,
TestDeletePermanentComponent
]
})
.compileComponents()
.then(() => {
fixture = TestBed.createComponent(TestComponent);
fixtureWithPermissions = TestBed.createComponent(TestWithPermissionsComponent);
fixtureWithPermanentComponent = TestBed.createComponent(TestDeletePermanentComponent);
component = fixture.componentInstance;
componentWithPermissions = fixtureWithPermissions.componentInstance;
componentWithPermanentDelete = fixtureWithPermanentComponent.componentInstance;
element = fixture.debugElement.query(By.directive(NodeDeleteDirective));
elementWithPermissions = fixtureWithPermissions.debugElement.query(By.directive(NodeDeleteDirective));
elementWithPermanentDelete = fixtureWithPermanentComponent.debugElement.query(By.directive(NodeDeleteDirective));
alfrescoApi = TestBed.get(AlfrescoApiService);
nodeApi = alfrescoApi.getInstance().nodes;
@@ -268,5 +295,43 @@ describe('NodeDeleteDirective', () => {
expect(elementWithPermissions.nativeElement.disabled).toEqual(false);
}));
describe('Permanent', () => {
it('should call the api with permamnet delete option if permanent directive input is true', fakeAsync(() => {
let deleteApi = spyOn(nodeApi, 'deleteNode').and.returnValue(Promise.resolve());
fixtureWithPermanentComponent.detectChanges();
componentWithPermanentDelete.selection = [
{ entry: { id: '1', name: 'name1'}
];
fixtureWithPermanentComponent.detectChanges();
elementWithPermanentDelete.triggerEventHandler('click', null);
tick();
expect(deleteApi).toHaveBeenCalledWith('1', { permanent: true });
}));
it('should call the traschan api if permanent directive input is true and the file is already in the trashcan ', fakeAsync(() => {
let deleteApi = spyOn(nodeApi, 'purgeDeletedNode').and.returnValue(Promise.resolve());
fixtureWithPermanentComponent.detectChanges();
componentWithPermanentDelete.selection = [
{ entry: { id: '1', name: 'name1', archivedAt: 'archived' } }
];
fixtureWithPermanentComponent.detectChanges();
elementWithPermanentDelete.triggerEventHandler('click', null);
tick();
expect(deleteApi).toHaveBeenCalledWith('1');
}));
});
});
});

View File

@@ -18,7 +18,7 @@
/* tslint:disable:no-input-rename */
import { Directive, ElementRef, EventEmitter, HostListener, Input, OnChanges, Output } from '@angular/core';
import { MinimalNodeEntity, MinimalNodeEntryEntity } from 'alfresco-js-api';
import { MinimalNodeEntity, MinimalNodeEntryEntity, DeletedNodeEntity, DeletedNodeMinimalEntry } from 'alfresco-js-api';
import { Observable } from 'rxjs/Observable';
import { AlfrescoApiService } from '../services/alfresco-api.service';
import { NotificationService } from '../services/notification.service';
@@ -28,7 +28,7 @@ import 'rxjs/observable/forkJoin';
import 'rxjs/add/operator/catch';
interface ProcessedNodeData {
entry: MinimalNodeEntryEntity;
entry: MinimalNodeEntryEntity | DeletedNodeMinimalEntry;
status: number;
}
@@ -55,7 +55,7 @@ interface ProcessStatus {
export class NodeDeleteDirective implements OnChanges {
/** Array of nodes to delete. */
@Input('adf-delete')
selection: MinimalNodeEntity[];
selection: MinimalNodeEntity[] | DeletedNodeEntity[];
/** If true then the nodes are deleted immediately rather than being
* put in the trash.
@@ -92,33 +92,38 @@ export class NodeDeleteDirective implements OnChanges {
this.elementRef.nativeElement.disabled = disable;
}
private process(selection: MinimalNodeEntity[]) {
if (!selection.length) {
return;
private process(selection: MinimalNodeEntity[] | DeletedNodeEntity[]) {
if (selection && selection.length) {
const batch = this.getDeleteNodesBatch(selection);
Observable.forkJoin(...batch)
.subscribe((data: ProcessedNodeData[]) => {
const processedItems: ProcessStatus = this.processStatus(data);
this.notify(processedItems);
if (processedItems.someSucceeded) {
this.delete.emit();
}
});
}
const batch = this.getDeleteNodesBatch(selection);
Observable.forkJoin(...batch)
.subscribe((data: ProcessedNodeData[]) => {
const processedItems: ProcessStatus = this.processStatus(data);
this.notify(processedItems);
if (processedItems.someSucceeded) {
this.delete.emit();
}
});
}
private getDeleteNodesBatch(selection: MinimalNodeEntity[]): Observable<ProcessedNodeData>[] {
private getDeleteNodesBatch(selection: any): Observable<ProcessedNodeData>[] {
return selection.map((node) => this.deleteNode(node));
}
private deleteNode(node: MinimalNodeEntity): Observable<ProcessedNodeData> {
private deleteNode(node: MinimalNodeEntity | DeletedNodeEntity): Observable<ProcessedNodeData> {
const id = (<any> node.entry).nodeId || node.entry.id;
const promise = this.alfrescoApiService.getInstance().nodes.deleteNode(id, { permanent: this.permanent });
let promise;
if (node.entry.hasOwnProperty('archivedAt')) {
promise = this.alfrescoApiService.getInstance().nodes.purgeDeletedNode(id);
} else {
promise = this.alfrescoApiService.getInstance().nodes.deleteNode(id, { permanent: this.permanent });
}
return Observable.fromPromise(promise)
.map(() => ({

View File

@@ -23,7 +23,7 @@ import { Observable } from 'rxjs/Observable';
import { ComponentTranslationModel } from '../models/component.model';
import { ObjectUtils } from '../utils/object-utils';
import { LogService } from './log.service';
import { map } from 'rxjs/operators'
import { map } from 'rxjs/operators';
import 'rxjs/observable/forkJoin';
import 'rxjs/add/observable/forkJoin';