|
|
@@ -1,5 +1,6 @@
|
|
|
import React, { PureComponent, Fragment } from 'react';
|
|
|
import { Table, Button, Input, message, Popconfirm, Divider } from 'antd';
|
|
|
+import isEqual from 'lodash.isequal';
|
|
|
import styles from './style.less';
|
|
|
|
|
|
export default class TableForm extends PureComponent {
|
|
|
@@ -13,17 +14,19 @@ export default class TableForm extends PureComponent {
|
|
|
this.state = {
|
|
|
data: props.value,
|
|
|
loading: false,
|
|
|
- editData: [],
|
|
|
+ /* eslint-disable-next-line react/no-unused-state */
|
|
|
+ value: props.value,
|
|
|
};
|
|
|
}
|
|
|
|
|
|
- static getDerivedStateFromProps(nextProps) {
|
|
|
- if ('value' in nextProps) {
|
|
|
- return {
|
|
|
- data: nextProps.value,
|
|
|
- };
|
|
|
+ static getDerivedStateFromProps(nextProps, preState) {
|
|
|
+ if (isEqual(nextProps.value, preState.value)) {
|
|
|
+ return null;
|
|
|
}
|
|
|
- return null;
|
|
|
+ return {
|
|
|
+ data: nextProps.value,
|
|
|
+ value: nextProps.value,
|
|
|
+ };
|
|
|
}
|
|
|
|
|
|
getRowByKey(key, newData) {
|
|
|
@@ -47,49 +50,34 @@ export default class TableForm extends PureComponent {
|
|
|
};
|
|
|
|
|
|
newMember = () => {
|
|
|
- this.index += 1;
|
|
|
- this.setState({
|
|
|
- editData: [
|
|
|
- {
|
|
|
- key: `NEW_TEMP_ID_${this.index}`,
|
|
|
- workId: '',
|
|
|
- name: '',
|
|
|
- department: '',
|
|
|
- editable: true,
|
|
|
- isNew: true,
|
|
|
- },
|
|
|
- ],
|
|
|
+ const { data } = this.state;
|
|
|
+ const newData = data.map(item => ({ ...item }));
|
|
|
+ newData.push({
|
|
|
+ key: `NEW_TEMP_ID_${this.index}`,
|
|
|
+ workId: '',
|
|
|
+ name: '',
|
|
|
+ department: '',
|
|
|
+ editable: true,
|
|
|
+ isNew: true,
|
|
|
});
|
|
|
+ this.index += 1;
|
|
|
+ this.setState({ data: newData });
|
|
|
};
|
|
|
|
|
|
remove(key) {
|
|
|
- const { editData, data } = this.state;
|
|
|
+ const { data } = this.state;
|
|
|
const { onChange } = this.props;
|
|
|
- const editItem = editData.find(item => item.key === key);
|
|
|
- if (editItem && editItem.key) {
|
|
|
- // 如果存在缓存
|
|
|
- if (this.cacheOriginData[key]) {
|
|
|
- data.push(this.cacheOriginData[key]);
|
|
|
- this.setState(
|
|
|
- {
|
|
|
- data,
|
|
|
- },
|
|
|
- () => {
|
|
|
- delete this.cacheOriginData[key];
|
|
|
- }
|
|
|
- );
|
|
|
- }
|
|
|
- // 从 editData 中删除
|
|
|
- this.setState({
|
|
|
- editData: editData.filter(item => item.key !== key),
|
|
|
- });
|
|
|
- return;
|
|
|
- }
|
|
|
const newData = data.filter(item => item.key !== key);
|
|
|
this.setState({ data: newData });
|
|
|
onChange(newData);
|
|
|
}
|
|
|
|
|
|
+ handleKeyPress(e, key) {
|
|
|
+ if (e.key === 'Enter') {
|
|
|
+ this.saveRow(e, key);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
handleFieldChange(e, fieldName, key) {
|
|
|
const { data } = this.state;
|
|
|
const newData = data.map(item => ({ ...item }));
|
|
|
@@ -101,8 +89,6 @@ export default class TableForm extends PureComponent {
|
|
|
}
|
|
|
|
|
|
saveRow(e, key) {
|
|
|
- const { data } = this.state;
|
|
|
- const { onChange } = this.props;
|
|
|
e.persist();
|
|
|
this.setState({
|
|
|
loading: true,
|
|
|
@@ -121,6 +107,8 @@ export default class TableForm extends PureComponent {
|
|
|
});
|
|
|
return;
|
|
|
}
|
|
|
+ const { data } = this.state;
|
|
|
+ const { onChange } = this.props;
|
|
|
delete target.isNew;
|
|
|
this.toggleEditable(e, key);
|
|
|
onChange(data);
|
|
|
@@ -131,9 +119,9 @@ export default class TableForm extends PureComponent {
|
|
|
}
|
|
|
|
|
|
cancel(e, key) {
|
|
|
- const { data } = this.state;
|
|
|
this.clickedCancel = true;
|
|
|
e.preventDefault();
|
|
|
+ const { data } = this.state;
|
|
|
const newData = data.map(item => ({ ...item }));
|
|
|
const target = this.getRowByKey(key, newData);
|
|
|
if (this.cacheOriginData[key]) {
|
|
|
@@ -245,14 +233,15 @@ export default class TableForm extends PureComponent {
|
|
|
},
|
|
|
},
|
|
|
];
|
|
|
- const { data, editData, loading } = this.state;
|
|
|
- const dataSource = data.concat(editData);
|
|
|
+
|
|
|
+ const { loading, data } = this.state;
|
|
|
+
|
|
|
return (
|
|
|
<Fragment>
|
|
|
<Table
|
|
|
loading={loading}
|
|
|
columns={columns}
|
|
|
- dataSource={dataSource}
|
|
|
+ dataSource={data}
|
|
|
pagination={false}
|
|
|
rowClassName={record => {
|
|
|
return record.editable ? styles.editable : '';
|