mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-07-24 17:32:15 +00:00
[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:
@@ -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');
|
||||
}));
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
@@ -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(() => ({
|
||||
|
@@ -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';
|
||||
|
||||
|
Reference in New Issue
Block a user