import React, { PureComponent } from 'react'; import { connect } from 'react-redux'; import SlideDown from 'app/core/components/Animations/SlideDown'; import { UserPicker } from 'app/core/components/Picker/UserPicker'; import DeleteButton from 'app/core/components/DeleteButton/DeleteButton'; import { TagBadge } from 'app/core/components/TagFilter/TagBadge'; import { TeamMember, User } from 'app/types'; import { loadTeamMembers, addTeamMember, removeTeamMember, setSearchMemberQuery } from './state/actions'; import { getSearchMemberQuery, getTeamMembers } from './state/selectors'; export interface Props { members: TeamMember[]; searchMemberQuery: string; loadTeamMembers: typeof loadTeamMembers; addTeamMember: typeof addTeamMember; removeTeamMember: typeof removeTeamMember; setSearchMemberQuery: typeof setSearchMemberQuery; syncEnabled: boolean; } export interface State { isAdding: boolean; newTeamMember?: User; } export class TeamMembers extends PureComponent { constructor(props) { super(props); this.state = { isAdding: false, newTeamMember: null }; } componentDidMount() { this.props.loadTeamMembers(); } onSearchQueryChange = event => { this.props.setSearchMemberQuery(event.target.value); }; onRemoveMember(member: TeamMember) { this.props.removeTeamMember(member.userId); } 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 => {}} />)} ); } renderMember(member: TeamMember, syncEnabled: boolean) { return ( {member.login} {member.email} {syncEnabled && this.renderLabels(member.labels)} this.onRemoveMember(member)} /> ); } render() { const { isAdding } = this.state; const { searchMemberQuery, members, syncEnabled } = this.props; return (
Add Team Member
{this.state.newTeamMember && ( )}
{syncEnabled && {members && members.map(member => this.renderMember(member, syncEnabled))}
Name Email}
); } } function mapStateToProps(state) { return { members: getTeamMembers(state.team), searchMemberQuery: getSearchMemberQuery(state.team), }; } const mapDispatchToProps = { loadTeamMembers, addTeamMember, removeTeamMember, setSearchMemberQuery, }; export default connect(mapStateToProps, mapDispatchToProps)(TeamMembers);