diff --git a/src/app/task/task-list/accept.html b/src/app/task/task-list/accept.html index 3e92919..1ad42aa 100644 --- a/src/app/task/task-list/accept.html +++ b/src/app/task/task-list/accept.html @@ -1,7 +1,7 @@
{{"tasks.actions.accept.confirmation.title" | translate}}
- +
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">`)(this.$scope)); + this.$element.replaceWith(this.$compile(`<${componentName} [task]="ctrl.task" [confirmation-task]="ctrl.confirmationTask">`)(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 @@
- {{role.name}} + {{role.name}}
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