@seafile/comment-editor 0.0.1-alpha.2 → 0.0.1-alpha.21

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