@seafile/comment-editor 0.0.1-alpha.0 → 0.0.1-alpha.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/README.md +2 -4
  2. package/dist/basic-sdk/assets/css/layout.css +1 -45
  3. package/dist/basic-sdk/assets/css/sdoc-comment-editor-plugin.css +4 -4
  4. package/dist/basic-sdk/comment/utils.js +39 -0
  5. package/dist/basic-sdk/constants/index.js +1 -2
  6. package/dist/basic-sdk/context.js +9 -8
  7. package/dist/basic-sdk/editor/comment-editor.css +138 -0
  8. package/dist/basic-sdk/editor/comment-editor.js +289 -0
  9. package/dist/basic-sdk/extension/plugins/image/helpers.js +1 -1
  10. package/dist/basic-sdk/extension/plugins/image/use-copy-image.js +1 -1
  11. package/dist/basic-sdk/extension/plugins/image/use-upload-image.js +2 -1
  12. package/dist/basic-sdk/extension/plugins/link/menu/index.js +1 -1
  13. package/dist/basic-sdk/extension/plugins/mention/render-elem/participant-popover.js +3 -6
  14. package/dist/basic-sdk/extension/plugins/text-style/menu/index.js +1 -2
  15. package/dist/basic-sdk/extension/render/render-comment-editor-element.js +1 -1
  16. package/dist/basic-sdk/extension/toolbar/comment-editor-toolbar/index.js +3 -3
  17. package/dist/basic-sdk/extension/toolbar/comment-editor-toolbar/post-comment/index.js +2 -2
  18. package/dist/basic-sdk/hooks/use-comment.js +53 -0
  19. package/dist/basic-sdk/index.js +12 -39
  20. package/dist/pages/seafile-comment-editor.js +30 -54
  21. package/package.json +2 -1
  22. package/dist/assets/css/plugin-editor.css +0 -7
  23. package/dist/assets/css/simple-viewer.css +0 -6
  24. package/dist/basic-sdk/comment/components/comment-all-participants/index.css +0 -83
  25. package/dist/basic-sdk/comment/components/comment-all-participants/index.js +0 -67
  26. package/dist/basic-sdk/comment/components/comment-all-participants/participant-avatar.js +0 -43
  27. package/dist/basic-sdk/comment/components/comment-context-menu/index.css +0 -16
  28. package/dist/basic-sdk/comment/components/comment-context-menu/index.js +0 -43
  29. package/dist/basic-sdk/comment/components/comment-context-menu/menu-item.js +0 -57
  30. package/dist/basic-sdk/comment/components/comment-delete-popover.js +0 -80
  31. package/dist/basic-sdk/comment/components/comment-editor.js +0 -165
  32. package/dist/basic-sdk/comment/components/comment-item-collapse-wrapper.js +0 -160
  33. package/dist/basic-sdk/comment/components/comment-item-content.js +0 -156
  34. package/dist/basic-sdk/comment/components/comment-item-reply.js +0 -124
  35. package/dist/basic-sdk/comment/components/comment-item-resolved-reply.js +0 -38
  36. package/dist/basic-sdk/comment/components/comment-item-wrapper.js +0 -368
  37. package/dist/basic-sdk/comment/components/comment-list.css +0 -422
  38. package/dist/basic-sdk/comment/components/comment-list.js +0 -216
  39. package/dist/basic-sdk/comment/components/comment-operation/index.css +0 -26
  40. package/dist/basic-sdk/comment/components/comment-operation/index.js +0 -31
  41. package/dist/basic-sdk/comment/components/comment-participants-editor/index.css +0 -132
  42. package/dist/basic-sdk/comment/components/comment-participants-editor/index.js +0 -69
  43. package/dist/basic-sdk/comment/components/comment-participants-editor/searched-collaborators.js +0 -62
  44. package/dist/basic-sdk/comment/components/comment-participants-editor/selected-participants.js +0 -48
  45. package/dist/basic-sdk/comment/components/editor-comment.js +0 -183
  46. package/dist/basic-sdk/comment/components/elements-comment-count/element-comment-count.js +0 -64
  47. package/dist/basic-sdk/comment/components/elements-comment-count/index.css +0 -29
  48. package/dist/basic-sdk/comment/components/elements-comment-count/index.js +0 -49
  49. package/dist/basic-sdk/comment/components/global-comment/global-comment-body-header.js +0 -87
  50. package/dist/basic-sdk/comment/components/global-comment/global-comment-editor.js +0 -36
  51. package/dist/basic-sdk/comment/components/global-comment/global-comment-header.js +0 -82
  52. package/dist/basic-sdk/comment/components/global-comment/index.css +0 -326
  53. package/dist/basic-sdk/comment/components/global-comment/index.js +0 -212
  54. package/dist/basic-sdk/comment/components/index.js +0 -21
  55. package/dist/basic-sdk/comment/components/style.css +0 -40
  56. package/dist/basic-sdk/comment/helper.js +0 -184
  57. package/dist/basic-sdk/comment/hooks/comment-hooks/use-comment-context.js +0 -20
  58. package/dist/basic-sdk/comment/hooks/comment-hooks/use-comment-list.js +0 -45
  59. package/dist/basic-sdk/comment/hooks/comment-hooks/use-comment-mount.js +0 -58
  60. package/dist/basic-sdk/comment/hooks/notification-hooks/index.js +0 -25
  61. package/dist/basic-sdk/comment/hooks/notification-hooks/use-notification-context.js +0 -20
  62. package/dist/basic-sdk/comment/hooks/notification-hooks/use-notification-mount.js +0 -74
  63. package/dist/basic-sdk/comment/hooks/use-participants.js +0 -26
  64. package/dist/basic-sdk/comment/index.js +0 -67
  65. package/dist/basic-sdk/comment/provider/comment-context-provider.js +0 -37
  66. package/dist/basic-sdk/comment/provider/index.js +0 -23
  67. package/dist/basic-sdk/comment/provider/notification-context-provider.js +0 -31
  68. package/dist/basic-sdk/comment/provider/participants-content-provider.js +0 -96
  69. package/dist/basic-sdk/comment/reducer/comment-reducer.js +0 -353
  70. package/dist/basic-sdk/comment/reducer/notification-reducer.js +0 -89
  71. package/dist/basic-sdk/comment/utils/get-event-transfer.js +0 -77
  72. package/dist/basic-sdk/comment/utils/index.js +0 -281
  73. package/dist/basic-sdk/comment/utils/notification-utils.js +0 -62
  74. package/dist/basic-sdk/editor/comment-article.js +0 -104
  75. package/dist/basic-sdk/editor/sdoc-comment-editor.js +0 -128
  76. package/dist/basic-sdk/editor/sdoc-editor.js +0 -50
  77. package/dist/basic-sdk/hooks/use-collaborators.js +0 -62
  78. package/dist/basic-sdk/hooks/use-plugins.js +0 -9
  79. package/dist/basic-sdk/layout/article-container.js +0 -89
  80. package/dist/basic-sdk/layout/editor-container.js +0 -32
  81. package/dist/basic-sdk/layout/index.js +0 -20
  82. package/dist/basic-sdk/right-panel/index.css +0 -15
  83. package/dist/basic-sdk/right-panel/index.js +0 -86
  84. package/dist/basic-sdk/right-panel/resize-width/index.css +0 -38
  85. package/dist/basic-sdk/right-panel/resize-width/index.js +0 -132
  86. package/dist/basic-sdk/socket/helpers.js +0 -299
  87. package/dist/basic-sdk/socket/index.js +0 -20
  88. package/dist/basic-sdk/socket/socket-client.js +0 -211
  89. package/dist/basic-sdk/socket/socket-manager.js +0 -386
  90. package/dist/basic-sdk/socket/with-socket-io.js +0 -73
  91. package/dist/hooks/index.js +0 -12
  92. package/dist/hooks/use-document.js +0 -75
  93. /package/dist/basic-sdk/comment/{constants/index.js → constants.js} +0 -0
