diff --git a/app/modules/epics/dashboard/epic-row/epic-row.controller.coffee b/app/modules/epics/dashboard/epic-row/epic-row.controller.coffee index 640be052..f1719faf 100644 --- a/app/modules/epics/dashboard/epic-row/epic-row.controller.coffee +++ b/app/modules/epics/dashboard/epic-row/epic-row.controller.coffee @@ -21,16 +21,33 @@ module = angular.module("taigaEpics") class EpicRowController @.$inject = [ + "tgResources", + "$tgConfirm" ] - constructor: () -> - console.log @.epic.toJS() - console.log @.project + constructor: (@rs, @confirm) -> @._calculateProgressBar() _calculateProgressBar: () -> totalUs = @.epic.getIn(['user_stories_counts', 'closed']) 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) diff --git a/app/modules/epics/dashboard/epic-row/epic-row.directive.coffee b/app/modules/epics/dashboard/epic-row/epic-row.directive.coffee index 3332f917..14b224c8 100644 --- a/app/modules/epics/dashboard/epic-row/epic-row.directive.coffee +++ b/app/modules/epics/dashboard/epic-row/epic-row.directive.coffee @@ -29,7 +29,9 @@ EpicRowDirective = () -> scope: { project: '=', epic: '=', - column: '=' + column: '=', + permissions: '=', + onUpdateEpicStatus: "&" } } diff --git a/app/modules/epics/dashboard/epic-row/epic-row.jade b/app/modules/epics/dashboard/epic-row/epic-row.jade index 20ccb2e1..8e7adee3 100644 --- a/app/modules/epics/dashboard/epic-row/epic-row.jade +++ b/app/modules/epics/dashboard/epic-row/epic-row.jade @@ -1,7 +1,9 @@ .epic-row( 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( ng-if="vm.column.votes" 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'])" ) Unassigned .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" ) button( ng-click="displayStatusList = true" 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( svg-icon="icon-arrow-down" ) @@ -46,7 +52,7 @@ ul.epic-statuses(ng-show="displayStatusList") li( ng-repeat="status in vm.project.epic_statuses | orderBy:'order'" - ng-click="vm.updateEpicStatus(status.name)" + ng-click="vm.updateEpicStatus(status.id)" ) {{status.name}} .progress(ng-if="vm.column.progress") .progress-bar diff --git a/app/modules/epics/dashboard/epic-row/epic-row.scss b/app/modules/epics/dashboard/epic-row/epic-row.scss index 2e5076cd..540450aa 100644 --- a/app/modules/epics/dashboard/epic-row/epic-row.scss +++ b/app/modules/epics/dashboard/epic-row/epic-row.scss @@ -2,7 +2,14 @@ @include font-size(small); align-items: center; border-bottom: 1px solid $whitish; + cursor: pointer; display: flex; + &:hover { + .icon-drag { + cursor: move; + opacity: 1; + } + } &.is-blocked { background: rgba($red-light, .5); } @@ -13,7 +20,10 @@ } } .icon-drag { - fill: $gray-light; + @include svg-size(.75rem); + fill: $whitish; + opacity: 0; + transition: opacity .1s; } .status { cursor: pointer; diff --git a/app/modules/epics/dashboard/epics-table/epics-table.controller.coffee b/app/modules/epics/dashboard/epics-table/epics-table.controller.coffee index 717916dc..8d498366 100644 --- a/app/modules/epics/dashboard/epics-table/epics-table.controller.coffee +++ b/app/modules/epics/dashboard/epics-table/epics-table.controller.coffee @@ -36,15 +36,21 @@ class EpicsTableController status: true, progress: true } - @._loadEpics() + @.loadEpics() + @._checkPermissions() toggleEpicTableOptions: () -> @.displayOptions = !@.displayOptions - _loadEpics: () -> + _checkPermissions: () -> + @.permissions = { + canEdit: _.includes(@.project.my_permissions, 'modify_epic') + } + + loadEpics: () -> projectId = @.project.id - params = {} - promise = @rs.epics.listAll(projectId, params).then (epics) => + promise = @rs.epics.list(projectId).then (epics) => @.epics = epics + console.log @.epics module.controller("EpicsTableCtrl", EpicsTableController) diff --git a/app/modules/epics/dashboard/epics-table/epics-table.jade b/app/modules/epics/dashboard/epics-table/epics-table.jade index 2f64a270..6761b966 100644 --- a/app/modules/epics/dashboard/epics-table/epics-table.jade +++ b/app/modules/epics/dashboard/epics-table/epics-table.jade @@ -94,4 +94,6 @@ mixin epicSwitch(name, model) epic="epic" project="vm.project" column="vm.column" + on-update-epic-status="vm.loadEpics()" + permissions="vm.permissions" ) diff --git a/app/modules/resources/epics-resource.service.coffee b/app/modules/resources/epics-resource.service.coffee index d8c039c9..ddc4fe40 100644 --- a/app/modules/resources/epics-resource.service.coffee +++ b/app/modules/resources/epics-resource.service.coffee @@ -28,6 +28,19 @@ Resource = (urlsService, http) -> return http.get(url, params, httpOptions).then (result) -> 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 {"epics": service}