@seafile/sdoc-editor 2.0.139 → 2.0.140

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.
@@ -13,12 +13,14 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm
13
13
  var _react = _interopRequireWildcard(require("react"));
14
14
  var _reactI18next = require("react-i18next");
15
15
  var _reactstrap = require("reactstrap");
16
+ var _commentEditor = require("@seafile/comment-editor");
16
17
  var _dayjs = _interopRequireDefault(require("dayjs"));
17
18
  var _tooltip = _interopRequireDefault(require("../../components/tooltip"));
18
19
  var _context2 = _interopRequireDefault(require("../../context"));
20
+ var _useCollaborators2 = require("../../hooks/use-collaborators");
19
21
  var _mdToHtml = _interopRequireDefault(require("../../slate-convert/md-to-html"));
20
22
  var _notificationHooks = require("../hooks/notification-hooks");
21
- var _commentEditor = _interopRequireDefault(require("./comment-editor"));
23
+ var _useParticipants = require("../hooks/use-participants");
22
24
  var _commentImagePreviewer = _interopRequireDefault(require("./comment-image-previewer"));
23
25
  var CommentItemContent = function CommentItemContent(_ref) {
24
26
  var isActive = _ref.isActive,
@@ -29,6 +31,11 @@ var CommentItemContent = function CommentItemContent(_ref) {
29
31
  onDeleteComment = _ref.onDeleteComment,
30
32
  t = _ref.t,
31
33
  targetId = _ref.targetId;
34
+ var _useParticipantsConte = (0, _useParticipants.useParticipantsContext)(),
35
+ addParticipants = _useParticipantsConte.addParticipants,
36
+ participants = _useParticipantsConte.participants;
37
+ var _useCollaborators = (0, _useCollaborators2.useCollaborators)(),
38
+ collaborators = _useCollaborators.collaborators;
32
39
  var _useState = (0, _react.useState)(false),
33
40
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
34
41
  isDropdownOpen = _useState2[0],
@@ -119,6 +126,21 @@ var CommentItemContent = function CommentItemContent(_ref) {
119
126
  setImageUrl(event.target.src);
120
127
  }
121
128
  }, []);
129
+ var commentEditorProps = {
130
+ className: 'pb-3',
131
+ settings: (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, _context2["default"].getSettings()), {}, {
132
+ mediaUrl: _context2["default"].getSetting('mediaUrl') + 'comment-editor/'
133
+ }),
134
+ addParticipants: addParticipants,
135
+ participants: participants,
136
+ collaborators: collaborators,
137
+ content: comment.comment,
138
+ insertContent: updateContent,
139
+ hiddenComment: setIsEditing,
140
+ api: {
141
+ uploadLocalImage: _context2["default"].uploadLocalImage
142
+ }
143
+ };
122
144
  return /*#__PURE__*/_react["default"].createElement("div", {
123
145
  className: "comment-item"
124
146
  }, /*#__PURE__*/_react["default"].createElement("div", {
@@ -187,12 +209,7 @@ var CommentItemContent = function CommentItemContent(_ref) {
187
209
  dangerouslySetInnerHTML: {
188
210
  __html: editorContent
189
211
  }
190
- })), isEditing && /*#__PURE__*/_react["default"].createElement(_commentEditor["default"], {
191
- className: "pb-3",
192
- content: comment.comment,
193
- updateContent: updateContent,
194
- setIsEditing: setIsEditing
195
- }), imageUrl && /*#__PURE__*/_react["default"].createElement(_commentImagePreviewer["default"], {
212
+ })), isEditing && /*#__PURE__*/_react["default"].createElement(_commentEditor.SeafileCommentEditor, commentEditorProps), imageUrl && /*#__PURE__*/_react["default"].createElement(_commentImagePreviewer["default"], {
196
213
  imageUrl: imageUrl,
197
214
  toggle: function toggle() {
198
215
  return setImageUrl('');
@@ -6,17 +6,20 @@ Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports["default"] = void 0;
9
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
9
10
  var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/regeneratorRuntime"));
10
11
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/asyncToGenerator"));
11
12
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
12
13
  var _react = _interopRequireWildcard(require("react"));
13
14
  var _reactI18next = require("react-i18next");
14
15
  var _reactstrap = require("reactstrap");
16
+ var _commentEditor = require("@seafile/comment-editor");
15
17
  var _dayjs = _interopRequireDefault(require("dayjs"));
16
18
  var _context2 = _interopRequireDefault(require("../../context"));
19
+ var _useCollaborators2 = require("../../hooks/use-collaborators");
17
20
  var _mdToHtml = _interopRequireDefault(require("../../slate-convert/md-to-html"));
21
+ var _useParticipants = require("../hooks/use-participants");
18
22
  var _commentDeletePopover = _interopRequireDefault(require("./comment-delete-popover"));
19
- var _commentEditor = _interopRequireDefault(require("./comment-editor"));
20
23
  var _commentImagePreviewer = _interopRequireDefault(require("./comment-image-previewer"));
21
24
  var CommentItemReply = function CommentItemReply(_ref) {
22
25
  var isActive = _ref.isActive,
@@ -25,6 +28,11 @@ var CommentItemReply = function CommentItemReply(_ref) {
25
28
  deleteReply = _ref.deleteReply,
26
29
  updateReply = _ref.updateReply,
27
30
  t = _ref.t;
31
+ var _useParticipantsConte = (0, _useParticipants.useParticipantsContext)(),
32
+ addParticipants = _useParticipantsConte.addParticipants,
33
+ participants = _useParticipantsConte.participants;
34
+ var _useCollaborators = (0, _useCollaborators2.useCollaborators)(),
35
+ collaborators = _useCollaborators.collaborators;
28
36
  var _useState = (0, _react.useState)(false),
29
37
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
30
38
  isDropdownOpen = _useState2[0],
@@ -101,6 +109,22 @@ var CommentItemReply = function CommentItemReply(_ref) {
101
109
  setImageUrl(event.target.src);
102
110
  }
103
111
  }, []);
112
+ var commentEditorProps = {
113
+ type: 'reply',
114
+ className: 'pb-3',
115
+ settings: (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, _context2["default"].getSettings()), {}, {
116
+ mediaUrl: _context2["default"].getSetting('mediaUrl') + 'comment-editor/'
117
+ }),
118
+ addParticipants: addParticipants,
119
+ participants: participants,
120
+ collaborators: collaborators,
121
+ content: editorContent,
122
+ insertContent: updateContent,
123
+ hiddenComment: setIsEditing,
124
+ api: {
125
+ uploadLocalImage: _context2["default"].uploadLocalImage
126
+ }
127
+ };
104
128
  return /*#__PURE__*/_react["default"].createElement("div", {
105
129
  className: "comment-item",
106
130
  ref: itemRef
@@ -150,13 +174,7 @@ var CommentItemReply = function CommentItemReply(_ref) {
150
174
  dangerouslySetInnerHTML: {
151
175
  __html: editorContent
152
176
  }
153
- })), isEditing && /*#__PURE__*/_react["default"].createElement(_commentEditor["default"], {
154
- className: "pb-3",
155
- type: "reply",
156
- content: editorContent,
157
- updateContent: updateContent,
158
- setIsEditing: setIsEditing
159
- }), isShowDeletePopover && isActive && /*#__PURE__*/_react["default"].createElement(_commentDeletePopover["default"], {
177
+ })), isEditing && /*#__PURE__*/_react["default"].createElement(_commentEditor.SeafileCommentEditor, commentEditorProps), isShowDeletePopover && isActive && /*#__PURE__*/_react["default"].createElement(_commentDeletePopover["default"], {
160
178
  parentDom: itemRef.current,
161
179
  type: "reply",
162
180
  deleteConfirm: _deleteReply,
@@ -14,14 +14,16 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm
14
14
  var _react = _interopRequireWildcard(require("react"));
15
15
  var _reactI18next = require("react-i18next");
16
16
  var _reactstrap = require("reactstrap");
17
+ var _commentEditor = require("@seafile/comment-editor");
17
18
  var _classnames = _interopRequireDefault(require("classnames"));
18
19
  var _dayjs = _interopRequireDefault(require("dayjs"));
19
20
  var _slugid = _interopRequireDefault(require("slugid"));
20
21
  var _context2 = _interopRequireDefault(require("../../context"));
22
+ var _useCollaborators2 = require("../../hooks/use-collaborators");
21
23
  var _useSelectionPosition = require("../../hooks/use-selection-position");
22
24
  var _helper = require("../helper");
23
25
  var _useCommentContext2 = require("../hooks/comment-hooks/use-comment-context");
24
- var _commentEditor = _interopRequireDefault(require("./comment-editor"));
26
+ var _useParticipants = require("../hooks/use-participants");
25
27
  var _commentItemWrapper = _interopRequireDefault(require("./comment-item-wrapper"));
26
28
  require("./comment-list.css");
27
29
  var CommentList = function CommentList(_ref) {
@@ -42,6 +44,11 @@ var CommentList = function CommentList(_ref) {
42
44
  var commentPopover = (0, _react.useRef)(null);
43
45
  var commentDetailRef = (0, _react.useRef)(null);
44
46
  var position = (0, _useSelectionPosition.useCommentListPosition)(activeElementIds, isContextComment, isClickedContextComment, commentedDom, commentDetail, closeComment, editor);
47
+ var _useParticipantsConte = (0, _useParticipants.useParticipantsContext)(),
48
+ addParticipants = _useParticipantsConte.addParticipants,
49
+ participants = _useParticipantsConte.participants;
50
+ var _useCollaborators = (0, _useCollaborators2.useCollaborators)(),
51
+ collaborators = _useCollaborators.collaborators;
45
52
  var _useCommentContext = (0, _useCommentContext2.useCommentContext)(),
46
53
  dispatch = _useCommentContext.dispatch;
47
54
  var _useState = (0, _react.useState)(false),
@@ -202,12 +209,20 @@ var CommentList = function CommentList(_ref) {
202
209
  style: {
203
210
  paddingTop: isEmptyComment ? '16px' : ''
204
211
  }
205
- }, isEmptyComment && /*#__PURE__*/_react["default"].createElement(_commentEditor["default"], {
212
+ }, isEmptyComment && /*#__PURE__*/_react["default"].createElement(_commentEditor.SeafileCommentEditor, {
213
+ settings: (0, _objectSpread3["default"])((0, _objectSpread3["default"])({}, _context2["default"].getSettings()), {}, {
214
+ mediaUrl: _context2["default"].getSetting('mediaUrl') + 'comment-editor/'
215
+ }),
216
+ addParticipants: addParticipants,
217
+ participants: participants,
218
+ collaborators: collaborators,
206
219
  type: "comment",
207
220
  insertContent: addNewComment,
208
221
  hiddenComment: hiddenComment,
209
- isContextComment: isContextComment,
210
- closeComment: closeComment
222
+ closePanel: closeComment,
223
+ api: {
224
+ uploadLocalImage: _context2["default"].uploadLocalImage
225
+ }
211
226
  }), !isEmptyComment && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, !isActiveEditor && /*#__PURE__*/_react["default"].createElement(_reactstrap.Input, {
212
227
  value: inputContent !== null && inputContent !== void 0 && inputContent.trim() ? '.....' : '',
213
228
  readOnly: true,
@@ -215,29 +230,46 @@ var CommentList = function CommentList(_ref) {
215
230
  onFocus: function onFocus() {
216
231
  setActiveCommentKey(index);
217
232
  }
218
- }), isActiveEditor && /*#__PURE__*/_react["default"].createElement(_commentEditor["default"], {
233
+ }), isActiveEditor && /*#__PURE__*/_react["default"].createElement(_commentEditor.SeafileCommentEditor, {
219
234
  type: "reply",
235
+ settings: (0, _objectSpread3["default"])((0, _objectSpread3["default"])({}, _context2["default"].getSettings()), {}, {
236
+ mediaUrl: _context2["default"].getSetting('mediaUrl') + 'comment-editor/'
237
+ }),
220
238
  placeholder: 'Enter_reply_shift_Enter_for_new_line_Enter_to_send',
221
- commentContent: commentInputs[item.id] || '',
239
+ addParticipants: addParticipants,
240
+ participants: participants,
241
+ collaborators: collaborators,
242
+ content: commentInputs[item.id] || '',
222
243
  insertContent: function insertContent(value) {
223
244
  return handleReplySubmit(value, item.id);
224
245
  },
225
246
  onContentChange: function onContentChange(content) {
226
247
  return handleInputChange(item.id, content);
227
248
  },
228
- hiddenComment: hiddenComment
249
+ hiddenComment: hiddenComment,
250
+ api: {
251
+ uploadLocalImage: _context2["default"].uploadLocalImage
252
+ }
229
253
  }))));
230
254
  }), Object.values(commentDetail).length === 0 && /*#__PURE__*/_react["default"].createElement("div", {
231
255
  className: "non-global-comment-input-wrapper",
232
256
  style: {
233
257
  paddingTop: isEmptyComment ? '16px' : ''
234
258
  }
235
- }, isEmptyComment && /*#__PURE__*/_react["default"].createElement(_commentEditor["default"], {
259
+ }, isEmptyComment && /*#__PURE__*/_react["default"].createElement(_commentEditor.SeafileCommentEditor, {
236
260
  type: "comment",
261
+ settings: (0, _objectSpread3["default"])((0, _objectSpread3["default"])({}, _context2["default"].getSettings()), {}, {
262
+ mediaUrl: _context2["default"].getSetting('mediaUrl') + 'comment-editor/'
263
+ }),
264
+ addParticipants: addParticipants,
265
+ participants: participants,
266
+ collaborators: collaborators,
237
267
  insertContent: addNewComment,
238
268
  hiddenComment: hiddenComment,
239
- isContextComment: isContextComment,
240
- closeComment: closeComment
269
+ closePanel: closeComment,
270
+ api: {
271
+ uploadLocalImage: _context2["default"].uploadLocalImage
272
+ }
241
273
  }), !isEmptyComment && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, !showEditor && /*#__PURE__*/_react["default"].createElement(_reactstrap.Input, {
242
274
  value: inputContent !== null && inputContent !== void 0 && inputContent.trim() ? '.....' : '',
243
275
  readOnly: true,
@@ -245,15 +277,24 @@ var CommentList = function CommentList(_ref) {
245
277
  onFocus: function onFocus() {
246
278
  setShowEditor(true);
247
279
  }
248
- }), showEditor && /*#__PURE__*/_react["default"].createElement(_commentEditor["default"], {
280
+ }), showEditor && /*#__PURE__*/_react["default"].createElement(_commentEditor.SeafileCommentEditor, {
249
281
  type: "reply",
282
+ settings: (0, _objectSpread3["default"])((0, _objectSpread3["default"])({}, _context2["default"].getSettings()), {}, {
283
+ mediaUrl: _context2["default"].getSetting('mediaUrl') + 'comment-editor/'
284
+ }),
250
285
  placeholder: 'Enter_reply_shift_Enter_for_new_line_Enter_to_send',
251
- commentContent: inputContent,
286
+ addParticipants: addParticipants,
287
+ participants: participants,
288
+ collaborators: collaborators,
289
+ content: inputContent,
252
290
  insertContent: replyComment,
253
291
  onContentChange: function onContentChange(content) {
254
292
  setInputContent(content);
255
293
  },
256
- hiddenComment: hiddenComment
294
+ hiddenComment: hiddenComment,
295
+ api: {
296
+ uploadLocalImage: _context2["default"].uploadLocalImage
297
+ }
257
298
  }))));
258
299
  };
259
300
  var _default = exports["default"] = (0, _reactI18next.withTranslation)('sdoc-editor')(CommentList);
@@ -5,9 +5,13 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports["default"] = void 0;
8
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
8
9
  var _react = _interopRequireDefault(require("react"));
10
+ var _commentEditor = require("@seafile/comment-editor");
9
11
  var _classnames = _interopRequireDefault(require("classnames"));
10
- var _commentEditor = _interopRequireDefault(require("../comment-editor"));
12
+ var _context = _interopRequireDefault(require("../../../context"));
13
+ var _useCollaborators2 = require("../../../hooks/use-collaborators");
14
+ var _useParticipants = require("../../hooks/use-participants");
11
15
  var GlobalCommentEditor = function GlobalCommentEditor(_ref) {
12
16
  var isScrollDisplayed = _ref.isScrollDisplayed,
13
17
  globalCommentContent = _ref.globalCommentContent,
@@ -15,20 +19,35 @@ var GlobalCommentEditor = function GlobalCommentEditor(_ref) {
15
19
  insertDocComment = _ref.insertDocComment,
16
20
  hiddenCommentEditor = _ref.hiddenCommentEditor,
17
21
  onContentChange = _ref.onContentChange;
22
+ var _useParticipantsConte = (0, _useParticipants.useParticipantsContext)(),
23
+ addParticipants = _useParticipantsConte.addParticipants,
24
+ participants = _useParticipantsConte.participants;
25
+ var _useCollaborators = (0, _useCollaborators2.useCollaborators)(),
26
+ collaborators = _useCollaborators.collaborators;
27
+ var commentEditorProps = {
28
+ type: type,
29
+ className: 'sdoc-doc-comment-editor',
30
+ settings: (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, _context["default"].getSettings()), {}, {
31
+ mediaUrl: _context["default"].getSetting('mediaUrl') + 'comment-editor/'
32
+ }),
33
+ hiddenUserInfo: true,
34
+ content: globalCommentContent,
35
+ insertContent: insertDocComment,
36
+ onContentChange: onContentChange,
37
+ hiddenComment: hiddenCommentEditor,
38
+ addParticipants: addParticipants,
39
+ collaborators: collaborators,
40
+ participants: participants,
41
+ api: {
42
+ uploadLocalImage: _context["default"].uploadLocalImage
43
+ }
44
+ };
18
45
  return /*#__PURE__*/_react["default"].createElement("div", {
19
46
  className: (0, _classnames["default"])('sdoc-doc-comment-editor-container', 'sdoc-comment-list-container', {
20
47
  'scrolled': isScrollDisplayed
21
48
  })
22
49
  }, /*#__PURE__*/_react["default"].createElement("div", {
23
50
  className: "sdoc-doc-comment-editor-content"
24
- }, /*#__PURE__*/_react["default"].createElement(_commentEditor["default"], {
25
- type: type,
26
- className: "sdoc-doc-comment-editor",
27
- commentContent: globalCommentContent,
28
- hiddenUserInfo: true,
29
- insertContent: insertDocComment,
30
- hiddenComment: hiddenCommentEditor,
31
- onContentChange: onContentChange
32
- })));
51
+ }, /*#__PURE__*/_react["default"].createElement(_commentEditor.SeafileCommentEditor, commentEditorProps)));
33
52
  };
34
53
  var _default = exports["default"] = GlobalCommentEditor;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "2.0.139",
3
+ "version": "2.0.140",
4
4
  "main": "dist/index.js",
5
5
  "scripts": {
6
6
  "test": "jest",
@@ -17,6 +17,7 @@
17
17
  "license": "ISC",
18
18
  "description": "",
19
19
  "dependencies": {
20
+ "@seafile/comment-editor": "^0.0.5",
20
21
  "@seafile/print-js": "1.6.6",
21
22
  "@seafile/react-image-lightbox": "4.0.2",
22
23
  "@seafile/slate": "0.91.8",
@@ -70,5 +71,5 @@
70
71
  "publishConfig": {
71
72
  "access": "public"
72
73
  },
73
- "gitHead": "22799f158a54b21077700254db8b90eee2e9950e"
74
+ "gitHead": "ea91dd37ca5a6d559ce7f4b979ea29cf901dd1d0"
74
75
  }
@@ -1,162 +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 _slate = require("@seafile/slate");
12
- var _slateReact = require("@seafile/slate-react");
13
- var _classnames = _interopRequireDefault(require("classnames"));
14
- var _constants = require("../../constants");
15
- var _context = _interopRequireDefault(require("../../context"));
16
- var _sdocCommentEditor = _interopRequireDefault(require("../../editor/sdoc-comment-editor"));
17
- var _extension = require("../../extension");
18
- var _constants2 = require("../../extension/constants");
19
- var _core = require("../../extension/core");
20
- var _nodeId = _interopRequireDefault(require("../../node-id"));
21
- var _mdToSlate = _interopRequireDefault(require("../../slate-convert/md-to-slate"));
22
- var _slateToMd = _interopRequireDefault(require("../../slate-convert/slate-to-md"));
23
- var _eventBus = _interopRequireDefault(require("../../utils/event-bus"));
24
- var _useParticipants = require("../hooks/use-participants");
25
- var getSubmitTip = function getSubmitTip(type, content) {
26
- if (content) return 'Save';
27
- return type === 'comment' ? 'Comment' : 'Reply';
28
- };
29
- var DEFAULT_PLACEHOLDER = 'Enter_comment_shift_enter_for_new_line_Enter_to_send';
30
- var CommentEditor = function CommentEditor(_ref) {
31
- var type = _ref.type,
32
- className = _ref.className,
33
- content = _ref.content,
34
- commentContent = _ref.commentContent,
35
- _ref$placeholder = _ref.placeholder,
36
- placeholder = _ref$placeholder === void 0 ? DEFAULT_PLACEHOLDER : _ref$placeholder,
37
- insertContent = _ref.insertContent,
38
- updateContent = _ref.updateContent,
39
- setIsEditing = _ref.setIsEditing,
40
- hiddenComment = _ref.hiddenComment,
41
- hiddenUserInfo = _ref.hiddenUserInfo,
42
- onContentChange = _ref.onContentChange,
43
- isContextComment = _ref.isContextComment,
44
- closeComment = _ref.closeComment;
45
- var commentWrapperRef = (0, _react.useRef)();
46
- var _useTranslation = (0, _reactI18next.useTranslation)('sdoc-editor'),
47
- t = _useTranslation.t;
48
- var _useParticipantsConte = (0, _useParticipants.useParticipantsContext)(),
49
- addParticipants = _useParticipantsConte.addParticipants;
50
- var submitTip = (0, _react.useMemo)(function () {
51
- return getSubmitTip(type, content);
52
- }, [content, type]);
53
- var userInfo = _context["default"].getUserInfo();
54
- var document = (0, _react.useMemo)(function () {
55
- var cursor = {};
56
- var elements = null;
57
- elements = [(0, _core.generateEmptyElement)(_constants2.PARAGRAPH, {
58
- placeholder: placeholder
59
- })];
60
- return {
61
- elements: elements,
62
- cursor: cursor
63
- };
64
- }, [placeholder]);
65
- var editor = (0, _react.useMemo)(function () {
66
- var defaultEditor = (0, _extension.createCommentEditor)();
67
- var newEditor = (0, _nodeId["default"])(defaultEditor);
68
- var cursors = document.cursors;
69
- newEditor.cursors = cursors || {};
70
- newEditor.width = _constants.COMMENT_EDITOR_EDIT_AREA_WIDTH; // default width
71
- newEditor.editorType = _constants.COMMENT_EDITOR;
72
- return newEditor;
73
- }, [document]);
74
- var updateValue = (0, _react.useCallback)(function (value) {
75
- if (!value || value.trim() === '') return;
76
- if (!content) return insertContent(value);
77
- updateContent && updateContent(value);
78
- }, [content, insertContent, updateContent]);
79
- var onSubmit = (0, _react.useCallback)(function (event) {
80
- event && event.stopPropagation();
81
- var mdString = (0, _slateToMd["default"])(editor.children);
82
- updateValue(mdString);
83
- addParticipants(userInfo.username);
84
- editor.children = [(0, _core.generateEmptyElement)(_constants2.PARAGRAPH, {
85
- placeholder: placeholder
86
- })];
87
- _slate.Transforms.select(editor, _slate.Editor.start(editor, []));
88
- onContentChange && onContentChange(null);
89
- closeComment && closeComment();
90
- }, [editor, updateValue, addParticipants, userInfo.username, placeholder, onContentChange, closeComment]);
91
- var onSubmitByEnterKey = (0, _react.useCallback)(function (event) {
92
- if (!_slateReact.ReactEditor.isFocused(editor)) return;
93
- onSubmit(event);
94
- }, [editor, onSubmit]);
95
- (0, _react.useEffect)(function () {
96
- var eventBus = _eventBus["default"].getInstance();
97
- var unsubscribePostComment = eventBus.subscribe(_constants.INTERNAL_EVENT.COMMENT_EDITOR_POST_COMMENT, onSubmitByEnterKey);
98
- return function () {
99
- unsubscribePostComment();
100
- };
101
- }, [onSubmitByEnterKey]);
102
- var onCancel = (0, _react.useCallback)(function (event) {
103
- event.stopPropagation();
104
- var eventType = event.type,
105
- keyCode = event.keyCode,
106
- target = event.target;
107
- if (eventType === 'keydown' && keyCode !== _constants.KeyCodes.Esc) return;
108
- if (eventType === 'click') {
109
- var isSdocContentWrapper = target.classList.contains('sdoc-content-wrapper');
110
- var listContainer = window.document.querySelector('#global-comment-list-container');
111
- var resizeContainer = window.document.querySelector('.sdoc-comment-resize-handler');
112
- var isClickOnListContainer = listContainer && listContainer.contains(target);
113
- var isClickOnCommentEditorContainer = commentWrapperRef.current.contains(target);
114
- var isClickResizeContainer = resizeContainer && resizeContainer.contains(target);
115
- var isPreventCancel = isClickOnListContainer || isClickOnCommentEditorContainer || isClickResizeContainer || isSdocContentWrapper;
116
- if (isPreventCancel) return;
117
- }
118
- setIsEditing && setIsEditing(false);
119
- hiddenComment && hiddenComment(false);
120
- if (onContentChange) {
121
- if (editor.children.find(function (n) {
122
- return _slate.Node.string(n).trim();
123
- })) {
124
- onContentChange((0, _slateToMd["default"])(editor.children));
125
- } else {
126
- onContentChange(null);
127
- }
128
- }
129
- // eslint-disable-next-line react-hooks/exhaustive-deps
130
- }, [setIsEditing]);
131
- (0, _react.useEffect)(function () {
132
- var children = (0, _mdToSlate["default"])(content);
133
- if (commentContent) {
134
- children = (0, _mdToSlate["default"])(commentContent);
135
- }
136
- editor.children = children;
137
- _slate.Transforms.select(editor, _slate.Editor.end(editor, []));
138
- }, [editor, content, commentContent]);
139
- return /*#__PURE__*/_react["default"].createElement("div", {
140
- className: (0, _classnames["default"])('comment-editor-wrapper', className),
141
- ref: commentWrapperRef
142
- }, type === 'comment' && !hiddenUserInfo && /*#__PURE__*/_react["default"].createElement("div", {
143
- className: "comment-editor-user-info"
144
- }, /*#__PURE__*/_react["default"].createElement("div", {
145
- className: "comment-editor-user-img"
146
- }, /*#__PURE__*/_react["default"].createElement("img", {
147
- src: userInfo.avatar_url,
148
- alt: "",
149
- height: "100%",
150
- width: "100%"
151
- })), /*#__PURE__*/_react["default"].createElement("div", {
152
- className: "comment-editor-user-name"
153
- }, userInfo.name)), /*#__PURE__*/_react["default"].createElement(_sdocCommentEditor["default"], {
154
- editor: editor,
155
- type: type,
156
- document: document,
157
- onSubmit: onSubmit,
158
- submitBtnText: t(submitTip),
159
- onCancel: onCancel
160
- }));
161
- };
162
- var _default = exports["default"] = CommentEditor;
@@ -1,209 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
4
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports["default"] = void 0;
9
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
10
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/toConsumableArray"));
11
- var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/regeneratorRuntime"));
12
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/asyncToGenerator"));
13
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
14
- var _react = _interopRequireWildcard(require("react"));
15
- var _reactI18next = require("react-i18next");
16
- var _slate = require("@seafile/slate");
17
- var _deepCopy = _interopRequireDefault(require("deep-copy"));
18
- var _notificationHooks = require("../comment/hooks/notification-hooks");
19
- var _fileLoading = _interopRequireDefault(require("../components/file-loading"));
20
- var _toast = _interopRequireDefault(require("../components/toast"));
21
- var _constants = require("../constants");
22
- var _context2 = _interopRequireDefault(require("../context"));
23
- var _extension = require("../extension");
24
- var _core = require("../extension/core");
25
- var _commentEditorToolbar = _interopRequireDefault(require("../extension/toolbar/comment-editor-toolbar"));
26
- var _useCollaborators = require("../hooks/use-collaborators");
27
- var _useScrollContext = require("../hooks/use-scroll-context");
28
- var _layout = require("../layout");
29
- var _nodeId = _interopRequireDefault(require("../node-id"));
30
- var _socket = require("../socket");
31
- var _commonUtils = require("../utils/common-utils");
32
- var _eventBus = _interopRequireDefault(require("../utils/event-bus"));
33
- var _commentArticle = _interopRequireDefault(require("./comment-article"));
34
- var SdocCommentEditor = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
35
- var propsEditor = _ref.editor,
36
- document = _ref.document,
37
- isReloading = _ref.isReloading,
38
- type = _ref.type,
39
- onSubmit = _ref.onSubmit,
40
- submitBtnText = _ref.submitBtnText,
41
- onCancel = _ref.onCancel;
42
- var _useState = (0, _react.useState)(document.elements),
43
- _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
44
- slateValue = _useState2[0],
45
- _setSlateValue = _useState2[1];
46
- var commentEditorContainerRef = (0, _react.useRef)(null);
47
- var commentTimeoutRef = (0, _react.useRef)(null);
48
- var _useNotificationConte = (0, _notificationHooks.useNotificationContext)(),
49
- notificationsInfo = _useNotificationConte.notificationsInfo;
50
- var _useTranslation = (0, _reactI18next.useTranslation)('sdoc-editor'),
51
- t = _useTranslation.t;
52
- var validEditor = (0, _react.useMemo)(function () {
53
- if (propsEditor) return propsEditor;
54
- var defaultEditor = (0, _extension.createCommentEditor)();
55
- var editorConfig = _context2["default"].getEditorConfig();
56
- var newEditor = (0, _nodeId["default"])((0, _socket.withSocketIO)(defaultEditor, {
57
- document: document,
58
- config: editorConfig
59
- }));
60
- var cursors = document.cursors;
61
- newEditor.cursors = cursors || {};
62
- newEditor.width = _constants.COMMENT_EDITOR_EDIT_AREA_WIDTH; // default width
63
-
64
- return newEditor;
65
- // eslint-disable-next-line react-hooks/exhaustive-deps
66
- }, []);
67
- (0, _react.useEffect)(function () {
68
- if (!(commentEditorContainerRef !== null && commentEditorContainerRef !== void 0 && commentEditorContainerRef.current)) return;
69
- if (Object.keys(notificationsInfo.notifications_map || {}).length === 0) return;
70
- if (!commentEditorContainerRef.current.closest('.global-comment-input-wrapper')) return;
71
- var clearAllNotification = /*#__PURE__*/function () {
72
- var _ref2 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee() {
73
- var res, notifications, eventBus, errorMessage;
74
- return (0, _regeneratorRuntime2["default"])().wrap(function _callee$(_context) {
75
- while (1) switch (_context.prev = _context.next) {
76
- case 0:
77
- _context.prev = 0;
78
- _context.next = 3;
79
- return _context2["default"].readAllNotifications();
80
- case 3:
81
- _context.next = 5;
82
- return _context2["default"].listUnseenNotifications();
83
- case 5:
84
- res = _context.sent;
85
- notifications = res.data.notifications;
86
- eventBus = _eventBus["default"].getInstance();
87
- eventBus.dispatch(_constants.INTERNAL_EVENT.UNSEEN_NOTIFICATIONS_COUNT, notifications === null || notifications === void 0 ? void 0 : notifications.length);
88
- eventBus.dispatch(_constants.INTERNAL_EVENT.NEW_NOTIFICATION);
89
- eventBus.dispatch(_constants.INTERNAL_EVENT.CLEAR_NOTIFICATION);
90
- _context.next = 17;
91
- break;
92
- case 13:
93
- _context.prev = 13;
94
- _context.t0 = _context["catch"](0);
95
- errorMessage = (0, _commonUtils.getErrorMsg)(_context.t0);
96
- _toast["default"].danger(t(errorMessage));
97
- case 17:
98
- case "end":
99
- return _context.stop();
100
- }
101
- }, _callee, null, [[0, 13]]);
102
- }));
103
- return function clearAllNotification() {
104
- return _ref2.apply(this, arguments);
105
- };
106
- }();
107
- var el = commentEditorContainerRef && commentEditorContainerRef.current;
108
-
109
- // Mark comment as read if focusing commentEditorContainerRef over 3s
110
- var handleFocusIn = function handleFocusIn(e) {
111
- commentTimeoutRef.current = setTimeout(function () {
112
- clearAllNotification();
113
- commentTimeoutRef.current = null;
114
- }, 3000);
115
- };
116
- var handleBlur = function handleBlur() {
117
- clearTimeout(commentTimeoutRef.current);
118
- commentTimeoutRef.current = null;
119
- };
120
- el.addEventListener('focusin', handleFocusIn);
121
- el.addEventListener('focusout', handleBlur);
122
- return function () {
123
- el.removeEventListener('focusin', handleFocusIn);
124
- el.removeEventListener('focusout', handleBlur);
125
- if (commentTimeoutRef.current) {
126
- clearTimeout(commentTimeoutRef.current);
127
- commentTimeoutRef.current = null;
128
- }
129
- };
130
- }, [notificationsInfo]);
131
-
132
- // useMount: focus editor
133
- (0, _react.useEffect)(function () {
134
- var _validEditor$children = (0, _slicedToArray2["default"])(validEditor.children, 1),
135
- firstNode = _validEditor$children[0];
136
- if (firstNode) {
137
- var _firstNode$children = (0, _slicedToArray2["default"])(firstNode.children, 1),
138
- firstNodeFirstChild = _firstNode$children[0];
139
- if (firstNodeFirstChild) {
140
- var endOfFirstNode = _slate.Editor.end(validEditor, [0, 0]);
141
- var range = {
142
- anchor: endOfFirstNode,
143
- focus: endOfFirstNode
144
- };
145
- (0, _core.focusEditor)(validEditor, range);
146
- }
147
- // Force refresh to fix comment list
148
- _setSlateValue((0, _toConsumableArray2["default"])(validEditor.children));
149
- }
150
- // eslint-disable-next-line react-hooks/exhaustive-deps
151
- }, []);
152
-
153
- // The parent component can call the method of this component through ref
154
- (0, _react.useImperativeHandle)(ref, function () {
155
- return {
156
- setSlateValue: function setSlateValue(document) {
157
- // Force update of editor's child elements
158
- validEditor.children = document.elements;
159
- _setSlateValue((0, _toConsumableArray2["default"])(document.elements));
160
- },
161
- updateDocumentVersion: function updateDocumentVersion(document) {
162
- validEditor.updateDocumentVersion(document);
163
- },
164
- // get value
165
- getSlateValue: function getSlateValue() {
166
- return (0, _deepCopy["default"])((0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, document), {}, {
167
- elements: slateValue
168
- }));
169
- }
170
-
171
- // eslint-disable-next-line react-hooks/exhaustive-deps
172
- };
173
- }, [document, validEditor, slateValue]);
174
- if (isReloading) {
175
- return /*#__PURE__*/_react["default"].createElement("div", {
176
- className: "h-100 w-100 d-flex align-items-center justify-content-center"
177
- }, /*#__PURE__*/_react["default"].createElement(_fileLoading["default"], null));
178
- }
179
- var handleFocusEditor = function handleFocusEditor(e) {
180
- if (e.target === commentEditorContainerRef.current) {
181
- var focusPoint = _slate.Editor.end(validEditor, []);
182
- (0, _core.focusEditor)(validEditor, focusPoint);
183
- }
184
- };
185
- return /*#__PURE__*/_react["default"].createElement(_layout.EditorContainer, {
186
- editor: validEditor
187
- }, /*#__PURE__*/_react["default"].createElement(_useCollaborators.CollaboratorsProvider, null, /*#__PURE__*/_react["default"].createElement("div", {
188
- className: "sdoc-comment-editor-wrapper"
189
- }, /*#__PURE__*/_react["default"].createElement("div", {
190
- ref: commentEditorContainerRef,
191
- className: "article sdoc-comment-editor",
192
- onClick: handleFocusEditor
193
- }, /*#__PURE__*/_react["default"].createElement(_useScrollContext.ScrollContext.Provider, {
194
- value: {
195
- scrollRef: commentEditorContainerRef
196
- }
197
- }, /*#__PURE__*/_react["default"].createElement(_commentArticle["default"], {
198
- type: type,
199
- editor: validEditor,
200
- slateValue: slateValue,
201
- updateSlateValue: _setSlateValue
202
- }))), /*#__PURE__*/_react["default"].createElement(_commentEditorToolbar["default"], {
203
- editor: validEditor,
204
- onSubmit: onSubmit,
205
- submitBtnText: submitBtnText,
206
- onCancel: onCancel
207
- }))));
208
- });
209
- var _default = exports["default"] = SdocCommentEditor;