PopinFixedHeader.jsx 2.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import React from 'react'
  2. import classnames from 'classnames'
  3. import PropTypes from 'prop-types'
  4. class PopinFixedHeader extends React.Component {
  5. constructor (props) {
  6. super(props)
  7. this.state = {
  8. editTitle: false,
  9. editTitleValue: ''
  10. }
  11. }
  12. componentDidUpdate (prevProps) {
  13. if (prevProps.title !== this.props.title) this.setState({editTitleValue: this.props.title})
  14. }
  15. onChangeTitle = e => {
  16. const newTitle = e.target.value
  17. this.setState({editTitleValue: newTitle})
  18. }
  19. handleClickChangeTitleBtn = () => {
  20. if (this.state.editTitle) this.props.onValidateChangeTitle(this.state.editTitleValue)
  21. this.setState(prevState => ({editTitle: !prevState.editTitle}))
  22. }
  23. render () {
  24. const { customClass, faIcon, title, onClickCloseBtn } = this.props
  25. return (
  26. <div className={classnames('wsContentGeneric__header', `${customClass}__header`)}>
  27. <div className={classnames('wsContentGeneric__header__icon', `${customClass}__header__icon`)}>
  28. <i className={`fa fa-${faIcon}`} />
  29. </div>
  30. <div className={classnames('wsContentGeneric__header__title mr-auto', `${customClass}__header__title`)}>
  31. {this.state.editTitle
  32. ? <input value={this.state.editTitleValue} onChange={this.onChangeTitle} />
  33. : <div>{title}</div>
  34. }
  35. </div>
  36. <div
  37. className={classnames('wsContentGeneric__header__edittitle', `${customClass}__header__changetitle`)}
  38. onClick={this.handleClickChangeTitleBtn}
  39. >
  40. {this.state.editTitle ? <i className='fa fa-check' /> : <i className='fa fa-pencil' />}
  41. </div>
  42. <div
  43. className={classnames('wsContentGeneric__header__close', `${customClass}__header__close`)}
  44. onClick={onClickCloseBtn}
  45. >
  46. <i className='fa fa-times' />
  47. </div>
  48. </div>
  49. )
  50. }
  51. }
  52. export default PopinFixedHeader
  53. PopinFixedHeader.propTypes = {
  54. faIcon: PropTypes.string.isRequired,
  55. onClickCloseBtn: PropTypes.func.isRequired,
  56. customClass: PropTypes.string,
  57. title: PropTypes.string,
  58. onValidateChangeTitle: PropTypes.func
  59. }
  60. PopinFixedHeader.defaultProps = {
  61. customClass: '',
  62. title: '',
  63. onChangeTitle: () => {}
  64. }