mock平台

Label.js 1.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import React, { Component } from 'react';
  2. import { Icon, Input, Tooltip } from 'antd';
  3. import PropTypes from 'prop-types';
  4. import './Label.scss';
  5. export default class Label extends Component {
  6. constructor(props) {
  7. super(props);
  8. this.state = {
  9. inputShow: false,
  10. inputValue: ''
  11. };
  12. }
  13. static propTypes = {
  14. onChange: PropTypes.func,
  15. desc: PropTypes.string,
  16. cat_name: PropTypes.string
  17. };
  18. toggle = () => {
  19. this.setState({ inputShow: !this.state.inputShow });
  20. };
  21. handleChange = event => {
  22. this.setState({ inputValue: event.target.value });
  23. };
  24. componentWillReceiveProps(nextProps) {
  25. if (this.props.desc === nextProps.desc) {
  26. this.setState({
  27. inputShow: false
  28. });
  29. }
  30. }
  31. render() {
  32. return (
  33. <div>
  34. {this.props.desc && (
  35. <div className="component-label">
  36. {!this.state.inputShow ? (
  37. <div>
  38. <p>
  39. {this.props.desc} &nbsp;&nbsp;
  40. <Tooltip title="编辑简介">
  41. <Icon onClick={this.toggle} className="interface-delete-icon" type="edit" />
  42. </Tooltip>
  43. </p>
  44. </div>
  45. ) : (
  46. <div className="label-input-wrapper">
  47. <Input onChange={this.handleChange} defaultValue={this.props.desc} size="small" />
  48. <Icon
  49. className="interface-delete-icon"
  50. onClick={() => {
  51. this.props.onChange(this.state.inputValue);
  52. this.toggle();
  53. }}
  54. type="check"
  55. />
  56. <Icon className="interface-delete-icon" onClick={this.toggle} type="close" />
  57. </div>
  58. )}
  59. </div>
  60. )}
  61. </div>
  62. );
  63. }
  64. }