diff --git a/packages/client/src/team/TeamConnector.test.tsx b/packages/client/src/team/TeamConnector.test.tsx index 01920b5..dcc68ef 100644 --- a/packages/client/src/team/TeamConnector.test.tsx +++ b/packages/client/src/team/TeamConnector.test.tsx @@ -30,7 +30,7 @@ describe('TeamConnector', () => { teamActions = new Feature.TeamActions(http) }) - const historyEntries = ['/teams'] + let historyEntries = ['/teams'] const createTestProvider = () => test.withProvider({ reducers: {Team: Feature.Team}, @@ -63,6 +63,10 @@ describe('TeamConnector', () => { }) describe('add team', () => { + beforeEach(() => { + historyEntries = ['/teams/new'] + }) + it('sends a POST request to POST /teams', async () => { const newTeam: Partial = {id: 101, name: 'new-team'} http.mockAdd({ @@ -78,7 +82,6 @@ describe('TeamConnector', () => { T.Simulate.change(nameInput, {target: {value: newTeam.name}} as any) T.Simulate.submit(addTeamForm) await http.wait() - expect(nameInput.value).toEqual('') const {Team} = store.getState() expect(Team.teamIds).toEqual([100, 101]) expect(Team.teamsById[101]).toEqual(newTeam) diff --git a/packages/client/src/team/TeamConnector.ts b/packages/client/src/team/TeamConnector.ts index 5f18aad..43577cf 100644 --- a/packages/client/src/team/TeamConnector.ts +++ b/packages/client/src/team/TeamConnector.ts @@ -4,6 +4,7 @@ import {ITeamState} from './TeamReducer' import {TeamActions} from './TeamActions' import {TeamManager} from './TeamManager' import {bindActionCreators} from 'redux' +import {withRouter} from 'react-router-dom' export class TeamConnector extends Connector { constructor(protected readonly teamActions: TeamActions) { @@ -31,6 +32,6 @@ export class TeamConnector extends Connector { TeamManager, ) - return Component + return withRouter(Component) } } diff --git a/packages/client/src/team/TeamEditor.tsx b/packages/client/src/team/TeamEditor.tsx index 3da37d9..8fe5e18 100644 --- a/packages/client/src/team/TeamEditor.tsx +++ b/packages/client/src/team/TeamEditor.tsx @@ -59,7 +59,6 @@ extends React.PureComponent { this.setState({error: err.message}) return } - this.setState({error: '', name: ''}) } render() { const {error} = this.state diff --git a/packages/client/src/team/TeamList.tsx b/packages/client/src/team/TeamList.tsx index 47f6070..0b26a32 100644 --- a/packages/client/src/team/TeamList.tsx +++ b/packages/client/src/team/TeamList.tsx @@ -1,6 +1,6 @@ import React from 'react' import {Button, Panel, PanelHeading, PanelBlock} from 'bloomer' -import {FaEdit, FaTimes} from 'react-icons/fa' +import {FaPlus, FaEdit, FaTimes} from 'react-icons/fa' import {ITeam, ReadonlyRecord} from '@rondo/common' import {Link} from 'react-router-dom' import {TeamActions} from './TeamActions' @@ -59,7 +59,17 @@ export class TeamList extends React.PureComponent { return ( - Teams + + + Teams + +  New + + + {teamIds.map(teamId => { const team = teamsById[teamId] return ( @@ -72,13 +82,6 @@ export class TeamList extends React.PureComponent { ) })} - - - - ) } diff --git a/packages/client/src/team/TeamManager.tsx b/packages/client/src/team/TeamManager.tsx index a5ede0d..b51befd 100644 --- a/packages/client/src/team/TeamManager.tsx +++ b/packages/client/src/team/TeamManager.tsx @@ -1,4 +1,5 @@ import React from 'react' +import {History, Location} from 'history' import {ITeam, IUserInTeam, ReadonlyRecord} from '@rondo/common' import {Panel, PanelBlock, PanelHeading} from 'bloomer' import {Route, Switch} from 'react-router-dom' @@ -6,8 +7,13 @@ import {TeamActions} from './TeamActions' import {TeamEditor} from './TeamEditor' import {TeamList} from './TeamList' import {TeamUserList} from './TeamUserList' +import {match as Match} from 'react-router' export interface ITeamManagerProps { + history: History + location: Location + match: Match + createTeam: TeamActions['createTeam'] updateTeam: TeamActions['updateTeam'] removeTeam: TeamActions['removeTeam'] @@ -29,11 +35,23 @@ export class TeamManager extends React.PureComponent { async componentDidMount() { await this.props.fetchMyTeams() } + handleCreateNewTeam = (team: {name: string}) => { + const action = this.props.createTeam(team) + action.payload + .then(() => this.props.history.push('/teams')) + return action + } render() { const {teamsById} = this.props return (
+ + + }/> <>