通用评论

index.js 3.5KB

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