Refactoring assign-to

stable
Daniel García 2018-08-22 14:13:10 +02:00 committed by Alex Hermida
parent b853a26261
commit 3e3187dc0a
6 changed files with 109 additions and 154 deletions

View File

@ -333,7 +333,7 @@ AssignedUsersDirective = ($rootscope, $confirm, $repo, $modelTransform, $templat
item = _.clone($model.$modelValue, false) item = _.clone($model.$modelValue, false)
$rootscope.$broadcast("assigned-user:add", item) $rootscope.$broadcast("assigned-user:add", item)
assignToMe = -> $scope.selfAssign = () ->
return if not isEditable() return if not isEditable()
currentUserId = $currentUserService.getUser().get('id') currentUserId = $currentUserService.getUser().get('id')
assignedUsers = _.clone($model.$modelValue.assigned_users, false) assignedUsers = _.clone($model.$modelValue.assigned_users, false)
@ -341,6 +341,22 @@ AssignedUsersDirective = ($rootscope, $confirm, $repo, $modelTransform, $templat
assignedUsers = _.uniq(assignedUsers) assignedUsers = _.uniq(assignedUsers)
save(assignedUsers, currentUserId) save(assignedUsers, currentUserId)
$scope.unassign = (user) ->
return if not isEditable()
target = angular.element(event.currentTarget)
assignedUserId = user.id
title = $translate.instant("COMMON.ASSIGNED_USERS.TITLE_LIGHTBOX_DELETE_ASSIGNED")
message = $scope.usersById[assignedUserId].full_name_display
$confirm.askOnDelete(title, message).then (askResponse) ->
askResponse.finish()
assignedUserIds = _.clone($model.$modelValue.assigned_users, false)
assignedUserIds = _.pull(assignedUserIds, assignedUserId)
deleteAssignedUser(assignedUserIds)
deleteAssignedUser = (assignedUserIds) -> deleteAssignedUser = (assignedUserIds) ->
transform = $modelTransform.save (item) -> transform = $modelTransform.save (item) ->
item.assigned_users = assignedUserIds item.assigned_users = assignedUserIds
@ -368,24 +384,6 @@ AssignedUsersDirective = ($rootscope, $confirm, $repo, $modelTransform, $templat
$scope.isEditable = isEditable() $scope.isEditable = isEditable()
$scope.isAssigned = isAssigned() $scope.isAssigned = isAssigned()
$scope.openAssignedUsers = openAssignedUsers $scope.openAssignedUsers = openAssignedUsers
$scope.assignToMe = assignToMe
$el.on "click", ".remove-user", (event) ->
event.preventDefault()
return if not isEditable()
target = angular.element(event.currentTarget)
assignedUserId = target.data("assigned-user-id")
title = $translate.instant("COMMON.ASSIGNED_USERS.TITLE_LIGHTBOX_DELETE_ASSIGNED")
message = $scope.usersById[assignedUserId].full_name_display
$confirm.askOnDelete(title, message).then (askResponse) =>
askResponse.finish()
assignedUserIds = _.clone($model.$modelValue.assigned_users, false)
assignedUserIds = _.pull(assignedUserIds, assignedUserId)
deleteAssignedUser(assignedUserIds)
$scope.$on "assigned-user:deleted", (ctx, assignedUserId) -> $scope.$on "assigned-user:deleted", (ctx, assignedUserId) ->
assignedUsersIds = _.clone($model.$modelValue.assigned_users, false) assignedUsersIds = _.clone($model.$modelValue.assigned_users, false)
@ -418,15 +416,17 @@ AssignedUsersDirective = ($rootscope, $confirm, $repo, $modelTransform, $templat
require:"ngModel" require:"ngModel"
} }
module.directive("tgAssignedUsers", ["$rootScope", "$tgConfirm", "$tgRepo", "$tgQueueModelTransformation", "$tgTemplate", "$compile", module.directive("tgAssignedUsers", ["$rootScope", "$tgConfirm", "$tgRepo",
"$translate", "tgCurrentUserService", AssignedUsersDirective]) "$tgQueueModelTransformation", "$tgTemplate", "$compile", "$translate", "tgCurrentUserService",
AssignedUsersDirective])
############################################################################# #############################################################################
## Assigned to directive ## Assigned to directive
############################################################################# #############################################################################
AssignedToDirective = ($rootscope, $confirm, $repo, $loading, $modelTransform, $template, $translate, $compile, $currentUserService, avatarService) -> AssignedToDirective = ($rootscope, $confirm, $repo, $loading, $modelTransform, $template,
$translate, $compile, $currentUserService, avatarService) ->
# You have to include a div with the tg-lb-assignedto directive in the page # You have to include a div with the tg-lb-assignedto directive in the page
# where use this directive # where use this directive
template = $template.get("common/components/assigned-to.html", true) template = $template.get("common/components/assigned-to.html", true)
@ -445,12 +445,10 @@ AssignedToDirective = ($rootscope, $confirm, $repo, $loading, $modelTransform, $
transform = $modelTransform.save (item) -> transform = $modelTransform.save (item) ->
item.assigned_to = userId item.assigned_to = userId
return item return item
transform.then -> transform.then (item) ->
currentLoading.finish() currentLoading.finish()
renderAssignedTo($modelTransform.getObj())
$rootscope.$broadcast("object:updated") $rootscope.$broadcast("object:updated")
transform.then null, -> transform.then null, ->
@ -459,60 +457,48 @@ AssignedToDirective = ($rootscope, $confirm, $repo, $loading, $modelTransform, $
return transform return transform
renderAssignedTo = (assignedObject) -> render = () ->
avatar = avatarService.getAvatar(assignedObject?.assigned_to_extra_info) template = $template.get("common/components/assigned-to.html")
bg = null templateScope = $scope.$new()
compiledTemplate = $compile(template)(templateScope)
$el.html(compiledTemplate)
if assignedObject?.assigned_to? $scope.assign = () ->
fullName = assignedObject.assigned_to_extra_info.full_name_display $rootscope.$broadcast("assigned-to:add", $model.$modelValue)
isUnassigned = false
bg = avatar.bg
else
fullName = $translate.instant("COMMON.ASSIGNED_TO.ASSIGN")
isUnassigned = true
isIocaine = assignedObject?.is_iocaine $scope.unassign = () ->
ctx = {
fullName: fullName
avatar: avatar.url
bg: bg
isUnassigned: isUnassigned
isEditable: isEditable()
isIocaine: isIocaine
fullNameVisible: !(isUnassigned && !$currentUserService.isAuthenticated())
}
html = $compile(template(ctx))($scope)
$el.html(html)
$el.on "click", ".user-assigned", (event) ->
event.preventDefault()
return if not isEditable()
$scope.$apply ->
$rootscope.$broadcast("assigned-to:add", $model.$modelValue)
$el.on "click", ".assign-to-me", (event) ->
event.preventDefault()
return if not isEditable()
$model.$modelValue.assigned_to = $currentUserService.getUser().get('id')
save($currentUserService.getUser().get('id'))
$el.on "click", ".remove-user", (event) ->
event.preventDefault()
return if not isEditable()
title = $translate.instant("COMMON.ASSIGNED_TO.CONFIRM_UNASSIGNED") title = $translate.instant("COMMON.ASSIGNED_TO.CONFIRM_UNASSIGNED")
$confirm.ask(title).then (response) ->
$confirm.ask(title).then (response) =>
response.finish() response.finish()
$model.$modelValue.assigned_to = null
save(null) save(null)
$scope.selfAssign = () ->
userId = $currentUserService.getUser().get('id')
save(userId)
$scope.$on "assigned-to:added", (ctx, userId, item) -> $scope.$on "assigned-to:added", (ctx, userId, item) ->
return if item.id != $model.$modelValue.id return if item.id != $model.$modelValue.id
save(userId) save(userId)
$scope.$watch $attrs.ngModel, (instance) -> $scope.$watch $attrs.ngModel, (instance) ->
renderAssignedTo(instance) if instance?.assigned_to
$scope.selected = instance.assigned_to
assigned_to_extra_info = $scope.usersById[$scope.selected]
$scope.fullName = assigned_to_extra_info?.full_name_display
$scope.isUnassigned = false
$scope.avatar = avatarService.getAvatar(assigned_to_extra_info)
$scope.bg = $scope.avatar.bg
$scope.isIocaine = instance?.is_iocaine
else
$scope.fullName = $translate.instant("COMMON.ASSIGNED_TO.ASSIGN")
$scope.isUnassigned = true
$scope.avatar = avatarService.getAvatar(null)
$scope.bg = null
$scope.isIocaine = false
$scope.fullNameVisible = !($scope.isUnassigned && !$currentUserService.isAuthenticated())
$scope.isEditable = isEditable()
render()
$scope.$on "$destroy", -> $scope.$on "$destroy", ->
$el.off() $el.off()
@ -522,8 +508,9 @@ AssignedToDirective = ($rootscope, $confirm, $repo, $loading, $modelTransform, $
require:"ngModel" require:"ngModel"
} }
module.directive("tgAssignedTo", ["$rootScope", "$tgConfirm", "$tgRepo", "$tgLoading", "$tgQueueModelTransformation", "$tgTemplate", "$translate", "$compile","tgCurrentUserService", "tgAvatarService", module.directive("tgAssignedTo", ["$rootScope", "$tgConfirm", "$tgRepo", "$tgLoading",
AssignedToDirective]) "$tgQueueModelTransformation", "$tgTemplate", "$translate", "$compile","tgCurrentUserService",
"tgAvatarService", AssignedToDirective])
@ -544,7 +531,7 @@ $translate, $compile, $currentUserService, avatarService) ->
text = normalizeString(text) text = normalizeString(text)
return _.includes(username, text) return _.includes(username, text)
renderUserlist = (text) -> renderUserList = (text) ->
users = _.clone($scope.activeUsers, true) users = _.clone($scope.activeUsers, true)
users = _.reject(users, {"id": $scope.selected.id}) if $scope.selected? users = _.reject(users, {"id": $scope.selected.id}) if $scope.selected?
users = _.sortBy(users, (o) -> if o.id is $scope.user.id then 0 else o.id) users = _.sortBy(users, (o) -> if o.id is $scope.user.id then 0 else o.id)
@ -575,33 +562,27 @@ $translate, $compile, $currentUserService, avatarService) ->
$scope.fullNameVisible = !($scope.isUnassigned && !$currentUserService.isAuthenticated()) $scope.fullNameVisible = !($scope.isUnassigned && !$currentUserService.isAuthenticated())
$scope.isEditable = isEditable() $scope.isEditable = isEditable()
$el.on "click", ".users-dropdown", (event) ->
event.preventDefault()
event.stopPropagation()
renderUserlist()
$scope.$apply()
$el.find(".pop-users").popover().open()
$el.on "click", ".users-search", (event) -> $el.on "click", ".users-search", (event) ->
event.stopPropagation() event.stopPropagation()
$el.on "click", ".assign-to-me", (event) -> $el.on "click", ".users-dropdown", (event) ->
event.preventDefault() event.preventDefault()
return if not isEditable() event.stopPropagation()
renderUserList()
$scope.$apply()
$el.find(".pop-users").popover().open()
$scope.selfAssign = () ->
$model.$modelValue.assigned_to = $currentUserService.getUser().get('id') $model.$modelValue.assigned_to = $currentUserService.getUser().get('id')
renderUser($model.$modelValue) renderUser($model.$modelValue)
$scope.$apply()
$el.on "click", ".remove-user", (event) -> $scope.unassign = () ->
event.preventDefault()
return if not isEditable()
$model.$modelValue.assigned_to = null $model.$modelValue.assigned_to = null
renderUser() renderUser()
$scope.$apply()
$scope.$watch "usersSearch", (searchingText) -> $scope.$watch "usersSearch", (searchingText) ->
if searchingText? if searchingText?
renderUserlist(searchingText) renderUserList(searchingText)
$el.find('input').focus() $el.find('input').focus()
$el.on "click", ".user-list-single", (event) -> $el.on "click", ".user-list-single", (event) ->
@ -704,16 +685,14 @@ $translate, $compile, $currentUserService, avatarService) ->
$scope.$apply() $scope.$apply()
$el.find(".pop-users").popover().open() $el.find(".pop-users").popover().open()
$el.on "click", ".users-search", (event) -> $scope.selfAssign = () ->
event.stopPropagation()
$el.on "click", ".assign-to-me", (event) ->
event.preventDefault()
currentAssignedIds.push($currentUserService.getUser().get('id')) currentAssignedIds.push($currentUserService.getUser().get('id'))
renderUsers() renderUsers()
applyToModel() applyToModel()
$scope.usersSearch = null $scope.usersSearch = null
$scope.$apply()
$el.on "click", ".users-search", (event) ->
event.stopPropagation()
$scope.$watch "usersSearch", (searchingText) -> $scope.$watch "usersSearch", (searchingText) ->
if searchingText? if searchingText?
@ -722,6 +701,7 @@ $translate, $compile, $currentUserService, avatarService) ->
$el.on "click", ".user-list-single", (event) -> $el.on "click", ".user-list-single", (event) ->
event.preventDefault() event.preventDefault()
event.stopPropagation()
target = angular.element(event.currentTarget) target = angular.element(event.currentTarget)
index = currentAssignedIds.indexOf(target.data("user-id")) index = currentAssignedIds.indexOf(target.data("user-id"))
if index == -1 if index == -1
@ -729,21 +709,10 @@ $translate, $compile, $currentUserService, avatarService) ->
else else
currentAssignedIds.splice(index, 1) currentAssignedIds.splice(index, 1)
renderUsers() renderUsers()
applyToModel()
$el.find(".pop-users").popover().close() $el.find(".pop-users").popover().close()
$scope.usersSearch = null $scope.usersSearch = null
$scope.$apply() $scope.$apply()
$el.on "click", ".remove-user", (event) ->
event.preventDefault()
target = angular.element(event.currentTarget)
index = currentAssignedIds.indexOf(target.data("user-id"))
if index > -1
currentAssignedIds.splice(index, 1)
renderUsers()
applyToModel()
$scope.$apply()
$scope.$watch $attrs.ngModel, (item) -> $scope.$watch $attrs.ngModel, (item) ->
return if not item? return if not item?
currentAssignedIds = [] currentAssignedIds = []

