diff --git a/src/app/task/task-list/reject.html b/src/app/task/task-list/reject.html
index b8ca697..756588c 100644
--- a/src/app/task/task-list/reject.html
+++ b/src/app/task/task-list/reject.html
@@ -1,7 +1,7 @@
{{"tasks.actions.reject.confirmation.title" | translate}}
-
+
diff --git a/src/app/task/task-list/task-accept.component.ts b/src/app/task/task-list/task-accept.component.ts
index cd9df70..4b47012 100644
--- a/src/app/task/task-list/task-accept.component.ts
+++ b/src/app/task/task-list/task-accept.component.ts
@@ -10,11 +10,12 @@ import { AddMemberTaskAcceptComponent } from "../types/add-member/add-member-tas
export class TaskAcceptComponent {
@Input() task: noosfero.Task;
+ @Input() confirmationTask: noosfero.Task;
ngOnInit() {
let componentName = this.task.type.replace(/::/, '').replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
componentName += "-task-accept";
- this.$element.replaceWith(this.$compile(`<${componentName} [task]="ctrl.task">${componentName}>`)(this.$scope));
+ this.$element.replaceWith(this.$compile(`<${componentName} [task]="ctrl.task" [confirmation-task]="ctrl.confirmationTask">${componentName}>`)(this.$scope));
}
constructor(private $element: any, private $scope: ng.IScope, private $injector: ng.auto.IInjectorService, private $compile: ng.ICompileService) { }
diff --git a/src/app/task/task-list/task-list.component.ts b/src/app/task/task-list/task-list.component.ts
index 4b12114..6653aa7 100644
--- a/src/app/task/task-list/task-list.component.ts
+++ b/src/app/task/task-list/task-list.component.ts
@@ -2,6 +2,7 @@ import { Component, Input, Inject } from "ng-forward";
import { NotificationService } from "../../shared/services/notification.service";
import { TaskService } from "../../../lib/ng-noosfero-api/http/task.service";
import { TaskAcceptComponent } from "./task-accept.component";
+import { Arrays } from "../../../lib/util/arrays";
@Component({
selector: "task-list",
@@ -15,8 +16,8 @@ export class TaskListComponent {
private taskTemplates = ["AddFriend", "AddMember", "CreateCommunity", "SuggestArticle", "AbuseComplaint"];
- rejectionExplanation: string;
currentTask: noosfero.Task;
+ confirmationTask: noosfero.Task;
private modalInstance: any = null;
constructor(private notificationService: NotificationService, private $scope: ng.IScope, private $uibModal: any, private taskService: TaskService) { }
@@ -32,6 +33,7 @@ export class TaskListComponent {
accept(task: noosfero.Task) {
this.currentTask = task;
+ this.confirmationTask =
{ id: task.id };
if (task.accept_details) {
this.modalInstance = this.$uibModal.open({
templateUrl: "app/task/task-list/accept.html",
@@ -47,6 +49,7 @@ export class TaskListComponent {
reject(task: noosfero.Task) {
this.currentTask = task;
+ this.confirmationTask = { id: task.id };
if (task.reject_details) {
this.modalInstance = this.$uibModal.open({
templateUrl: "app/task/task-list/reject.html",
@@ -61,8 +64,8 @@ export class TaskListComponent {
}
callAccept() {
- this.taskService.finishTask(this.currentTask).then(() => {
- this.removeTask(this.currentTask);
+ this.taskService.finishTask(this.confirmationTask).then(() => {
+ Arrays.remove(this.tasks, this.currentTask);
this.notificationService.success({ title: "tasks.actions.accept.title", message: "tasks.actions.accept.message" });
}).finally(() => {
this.cancel();
@@ -70,8 +73,8 @@ export class TaskListComponent {
}
callReject() {
- this.taskService.cancelTask(this.currentTask).then(() => {
- this.removeTask(this.currentTask);
+ this.taskService.cancelTask(this.confirmationTask).then(() => {
+ Arrays.remove(this.tasks, this.currentTask);
this.notificationService.success({ title: "tasks.actions.reject.title", message: "tasks.actions.reject.message" });
}).finally(() => {
this.cancel();
@@ -83,19 +86,12 @@ export class TaskListComponent {
this.modalInstance.close();
this.modalInstance = null;
}
- if (this.currentTask) {
- this.currentTask = null;
- }
+ this.currentTask = null;
+ this.confirmationTask = null;
}
private getTemplateName(task: noosfero.Task) {
return task.type.replace(/::/, '').replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
}
- private removeTask(task: noosfero.Task) {
- let index = this.tasks.map((t: noosfero.Task) => { return t.id; }).indexOf(task.id);
- if (index > -1) {
- this.tasks.splice(index, 1);
- }
- }
}
diff --git a/src/app/task/types/add-member/add-member-accept.html b/src/app/task/types/add-member/add-member-accept.html
index 8f961b7..460d341 100644
--- a/src/app/task/types/add-member/add-member-accept.html
+++ b/src/app/task/types/add-member/add-member-accept.html
@@ -2,7 +2,7 @@
diff --git a/src/app/task/types/add-member/add-member-task-accept-component.spec.ts b/src/app/task/types/add-member/add-member-task-accept-component.spec.ts
new file mode 100644
index 0000000..adc74f2
--- /dev/null
+++ b/src/app/task/types/add-member/add-member-task-accept-component.spec.ts
@@ -0,0 +1,44 @@
+import { Provider, provide, Component } from 'ng-forward';
+import * as helpers from "../../../../spec/helpers";
+import { ComponentTestHelper, createClass } from '../../../../spec/component-test-helper';
+import { AddMemberTaskAcceptComponent } from './add-member-task-accept.component';
+
+const htmlTemplate: string = '
';
+
+describe("Components", () => {
+ describe("Add Member Task Accept Component", () => {
+
+ let helper: ComponentTestHelper
;
+ let roleService = jasmine.createSpyObj("roleService", ["getByProfile"]);
+ let roles = [{ id: 1 }, { id: 2 }];
+ let task = { target: { id: 5 } };
+ roleService.getByProfile = jasmine.createSpy("getByProfile").and.returnValue(Promise.resolve({ headers: () => { }, data: roles }));
+
+ beforeEach(angular.mock.module("templates"));
+
+ beforeEach((done) => {
+ let cls = createClass({
+ template: htmlTemplate,
+ directives: [AddMemberTaskAcceptComponent],
+ providers: [
+ helpers.createProviderToValue("RoleService", roleService)
+ ].concat(helpers.provideFilters("translateFilter")),
+ properties: { task: task, confirmationTask: task }
+ });
+ helper = new ComponentTestHelper(cls, done);
+ });
+
+ it("insert role id in roles list when toggle selection", () => {
+ let role = { id: 1 };
+ helper.component.toggleSelection(role);
+ expect((helper.component.confirmationTask)['roles']).toEqual([role.id]);
+ });
+
+ it("remove role id from roles list when toggle selection", () => {
+ let role = { id: 1 };
+ (helper.component.confirmationTask)['roles'] = [role.id];
+ helper.component.toggleSelection(role);
+ expect((helper.component.confirmationTask)['roles']).toEqual([]);
+ });
+ });
+});
diff --git a/src/app/task/types/add-member/add-member-task-accept.component.ts b/src/app/task/types/add-member/add-member-task-accept.component.ts
index e1990e7..98f908f 100644
--- a/src/app/task/types/add-member/add-member-task-accept.component.ts
+++ b/src/app/task/types/add-member/add-member-task-accept.component.ts
@@ -9,14 +9,25 @@ import { RoleService } from "../../../../lib/ng-noosfero-api/http/role.service";
export class AddMemberTaskAcceptComponent {
@Input() task: noosfero.Task;
+ @Input() confirmationTask: noosfero.Task;
roles: noosfero.Role[];
constructor(private roleService: RoleService) { }
ngOnInit() {
if (!this.task.target) return;
+ (this.confirmationTask)['roles'] = [];
this.roleService.getByProfile(this.task.target.id).then((result: noosfero.RestResult) => {
this.roles = result.data;
});
}
+
+ toggleSelection(role: noosfero.Role) {
+ let index = (this.confirmationTask)['roles'].indexOf(role.id);
+ if (index >= 0) {
+ (this.confirmationTask)['roles'].splice(index, 1);
+ } else {
+ (this.confirmationTask)['roles'].push(role.id);
+ }
+ }
}
diff --git a/src/lib/ng-noosfero-api/http/task.service.ts b/src/lib/ng-noosfero-api/http/task.service.ts
index 3282020..c74f7d4 100644
--- a/src/lib/ng-noosfero-api/http/task.service.ts
+++ b/src/lib/ng-noosfero-api/http/task.service.ts
@@ -36,7 +36,8 @@ export class TaskService extends RestangularService {
private closeTask(task: noosfero.Task, action: string) {
let element = this.getElement(task.id);
- let put = element.customPUT(null, action);
+ delete task.id;
+ let put = element.customPUT({ task: task }, action);
let deferred = this.$q.defer>();
put.then(this.getHandleSuccessFunction>(deferred));
put.catch(this.getHandleErrorFunction>(deferred));
--
libgit2 0.21.2