mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Scenes: Migrate permissions settings page (#81781)
* Migrate permissions settings page * fix
This commit is contained in:
parent
33f80f7a16
commit
613da422ca
@ -0,0 +1,62 @@
|
|||||||
|
import { SceneGridItem, SceneGridLayout, SceneTimeRange } from '@grafana/scenes';
|
||||||
|
|
||||||
|
import { DashboardScene } from '../scene/DashboardScene';
|
||||||
|
import { activateFullSceneTree } from '../utils/test-utils';
|
||||||
|
|
||||||
|
import { PermissionsEditView } from './PermissionsEditView';
|
||||||
|
|
||||||
|
describe('PermissionsEditView', () => {
|
||||||
|
describe('Dashboard permissions state', () => {
|
||||||
|
let dashboard: DashboardScene;
|
||||||
|
let permissionsView: PermissionsEditView;
|
||||||
|
|
||||||
|
beforeEach(async () => {
|
||||||
|
const result = await buildTestScene();
|
||||||
|
dashboard = result.dashboard;
|
||||||
|
permissionsView = result.permissionsView;
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return the correct urlKey', () => {
|
||||||
|
expect(permissionsView.getUrlKey()).toBe('permissions');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return the dashboard', () => {
|
||||||
|
expect(permissionsView.getDashboard()).toBe(dashboard);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
async function buildTestScene() {
|
||||||
|
const permissionsView = new PermissionsEditView({});
|
||||||
|
const dashboard = new DashboardScene({
|
||||||
|
$timeRange: new SceneTimeRange({}),
|
||||||
|
title: 'hello',
|
||||||
|
uid: 'dash-1',
|
||||||
|
version: 4,
|
||||||
|
meta: {
|
||||||
|
canEdit: true,
|
||||||
|
},
|
||||||
|
body: new SceneGridLayout({
|
||||||
|
children: [
|
||||||
|
new SceneGridItem({
|
||||||
|
key: 'griditem-1',
|
||||||
|
x: 0,
|
||||||
|
y: 0,
|
||||||
|
width: 10,
|
||||||
|
height: 12,
|
||||||
|
body: undefined,
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
}),
|
||||||
|
editview: permissionsView,
|
||||||
|
});
|
||||||
|
|
||||||
|
activateFullSceneTree(dashboard);
|
||||||
|
|
||||||
|
await new Promise((r) => setTimeout(r, 1));
|
||||||
|
|
||||||
|
dashboard.onEnterEditMode();
|
||||||
|
permissionsView.activate();
|
||||||
|
|
||||||
|
return { dashboard, permissionsView };
|
||||||
|
}
|
@ -0,0 +1,46 @@
|
|||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
import { PageLayoutType } from '@grafana/data';
|
||||||
|
import { SceneComponentProps, SceneObjectBase } from '@grafana/scenes';
|
||||||
|
import { Permissions } from 'app/core/components/AccessControl';
|
||||||
|
import { Page } from 'app/core/components/Page/Page';
|
||||||
|
import { contextSrv } from 'app/core/core';
|
||||||
|
import { AccessControlAction } from 'app/types';
|
||||||
|
|
||||||
|
import { DashboardScene } from '../scene/DashboardScene';
|
||||||
|
import { NavToolbarActions } from '../scene/NavToolbarActions';
|
||||||
|
import { getDashboardSceneFor } from '../utils/utils';
|
||||||
|
|
||||||
|
import { DashboardEditView, DashboardEditViewState, useDashboardEditPageNav } from './utils';
|
||||||
|
|
||||||
|
interface PermissionsEditViewState extends DashboardEditViewState {}
|
||||||
|
|
||||||
|
export class PermissionsEditView extends SceneObjectBase<PermissionsEditViewState> implements DashboardEditView {
|
||||||
|
public static Component = PermissionsEditorSettings;
|
||||||
|
|
||||||
|
private get _dashboard(): DashboardScene {
|
||||||
|
return getDashboardSceneFor(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public getUrlKey(): string {
|
||||||
|
return 'permissions';
|
||||||
|
}
|
||||||
|
|
||||||
|
public getDashboard(): DashboardScene {
|
||||||
|
return this._dashboard;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function PermissionsEditorSettings({ model }: SceneComponentProps<PermissionsEditView>) {
|
||||||
|
const dashboard = model.getDashboard();
|
||||||
|
const { uid } = dashboard.useState();
|
||||||
|
const { navModel, pageNav } = useDashboardEditPageNav(dashboard, model.getUrlKey());
|
||||||
|
const canSetPermissions = contextSrv.hasPermission(AccessControlAction.DashboardsPermissionsWrite);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Page navModel={navModel} pageNav={pageNav} layout={PageLayoutType.Standard}>
|
||||||
|
<NavToolbarActions dashboard={dashboard} />
|
||||||
|
<Permissions resource={'dashboards'} resourceId={uid ?? ''} canSetPermissions={canSetPermissions} />
|
||||||
|
</Page>
|
||||||
|
);
|
||||||
|
}
|
@ -12,6 +12,7 @@ import { AnnotationsEditView } from './AnnotationsEditView';
|
|||||||
import { DashboardLinksEditView } from './DashboardLinksEditView';
|
import { DashboardLinksEditView } from './DashboardLinksEditView';
|
||||||
import { GeneralSettingsEditView } from './GeneralSettingsEditView';
|
import { GeneralSettingsEditView } from './GeneralSettingsEditView';
|
||||||
import { JsonModelEditView } from './JsonModelEditView';
|
import { JsonModelEditView } from './JsonModelEditView';
|
||||||
|
import { PermissionsEditView } from './PermissionsEditView';
|
||||||
import { VariablesEditView } from './VariablesEditView';
|
import { VariablesEditView } from './VariablesEditView';
|
||||||
import { VersionsEditView } from './VersionsEditView';
|
import { VersionsEditView } from './VersionsEditView';
|
||||||
|
|
||||||
@ -61,6 +62,11 @@ export function useDashboardEditPageNav(dashboard: DashboardScene, currentEditVi
|
|||||||
url: locationUtil.getUrlForPartial(location, { editview: 'versions', editIndex: null }),
|
url: locationUtil.getUrlForPartial(location, { editview: 'versions', editIndex: null }),
|
||||||
active: currentEditView === 'versions',
|
active: currentEditView === 'versions',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
text: t('dashboard-settings.permissions.title', 'Permissions'),
|
||||||
|
url: locationUtil.getUrlForPartial(location, { editview: 'permissions', editIndex: null }),
|
||||||
|
active: currentEditView === 'permissions',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
text: t('dashboard-settings.json-editor.title', 'JSON Model'),
|
text: t('dashboard-settings.json-editor.title', 'JSON Model'),
|
||||||
url: locationUtil.getUrlForPartial(location, { editview: 'json-model', editIndex: null }),
|
url: locationUtil.getUrlForPartial(location, { editview: 'json-model', editIndex: null }),
|
||||||
@ -85,6 +91,8 @@ export function createDashboardEditViewFor(editview: string): DashboardEditView
|
|||||||
return new VersionsEditView({});
|
return new VersionsEditView({});
|
||||||
case 'json-model':
|
case 'json-model':
|
||||||
return new JsonModelEditView({});
|
return new JsonModelEditView({});
|
||||||
|
case 'permissions':
|
||||||
|
return new PermissionsEditView({});
|
||||||
case 'settings':
|
case 'settings':
|
||||||
default:
|
default:
|
||||||
return new GeneralSettingsEditView({});
|
return new GeneralSettingsEditView({});
|
||||||
|
Loading…
Reference in New Issue
Block a user