Update Epic Status

stable
Xavier Julián 2016-07-22 14:03:12 +02:00 committed by David Barragán Merino
parent 9c1a7013b8
commit 6e6257f039
7 changed files with 70 additions and 14 deletions

View File

@ -21,16 +21,33 @@ module = angular.module("taigaEpics")
class EpicRowController class EpicRowController
@.$inject = [ @.$inject = [
"tgResources",
"$tgConfirm"
] ]
constructor: () -> constructor: (@rs, @confirm) ->
console.log @.epic.toJS()
console.log @.project
@._calculateProgressBar() @._calculateProgressBar()
_calculateProgressBar: () -> _calculateProgressBar: () ->
totalUs = @.epic.getIn(['user_stories_counts', 'closed']) totalUs = @.epic.getIn(['user_stories_counts', 'closed'])
totalUsCompleted = @.epic.getIn(['user_stories_counts', 'opened']) totalUsCompleted = @.epic.getIn(['user_stories_counts', 'opened'])
@.percentage = (totalUs * 100) / totalUsCompleted @.percentage = totalUs * 100 / totalUsCompleted
updateEpicStatus: (status) ->
id = @.epic.get('id')
version = @.epic.get('version')
patch = {
'status': status,
'version': version
}
onSuccess = =>
@.onUpdateEpicStatus()
onError = (data) =>
console.log data
@confirm.notify('error')
return @rs.epics.patch(id, patch).then(onSuccess, onError)
module.controller("EpicRowCtrl", EpicRowController) module.controller("EpicRowCtrl", EpicRowController)

View File

@ -29,7 +29,9 @@ EpicRowDirective = () ->
scope: { scope: {
project: '=', project: '=',
epic: '=', epic: '=',
column: '=' column: '=',
permissions: '=',
onUpdateEpicStatus: "&"
} }
} }

View File

@ -1,7 +1,9 @@
.epic-row( .epic-row(
ng-class="{'is-blocked': vm.epic.get('is_blocked'), 'is-closed': vm.epic.get('is_closed')}" ng-class="{'is-blocked': vm.epic.get('is_blocked'), 'is-closed': vm.epic.get('is_closed')}"
) )
tg-svg(svg-icon="icon-drag") tg-svg(
svg-icon="icon-drag"
)
.vote( .vote(
ng-if="vm.column.votes" ng-if="vm.column.votes"
ng-class="{'is-voter': vm.epic.get('is_voter')}" ng-class="{'is-voter': vm.epic.get('is_voter')}"
@ -31,14 +33,18 @@
ng-if="vm.column.assigned && !vm.epic.getIn(['assigned_to_extra_info', 'photo'])" ng-if="vm.column.assigned && !vm.epic.getIn(['assigned_to_extra_info', 'photo'])"
) Unassigned ) Unassigned
.status( .status(
ng-if="vm.column.status" ng-if="vm.column.status && !vm.permissions.canEdit"
)
span {{vm.epic.getIn(['status_extra_info', 'name'])}}
.status(
ng-if="vm.column.status && vm.permissions.canEdit"
ng-mouseleave="displayStatusList = false" ng-mouseleave="displayStatusList = false"
) )
button( button(
ng-click="displayStatusList = true" ng-click="displayStatusList = true"
ng-style="{'color': vm.epic.getIn(['status_extra_info', 'color'])}" ng-style="{'color': vm.epic.getIn(['status_extra_info', 'color'])}"
) )
span {{::vm.epic.getIn(['status_extra_info', 'name'])}} span {{vm.epic.getIn(['status_extra_info', 'name'])}}
tg-svg( tg-svg(
svg-icon="icon-arrow-down" svg-icon="icon-arrow-down"
) )
@ -46,7 +52,7 @@
ul.epic-statuses(ng-show="displayStatusList") ul.epic-statuses(ng-show="displayStatusList")
li( li(
ng-repeat="status in vm.project.epic_statuses | orderBy:'order'" ng-repeat="status in vm.project.epic_statuses | orderBy:'order'"
ng-click="vm.updateEpicStatus(status.name)" ng-click="vm.updateEpicStatus(status.id)"
) {{status.name}} ) {{status.name}}
.progress(ng-if="vm.column.progress") .progress(ng-if="vm.column.progress")
.progress-bar .progress-bar

View File

@ -2,7 +2,14 @@
@include font-size(small); @include font-size(small);
align-items: center; align-items: center;
border-bottom: 1px solid $whitish; border-bottom: 1px solid $whitish;
cursor: pointer;
display: flex; display: flex;
&:hover {
.icon-drag {
cursor: move;
opacity: 1;
}
}
&.is-blocked { &.is-blocked {
background: rgba($red-light, .5); background: rgba($red-light, .5);
} }
@ -13,7 +20,10 @@
} }
} }
.icon-drag { .icon-drag {
fill: $gray-light; @include svg-size(.75rem);
fill: $whitish;
opacity: 0;
transition: opacity .1s;
} }
.status { .status {
cursor: pointer; cursor: pointer;

View File

@ -36,15 +36,21 @@ class EpicsTableController
status: true, status: true,
progress: true progress: true
} }
@._loadEpics() @.loadEpics()
@._checkPermissions()
toggleEpicTableOptions: () -> toggleEpicTableOptions: () ->
@.displayOptions = !@.displayOptions @.displayOptions = !@.displayOptions
_loadEpics: () -> _checkPermissions: () ->
@.permissions = {
canEdit: _.includes(@.project.my_permissions, 'modify_epic')
}
loadEpics: () ->
projectId = @.project.id projectId = @.project.id
params = {} promise = @rs.epics.list(projectId).then (epics) =>
promise = @rs.epics.listAll(projectId, params).then (epics) =>
@.epics = epics @.epics = epics
console.log @.epics
module.controller("EpicsTableCtrl", EpicsTableController) module.controller("EpicsTableCtrl", EpicsTableController)

View File

@ -94,4 +94,6 @@ mixin epicSwitch(name, model)
epic="epic" epic="epic"
project="vm.project" project="vm.project"
column="vm.column" column="vm.column"
on-update-epic-status="vm.loadEpics()"
permissions="vm.permissions"
) )

View File

@ -28,6 +28,19 @@ Resource = (urlsService, http) ->
return http.get(url, params, httpOptions).then (result) -> return http.get(url, params, httpOptions).then (result) ->
return Immutable.fromJS(result.data) return Immutable.fromJS(result.data)
service.list = (projectId) ->
url = urlsService.resolve("epics")
params = {project: projectId}
return http.get(url, params)
.then (result) -> Immutable.fromJS(result.data)
service.patch = (id, patch) ->
url = urlsService.resolve("epics") + "/#{id}"
return http.patch(url, patch)
return () -> return () ->
return {"epics": service} return {"epics": service}