@@ -1,124 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.default = void 0;
9
- var _react = _interopRequireWildcard(require("react"));
10
- var _reactI18next = require("react-i18next");
11
- var _reactstrap = require("reactstrap");
12
- var _dayjs = _interopRequireDefault(require("dayjs"));
13
- var _context = _interopRequireDefault(require("../../context"));
14
- var _mdToHtml = _interopRequireDefault(require("../../slate-convert/md-to-html"));
15
- var _commentDeletePopover = _interopRequireDefault(require("./comment-delete-popover"));
16
- var _commentEditor = _interopRequireDefault(require("./comment-editor"));
17
- const CommentItemReply = _ref => {
18
- let {
19
- isActive,
20
- container,
21
- reply,
22
- deleteReply,
23
- updateReply,
24
- t
25
- } = _ref;
26
- const [isDropdownOpen, setDropdownOpen] = (0, _react.useState)(false);
27
- const itemRef = (0, _react.useRef)(null);
28
- const [isEditing, setIsEditing] = (0, _react.useState)(false);
29
- const [editorContent, setEditorContent] = (0, _react.useState)('');
30
- const replyOpToolsId = `replyOpTools_${reply.id}`;
31
- const onEditToggle = (0, _react.useCallback)(event => {
32
- event.stopPropagation();
33
- setIsEditing(true);
34
- }, []);
35
- const [isShowDeletePopover, setIsShowDeletePopover] = (0, _react.useState)(false);
36
- const onDeleteToggle = (0, _react.useCallback)(event => {
37
- event.stopPropagation();
38
- setIsShowDeletePopover(true);
39
- }, []);
40
- const transferHtml = async mdString => {
41
- const htmlString = await _mdToHtml.default.process(mdString);
42
- const formatHtml = String(htmlString).replace(/\n */g, '');
43
- setEditorContent(formatHtml);
44
- };
45
- (0, _react.useEffect)(() => {
46
- transferHtml(reply.reply);
47
- }, [reply.reply]);
48
- const _deleteReply = (0, _react.useCallback)(() => {
49
- deleteReply(reply.id);
50
- setIsShowDeletePopover(false);
51
- }, [reply.id, deleteReply]);
52
- const updateContent = (0, _react.useCallback)(content => {
53
- if (reply.reply !== content) {
54
- const time = (0, _dayjs.default)().format('YYYY-MM-DD HH:mm:ss');
55
- const newReply = {
56
- reply: content,
57
- updated_at: time
58
- };
59
- updateReply(reply.id, newReply);
60
- }
61
- setIsEditing(false);
62
- }, [reply, updateReply]);
63
- const user = _context.default.getUserInfo();
64
- return /*#__PURE__*/_react.default.createElement("div", {
65
- className: "comment-item",
66
- ref: itemRef
67
- }, /*#__PURE__*/_react.default.createElement("div", {
68
- className: "comment-header"
69
- }, /*#__PURE__*/_react.default.createElement("div", {
70
- className: "comment-author"
71
- }, /*#__PURE__*/_react.default.createElement("span", {
72
- className: "comment-author__avatar"
73
- }, /*#__PURE__*/_react.default.createElement("img", {
74
- alt: "",
75
- src: reply.avatar_url
76
- })), /*#__PURE__*/_react.default.createElement("span", {
77
- className: "comment-author__info"
78
- }, /*#__PURE__*/_react.default.createElement("span", {
79
- className: "name"
80
- }, reply.user_name), /*#__PURE__*/_react.default.createElement("span", {
81
- className: "time"
82
- }, (0, _dayjs.default)(reply.updated_at).format('MM-DD HH:mm')))), isActive && user.username === reply.author && /*#__PURE__*/_react.default.createElement("div", {
83
- className: "comment-item-operation-wrapper"
84
- }, /*#__PURE__*/_react.default.createElement(_reactstrap.Dropdown, {
85
- id: replyOpToolsId,
86
- isOpen: isDropdownOpen,
87
- toggle: () => setDropdownOpen(!isDropdownOpen)
88
- }, /*#__PURE__*/_react.default.createElement(_reactstrap.DropdownToggle, {
89
- tag: "div",
90
- className: "comment-operation"
91
- }, /*#__PURE__*/_react.default.createElement("i", {
92
- className: "sdocfont sdoc-more"
93
- })), /*#__PURE__*/_react.default.createElement(_reactstrap.DropdownMenu, {
94
- className: "sdoc-dropdown-menu",
95
- container: container
96
- }, /*#__PURE__*/_react.default.createElement(_reactstrap.DropdownItem, {
97
- className: "sdoc-dropdown-menu-item",
98
- tag: "div",
99
- onClick: onEditToggle
100
- }, t('Edit')), /*#__PURE__*/_react.default.createElement(_reactstrap.DropdownItem, {
101
- className: "sdoc-dropdown-menu-item",
102
- tag: "div",
103
- onClick: onDeleteToggle
104
- }, t('Delete')))))), /*#__PURE__*/_react.default.createElement("div", {
105
- className: "comment-content"
106
- }, !isEditing && /*#__PURE__*/_react.default.createElement("div", {
107
- dangerouslySetInnerHTML: {
108
- __html: editorContent
109
- }
110
- })), isEditing && /*#__PURE__*/_react.default.createElement(_commentEditor.default, {
111
- className: "pb-3",
112
- type: "reply",
113
- content: editorContent,
114
- updateContent: updateContent,
115
- setIsEditing: setIsEditing
116
- }), isShowDeletePopover && isActive && /*#__PURE__*/_react.default.createElement(_commentDeletePopover.default, {
117
- parentDom: itemRef.current,
118
- type: "reply",
119
- deleteConfirm: _deleteReply,
120
- setIsShowDeletePopover: setIsShowDeletePopover,
121
- targetId: replyOpToolsId
122
- }));
123
- };
124
- var _default = exports.default = (0, _reactI18next.withTranslation)('sdoc-editor')(CommentItemReply);
@@ -1,38 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.default = void 0;
9
- var _react = _interopRequireWildcard(require("react"));
10
- var _reactI18next = require("react-i18next");
11
- var _dayjs = _interopRequireDefault(require("dayjs"));
12
- const CommentItemResolvedReply = _ref => {
13
- let {
14
- reply,
15
- t
16
- } = _ref;
17
- return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
18
- className: "comment-item"
19
- }, /*#__PURE__*/_react.default.createElement("div", {
20
- className: "comment-header"
21
- }, /*#__PURE__*/_react.default.createElement("div", {
22
- className: "comment-author"
23
- }, /*#__PURE__*/_react.default.createElement("span", {
24
- className: "comment-author__avatar"
25
- }, /*#__PURE__*/_react.default.createElement("img", {
26
- alt: "",
27
- src: reply.avatar_url
28
- })), /*#__PURE__*/_react.default.createElement("span", {
29
- className: "comment-author__info"
30
- }, /*#__PURE__*/_react.default.createElement("span", {
31
- className: "name"
32
- }, reply.user_name), /*#__PURE__*/_react.default.createElement("span", {
33
- className: "time"
34
- }, (0, _dayjs.default)(reply.updated_at).format('MM-DD HH:mm'))))), /*#__PURE__*/_react.default.createElement("p", {
35
- className: "comment-content"
36
- }, reply.reply === 'True' && /*#__PURE__*/_react.default.createElement("span", null, t('Mark_as_Resolved')), reply.reply === 'False' && /*#__PURE__*/_react.default.createElement("span", null, t('Resubmitted')))));
37
- };
38
- var _default = exports.default = (0, _reactI18next.withTranslation)('sdoc-editor')(CommentItemResolvedReply);
@@ -1,368 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.default = void 0;
9
- var _react = _interopRequireWildcard(require("react"));
10
- var _slate = require("@seafile/slate");
11
- var _slateReact = require("@seafile/slate-react");
12
- var _classnames = _interopRequireDefault(require("classnames"));
13
- var _dayjs = _interopRequireDefault(require("dayjs"));
14
- var _context = _interopRequireDefault(require("../../context"));
15
- var _constants = require("../constants");
16
- var _helper = require("../helper");
17
- var _useCommentContext = require("../hooks/comment-hooks/use-comment-context");
18
- var _commentDeletePopover = _interopRequireDefault(require("./comment-delete-popover"));
19
- var _commentItemContent = _interopRequireDefault(require("./comment-item-content"));
20
- var _commentItemReply = _interopRequireDefault(require("./comment-item-reply"));
21
- const CommentItemWrapper = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
22
- let {
23
- container = 'sdoc-comment-list-container',
24
- editor,
25
- element,
26
- isActive,
27
- comment,
28
- commentsDetail,
29
- setIsClickedContextComment,
30
- setIsCommentPanelVisible,
31
- onSelectElement,
32
- isGlobalComment,
33
- commentDetailRef,
34
- updateScrollPosition,
35
- setCurrentCommentGroup,
36
- onCommentClick,
37
- isEmptyComment,
38
- isCollapseCommentEditor,
39
- isClickedContextComment = false,
40
- closeComment
41
- } = _ref;
42
- const listRef = (0, _react.useRef)(null);
43
- const {
44
- dispatch
45
- } = (0, _useCommentContext.useCommentContext)();
46
- const scrollRef = (0, _react.useRef)(document.querySelector('.sdoc-scroll-container'));
47
- const [isShowDeletePopover, setIsShowDeletePopover] = (0, _react.useState)(false);
48
- const commentOpToolsId = `commentOpTools_${comment === null || comment === void 0 ? void 0 : comment.id}`;
49
- const style = !isGlobalComment && isCollapseCommentEditor ? {
50
- maxHeight: '341px'
51
- } : {};
52
- const deleteComment = (0, _react.useCallback)(async commentId => {
53
- await _context.default.deleteComment(commentId);
54
- let {
55
- element_id: elementId,
56
- element_id_list
57
- } = comment.detail;
58
- if (element_id_list) {
59
- var _comment$detail;
60
- elementId = element_id_list[0];
61
- (0, _helper.updateCommentedElementsAttrs)(element_id_list, editor, (_comment$detail = comment.detail) === null || _comment$detail === void 0 ? void 0 : _comment$detail.text_comment_id, false, true);
62
- }
63
- dispatch({
64
- type: 'DELETE_COMMENT',
65
- payload: {
66
- element_id: elementId,
67
- comment_id: commentId
68
- }
69
- });
70
- closeComment && closeComment();
71
- // eslint-disable-next-line react-hooks/exhaustive-deps
72
- }, [comment.detail, dispatch, editor]);
73
- const updateComment = (0, _react.useCallback)(async (commentId, newComment) => {
74
- await _context.default.updateComment(commentId, newComment);
75
- const elementId = (0, _helper.getPrimaryElementId)(comment.detail);
76
- dispatch({
77
- type: 'UPDATE_COMMENT',
78
- payload: {
79
- element_id: elementId,
80
- comment_id: commentId,
81
- comment: newComment
82
- }
83
- });
84
- }, [comment.detail, dispatch]);
85
- const updateCommentState = (0, _react.useCallback)(async (commentId, newComment) => {
86
- const time = (0, _dayjs.default)().format('YYYY-MM-DD HH:mm:ss');
87
- const user = _context.default.getUserInfo();
88
- const reply = {
89
- type: 'comment',
90
- reply: newComment.resolved,
91
- updated_at: time,
92
- author: user.username
93
- };
94
-
95
- // When updating comment status, add a new reply
96
- const res = await _context.default.insertReply(commentId, reply);
97
- const {
98
- reply: returnReply
99
- } = res.data;
100
- const newReply = {
101
- ...reply,
102
- id: returnReply.id,
103
- reply: returnReply.reply,
104
- user_name: returnReply.user_name,
105
- avatar_url: returnReply.avatar_url
106
- };
107
- const elementId = (0, _helper.getPrimaryElementId)(comment.detail);
108
- if (newComment.resolved === true) {
109
- const resolvedComment = commentsDetail ? Object.values(commentsDetail).find(comments => comments.id === commentId) : comment;
110
- if (resolvedComment.detail.element_id_list) {
111
- var _resolvedComment$deta;
112
- (0, _helper.updateCommentedElementsAttrs)(resolvedComment.detail.element_id_list, editor, (_resolvedComment$deta = resolvedComment.detail) === null || _resolvedComment$deta === void 0 ? void 0 : _resolvedComment$deta.text_comment_id, !newComment.resolved);
113
- closeComment && closeComment();
114
- }
115
- if (commentsDetail && Object.values(commentsDetail).length === 1) {
116
- setIsClickedContextComment(false);
117
- setIsCommentPanelVisible(false);
118
- }
119
- }
120
- if (newComment.resolved === false && comment.detail.element_id_list) {
121
- const unresolvedComment = commentsDetail ? Object.values(commentsDetail).find(comments => comments.id === commentId) : comment;
122
- if (unresolvedComment.detail.element_id_list) {
123
- var _unresolvedComment$de;
124
- (0, _helper.updateCommentedElementsAttrs)(unresolvedComment.detail.element_id_list, editor, (_unresolvedComment$de = unresolvedComment.detail) === null || _unresolvedComment$de === void 0 ? void 0 : _unresolvedComment$de.text_comment_id, !newComment.resolved);
125
- }
126
- }
127
- dispatch({
128
- type: 'INSERT_REPLY',
129
- payload: {
130
- element_id: elementId,
131
- comment_id: commentId,
132
- reply: newReply
133
- }
134
- });
135
-
136
- // Modify comment status
137
- await _context.default.updateComment(commentId, newComment);
138
- dispatch({
139
- type: 'UPDATE_COMMENT_STATE',
140
- payload: {
141
- element_id: elementId,
142
- comment_id: commentId,
143
- comment: newComment
144
- }
145
- });
146
-
147
- // If the status of the comment is set to resolved, the page jumps to the position of the comment
148
- if (!isClickedContextComment && newComment.resolved === true) {
149
- setTimeout(() => {
150
- updateScrollPosition && updateScrollPosition();
151
- }, 100);
152
- }
153
- // eslint-disable-next-line react-hooks/exhaustive-deps
154
- }, [comment, commentsDetail, dispatch, editor, isClickedContextComment, setIsClickedContextComment, setIsCommentPanelVisible, updateScrollPosition]);
155
- const insertReply = (0, _react.useCallback)(async (commentId, replies) => {
156
- const elementId = (0, _helper.getPrimaryElementId)(comment.detail);
157
- for (let i = 0; i < replies.length; i++) {
158
- const reply = replies[i];
159
- const res = await _context.default.insertReply(commentId, reply);
160
- const {
161
- reply: returnReply
162
- } = res.data;
163
- const newReply = {
164
- ...reply,
165
- id: returnReply.id,
166
- comment_id: commentId,
167
- reply: returnReply.reply,
168
- user_name: returnReply.user_name,
169
- avatar_url: returnReply.avatar_url
170
- };
171
- dispatch({
172
- type: 'INSERT_REPLY',
173
- payload: {
174
- element_id: elementId,
175
- comment_id: commentId,
176
- reply: newReply
177
- }
178
- });
179
- }
180
-
181
- // If the number of replies is greater than one, it means that the comment needs to be resubmitted and the status of the comment should be modified
182
- if (replies.length > 1) {
183
- const newComment = {
184
- resolved: false
185
- };
186
- await _context.default.updateComment(commentId, newComment);
187
- dispatch({
188
- type: 'UPDATE_COMMENT_STATE',
189
- payload: {
190
- element_id: elementId,
191
- comment_id: commentId,
192
- comment: newComment
193
- }
194
- });
195
- }
196
- setTimeout(() => {
197
- const options = {
198
- top: 10000,
199
- behavior: 'smooth'
200
- };
201
- listRef.current.scrollTo(options);
202
- }, 0);
203
- }, [comment.detail, dispatch]);
204
- const insertContent = (0, _react.useCallback)(content => {
205
- const user = _context.default.getUserInfo();
206
- const replies = [];
207
-
208
- // The comment has already been resolved, when adding a new reply, resubmit the comment
209
- if (comment.resolved) {
210
- const time = (0, _dayjs.default)().format('YYYY-MM-DD HH:mm:ss');
211
- const stateChangeReply = {
212
- type: 'comment',
213
- reply: false,
214
- updated_at: time,
215
- author: user.username
216
- };
217
- replies.push(stateChangeReply);
218
- }
219
-
220
- // User added reply
221
- const time = (0, _dayjs.default)().format('YYYY-MM-DD HH:mm:ss');
222
- const reply = {
223
- type: 'reply',
224
- reply: content,
225
- updated_at: time,
226
- author: user.username
227
- };
228
- replies.push(reply);
229
- insertReply(comment.id, replies);
230
- }, [comment.id, comment.resolved, insertReply]);
231
- (0, _react.useImperativeHandle)(ref ? ref : commentDetailRef, () => ({
232
- insertContent
233
- }));
234
- const deleteReply = (0, _react.useCallback)(async replyId => {
235
- const commentId = comment.id;
236
- const elementId = (0, _helper.getPrimaryElementId)(comment.detail);
237
- await _context.default.deleteReply(commentId, replyId);
238
- dispatch({
239
- type: 'DELETE_REPLY',
240
- payload: {
241
- element_id: elementId,
242
- comment_id: commentId,
243
- reply_id: replyId
244
- }
245
- });
246
- }, [comment.detail, comment.id, dispatch]);
247
- const updateReply = (0, _react.useCallback)(async (replyId, newReply) => {
248
- const commentId = comment.id;
249
- const elementId = (0, _helper.getPrimaryElementId)(comment.detail);
250
- await _context.default.updateReply(commentId, replyId, newReply);
251
- dispatch({
252
- type: 'UPDATE_REPLY',
253
- payload: {
254
- element_id: elementId,
255
- comment_id: commentId,
256
- reply_id: replyId,
257
- reply: newReply
258
- }
259
- });
260
- }, [comment.detail, comment.id, dispatch]);
261
- const onItemClick = (0, _react.useCallback)(event => {
262
- if (event.target.className === _constants.COMMENT_URL_CLASSNAME) return;
263
- onCommentClick && onCommentClick(comment);
264
- }, [comment, onCommentClick]);
265
- const onDeleteComment = (0, _react.useCallback)(() => {
266
- setIsShowDeletePopover(true);
267
- }, []);
268
- const _deleteComment = (0, _react.useCallback)(() => {
269
- deleteComment(comment.id);
270
- setIsShowDeletePopover(false);
271
- setCurrentCommentGroup && setCurrentCommentGroup(null);
272
- if (isClickedContextComment) {
273
- if (Object.values(commentsDetail).length === 1) {
274
- setIsClickedContextComment(false);
275
- setIsCommentPanelVisible(false);
276
- } else {
277
- const newCommentIdArray = Object.values(commentsDetail).filter(item => item.id !== comment.id).map(item => item.detail.text_comment_id);
278
- onSelectElement(newCommentIdArray, true);
279
- }
280
- }
281
- }, [comment.id, commentsDetail, deleteComment, isClickedContextComment, onSelectElement, setCurrentCommentGroup, setIsClickedContextComment, setIsCommentPanelVisible]);
282
- (0, _react.useEffect)(() => {
283
- if (!isActive) {
284
- setIsShowDeletePopover(false);
285
- }
286
- }, [isActive]);
287
- const className = (0, _classnames.default)('comment-ui-container', {
288
- 'active': isActive,
289
- 'sdoc-resolved': comment === null || comment === void 0 ? void 0 : comment.resolved,
290
- 'd-flex flex-column': element,
291
- 'global-comment-item-detail-wrapper': isGlobalComment,
292
- 'comment-item-detail-wrapper': !isGlobalComment
293
- });
294
- const handleScrollToArticle = (0, _react.useCallback)(e => {
295
- e.stopPropagation();
296
- const dom = _slateReact.ReactEditor.toDOMNode(editor, element);
297
- const headerHeight = 56 + 37;
298
- scrollRef.current.scrollTo({
299
- top: dom.offsetTop - headerHeight,
300
- behavior: 'smooth'
301
- });
302
- }, [editor, element, scrollRef]);
303
- const newCommentId = isClickedContextComment && comment !== null && comment !== void 0 && comment.detail.element_id_list ? comment === null || comment === void 0 ? void 0 : comment.detail.element_id_list[0] : comment === null || comment === void 0 ? void 0 : comment.id;
304
- return /*#__PURE__*/_react.default.createElement("div", {
305
- id: `comment-item-wrapper_${newCommentId}`,
306
- className: className,
307
- onClick: onItemClick
308
- }, element && /*#__PURE__*/_react.default.createElement("div", {
309
- className: "comment-item-selected-text-container",
310
- onClick: handleScrollToArticle
311
- }, /*#__PURE__*/_react.default.createElement("i", {
312
- className: "sdocfont sdoc-comment-quote mr-2"
313
- }), /*#__PURE__*/_react.default.createElement("div", {
314
- className: "comment-item-selected-text"
315
- }, _slate.Node.string(element))), !isEmptyComment && /*#__PURE__*/_react.default.createElement("div", {
316
- ref: listRef,
317
- className: "comment-item-list",
318
- style: style
319
- }, comment.detail.element_id_list && !isGlobalComment && /*#__PURE__*/_react.default.createElement("div", {
320
- className: "context-comment-item-selected-text-container"
321
- }, /*#__PURE__*/_react.default.createElement("i", {
322
- className: "sdocfont sdoc-comment-quote mr-2"
323
- }), /*#__PURE__*/_react.default.createElement("div", {
324
- className: "context-comment-items"
325
- }, comment.detail.element_id_list.map((elementId, index) => {
326
- return /*#__PURE__*/_react.default.createElement("div", {
327
- className: "context-comment-item-selected-text",
328
- key: index
329
- }, (0, _helper.getCommentedTextsByElementId)(elementId, comment.detail.text_comment_id));
330
- }))), /*#__PURE__*/_react.default.createElement(_commentItemContent.default, {
331
- key: newCommentId,
332
- container: container,
333
- isActive: isActive,
334
- comment: comment,
335
- updateComment: updateComment,
336
- updateCommentState: updateCommentState,
337
- onDeleteComment: onDeleteComment,
338
- targetId: commentOpToolsId,
339
- isClickedContextComment: isClickedContextComment
340
- }), isClickedContextComment && comment.replies && comment.replies.length > 0 && comment.replies.filter(item => item.type === 'reply').map(reply => {
341
- const props = {
342
- key: reply.id,
343
- isActive,
344
- container,
345
- reply,
346
- deleteReply,
347
- updateReply
348
- };
349
- return /*#__PURE__*/_react.default.createElement(_commentItemReply.default, props);
350
- }), !isClickedContextComment && comment.replies && comment.replies.length > 0 && comment.replies.filter(item => item.type === 'reply').map(reply => {
351
- const props = {
352
- key: reply.id,
353
- isActive,
354
- container,
355
- reply,
356
- deleteReply,
357
- updateReply
358
- };
359
- return /*#__PURE__*/_react.default.createElement(_commentItemReply.default, props);
360
- })), isShowDeletePopover && isActive && /*#__PURE__*/_react.default.createElement(_commentDeletePopover.default, {
361
- type: "comment",
362
- targetId: commentOpToolsId,
363
- deleteConfirm: _deleteComment,
364
- setIsShowDeletePopover: setIsShowDeletePopover,
365
- parentDom: listRef.current
366
- }));
367
- });
368
- var _default = exports.default = CommentItemWrapper;