diff --git a/pkg/api/dashboard.go b/pkg/api/dashboard.go index 210b6fd1d55..cf9f6b6bb8b 100644 --- a/pkg/api/dashboard.go +++ b/pkg/api/dashboard.go @@ -99,6 +99,7 @@ func GetDashboard(c *middleware.Context) Response { return ApiError(500, "Dashboard folder could not be read", err) } meta.FolderTitle = query.Result.Title + meta.FolderSlug = query.Result.Slug } // make sure db version is in sync with json model version diff --git a/pkg/api/dtos/dashboard.go b/pkg/api/dtos/dashboard.go index 0be0537527b..e101b0ff623 100644 --- a/pkg/api/dtos/dashboard.go +++ b/pkg/api/dtos/dashboard.go @@ -26,6 +26,7 @@ type DashboardMeta struct { IsFolder bool `json:"isFolder"` FolderId int64 `json:"folderId"` FolderTitle string `json:"folderTitle"` + FolderSlug string `json:"folderSlug"` } type DashboardFullWithMeta struct { diff --git a/public/app/core/angular_wrappers.ts b/public/app/core/angular_wrappers.ts index a51a9c8175e..bc3fb08d822 100644 --- a/public/app/core/angular_wrappers.ts +++ b/public/app/core/angular_wrappers.ts @@ -20,5 +20,11 @@ export function registerAngularDirectives() { ['tagOptions', { watchDepth: 'reference' }], ]); react2AngularDirective('selectUserPicker', UserPicker, ['backendSrv', 'handlePicked']); - react2AngularDirective('dashboardPermissions', DashboardPermissions, ['backendSrv', 'dashboardId', 'folderTitle']); + react2AngularDirective('dashboardPermissions', DashboardPermissions, [ + 'backendSrv', + 'dashboardId', + 'folderTitle', + 'folderSlug', + 'folderId', + ]); } diff --git a/public/app/core/components/Permissions/DashboardPermissions.tsx b/public/app/core/components/Permissions/DashboardPermissions.tsx index 0e6d644b989..f3c278c73cc 100644 --- a/public/app/core/components/Permissions/DashboardPermissions.tsx +++ b/public/app/core/components/Permissions/DashboardPermissions.tsx @@ -6,7 +6,9 @@ import PermissionsInfo from 'app/core/components/Permissions/PermissionsInfo'; export interface IProps { dashboardId: number; + folderId: number; folderTitle: string; + folderSlug: string; backendSrv: any; } @@ -19,7 +21,7 @@ class DashboardPermissions extends Component { } render() { - const { dashboardId, folderTitle, backendSrv } = this.props; + const { dashboardId, folderTitle, folderSlug, folderId, backendSrv } = this.props; return (
@@ -33,7 +35,7 @@ class DashboardPermissions extends Component { permissions={this.permissions} isFolder={false} dashboardId={dashboardId} - folderTitle={folderTitle} + folderInfo={{ title: folderTitle, slug: folderSlug, id: folderId }} backendSrv={backendSrv} />
diff --git a/public/app/core/components/Permissions/FolderInfo.ts b/public/app/core/components/Permissions/FolderInfo.ts new file mode 100644 index 00000000000..67ebb753df0 --- /dev/null +++ b/public/app/core/components/Permissions/FolderInfo.ts @@ -0,0 +1,5 @@ +export interface FolderInfo { + title: string; + id: number; + slug: string; +} diff --git a/public/app/core/components/Permissions/Permissions.tsx b/public/app/core/components/Permissions/Permissions.tsx index cc22ed1ee84..f5af579094b 100644 --- a/public/app/core/components/Permissions/Permissions.tsx +++ b/public/app/core/components/Permissions/Permissions.tsx @@ -4,6 +4,7 @@ import { observer } from 'mobx-react'; import UserPicker, { User } from 'app/core/components/Picker/UserPicker'; import TeamPicker, { Team } from 'app/core/components/Picker/TeamPicker'; import { aclTypes } from 'app/stores/PermissionsStore/PermissionsStore'; +import { FolderInfo } from './FolderInfo'; export interface DashboardAcl { id?: number; @@ -25,7 +26,7 @@ export interface DashboardAcl { export interface IProps { dashboardId: number; - folderTitle?: string; + folderInfo?: FolderInfo; permissions?: any; isFolder: boolean; backendSrv: any; @@ -87,7 +88,7 @@ class Permissions extends Component { } render() { - const { permissions, folderTitle, backendSrv } = this.props; + const { permissions, folderInfo, backendSrv } = this.props; return (
@@ -96,7 +97,7 @@ class Permissions extends Component { removeItem={this.removeItem} permissionChanged={this.permissionChanged} fetching={permissions.fetching} - folderTitle={folderTitle} + folderInfo={folderInfo} />
diff --git a/public/app/core/components/Permissions/PermissionsList.tsx b/public/app/core/components/Permissions/PermissionsList.tsx index 80e26b536a1..b215dad2391 100644 --- a/public/app/core/components/Permissions/PermissionsList.tsx +++ b/public/app/core/components/Permissions/PermissionsList.tsx @@ -2,19 +2,20 @@ import PermissionsListItem from './PermissionsListItem'; import DisabledPermissionsListItem from './DisabledPermissionsListItem'; import { observer } from 'mobx-react'; +import { FolderInfo } from './FolderInfo'; export interface IProps { permissions: any[]; removeItem: any; permissionChanged: any; fetching: boolean; - folderTitle: string; + folderInfo?: FolderInfo; } @observer class PermissionsList extends Component { render() { - const { permissions, removeItem, permissionChanged, fetching, folderTitle } = this.props; + const { permissions, removeItem, permissionChanged, fetching, folderInfo } = this.props; return ( @@ -35,7 +36,7 @@ class PermissionsList extends Component { itemIndex={idx} removeItem={removeItem} permissionChanged={permissionChanged} - folderTitle={folderTitle} + folderInfo={folderInfo} /> ); })} diff --git a/public/app/core/components/Permissions/PermissionsListItem.tsx b/public/app/core/components/Permissions/PermissionsListItem.tsx index dfb855ed682..3c9af2fbfc7 100644 --- a/public/app/core/components/Permissions/PermissionsListItem.tsx +++ b/public/app/core/components/Permissions/PermissionsListItem.tsx @@ -7,7 +7,7 @@ const setClassNameHelper = inherited => { return inherited ? 'gf-form-disabled' : ''; }; -export default observer(({ item, removeItem, permissionChanged, itemIndex, folderTitle }) => { +export default observer(({ item, removeItem, permissionChanged, itemIndex, folderInfo }) => { const handleRemoveItem = evt => { evt.preventDefault(); removeItem(itemIndex); @@ -23,7 +23,16 @@ export default observer(({ item, removeItem, permissionChanged, itemIndex, folde - + ); diff --git a/public/app/features/dashboard/settings/settings.html b/public/app/features/dashboard/settings/settings.html index cbd2be210e9..47c3bae2ef6 100644 --- a/public/app/features/dashboard/settings/settings.html +++ b/public/app/features/dashboard/settings/settings.html @@ -100,6 +100,8 @@ dashboardId="ctrl.dashboard.id" backendSrv="ctrl.backendSrv" folderTitle="ctrl.dashboard.meta.folderTitle" + folderSlug="ctrl.dashboard.meta.folderSlug" + folderId="ctrl.dashboard.meta.folderId" /> diff --git a/public/app/features/dashboard/settings/settings.ts b/public/app/features/dashboard/settings/settings.ts index a6d81cfd68e..6231a7b7adf 100755 --- a/public/app/features/dashboard/settings/settings.ts +++ b/public/app/features/dashboard/settings/settings.ts @@ -191,6 +191,7 @@ export class SettingsCtrl { onFolderChange(folder) { this.dashboard.meta.folderId = folder.id; this.dashboard.meta.folderTitle = folder.title; + this.dashboard.meta.folderSlug = folder.slug; } }
{item.inherited ? Inherited from folder {folderTitle} : null} + {item.inherited && folderInfo ? ( + + Inherited from folder{' '} + + {folderInfo.title} + {' '} + + ) : null} + Can
@@ -41,7 +50,11 @@ export default observer(({ item, removeItem, permissionChanged, itemIndex, folde - ) : null} + ) : ( + + )}