2018-09-13 06:56:09 -05:00
|
|
|
import React, { PureComponent } from 'react';
|
2018-04-18 08:01:36 -05:00
|
|
|
import { hot } from 'react-hot-loader';
|
2018-09-11 12:00:37 -05:00
|
|
|
import { connect } from 'react-redux';
|
2018-01-16 04:28:14 -06:00
|
|
|
import PageHeader from 'app/core/components/PageHeader/PageHeader';
|
2019-01-08 13:51:00 -06:00
|
|
|
import { Tooltip } from '@grafana/ui';
|
2018-01-31 07:19:07 -06:00
|
|
|
import SlideDown from 'app/core/components/Animations/SlideDown';
|
2018-09-11 12:00:37 -05:00
|
|
|
import { getNavModel } from 'app/core/selectors/navModel';
|
2018-09-13 06:56:09 -05:00
|
|
|
import { NavModel, StoreState, FolderState } from 'app/types';
|
|
|
|
import { DashboardAcl, PermissionLevel, NewDashboardAclItem } from 'app/types/acl';
|
|
|
|
import {
|
|
|
|
getFolderByUid,
|
|
|
|
getFolderPermissions,
|
|
|
|
updateFolderPermission,
|
|
|
|
removeFolderPermission,
|
|
|
|
addFolderPermission,
|
|
|
|
} from './state/actions';
|
2018-09-12 02:47:23 -05:00
|
|
|
import { getLoadingNav } from './state/navModel';
|
2018-09-13 03:52:29 -05:00
|
|
|
import PermissionList from 'app/core/components/PermissionList/PermissionList';
|
2018-09-13 06:56:09 -05:00
|
|
|
import AddPermission from 'app/core/components/PermissionList/AddPermission';
|
2018-09-14 00:47:33 -05:00
|
|
|
import PermissionsInfo from 'app/core/components/PermissionList/PermissionsInfo';
|
2018-02-05 08:23:46 -06:00
|
|
|
|
2018-09-11 12:00:37 -05:00
|
|
|
export interface Props {
|
|
|
|
navModel: NavModel;
|
|
|
|
folderUid: string;
|
|
|
|
folder: FolderState;
|
2018-09-13 03:52:29 -05:00
|
|
|
getFolderByUid: typeof getFolderByUid;
|
|
|
|
getFolderPermissions: typeof getFolderPermissions;
|
|
|
|
updateFolderPermission: typeof updateFolderPermission;
|
|
|
|
removeFolderPermission: typeof removeFolderPermission;
|
2018-09-13 06:56:09 -05:00
|
|
|
addFolderPermission: typeof addFolderPermission;
|
2018-09-13 03:52:29 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
export interface State {
|
|
|
|
isAdding: boolean;
|
2018-09-11 12:00:37 -05:00
|
|
|
}
|
|
|
|
|
2018-09-13 06:56:09 -05:00
|
|
|
export class FolderPermissions extends PureComponent<Props, State> {
|
2018-01-16 04:28:14 -06:00
|
|
|
constructor(props) {
|
|
|
|
super(props);
|
2018-09-13 03:52:29 -05:00
|
|
|
|
|
|
|
this.state = {
|
|
|
|
isAdding: false,
|
|
|
|
};
|
2018-04-24 05:07:24 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
componentDidMount() {
|
2018-09-11 12:00:37 -05:00
|
|
|
this.props.getFolderByUid(this.props.folderUid);
|
2018-09-13 03:52:29 -05:00
|
|
|
this.props.getFolderPermissions(this.props.folderUid);
|
2018-01-16 04:28:14 -06:00
|
|
|
}
|
|
|
|
|
2018-09-13 03:52:29 -05:00
|
|
|
onOpenAddPermissions = () => {
|
|
|
|
this.setState({ isAdding: true });
|
|
|
|
};
|
2018-02-05 04:09:05 -06:00
|
|
|
|
2018-09-13 03:52:29 -05:00
|
|
|
onRemoveItem = (item: DashboardAcl) => {
|
|
|
|
this.props.removeFolderPermission(item);
|
|
|
|
};
|
|
|
|
|
|
|
|
onPermissionChanged = (item: DashboardAcl, level: PermissionLevel) => {
|
|
|
|
this.props.updateFolderPermission(item, level);
|
|
|
|
};
|
2018-01-31 03:39:38 -06:00
|
|
|
|
2018-09-13 06:56:09 -05:00
|
|
|
onAddPermission = (newItem: NewDashboardAclItem) => {
|
|
|
|
return this.props.addFolderPermission(newItem);
|
|
|
|
};
|
|
|
|
|
|
|
|
onCancelAddPermission = () => {
|
|
|
|
this.setState({ isAdding: false });
|
|
|
|
};
|
|
|
|
|
2018-01-16 04:28:14 -06:00
|
|
|
render() {
|
2018-09-13 03:52:29 -05:00
|
|
|
const { navModel, folder } = this.props;
|
|
|
|
const { isAdding } = this.state;
|
2018-01-16 04:28:14 -06:00
|
|
|
|
2018-09-11 12:00:37 -05:00
|
|
|
if (folder.id === 0) {
|
2018-09-12 02:47:23 -05:00
|
|
|
return <PageHeader model={navModel} />;
|
2018-01-16 04:28:14 -06:00
|
|
|
}
|
|
|
|
|
2018-09-13 06:56:09 -05:00
|
|
|
const folderInfo = { title: folder.title, url: folder.url, id: folder.id };
|
2018-01-18 13:46:01 -06:00
|
|
|
|
2018-01-16 04:28:14 -06:00
|
|
|
return (
|
|
|
|
<div>
|
2018-09-11 12:00:37 -05:00
|
|
|
<PageHeader model={navModel} />
|
2018-01-18 02:54:36 -06:00
|
|
|
<div className="page-container page-body">
|
2018-01-31 03:39:38 -06:00
|
|
|
<div className="page-action-bar">
|
2018-07-11 13:23:07 -05:00
|
|
|
<h3 className="page-sub-heading">Folder Permissions</h3>
|
2019-01-08 06:53:59 -06:00
|
|
|
<Tooltip placement="auto" content={PermissionsInfo}>
|
|
|
|
<div className="page-sub-heading-icon">
|
|
|
|
<i className="gicon gicon-question gicon--has-hover" />
|
|
|
|
</div>
|
2018-01-29 07:45:45 -06:00
|
|
|
</Tooltip>
|
2018-01-31 03:39:38 -06:00
|
|
|
<div className="page-action-bar__spacer" />
|
2018-09-13 03:52:29 -05:00
|
|
|
<button className="btn btn-success pull-right" onClick={this.onOpenAddPermissions} disabled={isAdding}>
|
2018-02-01 07:32:19 -06:00
|
|
|
<i className="fa fa-plus" /> Add Permission
|
2018-01-31 03:39:38 -06:00
|
|
|
</button>
|
2018-01-29 07:45:45 -06:00
|
|
|
</div>
|
2018-09-13 06:56:09 -05:00
|
|
|
<SlideDown in={isAdding}>
|
|
|
|
<AddPermission onAddPermission={this.onAddPermission} onCancel={this.onCancelAddPermission} />
|
|
|
|
</SlideDown>
|
2018-09-13 03:52:29 -05:00
|
|
|
<PermissionList
|
|
|
|
items={folder.permissions}
|
|
|
|
onRemoveItem={this.onRemoveItem}
|
|
|
|
onPermissionChanged={this.onPermissionChanged}
|
|
|
|
isFetching={false}
|
|
|
|
folderInfo={folderInfo}
|
|
|
|
/>
|
2018-01-18 02:54:36 -06:00
|
|
|
</div>
|
2018-01-16 04:28:14 -06:00
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
2018-04-18 08:01:36 -05:00
|
|
|
|
2018-09-11 12:00:37 -05:00
|
|
|
const mapStateToProps = (state: StoreState) => {
|
|
|
|
const uid = state.location.routeParams.uid;
|
|
|
|
return {
|
2018-09-12 02:47:23 -05:00
|
|
|
navModel: getNavModel(state.navIndex, `folder-permissions-${uid}`, getLoadingNav(1)),
|
2018-09-11 12:00:37 -05:00
|
|
|
folderUid: uid,
|
|
|
|
folder: state.folder,
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
const mapDispatchToProps = {
|
|
|
|
getFolderByUid,
|
2018-09-13 03:52:29 -05:00
|
|
|
getFolderPermissions,
|
|
|
|
updateFolderPermission,
|
|
|
|
removeFolderPermission,
|
2018-09-13 06:56:09 -05:00
|
|
|
addFolderPermission,
|
2018-09-11 12:00:37 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
export default hot(module)(connect(mapStateToProps, mapDispatchToProps)(FolderPermissions));
|