You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.3 KiB
54 lines
1.3 KiB
import React, { PureComponent } from 'react';
|
|
import { Input, Icon } from 'antd';
|
|
import styles from './index.less';
|
|
|
|
export default class EditableItem extends PureComponent {
|
|
state = {
|
|
value: this.props.value,
|
|
editable: false,
|
|
};
|
|
handleChange = (e) => {
|
|
const { value } = e.target;
|
|
this.setState({ value });
|
|
}
|
|
check = () => {
|
|
this.setState({ editable: false });
|
|
if (this.props.onChange) {
|
|
this.props.onChange(this.state.value);
|
|
}
|
|
}
|
|
edit = () => {
|
|
this.setState({ editable: true });
|
|
}
|
|
render() {
|
|
const { value, editable } = this.state;
|
|
return (
|
|
<div className={styles.editableItem}>
|
|
{
|
|
editable ?
|
|
<div className={styles.wrapper}>
|
|
<Input
|
|
value={value}
|
|
onChange={this.handleChange}
|
|
onPressEnter={this.check}
|
|
/>
|
|
<Icon
|
|
type="check"
|
|
className={styles.icon}
|
|
onClick={this.check}
|
|
/>
|
|
</div>
|
|
:
|
|
<div className={styles.wrapper}>
|
|
<span>{value || ' '}</span>
|
|
<Icon
|
|
type="edit"
|
|
className={styles.icon}
|
|
onClick={this.edit}
|
|
/>
|
|
</div>
|
|
}
|
|
</div>
|
|
);
|
|
}
|
|
}
|
|
|