5 changed files with 97 additions and 13 deletions
@ -0,0 +1,54 @@ |
|||
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.value; |
|||
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> |
|||
); |
|||
} |
|||
} |
|||
@ -0,0 +1,25 @@ |
|||
@import "~antd/lib/style/themes/default.less"; |
|||
|
|||
.editableItem { |
|||
line-height: @input-height-base; |
|||
display: table; |
|||
width: 100%; |
|||
margin-top: (@font-size-base * @line-height-base - @input-height-base) / 2; |
|||
|
|||
.wrapper { |
|||
display: table-row; |
|||
|
|||
& > * { |
|||
display: table-cell; |
|||
} |
|||
|
|||
& > *:first-child { |
|||
width: 85%; |
|||
} |
|||
|
|||
.icon { |
|||
cursor: pointer; |
|||
text-align: right; |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue