2018-10-08 09:05:37 -05:00
|
|
|
import React, { PureComponent } from 'react';
|
|
|
|
import { connect } from 'react-redux';
|
2018-10-09 04:07:23 -05:00
|
|
|
import SlideDown from '../../core/components/Animations/SlideDown';
|
2018-10-09 09:05:40 -05:00
|
|
|
import AddDataSourcePermissions from './AddDataSourcePermissions';
|
2018-10-09 09:53:59 -05:00
|
|
|
import DataSourcePermissionsList from './DataSourcePermissionsList';
|
2018-10-09 09:05:40 -05:00
|
|
|
import { AclTarget } from 'app/types/acl';
|
2018-10-10 03:39:48 -05:00
|
|
|
import {
|
|
|
|
addDataSourcePermission,
|
|
|
|
enableDataSourcePermissions,
|
|
|
|
loadDataSourcePermissions,
|
|
|
|
removeDataSourcePermission,
|
|
|
|
} from './state/actions';
|
2018-10-09 09:05:40 -05:00
|
|
|
import { DashboardAcl, DataSourcePermission } from 'app/types';
|
|
|
|
import { getRouteParamsId } from '../../core/selectors/location';
|
2018-10-08 09:05:37 -05:00
|
|
|
|
2018-10-09 09:05:40 -05:00
|
|
|
export interface Props {
|
2018-10-10 03:39:48 -05:00
|
|
|
dataSourcePermission: { enabled: boolean; datasouceId: number; permissions: DataSourcePermission[] };
|
2018-10-09 09:05:40 -05:00
|
|
|
pageId: number;
|
|
|
|
addDataSourcePermission: typeof addDataSourcePermission;
|
2018-10-10 03:39:48 -05:00
|
|
|
enableDataSourcePermissions: typeof enableDataSourcePermissions;
|
2018-10-09 09:05:40 -05:00
|
|
|
loadDataSourcePermissions: typeof loadDataSourcePermissions;
|
|
|
|
removeDataSourcePermission: typeof removeDataSourcePermission;
|
|
|
|
}
|
2018-10-08 09:05:37 -05:00
|
|
|
|
2018-10-09 04:07:23 -05:00
|
|
|
interface State {
|
|
|
|
isAdding: boolean;
|
|
|
|
}
|
|
|
|
|
|
|
|
export class DataSourcePermissions extends PureComponent<Props, State> {
|
|
|
|
state = {
|
|
|
|
isAdding: false,
|
|
|
|
};
|
|
|
|
|
2018-10-09 09:05:40 -05:00
|
|
|
componentDidMount() {
|
|
|
|
this.fetchDataSourcePermissions();
|
|
|
|
}
|
|
|
|
|
|
|
|
async fetchDataSourcePermissions() {
|
|
|
|
const { pageId, loadDataSourcePermissions } = this.props;
|
|
|
|
|
|
|
|
return await loadDataSourcePermissions(pageId);
|
|
|
|
}
|
|
|
|
|
2018-10-09 04:07:23 -05:00
|
|
|
onOpenAddPermissions = () => {
|
|
|
|
this.setState({
|
|
|
|
isAdding: true,
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
2018-10-10 03:39:48 -05:00
|
|
|
onEnablePermissions = () => {
|
|
|
|
const { pageId, enableDataSourcePermissions } = this.props;
|
|
|
|
enableDataSourcePermissions(pageId);
|
|
|
|
};
|
|
|
|
|
2018-10-09 09:05:40 -05:00
|
|
|
onAddPermission = state => {
|
|
|
|
const { pageId, addDataSourcePermission } = this.props;
|
|
|
|
const data = {
|
|
|
|
permission: state.permission,
|
|
|
|
userId: 0,
|
|
|
|
teamId: 0,
|
|
|
|
};
|
|
|
|
|
|
|
|
if (state.type === AclTarget.Team) {
|
|
|
|
data.teamId = state.teamId;
|
|
|
|
} else if (state.team === AclTarget.User) {
|
|
|
|
data.userId = state.userId;
|
|
|
|
}
|
|
|
|
|
|
|
|
addDataSourcePermission(pageId, data);
|
|
|
|
};
|
|
|
|
|
|
|
|
onRemovePermission = (item: DashboardAcl) => {
|
|
|
|
this.props.removeDataSourcePermission(1, 1);
|
|
|
|
};
|
2018-10-09 04:07:23 -05:00
|
|
|
|
|
|
|
onCancelAddPermission = () => {
|
|
|
|
this.setState({
|
|
|
|
isAdding: false,
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
2018-10-08 09:05:37 -05:00
|
|
|
render() {
|
2018-10-10 03:39:48 -05:00
|
|
|
const { dataSourcePermission } = this.props;
|
2018-10-09 04:07:23 -05:00
|
|
|
const { isAdding } = this.state;
|
2018-10-10 03:39:48 -05:00
|
|
|
const isPermissionsEnabled = dataSourcePermission.enabled;
|
2018-10-09 04:07:23 -05:00
|
|
|
|
2018-10-08 09:05:37 -05:00
|
|
|
return (
|
|
|
|
<div>
|
2018-10-09 04:07:23 -05:00
|
|
|
<div className="page-action-bar">
|
|
|
|
<h3 className="page-sub-heading">Permissions</h3>
|
|
|
|
<div className="page-action-bar__spacer" />
|
2018-10-10 03:39:48 -05:00
|
|
|
{!isPermissionsEnabled && (
|
|
|
|
<button className="btn btn-success pull-right" onClick={this.onEnablePermissions} disabled={isAdding}>
|
|
|
|
Enable Permissions
|
|
|
|
</button>
|
|
|
|
)}
|
|
|
|
{isPermissionsEnabled && (
|
|
|
|
<button className="btn btn-success pull-right" onClick={this.onOpenAddPermissions} disabled={isAdding}>
|
|
|
|
<i className="fa fa-plus" /> Add Permission
|
|
|
|
</button>
|
|
|
|
)}
|
2018-10-09 04:07:23 -05:00
|
|
|
</div>
|
2018-10-10 03:39:48 -05:00
|
|
|
{!isPermissionsEnabled ? (
|
|
|
|
<div className="empty-list-cta">
|
|
|
|
<div className="empty-list-cta__title">{'Permissions not enabled for this data source.'}</div>
|
|
|
|
<button onClick={this.onEnablePermissions} className="empty-list-cta__button btn btn-xlarge btn-success">
|
|
|
|
{'Enable'}
|
|
|
|
</button>
|
|
|
|
<div className="empty-list-cta__pro-tip">
|
|
|
|
<i className="fa fa-rocket" /> ProTip:{' '}
|
|
|
|
{'Only admins will be able to query the data source after you enable permissions.'}
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
) : (
|
|
|
|
<div>
|
|
|
|
<SlideDown in={isAdding}>
|
|
|
|
<AddDataSourcePermissions
|
|
|
|
onAddPermission={state => this.onAddPermission(state)}
|
|
|
|
onCancel={this.onCancelAddPermission}
|
|
|
|
/>
|
|
|
|
</SlideDown>
|
|
|
|
<DataSourcePermissionsList
|
|
|
|
items={dataSourcePermission.permissions}
|
|
|
|
onRemoveItem={item => this.onRemovePermission(item)}
|
|
|
|
/>
|
|
|
|
</div>
|
|
|
|
)}
|
2018-10-08 09:05:37 -05:00
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function mapStateToProps(state) {
|
2018-10-09 09:05:40 -05:00
|
|
|
return {
|
|
|
|
pageId: getRouteParamsId(state.location),
|
2018-10-10 03:39:48 -05:00
|
|
|
dataSourcePermission: state.dataSources.dataSourcePermission,
|
2018-10-09 09:05:40 -05:00
|
|
|
};
|
2018-10-08 09:05:37 -05:00
|
|
|
}
|
|
|
|
|
2018-10-09 09:05:40 -05:00
|
|
|
const mapDispatchToProps = {
|
|
|
|
addDataSourcePermission,
|
2018-10-10 03:39:48 -05:00
|
|
|
enableDataSourcePermissions,
|
2018-10-09 09:05:40 -05:00
|
|
|
loadDataSourcePermissions,
|
|
|
|
removeDataSourcePermission,
|
|
|
|
};
|
|
|
|
|
|
|
|
export default connect(mapStateToProps, mapDispatchToProps)(DataSourcePermissions);
|