@seafile/comment-editor 0.0.1-alpha.3 → 0.0.1-alpha.31

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 (67) 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 +8 -14
  4. package/dist/basic-sdk/editor/comment-editor.css +138 -0
  5. package/dist/basic-sdk/{comment/components → editor}/comment-editor.js +41 -43
  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/toolbar/comment-editor-toolbar/index.js +7 -3
  10. package/dist/basic-sdk/hooks/use-comment.js +27 -181
  11. package/dist/basic-sdk/index.js +3 -10
  12. package/dist/index.js +0 -12
  13. package/dist/pages/seafile-comment-editor.js +37 -13
  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-delete-popover.js +0 -80
  21. package/dist/basic-sdk/comment/components/comment-item-collapse-wrapper.js +0 -160
  22. package/dist/basic-sdk/comment/components/comment-item-content.js +0 -154
  23. package/dist/basic-sdk/comment/components/comment-item-reply.js +0 -124
  24. package/dist/basic-sdk/comment/components/comment-item-resolved-reply.js +0 -38
  25. package/dist/basic-sdk/comment/components/comment-item-wrapper.js +0 -364
  26. package/dist/basic-sdk/comment/components/comment-list.css +0 -422
  27. package/dist/basic-sdk/comment/components/comment-list.js +0 -216
  28. package/dist/basic-sdk/comment/components/comment-participants-editor/index.css +0 -132
  29. package/dist/basic-sdk/comment/components/comment-participants-editor/index.js +0 -69
  30. package/dist/basic-sdk/comment/components/comment-participants-editor/searched-collaborators.js +0 -62
  31. package/dist/basic-sdk/comment/components/comment-participants-editor/selected-participants.js +0 -48
  32. package/dist/basic-sdk/comment/components/editor-comment.js +0 -183
  33. package/dist/basic-sdk/comment/components/elements-comment-count/element-comment-count.js +0 -64
  34. package/dist/basic-sdk/comment/components/elements-comment-count/index.css +0 -29
  35. package/dist/basic-sdk/comment/components/elements-comment-count/index.js +0 -49
  36. package/dist/basic-sdk/comment/components/global-comment/global-comment-body-header.js +0 -88
  37. package/dist/basic-sdk/comment/components/global-comment/global-comment-header.js +0 -90
  38. package/dist/basic-sdk/comment/components/global-comment/index.css +0 -328
  39. package/dist/basic-sdk/comment/components/global-comment/index.js +0 -217
  40. package/dist/basic-sdk/comment/components/index.js +0 -21
  41. package/dist/basic-sdk/comment/components/style.css +0 -40
  42. package/dist/basic-sdk/comment/helper.js +0 -184
  43. package/dist/basic-sdk/comment/hooks/comment-hooks/use-comment-context.js +0 -20
  44. package/dist/basic-sdk/comment/hooks/comment-hooks/use-comment-list.js +0 -45
  45. package/dist/basic-sdk/comment/hooks/comment-hooks/use-comment-mount.js +0 -57
  46. package/dist/basic-sdk/comment/hooks/notification-hooks/index.js +0 -25
  47. package/dist/basic-sdk/comment/hooks/notification-hooks/use-notification-context.js +0 -20
  48. package/dist/basic-sdk/comment/hooks/notification-hooks/use-notification-mount.js +0 -70
  49. package/dist/basic-sdk/comment/hooks/use-participants.js +0 -26
  50. package/dist/basic-sdk/comment/index.js +0 -21
  51. package/dist/basic-sdk/comment/reducer/comment-reducer.js +0 -353
  52. package/dist/basic-sdk/comment/reducer/notification-reducer.js +0 -89
  53. package/dist/basic-sdk/comment/utils/get-event-transfer.js +0 -77
  54. package/dist/basic-sdk/comment/utils/index.js +0 -281
  55. package/dist/basic-sdk/comment/utils/notification-utils.js +0 -62
  56. package/dist/basic-sdk/layout/comment-layout/index.css +0 -15
  57. package/dist/basic-sdk/layout/comment-layout/index.js +0 -87
  58. package/dist/basic-sdk/layout/comment-layout/resize-width/index.css +0 -38
  59. package/dist/basic-sdk/layout/comment-layout/resize-width/index.js +0 -132
  60. package/dist/basic-sdk/layout/editor-container.js +0 -32
  61. package/dist/basic-sdk/layout/index.js +0 -13
  62. package/dist/basic-sdk/socket/helpers.js +0 -299
  63. package/dist/basic-sdk/socket/index.js +0 -20
  64. package/dist/basic-sdk/socket/socket-client.js +0 -211
  65. package/dist/basic-sdk/socket/socket-manager.js +0 -386
  66. package/dist/basic-sdk/socket/with-socket-io.js +0 -73
  67. /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;