Delete cards on Kanban and Sprint Taskboad

stable
Daniel García 2018-04-19 13:29:21 +02:00 committed by Álex Hermida
parent 0804a62aec
commit 5e8db5cb6f
9 changed files with 84 additions and 18 deletions

View File

@ -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

View File

@ -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'))

View File

@ -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.",

View File

@ -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")

View File

@ -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 = {

View File

@ -31,6 +31,7 @@ cardDirective = () ->
onToggleFold: "&",
onClickAssignedTo: "&",
onClickEdit: "&",
onClickDelete: "&",
project: "=",
item: "=",
zoom: "=",

View File

@ -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;
}
}

View File

@ -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"

View File

@ -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"