#9 'Delete' action support for document nodes

This commit is contained in:
Denys Vuika
2016-05-31 11:20:25 +01:00
parent 919eb14de7
commit 0b664f1bb2
12 changed files with 53 additions and 20 deletions

View File

@@ -194,6 +194,7 @@ All document actions with `type="menu"` are rendered as a dropdown menu as on th
The following action handlers are provided out-of-box:
- Download
- Delete
All system handler names are case-insensitive, `handler="download"` and `handler="DOWNLOAD"`
will trigger the same `download` action.

View File

@@ -106,6 +106,12 @@ import {
title="{{'DOCUMENT_LIST.ACTIONS.DOCUMENT.CUSTOM' | translate}}"
(execute)="myCustomAction1($event)">
</content-action>
<content-action
target="document"
type="menu"
title="{{'DOCUMENT_LIST.ACTIONS.DOCUMENT.DELETE' | translate}}"
handler="delete">
</content-action>
</content-actions>
</alfresco-document-list>
</div>

View File

@@ -14,16 +14,14 @@ System.config({
format: 'register',
map: Object.keys(window.__karma__.files).filter(onlyAppFiles).reduce(createPathRecords, {})
},
'ng2-alfresco-core/dist': {
defaultExtension: 'js'
},
'rxjs': {
defaultExtension: 'js'
}
'ng2-alfresco-core/dist': { defaultExtension: 'js' },
'rxjs': { defaultExtension: 'js' },
'ng2-translate': { defaultExtension: 'js' }
},
map: {
'ng2-alfresco-core/dist': '/base/node_modules/ng2-alfresco-core/dist',
'rxjs': '/base/node_modules/rxjs'
'rxjs': '/base/node_modules/rxjs',
'ng2-translate': '/base/node_modules/ng2-translate/bundles'
}
});

View File

@@ -17,6 +17,7 @@ module.exports = function (config) {
{pattern: 'node_modules/angular2/bundles/http.dev.js', included: true, watched: true},
{pattern: 'node_modules/alfresco-core-rest-api/bundle.js', included: true, watched: false},
{pattern: 'node_modules/ng2-alfresco-core/dist/**/*.js', included: false, served: true, watched: false},
{pattern: 'node_modules/ng2-translate/bundles/ng2-translate.js', included: true, watched: false},
{pattern: 'karma-test-shim.js', included: true, watched: true},

View File

@@ -56,10 +56,9 @@
"reflect-metadata": "0.1.2",
"rxjs": "5.0.0-beta.2",
"systemjs": "0.19.26",
"zone.js": "^0.6.12"
},
"peerDependencies": {
"angular2": "2.0.0-beta.15"
"zone.js": "^0.6.12",
"alfresco-core-rest-api": "^0.1.0",
"ng2-translate": "^1.11.3"
},
"devDependencies": {
"copyfiles": "^0.2.1",

View File

@@ -15,7 +15,6 @@
* limitations under the License.
*/
import {Http} from 'angular2/http';
import {Observable} from 'rxjs/Observable';
import {AlfrescoService} from '../../src/services/alfresco.service';
import {AlfrescoSettingsService} from 'ng2-alfresco-core/dist/ng2-alfresco-core';
@@ -25,10 +24,9 @@ export class AlfrescoServiceMock extends AlfrescoService {
_folderToReturn: any = {};
constructor(
http: Http = null,
settings: AlfrescoSettingsService = null
) {
super(http, settings);
super(settings);
}
getFolder(folder: string) {

View File

@@ -247,7 +247,7 @@ export class DocumentList implements OnInit, AfterViewChecked, AfterContentInit
*/
executeContentAction(node: MinimalNodeEntity, action: ContentActionModel) {
if (action) {
action.handler(node);
action.handler(node, this);
}
}

View File

@@ -34,5 +34,5 @@ export class ContentActionModel {
}
export interface ContentActionHandler {
(obj: any): any;
(obj: any, target?: any): any;
}

View File

@@ -16,7 +16,7 @@
*/
import { Injectable } from 'angular2/core';
import { Http, Response } from 'angular2/http';
import { Response } from 'angular2/http';
import { Observable } from 'rxjs/Rx';
import { NodePaging, MinimalNodeEntity } from './../models/document-library.model';
import { AlfrescoSettingsService } from 'ng2-alfresco-core/dist/ng2-alfresco-core';
@@ -32,7 +32,6 @@ export class AlfrescoService {
private _baseUrlPath: string = '/alfresco/api/-default-/public/alfresco/versions/1';
constructor(
private http: Http,
private settings: AlfrescoSettingsService) {
}
@@ -71,6 +70,13 @@ export class AlfrescoService {
return apiInstance.getNodeChildren(nodeId, opts);
}
deleteNode(nodeId: string) {
let client = this.getAlfrescoClient();
let nodesApi = new AlfrescoApi.NodesApi(client);
let opts = {};
return Observable.fromPromise(nodesApi.deleteNode(nodeId, opts));
}
/**
* Gets the folder node with the content.
* @param folder Path to folder.

View File

@@ -42,24 +42,31 @@ export class DocumentActionsService {
}
}
canExecuteAction(obj: any): boolean {
return this._alfrescoService && obj && !obj.isFolder;
}
private setupActionHandlers() {
this.handlers['download'] = this.download.bind(this);
this.handlers['delete'] = this.deleteNode.bind(this);
// todo: just for dev/demo purposes, to be replaced with real actions
// TODO: for demo purposes only, will be removed during future revisions
this.handlers['system1'] = this.handleStandardAction1.bind(this);
this.handlers['system2'] = this.handleStandardAction2.bind(this);
}
// TODO: for demo purposes only, will be removed during future revisions
private handleStandardAction1(obj: any) {
window.alert('standard document action 1');
}
// TODO: for demo purposes only, will be removed during future revisions
private handleStandardAction2(obj: any) {
window.alert('standard document action 2');
}
private download(obj: any) {
if (this._alfrescoService && obj && !obj.isFolder) {
if (this.canExecuteAction(obj)) {
let link = document.createElement('a');
document.body.appendChild(link);
link.setAttribute('download', 'download');
@@ -68,4 +75,14 @@ export class DocumentActionsService {
document.body.removeChild(link);
}
}
private deleteNode(obj: any, target?: any) {
if (this.canExecuteAction(obj) && obj.entry && obj.entry.id) {
this._alfrescoService.deleteNode(obj.entry.id).subscribe(() => {
if (target && typeof target.reload === 'function') {
target.reload();
}
});
}
}
}