View File

@ -1079,11 +1079,6 @@ $confirm, $q, attachmentsService, $template, $compile) ->
$scope.$broadcast("status:changed", $scope.obj.status) $scope.$broadcast("status:changed", $scope.obj.status)
$el.find(".pop-status").popover().close() $el.find(".pop-status").popover().close()
$el.on "click", ".users-dropdown", (event) ->
event.preventDefault()
event.stopPropagation()
$el.find(".pop-users").popover().open()
$el.on "click", ".team-requirement", (event) -> $el.on "click", ".team-requirement", (event) ->
$scope.obj.team_requirement = not $scope.obj.team_requirement $scope.obj.team_requirement = not $scope.obj.team_requirement
$scope.$apply() $scope.$apply()

View File

@ -53,11 +53,13 @@
div(ng-if="isUnassigned") div(ng-if="isUnassigned")
a.assign-to-me( a.assign-to-me(
href="#" href="#"
ng-click="selfAssign()"
title="{{'COMMON.ASSIGNED_TO.SELF' | translate}}" title="{{'COMMON.ASSIGNED_TO.SELF' | translate}}"
) )
span {{ "COMMON.ASSIGNED_TO.SELF" | translate }} span {{ "COMMON.ASSIGNED_TO.SELF" | translate }}
tg-svg.remove-user( tg-svg.remove-user(
ng-click="unassign()"
ng-if="isEditable && !isUnassigned" ng-if="isEditable && !isUnassigned"
svg-icon="icon-close", svg-icon="icon-close",
title="{{'COMMON.ASSIGNED_TO.DELETE_ASSIGNMENT' | translate}}" title="{{'COMMON.ASSIGNED_TO.DELETE_ASSIGNMENT' | translate}}"

View File

@ -1,55 +1,44 @@
.user-avatar(class!="<% if (isIocaine) { %> is-iocaine <% }; %>") .user-avatar(ng-class!="{ 'is-iocaine': isIocaine }")
img( img(
style!="background-color: <%- bg %>" style="background-color: {{ bg }}"
src!="<%- avatar %>" src="{{ avatar.url }}"
alt!="<%- fullName %>" alt="{{ fullName }}"
)
.iocaine-symbol(
ng-if="isIocaine"
title="{{ 'TASK.TITLE_ACTION_IOCAINE' | translate }}"
) )
<% if (isIocaine) { %>
.iocaine-symbol(title="{{ 'TASK.TITLE_ACTION_IOCAINE' | translate }}")
tg-svg(svg-icon="icon-iocaine") tg-svg(svg-icon="icon-iocaine")
<% }; %>
.assigned-to .assigned-to
<% if (isUnassigned) { %>
.assigned-title {{ "COMMON.ASSIGNED_TO.NOT_ASSIGNED" | translate }}
<% } else { %>
.assigned-title {{ "COMMON.FIELDS.ASSIGNED_TO" | translate }}
<% }; %>
.assigned-to-options .assigned-to-options
<% if (!isEditable && fullNameVisible) { %> span.assigned-name(
span.assigned-name(ng-non-bindable) ng-if="!isEditable && fullNameVisible"
<%- fullName %> ) {{ fullName }}
<% }; %>
<% if (isEditable) { %> span.user-assigned(
a(
href=""
title="{{ 'COMMON.ASSIGNED_TO.TITLE_ACTION_EDIT_ASSIGNMENT'|translate }}" title="{{ 'COMMON.ASSIGNED_TO.TITLE_ACTION_EDIT_ASSIGNMENT'|translate }}"
class!="user-assigned <% if (isEditable) { %>editable<% }; %>" ng-class="{ 'editable': isEditable }"
ng-if="isEditable"
ng-click="assign()"
) )
span.assigned-name(ng-non-bindable) span.assigned-name
<% if (fullNameVisible) { %> span(ng-if="fullNameVisible") {{ fullName }}
<%- fullName %>
<% }; %>
<% if (!isUnassigned) { %>
tg-svg(svg-icon="icon-arrow-down")
<% }; %>
<% }; %>
<% if (isEditable && isUnassigned) { %> span(ng-if="isUnassigned")
span(translate="COMMON.OR") | &nbsp;
| &nbsp; span(translate="COMMON.OR")
a.assign-to-me( | &nbsp;
href="#" a.assign-to-me(
title="{{'COMMON.ASSIGNED_TO.SELF' | translate}}" href="#"
) title="{{'COMMON.ASSIGNED_TO.SELF' | translate}}"
span {{ "COMMON.ASSIGNED_TO.SELF" | translate }} ng-click="selfAssign()"
<% }; %> )
span {{ "COMMON.ASSIGNED_TO.SELF" | translate }}
<% if (isEditable && !isUnassigned) { %>
tg-svg.remove-user( tg-svg.remove-user(
ng-click="unassign()"
ng-if="isEditable && !isUnassigned"
svg-icon="icon-close", svg-icon="icon-close",
title="{{'COMMON.ASSIGNED_TO.DELETE_ASSIGNMENT' | translate}}" title="{{'COMMON.ASSIGNED_TO.DELETE_ASSIGNMENT' | translate}}"
) )
<% } %>

View File

@ -22,13 +22,12 @@ div(ng-if="isAssigned")
tg-svg.remove-user( tg-svg.remove-user(
svg-icon="icon-close", svg-icon="icon-close",
title="{{'COMMON.ASSIGNED_TO.DELETE_ASSIGNMENT' | translate}}" title="{{'COMMON.ASSIGNED_TO.DELETE_ASSIGNMENT' | translate}}"
data-user-id="{{ assignedUsers[0].id }}" ng-click="unassign(assignedUsers[0])"
) )
div.add-assigned div.add-assigned
a.users-dropdown.tg-add-assigned( a.users-dropdown.tg-add-assigned(
href="" href=""
ng-click="openAssignedUsers()"
) )
tg-svg.add-assigned( tg-svg.add-assigned(
data-assigned-user-id="{{assignedUser.id}}", data-assigned-user-id="{{assignedUser.id}}",
@ -49,7 +48,6 @@ div(ng-if="isAssigned")
a.users-dropdown.user-assigned( a.users-dropdown.user-assigned(
href="" href=""
title="{{ 'COMMON.ASSIGNED_TO.TITLE_ACTION_EDIT_ASSIGNMENT'|translate }}" title="{{ 'COMMON.ASSIGNED_TO.TITLE_ACTION_EDIT_ASSIGNMENT'|translate }}"
class="user-assigned"
) )
span.assigned-name {{ "COMMON.ASSIGNED_TO.ASSIGN" | translate }} span.assigned-name {{ "COMMON.ASSIGNED_TO.ASSIGN" | translate }}
| &nbsp; | &nbsp;
@ -57,6 +55,7 @@ div(ng-if="isAssigned")
| &nbsp; | &nbsp;
a.assign-to-me( a.assign-to-me(
href="#" href="#"
ng-click="selfAssign()"
title="{{'COMMON.ASSIGNED_TO.SELF' | translate}}" title="{{'COMMON.ASSIGNED_TO.SELF' | translate}}"
) )
span {{ "COMMON.ASSIGNED_TO.SELF" | translate }} span {{ "COMMON.ASSIGNED_TO.SELF" | translate }}
@ -85,7 +84,7 @@ div.pop-users.popover(ng-class="{'multiple': assignedUsers.length > 0}")
) {{ user.full_name_display }} ) {{ user.full_name_display }}
tg-svg.remove( tg-svg.remove(
href="" href=""
data-user-id="{{ user.id }}" ng-click="unassign(user)"
ng-if="selected.indexOf(user) > -1" ng-if="selected.indexOf(user) > -1"
svg-icon="icon-close", svg-icon="icon-close",
title="{{'COMMON.ASSIGNED_TO.DELETE_ASSIGNMENT' | translate}}" title="{{'COMMON.ASSIGNED_TO.DELETE_ASSIGNMENT' | translate}}"

View File

@ -28,7 +28,7 @@
a.assign-to-me( a.assign-to-me(
href="#" href="#"
title="{{'COMMON.ASSIGNED_TO.SELF' | translate}}" title="{{'COMMON.ASSIGNED_TO.SELF' | translate}}"
ng-click="assignToMe()" ng-click="selfAssign()"
) )
span {{ "COMMON.ASSIGNED_TO.SELF" | translate }} span {{ "COMMON.ASSIGNED_TO.SELF" | translate }}
@ -41,13 +41,14 @@
.user-list-name.assigned-users-options .user-list-name.assigned-users-options
a( a(
href="" href=""
ng-click="assign()"
title="{{ 'COMMON.ASSIGNED_TO.TITLE_ACTION_EDIT_ASSIGNMENT'|translate }}" title="{{ 'COMMON.ASSIGNED_TO.TITLE_ACTION_EDIT_ASSIGNMENT'|translate }}"
class!="user-assigned <% if (isEditable) { %>editable<% }; %>" class!="user-assigned <% if (isEditable) { %>editable<% }; %>"
) )
span.assigned-name {{assignedUser.full_name_display}} span.assigned-name {{assignedUser.full_name_display}}
tg-svg.remove-user( tg-svg.remove-user(
ng-if="isEditable", ng-if="isEditable",
data-assigned-user-id="{{assignedUser.id}}" ng-click="unassign(assignedUser)"
svg-icon="icon-close", svg-icon="icon-close",
title="{{'COMMON.ASSIGNED_TO.DELETE_ASSIGNMENT' | translate}}" title="{{'COMMON.ASSIGNED_TO.DELETE_ASSIGNMENT' | translate}}"
) )