From 5e8db5cb6fb6a6d9eb040ad65d41d03f1bd6d960 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa?= Date: Thu, 19 Apr 2018 13:29:21 +0200 Subject: [PATCH] Delete cards on Kanban and Sprint Taskboad --- app/coffee/modules/kanban/main.coffee | 25 ++++++++++++++++-- app/coffee/modules/taskboard/main.coffee | 24 ++++++++++++++++- app/locales/taiga/locale-en.json | 3 ++- .../card/card-templates/card-owner.jade | 26 +++++++++++++------ .../components/card/card.controller.coffee | 10 +++---- .../components/card/card.directive.coffee | 1 + app/modules/components/card/card.scss | 10 ++++++- .../includes/modules/kanban-table.jade | 1 + .../includes/modules/taskboard-table.jade | 2 ++ 9 files changed, 84 insertions(+), 18 deletions(-) diff --git a/app/coffee/modules/kanban/main.coffee b/app/coffee/modules/kanban/main.coffee index 50714d07..da1ca14b 100644 --- a/app/coffee/modules/kanban/main.coffee +++ b/app/coffee/modules/kanban/main.coffee @@ -151,6 +151,9 @@ class KanbanController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi @.refreshTagsColors().then () => @kanbanUserstoriesService.replaceModel(us) + @scope.$on "kanban:us:deleted", (event, us) => + @.filtersReloadContent() + @scope.$on("assigned-to:added", @.onAssignedToChanged) @scope.$on("assigned-user:added", @.onAssignedUsersChanged) @scope.$on("assigned-user:deleted", @.onAssignedUsersDeleted) @@ -167,7 +170,7 @@ class KanbanController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi editUs: (id) -> us = @kanbanUserstoriesService.getUs(id) - us = us.set('loading', true) + us = us.set('loading-edit', true) @kanbanUserstoriesService.replace(us) @rs.userstories.getByRef(us.getIn(['model', 'project']), us.getIn(['model', 'ref'])) @@ -175,9 +178,27 @@ class KanbanController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi @rs2.attachments.list("us", us.get('id'), us.getIn(['model', 'project'])).then (attachments) => @rootscope.$broadcast("usform:edit", editingUserStory, attachments.toJS()) - us = us.set('loading', false) + us = us.set('loading-edit', false) @kanbanUserstoriesService.replace(us) + deleteUs: (id) -> + us = @kanbanUserstoriesService.getUs(id) + us = us.set('loading-delete', true) + + @rs.userstories.getByRef(us.getIn(['model', 'project']), us.getIn(['model', 'ref'])) + .then (deletingUserStory) => + us = us.set('loading-delete', false) + title = @translate.instant("US.TITLE_DELETE_ACTION") + message = deletingUserStory.subject + @confirm.askOnDelete(title, message).then (askResponse) => + promise = @repo.remove(deletingUserStory) + promise.then => + @scope.$broadcast("kanban:us:deleted") + askResponse.finish() + promise.then null, -> + askResponse.finish(false) + @confirm.notify("error") + showPlaceHolder: (statusId) -> if @scope.usStatusList[0].id == statusId && !@kanbanUserstoriesService.userstoriesRaw.length diff --git a/app/coffee/modules/taskboard/main.coffee b/app/coffee/modules/taskboard/main.coffee index 8697bf61..6f918f30 100644 --- a/app/coffee/modules/taskboard/main.coffee +++ b/app/coffee/modules/taskboard/main.coffee @@ -308,6 +308,9 @@ class TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin, taiga @.refreshTagsColors().then () => @taskboardTasksService.replaceModel(task) + @scope.$on "taskboard:task:deleted", (event, task) => + @.loadTasks() + @scope.$on("taskboard:task:move", @.taskMove) @scope.$on("assigned-to:added", @.onAssignedToChanged) @@ -432,7 +435,7 @@ class TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin, taiga editTask: (id) -> task = @.taskboardTasksService.getTask(id) - task = task.set('loading', true) + task = task.set('loading-edit', true) @taskboardTasksService.replace(task) @rs.tasks.getByRef(task.getIn(['model', 'project']), task.getIn(['model', 'ref'])).then (editingTask) => @@ -441,6 +444,25 @@ class TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin, taiga task = task.set('loading', false) @taskboardTasksService.replace(task) + deleteTask: (id) -> + task = @.taskboardTasksService.getTask(id) + task = task.set('loading-delete', true) + + @rs.tasks.getByRef(task.getIn(['model', 'project']), task.getIn(['model', 'ref'])) + .then (deletingTask) => + task = task.set('loading-delete', false) + title = @translate.instant("TASK.TITLE_DELETE_ACTION") + message = deletingTask.subject + @confirm.askOnDelete(title, message).then (askResponse) => + promise = @repo.remove(deletingTask) + promise.then => + @scope.$broadcast("taskboard:task:deleted") + askResponse.finish() + promise.then null, -> + askResponse.finish(false) + @confirm.notify("error") + + taskMove: (ctx, task, oldStatusId, usId, statusId, order) -> task = @taskboardTasksService.getTaskModel(task.get('id')) diff --git a/app/locales/taiga/locale-en.json b/app/locales/taiga/locale-en.json index 07250a83..de3180f3 100644 --- a/app/locales/taiga/locale-en.json +++ b/app/locales/taiga/locale-en.json @@ -47,7 +47,8 @@ "RELATED_USERSTORIES": "Related user stories", "CARD": { "ASSIGN_TO": "Assign To", - "EDIT": "Edit card" + "EDIT": "Edit card", + "DELETE": "Delete card" }, "FORM_ERRORS": { "DEFAULT_MESSAGE": "This value seems to be invalid.", diff --git a/app/modules/components/card/card-templates/card-owner.jade b/app/modules/components/card/card-templates/card-owner.jade index 380df5f5..49789626 100644 --- a/app/modules/components/card/card-templates/card-owner.jade +++ b/app/modules/components/card/card-templates/card-owner.jade @@ -20,7 +20,7 @@ .card-owner-actions( ng-if="vm.visible('owner')" - tg-check-permission="{{vm.getPermissionsKey()}}" + tg-check-permission="{{vm.getModifyPermisionKey()}}" ) a.e2e-assign.card-owner-assign( ng-click="!$event.ctrlKey && !$event.metaKey && vm.onClickAssignedTo({id: vm.item.get('id')})" @@ -29,10 +29,20 @@ tg-svg(svg-icon="icon-add-user") span(translate="COMMON.CARD.ASSIGN_TO") - a.e2e-edit.card-edit( - href="" - ng-click="!$event.ctrlKey && !$event.metaKey && vm.onClickEdit({id: vm.item.get('id')})" - tg-loading="vm.item.get('loading')" - ) - tg-svg(svg-icon="icon-edit") - span(translate="COMMON.CARD.EDIT") + div.card-actions + a.e2e-edit.card-edit( + href="" + ng-click="!$event.ctrlKey && !$event.metaKey && vm.onClickEdit({id: vm.item.get('id')})" + tg-loading="vm.item.get('loading-edit')" + title="{{ 'COMMON.CARD.EDIT' | translate }}" + ) + tg-svg(svg-icon="icon-edit") + + a.e2e-edit.card-delete( + href="" + ng-click="!$event.ctrlKey && !$event.metaKey && vm.onClickDelete({id: vm.item.get('id')})" + tg-loading="vm.item.get('loading-delete')" + title="{{ 'COMMON.CARD.DELETE' | translate }}" + tg-check-permission="{{vm.getDeletePermisionKey()}}" + ) + tg-svg(svg-icon="icon-trash") diff --git a/app/modules/components/card/card.controller.coffee b/app/modules/components/card/card.controller.coffee index ffacf9b1..f264f85c 100644 --- a/app/modules/components/card/card.controller.coffee +++ b/app/modules/components/card/card.controller.coffee @@ -39,11 +39,11 @@ class CardController closedTasksPercent: () -> return @.getClosedTasks().size * 100 / @.item.getIn(['model', 'tasks']).size - getPermissionsKey: () -> - if @.type == 'task' - return 'modify_task' - else - return 'modify_us' + getModifyPermisionKey: () -> + return if @.type == 'task' then 'modify_task' else 'modify_us' + + getDeletePermisionKey: () -> + return if @.type == 'task' then 'delete_task' else 'delete_us' _setVisibility: () -> visibility = { diff --git a/app/modules/components/card/card.directive.coffee b/app/modules/components/card/card.directive.coffee index 4ad69505..87338ca0 100644 --- a/app/modules/components/card/card.directive.coffee +++ b/app/modules/components/card/card.directive.coffee @@ -31,6 +31,7 @@ cardDirective = () -> onToggleFold: "&", onClickAssignedTo: "&", onClickEdit: "&", + onClickDelete: "&", project: "=", item: "=", zoom: "=", diff --git a/app/modules/components/card/card.scss b/app/modules/components/card/card.scss index b751ead6..a66f5425 100644 --- a/app/modules/components/card/card.scss +++ b/app/modules/components/card/card.scss @@ -119,6 +119,14 @@ fill: currentColor; } } + .card-actions { + display: flex; + justify-content: space-between; + padding: 0 .5rem; + } + .card-delete:hover { + color: $red-light; + } .icon { @include svg-size(1.2rem); display: inline-block; @@ -129,7 +137,7 @@ align-items: center; cursor: pointer; display: flex; - padding: .6rem 1rem; + padding: .6rem .5rem; } } diff --git a/app/partials/includes/modules/kanban-table.jade b/app/partials/includes/modules/kanban-table.jade index b9bf46ef..3a478774 100644 --- a/app/partials/includes/modules/kanban-table.jade +++ b/app/partials/includes/modules/kanban-table.jade @@ -80,6 +80,7 @@ div.kanban-table( tg-bind-scope, on-toggle-fold="ctrl.toggleFold(id)" on-click-edit="ctrl.editUs(id)" + on-click-delete="ctrl.deleteUs(id)" on-click-assigned-to="ctrl.changeUsAssignedUsers(id)" project="project" item="us" diff --git a/app/partials/includes/modules/taskboard-table.jade b/app/partials/includes/modules/taskboard-table.jade index 1da302f6..5c567ff5 100644 --- a/app/partials/includes/modules/taskboard-table.jade +++ b/app/partials/includes/modules/taskboard-table.jade @@ -82,6 +82,7 @@ div.taskboard-table( tg-bind-scope, on-toggle-fold="ctrl.toggleFold(id)" on-click-edit="ctrl.editTask(id)" + on-click-delete="ctrl.deleteTask(id)" on-click-assigned-to="ctrl.changeTaskAssignedTo(id)" project="project" item="task" @@ -127,6 +128,7 @@ div.taskboard-table( tg-class-permission="{'readonly': '!modify_task'}" on-toggle-fold="ctrl.toggleFold(id)" on-click-edit="ctrl.editTask(id)" + on-click-delete="ctrl.deleteTask(id)" on-click-assigned-to="ctrl.changeTaskAssignedTo(id)" project="project" item="task"