Split GroupForm

This commit is contained in:
Philipp Czora
2018-08-03 14:21:07 +02:00
parent 7a65ed6ff8
commit dec6b3f17d
3 changed files with 66 additions and 28 deletions

View File

@@ -32,6 +32,9 @@
"add-user-button": {
"label": "Add user"
},
"remove-user-button": {
"label": "Remove user"
},
"add-user-textfield": {
"label": "Add user",
"error": "Error adding user"

View File

@@ -7,6 +7,7 @@ import { translate } from "react-i18next";
import type { Group } from "../types/Group";
import * as validator from "./groupValidation";
import AddUserField from "./AddUserField";
import UserNameTable from "./UserNameTable";
type Props = {
t: string => string,
@@ -94,26 +95,10 @@ class GroupForm extends React.Component<Props, State> {
value={group.description}
validationError={false}
/>
<label className="label">{t("group.members")}</label>
<table className="table is-hoverable is-fullwidth">
<tbody>
{this.state.group.members.map((user, index) => {
return (
<tr key={user}>
<td key={user}>{user}</td>
<td>
<Button
label="Remove"
action={this.removeUser.bind(this, user)}
key={user}
<UserNameTable
users={this.state.group.members}
userListChanged={this.userListChanged}
/>
</td>
</tr>
);
})}
</tbody>
</table>
<AddUserField addUser={this.addUser} />
<SubmitButton
disabled={!this.isValid()}
@@ -124,18 +109,17 @@ class GroupForm extends React.Component<Props, State> {
);
}
removeUser(user: string, event: Event) {
event.preventDefault();
let newMembers = this.state.group.members.filter(name => name !== user);
userListChanged = usernames => {
this.setState({
...this.state,
group: {
...this.state.group,
members: newMembers
members: usernames
}
});
}
addUser = (username: string) => {
if (this.isMember(username)) {
return;
@@ -148,11 +132,11 @@ class GroupForm extends React.Component<Props, State> {
members: [...this.state.group.members, username]
}
});
}
};
isMember = (username: string) => {
return this.state.group.members.includes(username)
}
return this.state.group.members.includes(username);
};
handleGroupNameChange = (name: string) => {
this.setState({

View File

@@ -0,0 +1,51 @@
//@flow
import React from "react";
import Button from "../../components/buttons/Button"
import { translate } from "react-i18next"
type Props = {
users: string[];
t: string => string,
userListChanged: (string[]) => void
};
type State = {
};
class UserNameTable extends React.Component<Props, State> {
render() {
const { t } = this.props;
return (
<div>
<label className="label">{t("group.members")}</label>
<table className="table is-hoverable is-fullwidth">
<tbody>
{this.props.users.map((user, index) => {
return (
<tr key={user}>
<td key={user}>{user}</td>
<td>
<Button
label={t("remove-user-button.label")}
action={this.removeUser.bind(this, user)}
key={user}
/>
</td>
</tr>
);
})}
</tbody>
</table>
</div>
);
}
removeUser(user: string, event: Event) {
event.preventDefault();
const newUsers = this.props.users.filter(name => name !== user);
this.props.userListChanged(newUsers);
}
}
export default translate("groups")(UserNameTable);