I have a table with several components and when changing the value of the selected input, I would like to save the new values in the parent state with something like below(so I can submit like this):
monday: {startTime: '08:00', endTime: '23:00'}
Is it possible to do this with one onChange function? If not, how to do this with more than one handling function? Remember, this is to be done with all the days of the week.
Parent component:
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
editMode: false,
friday: { endTime: "", startTime: "" },
monday: { endTime: "", startTime: "" },
thursday: { endTime: "", startTime: "" },
tuesday: { endTime: "", startTime: "" },
wednesday: { endTime: "", startTime: "" },
saturday: { endTime: "", startTime: "" },
sunday: { endTime: "", startTime: "" }
};
}
handleInput = e => {
let value = e.target.value;
let name = e.target.name;
console.log(value);
this.setState(
{
monday: { startTime: value, endTime: "" }
},
() => console.log(this.state)
);
};
handleFormSubmit = e => {
e.preventDefault();
this.setState({
editMode: false
});
};
render() {
return (
<div className="App">
<Table
onSubmit={this.handleFormSubmit}
onChange={this.handleInput}
edit={this.state.editMode}
/>
<div>
{!this.state.editMode ? (
<button onClick={() => this.setState({ editMode: true })}>
edit
</button>
) : (
<div>
<button onClick={() => this.setState({ editMode: false })}>
cancel
</button>
<button onClick={this.handleFormSubmit}>save</button>
</div>
)}
</div>
</div>
);
}
}
Table Component:
export default class Table extends React.Component {
constructor(props) {
super(props);
this.state = {
weekDays: moment.weekdays(true)
};
}
submitTime = data => {
this.props.onSubmit(data);
};
render() {
return (
<table style={{ textAlign: "center" }}>
<thead>
<tr>
<td style={{ opacity: 0 }} />
{this.state.weekDays.map(day => {
return (
<td key={day}>
<p>{day}</p>
</td>
);
})}
</tr>
</thead>
<tbody>
<tr>
<td>
<p>Opening:</p>
</td>
{[0, 1, 2, 3, 4, 5, 6].map(open => {
return (
<td key={open}>
{this.props.edit ? (
<form onSubmit={this.props.onSubmit}>
<input
onChange={this.props.onChange}
placeholder="open time"
defaultValue={open}
/>
</form>
) : (
<p>{open}</p>
)}
</td>
);
})}
</tr>
<tr>
<td>
<p>Closing:</p>
</td>
{[0, 1, 2, 3, 4, 5, 6].map(close => {
return (
<td key={close}>
{this.props.edit ? (
<form onSubmit={this.props.onSubmit}>
<input
onChange={this.props.onChange}
placeholder="close time"
defaultValue={close}
/>
</form>
) : (
<p>{close}</p>
)}
</td>
);
})}
</tr>
</tbody>
</table>
);
}
}
Thank you!