From 525063496d3a3eec82d8e7e5c0c99d6816449f3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Wed, 23 Jul 2014 12:54:41 +0200 Subject: [PATCH] Add directive to change the role of a member --- app/coffee/modules/admin/memberships.coffee | 88 +++++++++++++++---- .../modules/admin/admin-membership-table.jade | 6 +- 2 files changed, 74 insertions(+), 20 deletions(-) diff --git a/app/coffee/modules/admin/memberships.coffee b/app/coffee/modules/admin/memberships.coffee index 900deffe..5dd0da59 100644 --- a/app/coffee/modules/admin/memberships.coffee +++ b/app/coffee/modules/admin/memberships.coffee @@ -16,7 +16,7 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # -# File: modules/admin/project-profile.coffee +# File: modules/admin/project-profile.coffee TODO ### taiga = @.taiga @@ -222,22 +222,22 @@ MembershipsMemberAvatarDirective = ($log) -> """) - render = (member) -> + render = ($el, member) -> ctx = { - full_name: if member.full_name then member.full_name else "------" + full_name: if member.full_name then member.full_name else "" email: member.email imgurl: if member.photo then member.photo else "http://thecodeplayer.com/u/uifaces/12.jpg" } - return template(ctx) + html = template(ctx) + $el.html(html) link = ($scope, $el, $attrs) -> if not $attrs.tgMembershipsMemberAvatar? return $log.error "MembershipsMemberAvatarDirective: the directive need a member" member = $scope.$eval($attrs.tgMembershipsMemberAvatar) - html = render(member) - $el.html(html) + render($el, member) $scope.$on "$destroy", -> $el.off() @@ -271,10 +271,13 @@ MembershipsMemberActionsDirective = ($log, $repo, $confirm) -> """) # i18n - render = (member) -> + render = ($el, member) -> if member.user - return activedTemplate() - return pendingTemplate() + html = activedTemplate() + else + html = pendingTemplate() + + $el.html(html) link = ($scope, $el, $attrs) -> $ctrl = $el.controller() @@ -283,8 +286,7 @@ MembershipsMemberActionsDirective = ($log, $repo, $confirm) -> return $log.error "MembershipsMemberActionsDirective: the directive need a member" member = $scope.$eval($attrs.tgMembershipsMemberActions) - html = render(member) - $el.html(html) + render($el, member) $el.on "click", ".pending", (event) -> event.preventDefault() @@ -322,18 +324,18 @@ MembershipsMemberIsAdminCheckboxDirective = ($log, $repo, $confirm) -> """) # i18n - render = (member) -> + render = ($el, member) -> ctx = {inputId: "is-admin-#{member.id}"} - return template(ctx) + html = template(ctx) + $el.html(html) link = ($scope, $el, $attrs) -> if not $attrs.tgMembershipsMemberIsAdminCheckbox? return $log.error "MembershipsMemberIsAdminCheckboxDirective: the directive need a member" member = $scope.$eval($attrs.tgMembershipsMemberIsAdminCheckbox) - html = render(member) - $el.html(html) + html = render($el, member) if member.is_admin $el.find(":checkbox").prop("checked", true) @@ -357,3 +359,59 @@ MembershipsMemberIsAdminCheckboxDirective = ($log, $repo, $confirm) -> module.directive("tgMembershipsMemberIsAdminCheckbox", ["$log", "$tgRepo", "$tgConfirm", MembershipsMemberIsAdminCheckboxDirective]) +############################################################################# +## Member RoleSelector Directive +############################################################################# + +MembershipsMemberRoleSelectorDirective = ($log, $repo, $confirm) -> + template = _.template(""" + + """) + + render = ($el, member, roleList) -> + ctx = { + roleList: roleList, + selectedRole: member.role + } + + html = template(ctx) + $el.html(html) + + link = ($scope, $el, $attrs) -> + $ctrl = $el.controller() + + if not $attrs.tgMembershipsMemberRoleSelector? + return $log.error "MembershipsMemberRoleSelectorDirective: the directive need a member" + + member = $scope.$eval($attrs.tgMembershipsMemberRoleSelector) + roleList = $ctrl.scope.project.roles + html = render($el, member, roleList) + + $el.on "click", "select", (event) => + onSuccess = -> + $confirm.notify("success") + + onError = -> + $confirm.notify("error") + + target = angular.element(event.currentTarget) + newRole = parseInt(target.val(), 10) + + if member.role != newRole + member.role = newRole + $repo.save(member).then(onSuccess, onError) + + $scope.$on "$destroy", -> + $el.off() + + return {link: link} + + +module.directive("tgMembershipsMemberRoleSelector", ["$log", "$tgRepo", "$tgConfirm", + MembershipsMemberRoleSelectorDirective]) diff --git a/app/partials/views/modules/admin/admin-membership-table.jade b/app/partials/views/modules/admin/admin-membership-table.jade index 083a1ecc..73b300da 100644 --- a/app/partials/views/modules/admin/admin-membership-table.jade +++ b/app/partials/views/modules/admin/admin-membership-table.jade @@ -8,9 +8,5 @@ section.admin-membership-table.basic-table div.row(ng-repeat="member in memberships") div.row-member(tg-memberships-member-avatar="member") div.row-admin(tg-memberships-member-is-admin-checkbox="member") - div.row-role - select(ng-model="member.role") - option UX - option Front - option Back + div.row-role(tg-memberships-member-role-selector="member") div.row-status(tg-memberships-member-actions="member")