CommentListCard.tsx 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import { useState, useEffect } from "react";
  2. import { useIntl } from "react-intl";
  3. import { Card, message } from "antd";
  4. import { useAppSelector } from "../../hooks";
  5. import { currentUser as _currentUser } from "../../reducers/current-user";
  6. import { get } from "../../request";
  7. import { ICommentListResponse } from "../api/Comment";
  8. import CommentCreate from "./CommentCreate";
  9. import { IComment } from "./CommentItem";
  10. import CommentList from "./CommentList";
  11. interface IWidget {
  12. resId?: string;
  13. resType?: string;
  14. onSelect?: Function;
  15. onItemCountChange?: Function;
  16. }
  17. const Widget = ({ resId, resType, onSelect, onItemCountChange }: IWidget) => {
  18. const intl = useIntl();
  19. const [data, setData] = useState<IComment[]>([]);
  20. const _currUser = useAppSelector(_currentUser);
  21. useEffect(() => {
  22. get<ICommentListResponse>(`/v2/discussion?view=question&id=${resId}`)
  23. .then((json) => {
  24. console.log(json);
  25. if (json.ok) {
  26. message.success(intl.formatMessage({ id: "flashes.success" }));
  27. const discussions: IComment[] = json.data.rows.map((item) => {
  28. return {
  29. id: item.id,
  30. resId: item.res_id,
  31. resType: item.res_type,
  32. user: {
  33. id: item.editor?.id ? item.editor.id : "",
  34. nickName: item.editor?.nickName ? item.editor.nickName : "",
  35. realName: item.editor?.userName ? item.editor.userName : "",
  36. avatar: item.editor?.avatar ? item.editor.avatar : "",
  37. },
  38. title: item.title,
  39. content: item.content,
  40. childrenCount: item.children_count,
  41. createdAt: item.created_at,
  42. updatedAt: item.updated_at,
  43. };
  44. });
  45. setData(discussions);
  46. } else {
  47. message.error(json.message);
  48. }
  49. })
  50. .catch((e) => {
  51. message.error(e.message);
  52. });
  53. }, [resId]);
  54. if (typeof resId === "undefined") {
  55. return <div>该资源尚未创建,不能发表讨论。</div>;
  56. }
  57. return (
  58. <div>
  59. <Card title="问题列表" extra={<a href="#">More</a>}>
  60. <CommentList
  61. onSelect={(
  62. e: React.MouseEvent<HTMLSpanElement, MouseEvent>,
  63. comment: IComment
  64. ) => {
  65. if (typeof onSelect !== "undefined") {
  66. onSelect(e, comment);
  67. }
  68. }}
  69. data={data}
  70. />
  71. {resId && resType ? (
  72. <CommentCreate
  73. resId={resId}
  74. resType={resType}
  75. onCreated={(e: IComment) => {
  76. const newData = JSON.parse(JSON.stringify(e));
  77. console.log("create", e);
  78. if (typeof onItemCountChange !== "undefined") {
  79. onItemCountChange(data.length + 1);
  80. }
  81. setData([...data, newData]);
  82. }}
  83. />
  84. ) : (
  85. <></>
  86. )}
  87. </Card>
  88. </div>
  89. );
  90. };
  91. export default Widget;