From 6b9858c1d36f29ffaa7b73c948f6355a1a6f6a98 Mon Sep 17 00:00:00 2001 From: Johannes Schill Date: Wed, 17 Jan 2018 16:13:45 +0100 Subject: [PATCH] dashfolders: Working user picker on the dashboard permissions page #10275 --- .../components/Permissions/Permissions.tsx | 32 +++++++++---------- .../core/components/UserPicker/UserPicker.tsx | 9 +++--- .../core/components/UserPicker/withPicker.tsx | 5 ++- .../PermissionsStore/PermissionsStore.ts | 9 ++---- 4 files changed, 26 insertions(+), 29 deletions(-) diff --git a/public/app/core/components/Permissions/Permissions.tsx b/public/app/core/components/Permissions/Permissions.tsx index 05cb1a8b4c7..3cbec61ebbb 100644 --- a/public/app/core/components/Permissions/Permissions.tsx +++ b/public/app/core/components/Permissions/Permissions.tsx @@ -1,9 +1,8 @@ import React, { Component } from 'react'; import PermissionsList from './PermissionsList'; -import _ from 'lodash'; import DevTools from 'mobx-react-devtools'; import { inject, observer } from 'mobx-react'; -// import UserPicker from 'app/core/components/UserPicker/UserPicker'; +import UserPicker, { User } from 'app/core/components/UserPicker/UserPicker'; export interface DashboardAcl { id?: number; @@ -29,6 +28,7 @@ export interface IProps { dashboardId: number; permissions?: any; isFolder: boolean; + backendSrv: any; } @inject('permissions') @@ -49,6 +49,7 @@ class Permissions extends Component { newType: string; canUpdate: boolean; error: string; + refreshList: any; readonly duplicateError = 'This permission exists already.'; @@ -59,6 +60,7 @@ class Permissions extends Component { this.typeChanged = this.typeChanged.bind(this); this.removeItem = this.removeItem.bind(this); this.update = this.update.bind(this); + this.userPicked = this.userPicked.bind(this); permissions.load(dashboardId, isFolder); this.state = { @@ -70,13 +72,8 @@ class Permissions extends Component { console.log('nextProps', nextProps); } - sortItems(items) { - return _.orderBy(items, ['sortRank', 'sortName'], ['desc', 'asc']); - } - permissionChanged(index: number, permission: number, permissionName: string) { const { permissions } = this.props; - // permissions.items[index].updatePermission(permission, permissionName); permissions.updatePermissionOnIndex(index, permission, permissionName); } @@ -117,9 +114,14 @@ class Permissions extends Component { }); } + userPicked(user: User) { + const { permissions } = this.props; + permissions.addStoreItem({ userId: user.id, userLogin: user.login, permission: 1 }); + } + render() { console.log('Permissions render'); - const { error, permissions } = this.props; + const { error, permissions, backendSrv } = this.props; const { newType } = this.state; return ( @@ -155,30 +157,26 @@ class Permissions extends Component { /> */} - {/* + {newType === 'User' ? (
- {' '} - User picker - + {/* - + /> */} +
) : null} {newType === 'Group' ? (
- {' '} Team picker - + {/* */}
) : null} - */} {error ? ( diff --git a/public/app/core/components/UserPicker/UserPicker.tsx b/public/app/core/components/UserPicker/UserPicker.tsx index f86017a5cdf..209d6920311 100644 --- a/public/app/core/components/UserPicker/UserPicker.tsx +++ b/public/app/core/components/UserPicker/UserPicker.tsx @@ -13,9 +13,9 @@ export interface IProps { export interface User { id: number; - name: string; + label: string; + avatarUrl: string; login: string; - email: string; } class UserPicker extends Component { @@ -33,12 +33,12 @@ class UserPicker extends Component { }); } - handleChange(user) { + handleChange(user: User) { const { userPicked } = this.props; userPicked(user); } - searchUsers(query) { + searchUsers(query?: string) { const { toggleLoading, backendSrv } = this.props; toggleLoading(true); @@ -48,6 +48,7 @@ class UserPicker extends Component { id: user.id, label: `${user.login} - ${user.email}`, avatarUrl: user.avatarUrl, + login: user.login, }; }); toggleLoading(false); diff --git a/public/app/core/components/UserPicker/withPicker.tsx b/public/app/core/components/UserPicker/withPicker.tsx index f5123fbe890..3edb304e1aa 100644 --- a/public/app/core/components/UserPicker/withPicker.tsx +++ b/public/app/core/components/UserPicker/withPicker.tsx @@ -1,6 +1,9 @@ import React, { Component } from 'react'; -export interface IProps {} +export interface IProps { + backendSrv: any; + userPicked: (user) => void; +} // export interface User { // id: number; diff --git a/public/app/stores/PermissionsStore/PermissionsStore.ts b/public/app/stores/PermissionsStore/PermissionsStore.ts index 6582601acb4..1349f02a475 100644 --- a/public/app/stores/PermissionsStore/PermissionsStore.ts +++ b/public/app/stores/PermissionsStore/PermissionsStore.ts @@ -51,13 +51,9 @@ export const PermissionsStore = types self.canUpdate = true; }, updatePermissionOnIndex(idx: number, permission: number, permissionName: string) { - // self.items[idx].permission = permission; - // self.items[idx].permissionName = permissionName; self.items[idx].updatePermission(permission, permissionName); self.canUpdate = true; }, - // load: flow(function* load(dashboardId: number) { - update: flow(function* update(dashboardId: number) { const backendSrv = getEnv(self).backendSrv; const updated = []; @@ -95,13 +91,12 @@ const prepareServerResponse = (response, dashboardId: number, isFolder: boolean) }; const prepareItem = (item, dashboardId: number, isFolder: boolean) => { - // TODO: this.meta - // item.inherited = !this.meta.isFolder && this.dashboardId !== item.dashboardId; item.inherited = !isFolder && dashboardId !== item.dashboardId; - // item.inherited = dashboardId !== item.dashboardId; + item.sortRank = 0; if (item.userId > 0) { item.icon = 'fa fa-fw fa-user'; + // TODO: Check what sce.trustAsHtml did // item.nameHtml = this.$sce.trustAsHtml(item.userLogin); item.nameHtml = item.userLogin; item.sortName = item.userLogin;