import React, { PureComponent } from 'react'; import { connect } from 'react-redux'; import { Icon } from '@grafana/ui'; import { SlideDown } from 'app/core/components/Animations/SlideDown'; import { UserPicker } from 'app/core/components/Select/UserPicker'; import { TagBadge } from 'app/core/components/TagFilter/TagBadge'; import { TeamMember, User } from 'app/types'; import { addTeamMember } from './state/actions'; import { getSearchMemberQuery, isSignedInUserTeamAdmin } from './state/selectors'; import { FilterInput } from 'app/core/components/FilterInput/FilterInput'; import { WithFeatureToggle } from 'app/core/components/WithFeatureToggle'; import { config } from 'app/core/config'; import { contextSrv, User as SignedInUser } from 'app/core/services/context_srv'; import TeamMemberRow from './TeamMemberRow'; import { setSearchMemberQuery } from './state/reducers'; export interface Props { members: TeamMember[]; searchMemberQuery: string; addTeamMember: typeof addTeamMember; setSearchMemberQuery: typeof setSearchMemberQuery; syncEnabled: boolean; editorsCanAdmin: boolean; signedInUser: SignedInUser; } export interface State { isAdding: boolean; newTeamMember?: User | null; } export class TeamMembers extends PureComponent { constructor(props: Props) { super(props); this.state = { isAdding: false, newTeamMember: null }; } onSearchQueryChange = (value: string) => { this.props.setSearchMemberQuery(value); }; onToggleAdding = () => { this.setState({ isAdding: !this.state.isAdding }); }; onUserSelected = (user: User) => { this.setState({ newTeamMember: user }); }; onAddUserToTeam = async () => { this.props.addTeamMember(this.state.newTeamMember!.id); this.setState({ newTeamMember: null }); }; renderLabels(labels: string[]) { if (!labels) { return ; } return ( {labels.map(label => ( {}} /> ))} ); } render() { const { isAdding } = this.state; const { searchMemberQuery, members, syncEnabled, editorsCanAdmin, signedInUser } = this.props; const isTeamAdmin = isSignedInUserTeamAdmin({ members, editorsCanAdmin, signedInUser }); return (
Add team member
{this.state.newTeamMember && ( )}
{syncEnabled && {members && members.map(member => ( ))}
Login Email Name Permission }
); } } function mapStateToProps(state: any) { return { searchMemberQuery: getSearchMemberQuery(state.team), editorsCanAdmin: config.editorsCanAdmin, // this makes the feature toggle mockable/controllable from tests, signedInUser: contextSrv.user, // this makes the feature toggle mockable/controllable from tests, }; } const mapDispatchToProps = { addTeamMember, setSearchMemberQuery, }; export default connect(mapStateToProps, mapDispatchToProps)(TeamMembers);