Files
SCM-Manager/scm-ui/src/permissions/components/table/PermissionRowEditable.js

131 lines
3.0 KiB
JavaScript
Raw Normal View History

2018-08-23 14:14:49 +02:00
// @flow
import React from "react";
import type { Permission } from "../../types/Permissions";
import { Checkbox, InputField } from "../../../components/forms/index";
import { DeleteButton, SubmitButton } from "../../../components/buttons/index";
import { translate } from "react-i18next";
import { Select } from "../../../components/forms/index";
2018-08-23 14:14:49 +02:00
type Props = {
submitForm: Permission => void,
2018-08-23 14:14:49 +02:00
permission: Permission,
t: string => string
};
type State = {
permission: Permission
2018-08-23 14:14:49 +02:00
};
class PermissionRowEditable extends React.Component<Props, State> {
constructor(props: Props) {
super(props);
this.state = {
permission: {
name: "",
type: "READ",
groupPermission: false,
_links: {}
}
2018-08-23 14:14:49 +02:00
};
}
componentDidMount() {
const { permission } = this.props;
if (permission) {
this.setState({
permission: {
name: permission.name,
type: permission.type,
groupPermission: permission.groupPermission,
_links: permission._links
}
2018-08-23 14:14:49 +02:00
});
}
}
submit = (event: Event) => {
event.preventDefault();
this.props.submitForm(this.state.permission);
};
2018-08-23 14:14:49 +02:00
render() {
const { permission } = this.state;
2018-08-23 14:14:49 +02:00
const { t } = this.props;
const types = ["READ", "OWNER", "GROUP"];
const deleteButton = this.props.permission._links.delete ? (
<DeleteButton label={t("edit-permission.delete-button")} />
) : null;
return (
<tr>
<td>
<InputField
value={permission.name ? permission.name : ""}
2018-08-23 14:14:49 +02:00
onChange={this.handleNameChange}
/>
</td>
<td className="is-hidden-mobile">
<Select
onChange={this.handleTypeChange}
value={permission.type ? permission.type : ""}
2018-08-23 14:14:49 +02:00
options={this.createSelectOptions(types)}
/>
</td>
<td>
<Checkbox
checked={
permission.groupPermission ? permission.groupPermission : false
}
2018-08-23 14:14:49 +02:00
onChange={this.handleGroupPermissionChange}
/>
</td>
<td>
<SubmitButton
label={t("edit-permission.save-button")}
action={this.submit}
/>
2018-08-23 14:14:49 +02:00
</td>
<td>{deleteButton}</td>
</tr>
);
}
handleTypeChange = (type: string) => {
this.setState({
permission: {
...this.state.permission,
type: type
}
2018-08-23 14:14:49 +02:00
});
};
createSelectOptions(types: string[]) {
return types.map(type => {
return {
label: type,
value: type
};
});
}
handleNameChange = (name: string) => {
this.setState({
permission: {
...this.state.permission,
name: name
}
2018-08-23 14:14:49 +02:00
});
};
handleGroupPermissionChange = (groupPermission: boolean) => {
this.setState({
permission: {
...this.state.permission,
groupPermission: groupPermission
}
2018-08-23 14:14:49 +02:00
});
};
}
export default translate("permissions")(PermissionRowEditable);