通用评论

index.js 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. import React from "react";
  2. import PropTypes from "prop-types";
  3. import { Icon, Button, Popover, Input } from "antd";
  4. import { MAX_UPLOAD_NUMBER } from "../../constant";
  5. import Upload from "./Upload";
  6. import Emoji from "./Emoji";
  7. import "./index.css";
  8. const { TextArea } = Input;
  9. class Editor extends React.Component {
  10. constructor(props) {
  11. super(props);
  12. this.state = {
  13. showUpload: false
  14. };
  15. this.handleClickEmoji = this.handleClickEmoji.bind(this);
  16. this.handleShowUpload = this.handleShowUpload.bind(this);
  17. }
  18. componentDidMount() {}
  19. handleClickEmoji(emojiId) {
  20. this.props.onChangeEmoji(emojiId);
  21. }
  22. handleShowUpload(showUpload) {
  23. if (typeof showUpload === "boolean") {
  24. this.setState({ showUpload: showUpload });
  25. } else {
  26. this.setState({ showUpload: !this.state.showUpload });
  27. }
  28. }
  29. render() {
  30. const {
  31. value,
  32. onChange,
  33. placeholder,
  34. fileList,
  35. onChangeFileList,
  36. rows,
  37. onUpload
  38. } = this.props;
  39. return (
  40. <div className="editor">
  41. <TextArea
  42. value={value}
  43. onChange={onChange}
  44. rows={rows}
  45. placeholder={placeholder}
  46. />
  47. <div className="toolbar">
  48. {false && (
  49. <div style={{ float: "left", margin: "8px 11px" }}>
  50. <Popover
  51. trigger="click"
  52. placement="bottomLeft"
  53. autoAdjustOverflow={false}
  54. content={
  55. <div style={{ width: 200 }}>
  56. <Emoji onClick={this.handleClickEmoji} />
  57. </div>
  58. }
  59. overlayClassName="feed"
  60. >
  61. <Icon type="smile-o" className="icon" />
  62. </Popover>
  63. <Popover
  64. visible={this.state.showUpload}
  65. overlayStyle={{ zIndex: 999 }}
  66. content={
  67. <div
  68. style={{ width: 112 * MAX_UPLOAD_NUMBER, minHeight: 100 }}
  69. >
  70. <Upload
  71. onChangeFileList={onChangeFileList}
  72. onUpload={onUpload}
  73. fileList={fileList}
  74. />
  75. </div>
  76. }
  77. placement="bottomLeft"
  78. title={
  79. <div style={{ margin: "5px auto" }}>
  80. <span>
  81. 上传图片
  82. <span style={{ color: "#666", fontWeight: 400 }}>
  83. (您还能上传{MAX_UPLOAD_NUMBER - fileList.length}张图片)
  84. </span>
  85. </span>
  86. <Icon
  87. type="close"
  88. onClick={() => this.handleShowUpload(false)}
  89. style={{
  90. float: "right",
  91. cursor: "pointer",
  92. marginTop: 4
  93. }}
  94. />
  95. </div>
  96. }
  97. >
  98. <Icon
  99. type="picture"
  100. className="icon"
  101. style={{ marginLeft: 10 }}
  102. onClick={() => this.handleShowUpload(true)}
  103. />
  104. </Popover>
  105. </div>
  106. )}
  107. <div style={{ float: "right", margin: "5px 11px" }}>
  108. <Button
  109. onClick={this.props.onSubmit}
  110. type="primary"
  111. loading={this.props.loading}
  112. >
  113. 发表
  114. </Button>
  115. </div>
  116. </div>
  117. </div>
  118. );
  119. }
  120. }
  121. Editor.propTypes = {
  122. rows: PropTypes.number,
  123. placeholder: PropTypes.string
  124. };
  125. Editor.defaultProps = {
  126. rows: 5,
  127. placeholder: "说点什么吧..."
  128. };
  129. export default Editor;