|
|
@@ -17,8 +17,8 @@ export default class TableForm extends PureComponent {
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
- getRowByKey(key) {
|
|
|
- return this.state.data.filter(item => item.key === key)[0];
|
|
|
+ getRowByKey(key, newData) {
|
|
|
+ return (newData || this.state.data).filter(item => item.key === key)[0];
|
|
|
}
|
|
|
index = 0;
|
|
|
cacheOriginData = {};
|
|
|
@@ -35,14 +35,15 @@ export default class TableForm extends PureComponent {
|
|
|
}
|
|
|
toggleEditable(e, key) {
|
|
|
e.preventDefault();
|
|
|
- const target = this.getRowByKey(key);
|
|
|
+ const newData = this.state.data.map(item => ({ ...item }));
|
|
|
+ const target = this.getRowByKey(key, newData);
|
|
|
if (target) {
|
|
|
// 进入编辑状态时保存原始数据
|
|
|
if (!target.editable) {
|
|
|
this.cacheOriginData[key] = { ...target };
|
|
|
}
|
|
|
target.editable = !target.editable;
|
|
|
- this.setState({ data: [...this.state.data] });
|
|
|
+ this.setState({ data: newData });
|
|
|
}
|
|
|
}
|
|
|
remove(key) {
|
|
|
@@ -51,7 +52,7 @@ export default class TableForm extends PureComponent {
|
|
|
this.props.onChange(newData);
|
|
|
}
|
|
|
newMember = () => {
|
|
|
- const newData = [...this.state.data];
|
|
|
+ const newData = this.state.data.map(item => ({ ...item }));
|
|
|
newData.push({
|
|
|
key: `NEW_TEMP_ID_${this.index}`,
|
|
|
workId: '',
|
|
|
@@ -69,8 +70,8 @@ export default class TableForm extends PureComponent {
|
|
|
}
|
|
|
}
|
|
|
handleFieldChange(e, fieldName, key) {
|
|
|
- const newData = [...this.state.data];
|
|
|
- const target = this.getRowByKey(key);
|
|
|
+ const newData = this.state.data.map(item => ({ ...item }));
|
|
|
+ const target = this.getRowByKey(key, newData);
|
|
|
if (target) {
|
|
|
target[fieldName] = e.target.value;
|
|
|
this.setState({ data: newData });
|
|
|
@@ -102,13 +103,14 @@ export default class TableForm extends PureComponent {
|
|
|
cancel(e, key) {
|
|
|
this.clickedCancel = true;
|
|
|
e.preventDefault();
|
|
|
- const target = this.getRowByKey(key);
|
|
|
+ const newData = this.state.data.map(item => ({ ...item }));
|
|
|
+ const target = this.getRowByKey(key, newData);
|
|
|
if (this.cacheOriginData[key]) {
|
|
|
Object.assign(target, this.cacheOriginData[key]);
|
|
|
target.editable = false;
|
|
|
delete this.cacheOriginData[key];
|
|
|
}
|
|
|
- this.setState({ data: [...this.state.data] });
|
|
|
+ this.setState({ data: newData });
|
|
|
}
|
|
|
render() {
|
|
|
const columns = [{
|