Commit 4acc8f8a by Daniel Lee Committed by GitHub

Merge pull request #11119 from bergquist/no_row_setting_viewer

hide row actions for viewers
parents 310d7406 d3b23b01
...@@ -4,6 +4,7 @@ import { PanelModel } from '../panel_model'; ...@@ -4,6 +4,7 @@ import { PanelModel } from '../panel_model';
import { PanelContainer } from './PanelContainer'; import { PanelContainer } from './PanelContainer';
import templateSrv from 'app/features/templating/template_srv'; import templateSrv from 'app/features/templating/template_srv';
import appEvents from 'app/core/app_events'; import appEvents from 'app/core/app_events';
import config from 'app/core/config';
export interface DashboardRowProps { export interface DashboardRowProps {
panel: PanelModel; panel: PanelModel;
...@@ -94,14 +95,16 @@ export class DashboardRow extends React.Component<DashboardRowProps, any> { ...@@ -94,14 +95,16 @@ export class DashboardRow extends React.Component<DashboardRowProps, any> {
{title} {title}
<span className="dashboard-row__panel_count">({hiddenPanels} hidden panels)</span> <span className="dashboard-row__panel_count">({hiddenPanels} hidden panels)</span>
</a> </a>
<div className="dashboard-row__actions"> {config.bootData.user.orgRole !== 'Viewer' && (
<a className="pointer" onClick={this.openSettings}> <div className="dashboard-row__actions">
<i className="fa fa-cog" /> <a className="pointer" onClick={this.openSettings}>
</a> <i className="fa fa-cog" />
<a className="pointer" onClick={this.delete}> </a>
<i className="fa fa-trash" /> <a className="pointer" onClick={this.delete}>
</a> <i className="fa fa-trash" />
</div> </a>
</div>
)}
<div className="dashboard-row__drag grid-drag-handle" /> <div className="dashboard-row__drag grid-drag-handle" />
</div> </div>
); );
......
...@@ -2,19 +2,26 @@ import React from 'react'; ...@@ -2,19 +2,26 @@ import React from 'react';
import { shallow } from 'enzyme'; import { shallow } from 'enzyme';
import { DashboardRow } from '../dashgrid/DashboardRow'; import { DashboardRow } from '../dashgrid/DashboardRow';
import { PanelModel } from '../panel_model'; import { PanelModel } from '../panel_model';
import config from '../../../core/config';
describe('DashboardRow', () => { describe('DashboardRow', () => {
let wrapper, panel, getPanelContainer, dashboardMock; let wrapper, panel, getPanelContainer, dashboardMock;
beforeEach(() => { beforeEach(() => {
dashboardMock = {toggleRow: jest.fn()}; dashboardMock = { toggleRow: jest.fn() };
config.bootData = {
user: {
orgRole: 'Admin',
},
};
getPanelContainer = jest.fn().mockReturnValue({ getPanelContainer = jest.fn().mockReturnValue({
getDashboard: jest.fn().mockReturnValue(dashboardMock), getDashboard: jest.fn().mockReturnValue(dashboardMock),
getPanelLoader: jest.fn() getPanelLoader: jest.fn(),
}); });
panel = new PanelModel({collapsed: false}); panel = new PanelModel({ collapsed: false });
wrapper = shallow(<DashboardRow panel={panel} getPanelContainer={getPanelContainer} />); wrapper = shallow(<DashboardRow panel={panel} getPanelContainer={getPanelContainer} />);
}); });
...@@ -30,4 +37,14 @@ describe('DashboardRow', () => { ...@@ -30,4 +37,14 @@ describe('DashboardRow', () => {
expect(dashboardMock.toggleRow.mock.calls).toHaveLength(1); expect(dashboardMock.toggleRow.mock.calls).toHaveLength(1);
}); });
it('should have two actions as admin', () => {
expect(wrapper.find('.dashboard-row__actions .pointer')).toHaveLength(2);
});
it('should have zero actions as viewer', () => {
config.bootData.user.orgRole = 'Viewer';
panel = new PanelModel({ collapsed: false });
wrapper = shallow(<DashboardRow panel={panel} getPanelContainer={getPanelContainer} />);
expect(wrapper.find('.dashboard-row__actions .pointer')).toHaveLength(0);
});
}); });
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment