From c83fa2d6d4e9f65eacdcb1569f03a6154c8aba67 Mon Sep 17 00:00:00 2001 From: Jerko Steiner Date: Mon, 25 Mar 2019 13:28:07 +0800 Subject: [PATCH] packages/client: Style TeamManager, fix error on delete --- packages/client/src/team/TeamActions.ts | 2 +- packages/client/src/team/TeamList.tsx | 15 +++++++++----- packages/client/src/team/TeamManager.tsx | 6 ++---- packages/client/src/team/TeamReducer.ts | 11 +++++++++-- packages/client/src/team/TeamUserList.tsx | 24 +++++++++++++++-------- packages/server/src/team/TeamService.ts | 8 ++++++++ 6 files changed, 46 insertions(+), 20 deletions(-) diff --git a/packages/client/src/team/TeamActions.ts b/packages/client/src/team/TeamActions.ts index 1f122aa..6ebbd71 100644 --- a/packages/client/src/team/TeamActions.ts +++ b/packages/client/src/team/TeamActions.ts @@ -16,7 +16,7 @@ export type TeamActionType = 'TEAM_UPDATE_PENDING', 'TEAM_UPDATE_RESOLVED', 'TEAM_UPDATE_REJECTED'> - | IAsyncAction<{}, + | IAsyncAction<{id: number}, 'TEAM_REMOVE_PENDING', 'TEAM_REMOVE_RESOLVED', 'TEAM_REMOVE_REJECTED'> diff --git a/packages/client/src/team/TeamList.tsx b/packages/client/src/team/TeamList.tsx index 78a1381..c130873 100644 --- a/packages/client/src/team/TeamList.tsx +++ b/packages/client/src/team/TeamList.tsx @@ -2,7 +2,7 @@ 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 {FaPlusSquare, FaCheck, FaEdit, FaTimes} from 'react-icons/fa' import { Button, Control, Heading, Input, Panel, PanelHeading, PanelBlock @@ -65,10 +65,14 @@ export class TeamAdd extends React.PureComponent { } else { await onAddTeam({name}) } + this.setState({name: ''}) } render() { return ( -
+ {this.props.team ? 'Edit team' : 'Add team'} @@ -80,15 +84,16 @@ export class TeamAdd extends React.PureComponent { onChange={this.handleChange} /> - + {this.props.team ? : }
diff --git a/packages/client/src/team/TeamManager.tsx b/packages/client/src/team/TeamManager.tsx index 879c9fb..625e707 100644 --- a/packages/client/src/team/TeamManager.tsx +++ b/packages/client/src/team/TeamManager.tsx @@ -36,10 +36,8 @@ export class TeamManager extends React.PureComponent { await this.props.fetchMyTeams() } render() { - // TypeOrm changes BigInt fields to Strings because they can be tool - // large... - const editTeamId = this.props.match.params.teamId as any as - number | undefined + const {teamId} = this.props.match.params + const editTeamId = teamId ? Number(teamId) : undefined return (
diff --git a/packages/client/src/team/TeamReducer.ts b/packages/client/src/team/TeamReducer.ts index 5eda546..8e840a4 100644 --- a/packages/client/src/team/TeamReducer.ts +++ b/packages/client/src/team/TeamReducer.ts @@ -1,4 +1,6 @@ -import {ITeam, IUserInTeam, ReadonlyRecord, indexBy} from '@rondo/common' +import { + ITeam, IUserInTeam, ReadonlyRecord, indexBy, without, +} from '@rondo/common' import {TeamActionType} from './TeamActions' import {GetAction} from '../actions' @@ -70,7 +72,6 @@ export function Team(state = defaultState, action: TeamActionType): ITeamState { [action.payload.id]: action.payload, }, } - return state case 'TEAM_USER_ADD_RESOLVED': return { ...state, @@ -107,6 +108,12 @@ export function Team(state = defaultState, action: TeamActionType): ITeamState { ...usersByKey, }, } + case 'TEAM_REMOVE_RESOLVED': + return { + ...state, + teamIds: state.teamIds.filter(id => id !== action.payload.id), + teamsById: without(state.teamsById, action.payload.id), + } case 'TEAM_CREATE_REJECTED': case 'TEAM_UPDATE_REJECTED': case 'TEAM_USER_ADD_REJECTED': diff --git a/packages/client/src/team/TeamUserList.tsx b/packages/client/src/team/TeamUserList.tsx index 6a09a18..4a473f9 100644 --- a/packages/client/src/team/TeamUserList.tsx +++ b/packages/client/src/team/TeamUserList.tsx @@ -1,10 +1,10 @@ import React from 'react' import {IUser, IUserInTeam, ReadonlyRecord} from '@rondo/common' import {TeamActions} from './TeamActions' -import {FaUser, FaSave, FaTimes} from 'react-icons/fa' +import {FaUser, FaCheck, FaTimes} from 'react-icons/fa' import { - Button, Control, Heading, Input, Panel, PanelHeading, PanelBlock + Button, Control, Heading, Help, Input, Panel, PanelHeading, PanelBlock } from 'bloomer' const EMPTY_ARRAY: ReadonlyArray = [] @@ -34,6 +34,7 @@ export interface IAddUserProps { } export interface IAddUserState { + error: string email: string user?: IUser } @@ -55,6 +56,7 @@ export class TeamUser extends React.PureComponent {
diff --git a/packages/server/src/team/TeamService.ts b/packages/server/src/team/TeamService.ts index cd00939..44ce839 100644 --- a/packages/server/src/team/TeamService.ts +++ b/packages/server/src/team/TeamService.ts @@ -4,11 +4,19 @@ import {IUserInTeam} from '@rondo/common' import {IUserTeamParams} from './IUserTeamParams' import {Team} from '../entities/Team' import {UserTeam} from '../entities/UserTeam' +import {Validator, trim} from '../validator' export class TeamService extends BaseService implements ITeamService { // TODO check team limit per user async create({name, userId}: {name: string, userId: number}) { + name = trim(name) + + new Validator({name, userId}) + .ensure('name') + .ensure('userId') + .throw() + const team = await this.getRepository(Team).save({ name, userId,