dashfolders: fix user group picker + cleanup
This commit is contained in:
@@ -66,6 +66,7 @@ func SearchUserGroups(c *middleware.Context) Response {
|
|||||||
Name: c.Query("name"),
|
Name: c.Query("name"),
|
||||||
Page: page,
|
Page: page,
|
||||||
Limit: perPage,
|
Limit: perPage,
|
||||||
|
OrgId: c.OrgId,
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := bus.Dispatch(&query); err != nil {
|
if err := bus.Dispatch(&query); err != nil {
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ type SearchUserGroupsQuery struct {
|
|||||||
Name string
|
Name string
|
||||||
Limit int
|
Limit int
|
||||||
Page int
|
Page int
|
||||||
|
OrgId int64
|
||||||
|
|
||||||
Result SearchUserGroupQueryResult
|
Result SearchUserGroupQueryResult
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -119,12 +119,16 @@ func SearchUserGroups(query *m.SearchUserGroupsQuery) error {
|
|||||||
queryWithWildcards := "%" + query.Query + "%"
|
queryWithWildcards := "%" + query.Query + "%"
|
||||||
|
|
||||||
sess := x.Table("user_group")
|
sess := x.Table("user_group")
|
||||||
|
sess.Where("org_id=?", query.OrgId)
|
||||||
|
|
||||||
if query.Query != "" {
|
if query.Query != "" {
|
||||||
sess.Where("name LIKE ?", queryWithWildcards)
|
sess.Where("name LIKE ?", queryWithWildcards)
|
||||||
}
|
}
|
||||||
if query.Name != "" {
|
if query.Name != "" {
|
||||||
sess.Where("name=?", query.Name)
|
sess.Where("name=?", query.Name)
|
||||||
}
|
}
|
||||||
|
sess.Asc("name")
|
||||||
|
|
||||||
offset := query.Limit * (query.Page - 1)
|
offset := query.Limit * (query.Page - 1)
|
||||||
sess.Limit(query.Limit, offset)
|
sess.Limit(query.Limit, offset)
|
||||||
sess.Cols("id", "name")
|
sess.Cols("id", "name")
|
||||||
@@ -222,7 +226,7 @@ func GetUserGroupMembers(query *m.GetUserGroupMembersQuery) error {
|
|||||||
sess.Join("INNER", "user", fmt.Sprintf("user_group_member.user_id=%s.id", x.Dialect().Quote("user")))
|
sess.Join("INNER", "user", fmt.Sprintf("user_group_member.user_id=%s.id", x.Dialect().Quote("user")))
|
||||||
sess.Where("user_group_member.user_group_id=?", query.UserGroupId)
|
sess.Where("user_group_member.user_group_id=?", query.UserGroupId)
|
||||||
sess.Cols("user.org_id", "user_group_member.user_group_id", "user_group_member.user_id", "user.email", "user.login")
|
sess.Cols("user.org_id", "user_group_member.user_group_id", "user_group_member.user_id", "user.email", "user.login")
|
||||||
sess.Asc("user.email", "user.login")
|
sess.Asc("user.login", "user.email")
|
||||||
|
|
||||||
err := sess.Find(&query.Result)
|
err := sess.Find(&query.Result)
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -5,44 +5,45 @@
|
|||||||
<h1>Edit User Group</h1>
|
<h1>Edit User Group</h1>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<form name="userGroupDetailsForm" class="gf-form-group">
|
<form name="userGroupDetailsForm" class="gf-form-group gf-form-inline">
|
||||||
<div class="gf-form">
|
<div class="gf-form">
|
||||||
<span class="gf-form-label width-10">Name</span>
|
<span class="gf-form-label width-10">Name</span>
|
||||||
<input type="text" required ng-model="ctrl.userGroup.name" class="gf-form-input max-width-14" >
|
<input type="text" required ng-model="ctrl.userGroup.name" class="gf-form-input max-width-14" >
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="gf-form-button-row">
|
<div class="gf-form">
|
||||||
<button type="submit" class="btn btn-success" ng-click="ctrl.update()">Update</button>
|
<button type="submit" class="btn btn-success" ng-click="ctrl.update()">Update</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<h3 class="page-heading">User Group Members</h3>
|
<div class="gf-form-group">
|
||||||
|
<h3 class="page-heading">User Group Members</h3>
|
||||||
|
|
||||||
<form name="ctrl.addMemberForm" class="gf-form-group">
|
<form name="ctrl.addMemberForm" class="gf-form-group">
|
||||||
<div class="gf-form">
|
<div class="gf-form">
|
||||||
<span class="gf-form-label width-10">Name</span>
|
<span class="gf-form-label width-10">User</span>
|
||||||
<user-picker user-id="ctrl.userId"></user-picker>
|
<user-picker user-picked="ctrl.userPicked($user)"></user-picker>
|
||||||
</div>
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
<div class="gf-form-button-row">
|
<table class="grafana-options-table" ng-show="ctrl.userGroupMembers.length > 0">
|
||||||
<button type="submit" class="btn btn-success" ng-click="ctrl.addMember()">Add</button>
|
<tr>
|
||||||
</div>
|
<th>Username</th>
|
||||||
</form>
|
<th>Email</th>
|
||||||
|
<th></th>
|
||||||
<table class="grafana-options-table">
|
</tr>
|
||||||
<tr>
|
<tr ng-repeat="member in ctrl.userGroupMembers">
|
||||||
<th>Username</th>
|
<td>{{member.login}}</td>
|
||||||
<th>Email</th>
|
<td>{{member.email}}</td>
|
||||||
<th></th>
|
<td style="width: 1%">
|
||||||
</tr>
|
<a ng-click="ctrl.removeUserGroupMember(member)" class="btn btn-danger btn-mini">
|
||||||
<tr ng-repeat="userGroup in ctrl.userGroupMembers">
|
<i class="fa fa-remove"></i>
|
||||||
<td>{{userGroup.login}}</td>
|
</a>
|
||||||
<td>{{userGroup.email}}</td>
|
</td>
|
||||||
<td style="width: 1%">
|
</tr>
|
||||||
<a ng-click="ctrl.removeUserGroupMember(userGroup)" class="btn btn-danger btn-mini">
|
</table>
|
||||||
<i class="fa fa-remove"></i>
|
<div>
|
||||||
</a>
|
<em class="muted" ng-hide="ctrl.userGroupMembers.length > 0">
|
||||||
</td>
|
This user group has no members yet.
|
||||||
</tr>
|
</em>
|
||||||
</table>
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="admin-list-table">
|
<div class="admin-list-table">
|
||||||
<table class="filter-table form-inline">
|
<table class="filter-table form-inline" ng-show="ctrl.userGroups.length > 0">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Id</th>
|
<th>Id</th>
|
||||||
@@ -54,4 +54,8 @@
|
|||||||
</li>
|
</li>
|
||||||
</ol>
|
</ol>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<em class="muted" ng-hide="ctrl.userGroups.length > 0">
|
||||||
|
No User Groups found.
|
||||||
|
</em>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -21,18 +21,20 @@ var backendSrv = {
|
|||||||
backendSrv: backendSrv,
|
backendSrv: backendSrv,
|
||||||
$routeParams: {id: 1}
|
$routeParams: {id: 1}
|
||||||
});
|
});
|
||||||
ctx.ctrl.userId = 1;
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
describe('when user is chosen to be added to user group', () => {
|
describe('when user is chosen to be added to user group', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
ctx.ctrl.addMemberForm = {$valid: true};
|
const userItem = {
|
||||||
ctx.ctrl.addMember();
|
id: 2,
|
||||||
|
login: 'user2',
|
||||||
|
};
|
||||||
|
ctx.ctrl.userPicked(userItem);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should parse the result and save to db', () => {
|
it('should parse the result and save to db', () => {
|
||||||
expect(backendSrv.post.getCall(0).args[0]).to.eql('/api/user-groups/1/members');
|
expect(backendSrv.post.getCall(0).args[0]).to.eql('/api/user-groups/1/members');
|
||||||
expect(backendSrv.post.getCall(0).args[1].userId).to.eql(1);
|
expect(backendSrv.post.getCall(0).args[1].userId).to.eql(2);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should refresh the list after saving.', () => {
|
it('should refresh the list after saving.', () => {
|
||||||
|
|||||||
@@ -6,9 +6,7 @@ import _ from 'lodash';
|
|||||||
export default class UserGroupDetailsCtrl {
|
export default class UserGroupDetailsCtrl {
|
||||||
userGroup: UserGroup;
|
userGroup: UserGroup;
|
||||||
userGroupMembers: User[] = [];
|
userGroupMembers: User[] = [];
|
||||||
userId: number;
|
|
||||||
navModel: any;
|
navModel: any;
|
||||||
addMemberForm: any;
|
|
||||||
|
|
||||||
constructor(private $scope, private $http, private backendSrv, private $routeParams, navModelSrv) {
|
constructor(private $scope, private $http, private backendSrv, private $routeParams, navModelSrv) {
|
||||||
this.navModel = navModelSrv.getOrgNav(3);
|
this.navModel = navModelSrv.getOrgNav(3);
|
||||||
@@ -51,11 +49,9 @@ export default class UserGroupDetailsCtrl {
|
|||||||
this.backendSrv.put('/api/user-groups/' + this.userGroup.id, {name: this.userGroup.name});
|
this.backendSrv.put('/api/user-groups/' + this.userGroup.id, {name: this.userGroup.name});
|
||||||
}
|
}
|
||||||
|
|
||||||
addMember() {
|
userPicked(user) {
|
||||||
if (!this.addMemberForm.$valid) { return; }
|
this.backendSrv.post(`/api/user-groups/${this.$routeParams.id}/members`, {userId: user.id}).then(() => {
|
||||||
|
this.$scope.$broadcast('user-picker-reset');
|
||||||
this.backendSrv.post(`/api/user-groups/${this.$routeParams.id}/members`, {userId: this.userId}).then(() => {
|
|
||||||
this.userId = null;
|
|
||||||
this.get();
|
this.get();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user