import React, { PureComponent } from 'react'; import { connect } from 'react-redux'; import SlideDown from 'app/core/components/Animations/SlideDown'; import Tooltip from 'app/core/components/Tooltip/Tooltip'; import { TeamGroup } from '../../types'; import { addTeamGroup, loadTeamGroups, removeTeamGroup } from './state/actions'; import { getTeamGroups } from './state/selectors'; export interface Props { groups: TeamGroup[]; loadTeamGroups: typeof loadTeamGroups; addTeamGroup: typeof addTeamGroup; removeTeamGroup: typeof removeTeamGroup; } interface State { isAdding: boolean; newGroupId?: string; } const headerTooltip = `Sync LDAP or OAuth groups with your Grafana teams.`; export class TeamGroupSync extends PureComponent { constructor(props) { super(props); this.state = { isAdding: false, newGroupId: '' }; } componentDidMount() { this.fetchTeamGroups(); } async fetchTeamGroups() { await this.props.loadTeamGroups(); } onToggleAdding = () => { this.setState({ isAdding: !this.state.isAdding }); }; onNewGroupIdChanged = event => { this.setState({ newGroupId: event.target.value }); }; onAddGroup = event => { event.preventDefault(); this.props.addTeamGroup(this.state.newGroupId); this.setState({ isAdding: false, newGroupId: '' }); }; onRemoveGroup = (group: TeamGroup) => { this.props.removeTeamGroup(group.groupId); }; isNewGroupValid() { return this.state.newGroupId.length > 1; } renderGroup(group: TeamGroup) { return ( {group.groupId} this.onRemoveGroup(group)}> ); } render() { const { isAdding, newGroupId } = this.state; const groups = this.props.groups; return (

External group sync

{groups.length > 0 && ( )}
Add External Group
{groups.length === 0 && !isAdding && (
There are no external groups to sync with
{headerTooltip} Learn more
)} {groups.length > 0 && (
{groups.map(group => this.renderGroup(group))}
External Group ID
)}
); } } function mapStateToProps(state) { return { groups: getTeamGroups(state.team), }; } const mapDispatchToProps = { loadTeamGroups, addTeamGroup, removeTeamGroup, }; export default connect(mapStateToProps, mapDispatchToProps)(TeamGroupSync);