fix fetch available verbs and map to state

This commit is contained in:
Eduard Heimbuch
2019-05-15 09:31:03 +02:00
parent 6969003a4c
commit 4388efc2af
2 changed files with 47 additions and 31 deletions

View File

@@ -14,11 +14,10 @@ import {
import { getRepositoryVerbsLink } from "../../modules/indexResource"; import { getRepositoryVerbsLink } from "../../modules/indexResource";
type Props = { type Props = {
submitForm: CustomRoleRequest => void,
role?: Role, role?: Role,
loading?: boolean, loading?: boolean,
disabled: boolean,
availableVerbs: string[], availableVerbs: string[],
selectedVerbs: string[],
verbsLink: string, verbsLink: string,
// context objects // context objects
@@ -29,8 +28,7 @@ type Props = {
}; };
type State = { type State = {
role: Role, role: Role
verbs: string[]
}; };
class GlobalPermissionRoleForm extends React.Component<Props, State> { class GlobalPermissionRoleForm extends React.Component<Props, State> {
@@ -43,8 +41,7 @@ class GlobalPermissionRoleForm extends React.Component<Props, State> {
verbs: [], verbs: [],
system: false, system: false,
_links: {} _links: {}
}, }
verbs: props.availableVerbs
}; };
} }
@@ -53,7 +50,12 @@ class GlobalPermissionRoleForm extends React.Component<Props, State> {
fetchAvailableVerbs(verbsLink); fetchAvailableVerbs(verbsLink);
if (role) { if (role) {
this.setState({ role: { ...role } }); this.setState({
role: {
...role,
role: { verbs: role.verbs }
}
});
} }
} }
@@ -80,26 +82,44 @@ class GlobalPermissionRoleForm extends React.Component<Props, State> {
}; };
handleVerbChange = (value: boolean, name: string) => { handleVerbChange = (value: boolean, name: string) => {
const { selectedVerbs } = this.props; const { role } = this.state;
const newVerbs = { ...selectedVerbs, [name]: value };
this.setState({ verbs: newVerbs }); const newVerbs = value
? [...role.verbs, name]
: role.verbs.filter(v => v !== name);
this.setState({
...this.state,
role: {
...role,
verbs: newVerbs
}
});
};
submit = (event: Event) => {
event.preventDefault();
if (this.isValid()) {
// this.props.submitForm(this.state.role);
//TODO ADD createRole here
}
}; };
render() { render() {
const { loading, availableVerbs, t } = this.props; const { loading, availableVerbs, disabled, t } = this.props;
const { role, verbs } = this.state; const { role } = this.state;
const verbSelectBoxes = const verbSelectBoxes = !availableVerbs
!!availableVerbs && ? null
Object.entries(availableVerbs).map(e => ( : availableVerbs.map(verb => (
<PermissionCheckbox <PermissionCheckbox
key={e[0]} key={verb}
// disabled={readOnly} // disabled={readOnly}
name={e[0]} name={verb}
checked={e[1]} checked={role.verbs.includes(verb)}
onChange={this.handleVerbChange} onChange={this.handleVerbChange}
/> />
)); ));
return ( return (
<form onSubmit={this.submit}> <form onSubmit={this.submit}>
@@ -110,17 +130,18 @@ class GlobalPermissionRoleForm extends React.Component<Props, State> {
label={t("roles.create.name")} label={t("roles.create.name")}
onChange={this.handleNameChange} onChange={this.handleNameChange}
value={role.name ? role.name : ""} value={role.name ? role.name : ""}
disabled={!!role.name} // || disabled disabled={!!role.name || disabled}
/> />
</div> </div>
</div> </div>
<>{verbSelectBoxes}</> <>{verbSelectBoxes}</>
<hr />
<div className="columns"> <div className="columns">
<div className="column"> <div className="column">
<SubmitButton <SubmitButton
loading={loading} loading={loading}
label={t("roles.create.submit")} label={t("roles.create.submit")}
//disabled={disabled || !this.isValid()} disabled={disabled || !this.isValid()}
/> />
</div> </div>
</div> </div>

View File

@@ -220,12 +220,7 @@ function verbReducer(state: any = {}, action: any = {}) {
switch (action.type) { switch (action.type) {
case FETCH_VERBS_SUCCESS: case FETCH_VERBS_SUCCESS:
const verbs = action.payload.verbs; const verbs = action.payload.verbs;
const verbMap = {}; return { ...state, verbs };
verbs.forEach(p => (verbMap[p] = false));
return {
...state,
verbMap
};
default: default:
return state; return state;
} }