import React, { PropTypes } from 'react' import ProfileImage from '../../../components/ProfileImage' import { searchUser, createTeam, setMember, deleteMember } from '../api' import linkState from '../../../helpers/linkState' import Select from 'react-select' function getUsers (input, cb) { searchUser(input) .then(function (res) { let users = res.body cb(null, { options: users.map(user => { return { value: user.name, label: user.name } }), complete: false }) }) .catch(function (err) { console.error(err) }) } export default class CreateNewTeam extends React.Component { constructor (props) { super(props) this.state = { create: { name: '', alert: null }, select: { team: null, newMember: null, alert: null }, currentTab: 'create', currentUser: JSON.parse(localStorage.getItem('currentUser')) } } handleCloseClick (e) { this.props.close() } handleContinueClick (e) { let createState = this.state.create createState.isSending = true createState.alert = { type: 'info', message: 'sending...' } this.setState({create: createState}) function onTeamCreate (res) { let createState = this.state.create createState.isSending = false createState.alert = null let selectState = this.state.select selectState.team = res.body this.setState({ currentTab: 'select', create: createState, select: { team: res.body } }) } function onError (err) { let errorMessage = err.response != null ? err.response.body.message : 'Can\'t connect to API server.' let createState = this.state.create createState.isSending = false createState.alert = { type: 'error', message: errorMessage } this.setState({ create: createState }) } createTeam({name: this.state.create.name}) .then(onTeamCreate.bind(this)) .catch(onError.bind(this)) } renderCreateTab () { let createState = this.state.create let alertEl = createState.alert != null ? (

{createState.alert.message}

) : null return (
Create new team
{alertEl}
) } handleNewMemberChange (value) { let selectState = this.state.select selectState.newMember = value this.setState({select: selectState}) } handleClickAddMemberButton (e) { let selectState = this.state.select let input = { name: selectState.newMember, role: 'member' } setMember(selectState.team.id, input) .then(res => { let selectState = this.state.select let team = res.body team.Members = team.Members.sort((a, b) => { return new Date(a._pivot_createdAt) - new Date(b._pivot_createdAt) }) selectState.team = team selectState.newMember = '' this.setState({select: selectState}) }) .catch(err => { if (err.status != null) throw err else console.error(err) }) } handleMemberDeleteButtonClick (name) { let selectState = this.state.select let input = { name: name, role: 'member' } return function (e) { deleteMember(selectState.team.id, input) .then(res => { let selectState = this.state.select let team = res.body team.Members = team.Members.sort((a, b) => { return new Date(a._pivot_createdAt) - new Date(b._pivot_createdAt) }) selectState.team = team selectState.newMember = '' this.setState({select: selectState}) }) .catch(err => { console.log(err, err.response) if (err.status != null) throw err else console.error(err) }) }.bind(this) } handleMemberRoleChange (name) { return function (e) { let selectState = this.state.select let input = { name: name, role: e.target.value } setMember(selectState.team.id, input) .then(res => { let selectState = this.state.select let team = res.body team.Members = team.Members.sort((a, b) => { return new Date(a._pivot_createdAt) - new Date(b._pivot_createdAt) }) selectState.team = team selectState.newMember = '' this.setState({select: selectState}) }) .catch(err => { if (err.status != null) throw err else console.error(err) }) }.bind(this) } renderSelectTab () { let selectState = this.state.select let membersEl = selectState.team.Members.map(member => { let isCurrentUser = this.state.currentUser.id === member.id return (
  • {`${member.profileName} (${member.name})`}
    {member.email}
  • ) }) return (
    Select member