update tag list with refresh event emitter when add or remove a tag #1507 (#1754)

This commit is contained in:
Eugenio Romano 2017-03-23 17:51:50 +00:00 committed by Mario Romano
parent e2c879409a
commit 9b36001510
8 changed files with 115 additions and 36 deletions

View File

@ -83,7 +83,7 @@ describe('Test ng2-alfresco-tag Tag actions list', () => {
it('Tag list relative a single node should be rendered', (done) => { it('Tag list relative a single node should be rendered', (done) => {
component.nodeId = 'fake-node-id'; component.nodeId = 'fake-node-id';
component.resultsEmitter.subscribe(() => { component.result.subscribe(() => {
fixture.detectChanges(); fixture.detectChanges();
expect(element.querySelector('#tag_name_0').innerHTML).toBe('test1'); expect(element.querySelector('#tag_name_0').innerHTML).toBe('test1');
@ -109,7 +109,7 @@ describe('Test ng2-alfresco-tag Tag actions list', () => {
it('Tag list click on delete button should delete the tag', (done) => { it('Tag list click on delete button should delete the tag', (done) => {
component.nodeId = 'fake-node-id'; component.nodeId = 'fake-node-id';
component.resultsEmitter.subscribe(() => { component.result.subscribe(() => {
fixture.detectChanges(); fixture.detectChanges();
let deleteButton: any = element.querySelector('#tag_delete_0'); let deleteButton: any = element.querySelector('#tag_delete_0');
@ -142,11 +142,11 @@ describe('Test ng2-alfresco-tag Tag actions list', () => {
fixture.detectChanges(); fixture.detectChanges();
component.addEmitter.subscribe(() => { component.successAdd.subscribe(() => {
done(); done();
}); });
component.resultsEmitter.subscribe(() => { component.result.subscribe(() => {
fixture.detectChanges(); fixture.detectChanges();
let addButton: any = element.querySelector('#add-tag'); let addButton: any = element.querySelector('#add-tag');
@ -173,12 +173,12 @@ describe('Test ng2-alfresco-tag Tag actions list', () => {
fixture.detectChanges(); fixture.detectChanges();
component.addEmitter.subscribe(() => { component.successAdd.subscribe(() => {
expect(component.newTagName).toBe(''); expect(component.newTagName).toBe('');
done(); done();
}); });
component.resultsEmitter.subscribe(() => { component.result.subscribe(() => {
fixture.detectChanges(); fixture.detectChanges();
let addButton: any = element.querySelector('#add-tag'); let addButton: any = element.querySelector('#add-tag');
@ -207,11 +207,37 @@ describe('Test ng2-alfresco-tag Tag actions list', () => {
done(); done();
}); });
it('Add tag should return an error if the tag is already present', (done) => {
component.nodeId = 'fake-node-id';
component.newTagName = 'test1';
fixture.detectChanges();
component.error.subscribe(() => {
done();
});
component.result.subscribe(() => {
fixture.detectChanges();
let addButton: any = element.querySelector('#add-tag');
addButton.click();
});
component.ngOnChanges();
jasmine.Ajax.requests.mostRecent().respondWith({
status: 200,
contentType: 'json',
responseText: dataTag
});
});
it('Add tag should be disabled if the node id is not a correct node', (done) => { it('Add tag should be disabled if the node id is not a correct node', (done) => {
component.nodeId = 'fake-node-id'; component.nodeId = 'fake-node-id';
component.newTagName = 'fake-tag-name'; component.newTagName = 'fake-tag-name';
component.resultsEmitter.subscribe(() => { component.result.subscribe(() => {
let addButton: any = element.querySelector('#add-tag'); let addButton: any = element.querySelector('#add-tag');
expect(addButton.disabled).toEqual(true); expect(addButton.disabled).toEqual(true);
done(); done();
@ -228,7 +254,7 @@ describe('Test ng2-alfresco-tag Tag actions list', () => {
component.nodeId = 'fake-node-id'; component.nodeId = 'fake-node-id';
component.newTagName = 'fake-tag-name'; component.newTagName = 'fake-tag-name';
component.resultsEmitter.subscribe(() => { component.result.subscribe(() => {
fixture.detectChanges(); fixture.detectChanges();
let addButton: any = element.querySelector('#add-tag'); let addButton: any = element.querySelector('#add-tag');

View File

@ -41,10 +41,13 @@ export class TagActionsComponent {
isContextMenu: boolean = false; isContextMenu: boolean = false;
@Output() @Output()
addEmitter: EventEmitter<any> = new EventEmitter(); successAdd: EventEmitter<any> = new EventEmitter();
@Output() @Output()
resultsEmitter = new EventEmitter(); error: EventEmitter<any> = new EventEmitter();
@Output()
result = new EventEmitter();
newTagName: string; newTagName: string;
@ -58,6 +61,10 @@ export class TagActionsComponent {
if (translateService) { if (translateService) {
translateService.addTranslationFolder('ng2-alfresco-tag', 'node_modules/ng2-alfresco-tag/src'); translateService.addTranslationFolder('ng2-alfresco-tag', 'node_modules/ng2-alfresco-tag/src');
} }
this.tagService.refresh.subscribe(() => {
this.refreshTag();
});
} }
ngOnChanges() { ngOnChanges() {
@ -68,11 +75,11 @@ export class TagActionsComponent {
this.tagService.getTagsByNodeId(this.nodeId).subscribe((data) => { this.tagService.getTagsByNodeId(this.nodeId).subscribe((data) => {
this.tagsEntries = data.list.entries; this.tagsEntries = data.list.entries;
this.disableAddTag = false; this.disableAddTag = false;
this.resultsEmitter.emit(this.tagsEntries); this.result.emit(this.tagsEntries);
}, () => { }, () => {
this.tagsEntries = null; this.tagsEntries = null;
this.disableAddTag = true; this.disableAddTag = true;
this.resultsEmitter.emit(this.tagsEntries); this.result.emit(this.tagsEntries);
}); });
} }
@ -81,13 +88,13 @@ export class TagActionsComponent {
this.translateService.get('TAG.MESSAGES.EXIST').subscribe((error) => { this.translateService.get('TAG.MESSAGES.EXIST').subscribe((error) => {
this.errorMsg = error; this.errorMsg = error;
}); });
this.error.emit(this.errorMsg);
}else {
this.tagService.addTag(this.nodeId, this.newTagName).subscribe(() => {
this.newTagName = '';
this.successAdd.emit(this.nodeId);
});
} }
this.tagService.addTag(this.nodeId, this.newTagName).subscribe(() => {
this.newTagName = '';
this.refreshTag();
this.addEmitter.emit(this.nodeId);
});
} }
searchTag(searchTagName: string) { searchTag(searchTagName: string) {
@ -103,8 +110,6 @@ export class TagActionsComponent {
} }
removeTag(tag: string) { removeTag(tag: string) {
this.tagService.removeTag(this.nodeId, tag).subscribe(() => { this.tagService.removeTag(this.nodeId, tag);
this.refreshTag();
});
} }
} }

View File

@ -82,7 +82,7 @@ describe('Test ng2-alfresco-tag Tag list All ECM', () => {
it('Tag list relative a single node should be rendered', (done) => { it('Tag list relative a single node should be rendered', (done) => {
component.nodeId = 'fake-node-id'; component.nodeId = 'fake-node-id';
component.resultsEmitter.subscribe(() => { component.result.subscribe(() => {
fixture.detectChanges(); fixture.detectChanges();
expect(element.querySelector('#tag_name_0').innerHTML).toBe('test1'); expect(element.querySelector('#tag_name_0').innerHTML).toBe('test1');

View File

@ -35,23 +35,26 @@ export class TagList {
tagsEntries: any; tagsEntries: any;
@Output() @Output()
resultsEmitter = new EventEmitter(); result = new EventEmitter();
/** /**
* Constructor * Constructor
* @param tagService * @param tagService
*/ */
constructor(private tagService: TagService) { constructor(private tagService: TagService) {
this.tagService.refresh.subscribe(() => {
this.refreshTag();
});
} }
ngOnInit(changes) { ngOnInit() {
return this.refreshTagEcm(); return this.refreshTag();
} }
refreshTagEcm() { refreshTag() {
this.tagService.getAllTheTags().subscribe((data) => { this.tagService.getAllTheTags().subscribe((data) => {
this.tagsEntries = data.list.entries; this.tagsEntries = data.list.entries;
this.resultsEmitter.emit(this.tagsEntries); this.result.emit(this.tagsEntries);
}); });
} }
} }

View File

@ -82,7 +82,7 @@ describe('Test ng2-alfresco-tag Tag relative node list', () => {
it('Tag list relative a single node should be rendered', (done) => { it('Tag list relative a single node should be rendered', (done) => {
component.nodeId = 'fake-node-id'; component.nodeId = 'fake-node-id';
component.resultsEmitter.subscribe(() => { component.results.subscribe(() => {
fixture.detectChanges(); fixture.detectChanges();
expect(element.querySelector('#tag_name_0').innerHTML).toBe('test1'); expect(element.querySelector('#tag_name_0').innerHTML).toBe('test1');
@ -108,7 +108,7 @@ describe('Test ng2-alfresco-tag Tag relative node list', () => {
it('Tag list click on delete button should delete the tag', (done) => { it('Tag list click on delete button should delete the tag', (done) => {
component.nodeId = 'fake-node-id'; component.nodeId = 'fake-node-id';
component.resultsEmitter.subscribe(() => { component.results.subscribe(() => {
fixture.detectChanges(); fixture.detectChanges();
let deleteButton: any = element.querySelector('#tag_delete_0'); let deleteButton: any = element.querySelector('#tag_delete_0');

View File

@ -39,13 +39,16 @@ export class TagNodeList {
tagsEntries: any; tagsEntries: any;
@Output() @Output()
resultsEmitter = new EventEmitter(); results = new EventEmitter();
/** /**
* Constructor * Constructor
* @param tagService * @param tagService
*/ */
constructor(private tagService: TagService) { constructor(private tagService: TagService) {
this.tagService.refresh.subscribe(() => {
this.refreshTag();
});
} }
ngOnChanges() { ngOnChanges() {
@ -55,7 +58,7 @@ export class TagNodeList {
refreshTag() { refreshTag() {
this.tagService.getTagsByNodeId(this.nodeId).subscribe((data) => { this.tagService.getTagsByNodeId(this.nodeId).subscribe((data) => {
this.tagsEntries = data.list.entries; this.tagsEntries = data.list.entries;
this.resultsEmitter.emit(this.tagsEntries); this.results.emit(this.tagsEntries);
}); });
} }

View File

@ -118,5 +118,30 @@ describe('Tag service', () => {
status: 403 status: 403
}); });
}); });
it('delete tag should trigger a refresh event', (done) => {
service.refresh.subscribe(() => {
done();
});
service.removeTag('fake-node-id', 'fake-tag');
jasmine.Ajax.requests.mostRecent().respondWith({
status: 200
});
});
it('add tag should trigger a refresh event', (done) => {
service.refresh.subscribe(() => {
done();
});
service.addTag('fake-node-id', 'fake-tag');
jasmine.Ajax.requests.mostRecent().respondWith({
status: 200
});
});
}); });
}); });

View File

@ -15,7 +15,7 @@
* limitations under the License. * limitations under the License.
*/ */
import { Injectable } from '@angular/core'; import { Injectable, Output, EventEmitter } from '@angular/core';
import { Observable } from 'rxjs/Rx'; import { Observable } from 'rxjs/Rx';
import { AlfrescoApiService, LogService } from 'ng2-alfresco-core'; import { AlfrescoApiService, LogService } from 'ng2-alfresco-core';
@ -25,6 +25,9 @@ import { AlfrescoApiService, LogService } from 'ng2-alfresco-core';
@Injectable() @Injectable()
export class TagService { export class TagService {
@Output()
refresh = new EventEmitter();
constructor(private apiService: AlfrescoApiService, constructor(private apiService: AlfrescoApiService,
private logService: LogService) { private logService: LogService) {
} }
@ -44,13 +47,27 @@ export class TagService {
let tagBody = new alfrescoApi.core.TagBody(); let tagBody = new alfrescoApi.core.TagBody();
tagBody.tag = tagName; tagBody.tag = tagName;
return Observable.fromPromise(this.apiService.getInstance().core.tagsApi.addTag(nodeId, tagBody)) let promiseAdd = Observable.fromPromise(this.apiService.getInstance().core.tagsApi.addTag(nodeId, tagBody));
.catch(err => this.handleError(err));
promiseAdd.subscribe((data) => {
this.refresh.emit(data);
}, (err) => {
this.handleError(err);
});
return promiseAdd;
} }
removeTag(nodeId: string, tag: string): any { removeTag(nodeId: string, tag: string): any {
return Observable.fromPromise(this.apiService.getInstance().core.tagsApi.removeTag(nodeId, tag)) let promiseRemove = Observable.fromPromise(this.apiService.getInstance().core.tagsApi.removeTag(nodeId, tag));
.catch(err => this.handleError(err));
promiseRemove.subscribe((data) => {
this.refresh.emit(data);
}, (err) => {
this.handleError(err);
});
return promiseRemove;
} }
private handleError(error: any) { private handleError(error: any) {