diff --git a/packages/client/src/team/TeamList.tsx b/packages/client/src/team/TeamList.tsx index 72b2f19..78a1381 100644 --- a/packages/client/src/team/TeamList.tsx +++ b/packages/client/src/team/TeamList.tsx @@ -2,6 +2,11 @@ import React from 'react' import {ITeam, ReadonlyRecord} from '@rondo/common' import {Link} from 'react-router-dom' import {TeamActions} from './TeamActions' +import {FaPlusSquare, FaSave, FaEdit, FaTimes} from 'react-icons/fa' + +import { + Button, Control, Heading, Input, Panel, PanelHeading, PanelBlock +} from 'bloomer' export interface ITeamListProps { teamsById: ReadonlyRecord, @@ -14,7 +19,7 @@ export interface ITeamListProps { export interface ITeamProps { team: ITeam - editTeamId?: number // TODO handle edits via react-router params + editTeamId?: number onRemoveTeam: TeamActions['removeTeam'] onUpdateTeam: TeamActions['updateTeam'] } @@ -33,7 +38,18 @@ export class TeamAdd extends React.PureComponent { constructor(props: IAddTeamProps) { super(props) this.state = { - name: props.team ? props.team.name : '', + name: this.getName(props.team), + } + } + getName(team?: ITeam) { + return team ? team.name : '' + } + componentWillReceiveProps(nextProps: IAddTeamProps) { + const {team} = nextProps + if (team !== this.props.team) { + this.setState({ + name: this.getName(team), + }) } } handleChange = (event: React.ChangeEvent) => { @@ -53,16 +69,28 @@ export class TeamAdd extends React.PureComponent { render() { return (
- {this.props.team ? 'Edit team' : 'Add team'} - - + + {this.props.team ? 'Edit team' : 'Add team'} + + + + + + + +
+ +
) } @@ -76,19 +104,26 @@ export class TeamRow extends React.PureComponent { render() { const {team} = this.props return ( -
- {team.id} - {this.props.editTeamId !== team.id - ? team.name - : - } - Edit - -
+ +
+ {team.name} +
+
+ + + +   + +
+
) } } @@ -98,24 +133,43 @@ export class TeamList extends React.PureComponent { const {editTeamId, teamIds, teamsById} = this.props return ( -
- {teamIds.map(teamId => { - const team = teamsById[teamId] - return ( - + {!editTeamId && ( + + Teams + {teamIds.map(teamId => { + const team = teamsById[teamId] + return ( + + + + ) + })} + + + + + + )} + + {editTeamId && ( + + - ) - })} - -
+ + )} + ) } } diff --git a/packages/client/src/team/TeamManager.tsx b/packages/client/src/team/TeamManager.tsx index a717d1f..27d0c6f 100644 --- a/packages/client/src/team/TeamManager.tsx +++ b/packages/client/src/team/TeamManager.tsx @@ -1,10 +1,11 @@ import React from 'react' +import {Title} from 'bloomer' +import {History, Location} from 'history' import {ITeam, IUserInTeam, ReadonlyRecord} from '@rondo/common' +import {TeamActions} from './TeamActions' import {TeamList} from './TeamList' import {TeamUserList} from './TeamUserList' -import {TeamActions} from './TeamActions' import {match} from 'react-router' -import {History, Location} from 'history' export interface ITeamManagerProps { history: History @@ -35,15 +36,15 @@ export class TeamManager extends React.PureComponent { await this.props.fetchMyTeams() } render() { - // TODO load my teams on first launch - // TODO use teamId from route url - // TODO use editTeamId from route url - // const {editTeamId} = this.props - const editTeamId = this.props.match.params.teamId !== undefined ? - Number(this.props.match.params.teamId) : undefined + // TypeOrm changes BigInt fields to Strings because they can be tool + // large... + const editTeamId = this.props.match.params.teamId as any as + number | undefined return ( - +
+ Teams + { usersByKey={this.props.usersByKey} />} - +
) } } diff --git a/packages/client/src/team/TeamReducer.ts b/packages/client/src/team/TeamReducer.ts index 66379c8..5eda546 100644 --- a/packages/client/src/team/TeamReducer.ts +++ b/packages/client/src/team/TeamReducer.ts @@ -119,5 +119,4 @@ export function Team(state = defaultState, action: TeamActionType): ITeamState { default: return state } - return state } diff --git a/packages/client/src/team/TeamUserList.tsx b/packages/client/src/team/TeamUserList.tsx index e4417b0..6a09a18 100644 --- a/packages/client/src/team/TeamUserList.tsx +++ b/packages/client/src/team/TeamUserList.tsx @@ -1,6 +1,11 @@ import React from 'react' import {IUser, IUserInTeam, ReadonlyRecord} from '@rondo/common' import {TeamActions} from './TeamActions' +import {FaUser, FaSave, FaTimes} from 'react-icons/fa' + +import { + Button, Control, Heading, Input, Panel, PanelHeading, PanelBlock +} from 'bloomer' const EMPTY_ARRAY: ReadonlyArray = [] @@ -42,15 +47,21 @@ export class TeamUser extends React.PureComponent { const {user} = this.props // TODO style return ( -
- {user.displayName} - -
+ +
+ {user.displayName} +
+
+ +
+
) } } @@ -89,13 +100,27 @@ export class AddUser extends React.PureComponent { render() { return (
- - + Add User + + + + + + +
+ +
) } @@ -104,8 +129,7 @@ export class AddUser extends React.PureComponent { export class TeamUserList extends React.PureComponent { async componentDidMount() { await this.fetchUsersInTeam(this.props.teamId) - } - async componentWillReceiveProps(nextProps: ITeamUsersProps) { + } async componentWillReceiveProps(nextProps: ITeamUsersProps) { const {teamId} = nextProps if (teamId !== this.props.teamId) { this.fetchUsersInTeam(teamId) @@ -121,26 +145,29 @@ export class TeamUserList extends React.PureComponent { || EMPTY_ARRAY return ( - -
+ + Users in Team {userKeysByTeamId.map(key => { const user = this.props.usersByKey[key] return ( - + + + ) })} -
- -
+ + + + ) } }