CommentEditorLazyRenderer.jsx 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { createSubscribedElement } from '../UnstatedUtils';
  4. import AppContainer from '../../services/AppContainer';
  5. import UserPicture from '../User/UserPicture';
  6. import CommentEditor from './CommentEditor';
  7. class CommentEditorLazyRenderer extends React.Component {
  8. constructor(props) {
  9. super(props);
  10. this.state = {
  11. isEditorShown: false,
  12. };
  13. this.growiRenderer = this.props.appContainer.getRenderer('comment');
  14. this.showCommentFormBtnClickHandler = this.showCommentFormBtnClickHandler.bind(this);
  15. }
  16. showCommentFormBtnClickHandler() {
  17. this.setState({ isEditorShown: !this.state.isEditorShown });
  18. }
  19. render() {
  20. const { appContainer } = this.props;
  21. const user = appContainer.currentUser;
  22. const isLoggedIn = user != null;
  23. if (!isLoggedIn) {
  24. return <React.Fragment></React.Fragment>;
  25. }
  26. return (
  27. <React.Fragment>
  28. { !this.state.isEditorShown && (
  29. <div className="form page-comment-form">
  30. <div className="comment-form">
  31. <div className="comment-form-user">
  32. <UserPicture user={user} />
  33. </div>
  34. <div className="comment-form-main">
  35. { !this.state.isEditorShown && (
  36. <button
  37. type="button"
  38. className="btn btn-lg btn-link center-block"
  39. onClick={this.showCommentFormBtnClickHandler}
  40. >
  41. <i className="icon-bubble"></i> Add Comment
  42. </button>
  43. ) }
  44. </div>
  45. </div>
  46. </div>
  47. ) }
  48. { this.state.isEditorShown && (
  49. <CommentEditor
  50. growiRenderer={this.growiRenderer}
  51. replyTo={undefined}
  52. commentButtonClickedHandler={this.showCommentFormBtnClickHandler}
  53. >
  54. </CommentEditor>
  55. ) }
  56. </React.Fragment>
  57. );
  58. }
  59. }
  60. /**
  61. * Wrapper component for using unstated
  62. */
  63. const CommentEditorLazyRendererWrapper = (props) => {
  64. return createSubscribedElement(CommentEditorLazyRenderer, props, [AppContainer]);
  65. };
  66. CommentEditorLazyRenderer.propTypes = {
  67. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  68. };
  69. export default CommentEditorLazyRendererWrapper;