通用评论

index.js 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. import React, { Component } from "react";
  2. import { Spin, Pagination, Checkbox } from "antd";
  3. import intl from "react-intl-universal";
  4. import Comment from "../../Comment";
  5. import CommentBox from "../CommentBox";
  6. import "./index.css";
  7. class CommentList extends Component {
  8. constructor(props) {
  9. super(props);
  10. this.state = {
  11. filterSpeak: 0
  12. };
  13. }
  14. componentWillMount() {
  15. this.props.app.sGetComment({ page: this.props.app.page });
  16. }
  17. renderPagination() {
  18. const {
  19. list,
  20. total,
  21. page,
  22. pageType,
  23. limit,
  24. isNoMoreComment,
  25. sGetComment,
  26. onPageChange,
  27. onGetMoreBtnClick
  28. } = this.props.app;
  29. const { filterSpeak } = this.state;
  30. if (pageType === "slice") {
  31. // 截断多余评论,通过点击查看更多跳转
  32. return (
  33. <div className="comment-list-show-more" onClick={onGetMoreBtnClick}>
  34. <span>查看更多</span>
  35. </div>
  36. );
  37. } else if (pageType === "more") {
  38. if (!isNoMoreComment && list.length !== total) {
  39. return (
  40. <div
  41. className="comment-list-show-more"
  42. onClick={() => {
  43. sGetComment({ page: page + 1, filterSpeak });
  44. onPageChange(page + 1);
  45. }}
  46. >
  47. <span>{intl.get("comment.moreComment")}</span>
  48. </div>
  49. );
  50. } else {
  51. return null;
  52. }
  53. } else if (pageType === "pagination") {
  54. return (
  55. <div className="comment-list-pagination">
  56. <Pagination
  57. pageSize={limit}
  58. current={page}
  59. total={total}
  60. onChange={p => {
  61. sGetComment({ page: p, filterSpeak });
  62. onPageChange(p);
  63. }}
  64. />
  65. </div>
  66. );
  67. }
  68. }
  69. render() {
  70. const {
  71. list,
  72. total,
  73. loading,
  74. isSpeak,
  75. sGetComment,
  76. onPageChange
  77. } = this.props.app;
  78. const spinning = Boolean(
  79. loading.sGetComment || loading.sCommentFavor || loading.sReplyFavor
  80. );
  81. return (
  82. <div>
  83. <Spin spinning={spinning}>
  84. {/* <div>共 {total} 条评论</div> */}
  85. <div>
  86. {intl.get("comment.totalComment", { total })}
  87. {isSpeak && (
  88. <Checkbox
  89. className="comment-list-filter-speak"
  90. onChange={e => {
  91. this.setState({
  92. filterSpeak: e.target.checked ? 1 : 0
  93. });
  94. sGetComment({
  95. page: 1,
  96. filterSpeak: e.target.checked ? 1 : 0
  97. });
  98. onPageChange(1);
  99. }}
  100. >
  101. {intl.get("comment.filterSpeak")}
  102. </Checkbox>
  103. )}
  104. </div>
  105. {list.map(item => (
  106. <CommentBox
  107. content={item}
  108. user_id={item.user_id}
  109. key={item.id}
  110. commentId={item.id}
  111. />
  112. ))}
  113. {this.renderPagination()}
  114. </Spin>
  115. </div>
  116. );
  117. }
  118. }
  119. CommentList.propTypes = {};
  120. export default Comment(CommentList);