@seafile/sdoc-editor 1.0.176 → 1.0.178

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/api/seafile-api.js +12 -0
  2. package/dist/basic-sdk/assets/images/sdoc-ask-ai.png +0 -0
  3. package/dist/basic-sdk/comment/components/comment-editor.js +0 -1
  4. package/dist/basic-sdk/comment/components/comment-item-wrapper.js +19 -10
  5. package/dist/basic-sdk/comment/components/comment-list.css +2 -6
  6. package/dist/basic-sdk/comment/components/comment-list.js +29 -39
  7. package/dist/basic-sdk/comment/components/editor-comment.js +13 -2
  8. package/dist/basic-sdk/constants/index.js +2 -1
  9. package/dist/basic-sdk/extension/commons/file-insert-dialog/index.js +28 -18
  10. package/dist/basic-sdk/extension/commons/file-insert-dialog/style.css +12 -9
  11. package/dist/basic-sdk/extension/commons/insert-element-dialog/index.js +10 -0
  12. package/dist/basic-sdk/extension/commons/select-file-dialog/helpers.js +9 -2
  13. package/dist/basic-sdk/extension/commons/select-file-dialog/index.css +115 -0
  14. package/dist/basic-sdk/extension/commons/select-file-dialog/index.js +68 -5
  15. package/dist/basic-sdk/extension/commons/select-file-dialog/local-files/index.css +42 -0
  16. package/dist/basic-sdk/extension/commons/select-file-dialog/local-files/index.js +49 -12
  17. package/dist/basic-sdk/extension/constants/element-type.js +2 -1
  18. package/dist/basic-sdk/extension/constants/menus-config.js +1 -1
  19. package/dist/basic-sdk/extension/core/queries/index.js +12 -1
  20. package/dist/basic-sdk/extension/plugins/ai/ai-icon/index.js +26 -0
  21. package/dist/basic-sdk/extension/plugins/ai/ai-icon/style.css +22 -0
  22. package/dist/basic-sdk/extension/plugins/ai/ai-menu/ai-context-menu.js +39 -0
  23. package/dist/basic-sdk/extension/plugins/ai/ai-menu/ai-dropdown-menu.js +35 -0
  24. package/dist/basic-sdk/extension/plugins/ai/ai-menu/index.js +20 -0
  25. package/dist/basic-sdk/extension/plugins/ai/ai-menu/menu-item.js +62 -0
  26. package/dist/basic-sdk/extension/plugins/ai/ai-menu/style.css +3 -0
  27. package/dist/basic-sdk/extension/plugins/ai/ai-module/adjust-sub-menu.js +40 -0
  28. package/dist/basic-sdk/extension/plugins/ai/ai-module/index.js +452 -0
  29. package/dist/basic-sdk/extension/plugins/ai/ai-module/lang-sub-menu.js +55 -0
  30. package/dist/basic-sdk/extension/plugins/ai/ai-module/style.css +104 -0
  31. package/dist/basic-sdk/extension/plugins/ai/ai-module/tip-dialog.js +32 -0
  32. package/dist/basic-sdk/extension/plugins/ai/constants/index.js +128 -0
  33. package/dist/basic-sdk/extension/plugins/ai/index.js +1 -0
  34. package/dist/basic-sdk/extension/plugins/blockquote/plugin.js +2 -2
  35. package/dist/basic-sdk/extension/plugins/image/helpers.js +25 -16
  36. package/dist/basic-sdk/extension/plugins/image/hover-menu/index.js +1 -1
  37. package/dist/basic-sdk/extension/plugins/sdoc-link/helpers.js +7 -2
  38. package/dist/basic-sdk/extension/plugins/sdoc-link/render/render-elem.css +19 -3
  39. package/dist/basic-sdk/extension/plugins/sdoc-link/render/render-elem.js +8 -3
  40. package/dist/basic-sdk/extension/plugins/text-style/menu/comemnt-editor-menu.js +7 -11
  41. package/dist/basic-sdk/extension/plugins/text-style/menu/index.js +7 -17
  42. package/dist/basic-sdk/extension/plugins/video/helpers.js +1 -0
  43. package/dist/basic-sdk/extension/plugins/video/plugin.js +26 -1
  44. package/dist/basic-sdk/extension/toolbar/side-toolbar/index.js +7 -0
  45. package/dist/basic-sdk/extension/toolbar/side-toolbar/side-menu.js +4 -1
  46. package/dist/components/doc-operations/revision-operations/more-revision-operations/index.js +4 -0
  47. package/dist/components/doc-operations/revision-operations/revisions/index.js +13 -0
  48. package/dist/constants/index.js +3 -1
  49. package/dist/context.js +8 -0
  50. package/package.json +1 -1
  51. package/public/locales/cs/sdoc-editor.json +23 -1
  52. package/public/locales/de/sdoc-editor.json +23 -1
  53. package/public/locales/en/sdoc-editor.json +23 -1
  54. package/public/locales/es/sdoc-editor.json +23 -1
  55. package/public/locales/es_AR/sdoc-editor.json +23 -1
  56. package/public/locales/es_MX/sdoc-editor.json +23 -1
  57. package/public/locales/fr/sdoc-editor.json +23 -1
  58. package/public/locales/it/sdoc-editor.json +23 -1
  59. package/public/locales/ru/sdoc-editor.json +24 -2
  60. package/public/locales/zh_CN/sdoc-editor.json +23 -1
  61. package/public/media/sdoc-editor-font/iconfont.css +548 -0
  62. package/public/media/sdoc-editor-font/iconfont.eot +0 -0
  63. package/public/media/sdoc-editor-font/iconfont.svg +18 -0
  64. package/public/media/sdoc-editor-font/iconfont.ttf +0 -0
  65. package/public/media/sdoc-editor-font/iconfont.woff +0 -0
  66. package/public/media/sdoc-editor-font/iconfont.woff2 +0 -0
  67. package/public/media/sdoc-editor-font.css +42 -6
@@ -146,6 +146,10 @@ class SeafileAPI {
146
146
  const url = 'api/v2.1/seadoc/search-filename/' + docUuid + '/?query=' + query + '&page=' + page + '&per_page=' + per_page;
147
147
  return this.req.get(url);
148
148
  }
149
+ searchFilesByFilename(docUuid, query, page, per_page, search_type) {
150
+ const url = 'api/v2.1/seadoc/search-filename/' + docUuid + '/?query=' + query + '&page=' + page + '&per_page=' + per_page + '&search_type=' + search_type;
151
+ return this.req.get(url);
152
+ }
149
153
 
150
154
  // participants
151
155
  listParticipants(docUuid) {
@@ -193,5 +197,13 @@ class SeafileAPI {
193
197
  const url = `/api/v2.1/seadoc/notifications/${docUuid}/`;
194
198
  return this.req.put(url);
195
199
  }
200
+ aiTranslate(docUuid, text, lang) {
201
+ const url = '/api/v2.1/ai/translate/?file_uuid=' + docUuid;
202
+ let form = new FormData();
203
+ form.append('text', text);
204
+ form.append('lang', lang);
205
+ form.append('file_uuid', docUuid);
206
+ return this.req.post(url, form);
207
+ }
196
208
  }
197
209
  var _default = exports.default = SeafileAPI;
@@ -38,7 +38,6 @@ const CommentEditor = _ref => {
38
38
  updateContent,
39
39
  setIsEditing,
40
40
  hiddenComment,
41
- commentRef,
42
41
  globalComment,
43
42
  hiddenUserInfo,
44
43
  updateGlobalCommentContent
@@ -30,7 +30,9 @@ const CommentItemWrapper = _ref => {
30
30
  updateScrollPosition,
31
31
  hiddenComment,
32
32
  setCurrentCommentGroup,
33
- onCommentClick
33
+ onCommentClick,
34
+ isEmptyComment,
35
+ addNewComment
34
36
  } = _ref;
35
37
  const listRef = (0, _react.useRef)(null);
36
38
  const {
@@ -38,7 +40,7 @@ const CommentItemWrapper = _ref => {
38
40
  } = (0, _useCommentContext.useCommentContext)();
39
41
  const scrollRef = (0, _react.useRef)(document.querySelector('.sdoc-scroll-container'));
40
42
  const [isShowDeleteDialog, setIsShowDeleteDialog] = (0, _react.useState)(false);
41
- const commentOpToolsId = `commentOpTools_${comment.id}`;
43
+ const commentOpToolsId = `commentOpTools_${comment === null || comment === void 0 ? void 0 : comment.id}`;
42
44
  const deleteComment = (0, _react.useCallback)(async commentId => {
43
45
  await _context.default.deleteComment(commentId);
44
46
  const {
@@ -249,12 +251,11 @@ const CommentItemWrapper = _ref => {
249
251
  }, [isActive]);
250
252
  const className = (0, _classnames.default)('comment-ui-container', {
251
253
  'active': isActive,
252
- 'sdoc-resolved': comment.resolved,
254
+ 'sdoc-resolved': comment === null || comment === void 0 ? void 0 : comment.resolved,
253
255
  'd-flex flex-column': element,
254
256
  'global-comment-item-detail-wrapper': isGlobalComment,
255
257
  'comment-item-detail-wrapper': !isGlobalComment
256
258
  });
257
- const tip = comment.resolved ? 'Reopen_discussion' : 'Enter_reply_shift_Enter_for_new_line_Enter_to_send';
258
259
  const handleScrollToArticle = (0, _react.useCallback)(e => {
259
260
  e.stopPropagation();
260
261
  const dom = _slateReact.ReactEditor.toDOMNode(editor, element);
@@ -265,7 +266,7 @@ const CommentItemWrapper = _ref => {
265
266
  });
266
267
  }, [editor, element, scrollRef]);
267
268
  return /*#__PURE__*/_react.default.createElement("div", {
268
- id: `comment-item-wrapper_${comment.id}`,
269
+ id: `comment-item-wrapper_${comment === null || comment === void 0 ? void 0 : comment.id}`,
269
270
  className: className,
270
271
  onClick: onItemClick
271
272
  }, element && /*#__PURE__*/_react.default.createElement("div", {
@@ -275,7 +276,7 @@ const CommentItemWrapper = _ref => {
275
276
  className: "sdocfont sdoc-comment-quote mr-2"
276
277
  }), /*#__PURE__*/_react.default.createElement("div", {
277
278
  className: "comment-item-selected-text"
278
- }, _slate.Node.string(element))), /*#__PURE__*/_react.default.createElement("div", {
279
+ }, _slate.Node.string(element))), !isEmptyComment && /*#__PURE__*/_react.default.createElement("div", {
279
280
  ref: listRef,
280
281
  className: "comment-item-list"
281
282
  }, /*#__PURE__*/_react.default.createElement(_commentItemContent.default, {
@@ -297,11 +298,19 @@ const CommentItemWrapper = _ref => {
297
298
  updateReply
298
299
  };
299
300
  return /*#__PURE__*/_react.default.createElement(_commentItemReply.default, props);
300
- })), !isGlobalComment && isActive && /*#__PURE__*/_react.default.createElement("div", {
301
- className: "sdoc-reply-wrapper"
302
- }, /*#__PURE__*/_react.default.createElement(_commentEditor.default, {
301
+ })), !isGlobalComment && /*#__PURE__*/_react.default.createElement("div", {
302
+ className: "sdoc-reply-wrapper",
303
+ style: {
304
+ paddingTop: isEmptyComment ? '16px' : ''
305
+ }
306
+ }, isEmptyComment && /*#__PURE__*/_react.default.createElement(_commentEditor.default, {
307
+ type: "comment",
308
+ placeholder: 'Enter_reply_shift_Enter_for_new_line_Enter_to_send',
309
+ insertContent: addNewComment,
310
+ hiddenComment: hiddenComment
311
+ }), !isEmptyComment && /*#__PURE__*/_react.default.createElement(_commentEditor.default, {
303
312
  type: "reply",
304
- placeholder: tip,
313
+ placeholder: 'Enter_reply_shift_Enter_for_new_line_Enter_to_send',
305
314
  insertContent: insertContent,
306
315
  hiddenComment: hiddenComment
307
316
  })), isShowDeleteDialog && isActive && /*#__PURE__*/_react.default.createElement(_commentDeletePopover.default, {
@@ -9,7 +9,7 @@
9
9
  }
10
10
 
11
11
  .sdoc-comment-list-container .comment-ui-container {
12
- background-color: rgba(255, 255, 255, .99);
12
+ background-color: rgba(255, 255, 255);
13
13
  margin-bottom: 0px;
14
14
  box-shadow: 0 1px 3px rgba(0, 0, 0, .15), 0 4px 8px 3px rgba(0, 0, 0, .15);
15
15
  padding: 16px;
@@ -37,7 +37,7 @@
37
37
  .sdoc-comment-list-container .comment-ui-container.active {
38
38
  position: relative;
39
39
  left: -5px;
40
- background: rgba(255, 255, 255, .92);
40
+ background: rgba(255, 255, 255, 1);
41
41
  box-shadow: 0 1px 3px rgba(0, 0, 0, .15), 0 4px 8px 3px rgba(0, 0, 0, .15);
42
42
  }
43
43
 
@@ -340,10 +340,6 @@
340
340
  justify-content: flex-end;
341
341
  }
342
342
 
343
- .sdoc-reply-wrapper {
344
- padding: 0 10px;
345
- }
346
-
347
343
  .sdoc-doc-comment-editor-container.sdoc-comment-list-container .comment-ui-container {
348
344
  padding-left: 10px;
349
345
  padding-right: 10px;
@@ -11,24 +11,23 @@ var _dayjs = _interopRequireDefault(require("dayjs"));
11
11
  var _context = _interopRequireDefault(require("../../../context"));
12
12
  var _useSelectionPosition = require("../../hooks/use-selection-position");
13
13
  var _useCommentContext = require("../hooks/comment-hooks/use-comment-context");
14
- var _commentEditor = _interopRequireDefault(require("./comment-editor"));
15
14
  var _commentItemWrapper = _interopRequireDefault(require("./comment-item-wrapper"));
16
15
  var _commentItemCollapseWrapper = _interopRequireDefault(require("./comment-item-collapse-wrapper"));
17
16
  require("./comment-list.css");
18
17
  const CommentList = _ref => {
19
- var _topLevelComment$repl, _topLevelComment$repl2;
20
18
  let {
21
19
  editor,
22
- comments,
20
+ comments = [],
21
+ commentDetail = {},
23
22
  activeElement,
24
- hiddenComment
23
+ isShowCommentDetail,
24
+ onSetCommentDetail,
25
+ deleteUnseenNotifications
25
26
  } = _ref;
26
- const commentRef = (0, _react.useRef)(null);
27
27
  const position = (0, _useSelectionPosition.useCommentListPosition)(activeElement);
28
28
  const {
29
29
  dispatch
30
30
  } = (0, _useCommentContext.useCommentContext)();
31
- const [isShowCommentDetail, setIsShowCommentDetail] = (0, _react.useState)(false);
32
31
  const insertComment = (0, _react.useCallback)(async (elementId, comment) => {
33
32
  const res = await _context.default.insertComment(comment);
34
33
  const {
@@ -48,7 +47,8 @@ const CommentList = _ref => {
48
47
  comment: newComment
49
48
  }
50
49
  });
51
- }, [dispatch]);
50
+ onSetCommentDetail(newComment);
51
+ }, [dispatch, onSetCommentDetail]);
52
52
  const insertContent = (0, _react.useCallback)(content => {
53
53
  const user = _context.default.getUserInfo();
54
54
  const elementId = activeElement === null || activeElement === void 0 ? void 0 : activeElement.id;
@@ -63,47 +63,37 @@ const CommentList = _ref => {
63
63
  updated_at: time
64
64
  };
65
65
  insertComment(elementId, comment);
66
- setIsShowCommentDetail(true);
67
66
  }, [insertComment, activeElement === null || activeElement === void 0 ? void 0 : activeElement.id]);
68
- const setCurrentCommentGroup = (0, _react.useCallback)(() => {
69
- setIsShowCommentDetail(true);
70
- }, []);
71
- const topLevelComment = (comments === null || comments === void 0 ? void 0 : comments.length) > 0 ? comments[0] : {};
72
- const replyCount = topLevelComment === null || topLevelComment === void 0 ? void 0 : (_topLevelComment$repl = topLevelComment.replies) === null || _topLevelComment$repl === void 0 ? void 0 : _topLevelComment$repl.length;
73
- const latestReply = ((_topLevelComment$repl2 = topLevelComment.replies) === null || _topLevelComment$repl2 === void 0 ? void 0 : _topLevelComment$repl2.length) > 0 ? topLevelComment.replies[topLevelComment.replies.length - 1] : null;
74
67
  return /*#__PURE__*/_react.default.createElement("div", {
75
- ref: commentRef,
76
68
  id: "sdoc-comment-list-container",
77
69
  className: "sdoc-comment-list-container sdoc-comment-list-container-popover",
78
70
  style: {
79
71
  top: position.y,
80
72
  width: '300px'
81
73
  }
82
- }, !isShowCommentDetail && Object.keys(topLevelComment).length > 0 && /*#__PURE__*/_react.default.createElement(_commentItemCollapseWrapper.default, {
83
- key: comments.id,
84
- editor: editor,
85
- topLevelComment: topLevelComment,
86
- replyCount: replyCount,
87
- latestReply: latestReply,
88
- setCurrentCommentGroup: setCurrentCommentGroup
89
- }), !isShowCommentDetail && comments.length === 0 && /*#__PURE__*/_react.default.createElement("div", {
90
- className: "comment-ui-container active"
91
- }, /*#__PURE__*/_react.default.createElement(_commentEditor.default, {
92
- type: "comment",
93
- globalComment: true,
94
- insertContent: insertContent,
95
- hiddenComment: hiddenComment,
96
- commentRef: commentRef
97
- })), isShowCommentDetail && comments.length > 0 && /*#__PURE__*/_react.default.createElement("div", {
74
+ }, !isShowCommentDetail && comments.map(comment => {
75
+ var _topLevelComment$repl, _topLevelComment$repl2;
76
+ const topLevelComment = comment || {};
77
+ const replyCount = topLevelComment === null || topLevelComment === void 0 ? void 0 : (_topLevelComment$repl = topLevelComment.replies) === null || _topLevelComment$repl === void 0 ? void 0 : _topLevelComment$repl.length;
78
+ const latestReply = ((_topLevelComment$repl2 = topLevelComment.replies) === null || _topLevelComment$repl2 === void 0 ? void 0 : _topLevelComment$repl2.length) > 0 ? topLevelComment.replies[topLevelComment.replies.length - 1] : null;
79
+ return /*#__PURE__*/_react.default.createElement(_commentItemCollapseWrapper.default, {
80
+ key: topLevelComment.id,
81
+ editor: editor,
82
+ topLevelComment: topLevelComment,
83
+ replyCount: replyCount,
84
+ latestReply: latestReply,
85
+ setCurrentCommentGroup: () => {
86
+ deleteUnseenNotifications && deleteUnseenNotifications(topLevelComment);
87
+ onSetCommentDetail(topLevelComment);
88
+ }
89
+ });
90
+ }), isShowCommentDetail && /*#__PURE__*/_react.default.createElement("div", {
98
91
  className: "comment-list"
99
- }, comments.map(comment => {
100
- if (comment.resolved) return null;
101
- const props = {
102
- key: comment.id,
103
- comment: comment,
104
- isActive: true
105
- };
106
- return /*#__PURE__*/_react.default.createElement(_commentItemWrapper.default, props);
92
+ }, /*#__PURE__*/_react.default.createElement(_commentItemWrapper.default, {
93
+ comment: commentDetail,
94
+ isActive: true,
95
+ isEmptyComment: Object.keys(commentDetail).length ? false : true,
96
+ addNewComment: insertContent
107
97
  })));
108
98
  };
109
99
  var _default = exports.default = CommentList;
@@ -32,6 +32,8 @@ const EditorComment = _ref => {
32
32
  const [activeElement, setActiveElement] = (0, _react.useState)(null); // The slate node currently activated by clicking
33
33
  const [comments, setComments] = (0, _react.useState)([]);
34
34
  const [isShowComments, setIsShowComments] = (0, _react.useState)(false);
35
+ const [isShowCommentDetail, setIsShowCommentDetail] = (0, _react.useState)(true);
36
+ const [commentDetail, setCommentDetail] = (0, _react.useState)({});
35
37
  const onAddCommentToggle = (0, _react.useCallback)(event => {
36
38
  event.stopPropagation();
37
39
  let activeElement = currentSelectionElement;
@@ -41,6 +43,8 @@ const EditorComment = _ref => {
41
43
  }
42
44
  setActiveElement(activeElement);
43
45
  setIsShowComments(true);
46
+ setIsShowCommentDetail(true);
47
+ setCommentDetail({});
44
48
  }, [currentSelectionElement]);
45
49
  const onSelectElement = (0, _react.useCallback)(elementId => {
46
50
  const activeElement = (0, _index.getCommentElementById)(elementId, editor);
@@ -48,9 +52,15 @@ const EditorComment = _ref => {
48
52
  const unresolvedComments = element_comments_map[elementId].filter(item => !item.resolved);
49
53
  setComments(unresolvedComments);
50
54
  setIsShowComments(true);
55
+ setIsShowCommentDetail(false);
51
56
  }, [editor, element_comments_map]);
57
+ const onSetCommentDetail = (0, _react.useCallback)(comment => {
58
+ setCommentDetail(comment);
59
+ setIsShowCommentDetail(true);
60
+ }, []);
52
61
  const hiddenComment = (0, _react.useCallback)(() => {
53
62
  setComments([]);
63
+ setCommentDetail({});
54
64
  setIsShowComments(false);
55
65
  }, []);
56
66
 
@@ -117,8 +127,9 @@ const EditorComment = _ref => {
117
127
  editor: editor,
118
128
  comments: comments,
119
129
  activeElement: activeElement,
120
- onSelectElement: onSelectElement,
121
- hiddenComment: hiddenComment,
130
+ isShowCommentDetail: isShowCommentDetail,
131
+ commentDetail: commentDetail,
132
+ onSetCommentDetail: onSetCommentDetail,
122
133
  deleteUnseenNotifications: deleteUnseenNotifications
123
134
  })));
124
135
  };
@@ -48,7 +48,8 @@ const INTERNAL_EVENT = exports.INTERNAL_EVENT = {
48
48
  CLOSE_FILE_INSET_DIALOG: 'close_file_insert_dialog',
49
49
  RESIZE_ARTICLE: 'resize_article',
50
50
  ON_VIDEO_FILES_UPLOADED: 'on_video_files_uploaded',
51
- RELOAD_COMMENT: 'reload_comment'
51
+ RELOAD_COMMENT: 'reload_comment',
52
+ ASK_AI: 'ask_ai'
52
53
  };
53
54
  const REVISION_DIFF_KEY = exports.REVISION_DIFF_KEY = 'diff';
54
55
  const REVISION_DIFF_VALUE = exports.REVISION_DIFF_VALUE = '1';
@@ -16,9 +16,11 @@ var _utils = require("../../../../utils");
16
16
  var _constants = require("../../../../constants");
17
17
  var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
18
18
  var _constants2 = require("../../../constants");
19
+ var _debounce = _interopRequireDefault(require("../../../utils/debounce"));
19
20
  var _constants3 = require("../../constants");
20
21
  var _toast = _interopRequireDefault(require("../../../../components/toast"));
21
22
  var _helpers = require("../../plugins/sdoc-link/helpers");
23
+ var _helpers2 = require("../select-file-dialog/helpers");
22
24
  require("./style.css");
23
25
  const FileLinkInsertDialog = _ref => {
24
26
  let {
@@ -39,6 +41,7 @@ const FileLinkInsertDialog = _ref => {
39
41
  });
40
42
  const [newFileName, setNewFileName] = (0, _react.useState)('');
41
43
  const [header, setHeader] = (0, _react.useState)(t('Recent_visited'));
44
+ const [hiddenMoreMenu, setHiddenMoreMenu] = (0, _react.useState)(false);
42
45
  const deleteInputAndInsertText = (0, _react.useCallback)(function () {
43
46
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
44
47
  args[_key] = arguments[_key];
@@ -98,6 +101,10 @@ const FileLinkInsertDialog = _ref => {
98
101
  let files = _utils.LocalStorage.getItem(getItemKey) || [];
99
102
  if (isCalculatedByFiles) {
100
103
  const newFiles = (0, _utils.getMaximumCapacity)(files);
104
+ // Can accommodate all without showing more operations
105
+ if (files.length <= newFiles.length) {
106
+ setHiddenMoreMenu(true);
107
+ }
101
108
  files = newFiles;
102
109
  }
103
110
  setFiles(files);
@@ -144,34 +151,30 @@ const FileLinkInsertDialog = _ref => {
144
151
  unsubscribeCloseDialog();
145
152
  };
146
153
  }, [closeDialog, editor, eventBus, files, getPosition, onClick, onKeydown, onScroll]);
147
- const onSearch = (0, _react.useCallback)(async searchText => {
154
+ const onSearch = (0, _react.useCallback)((0, _debounce.default)(async searchText => {
148
155
  // Show history files when search is empty
149
156
  if (searchText.trim().length === 0) {
150
157
  setHeader(t('Recent_visited'));
158
+ setHiddenMoreMenu(true);
151
159
  setNewFileName('');
152
160
  getHistoryFiles();
153
161
  return;
154
162
  }
163
+ setNewFileName(searchText);
155
164
 
156
165
  // Cannot be found if the search is less than three characters.
157
166
  if ((0, _utils.isEnglish)(searchText.trim()) && searchText.length < 3) {
158
167
  setFiles([]);
159
168
  setHeader(t('Enter_more_character_start_search'));
160
- setNewFileName(searchText);
161
169
  return;
162
170
  }
163
171
  try {
164
172
  var _res$data;
165
- const res = await _context.default.searchSdocFiles(searchText, 1, 10);
173
+ const res = await _context.default.getSearchFilesByFilename(searchText, 1, 10, 'sdoc');
166
174
  if (res !== null && res !== void 0 && (_res$data = res.data) !== null && _res$data !== void 0 && _res$data.results) {
167
175
  let newFiles = res.data.results;
168
- if (newFiles.length === 0) {
169
- setHeader(t('The_document_does_not_exist'));
170
- setNewFileName(searchText);
171
- } else {
172
- setHeader('');
173
- setNewFileName('');
174
- }
176
+ setHeader(t(newFiles.length === 0 ? 'No_results' : 'Link_to_file'));
177
+ setHiddenMoreMenu(true);
175
178
  setFiles(newFiles);
176
179
  return;
177
180
  }
@@ -179,7 +182,7 @@ const FileLinkInsertDialog = _ref => {
179
182
  _toast.default.danger(error.message);
180
183
  }
181
184
  // eslint-disable-next-line react-hooks/exhaustive-deps
182
- }, []);
185
+ }, 50), []);
183
186
  (0, _react.useEffect)(() => {
184
187
  if (!(element !== null && element !== void 0 && element.children)) return;
185
188
  // No search on first load
@@ -210,10 +213,11 @@ const FileLinkInsertDialog = _ref => {
210
213
  e.stopPropagation();
211
214
  (0, _helpers.removeTempInput)(editor, element);
212
215
  const eventBus = _eventBus.default.getInstance();
213
- const createName = newFileName.trim();
216
+ const createName = newFileName.trim() || t('Create_a_new_file');
214
217
  const external_props = {
215
218
  insertSdocFileLink: _helpers.insertSdocFileLink,
216
- editor
219
+ editor,
220
+ noShowDialog: true
217
221
  };
218
222
  eventBus.dispatch(_constants.EXTERNAL_EVENT.CREATE_SDOC_FILE, {
219
223
  newFileName: createName,
@@ -221,7 +225,7 @@ const FileLinkInsertDialog = _ref => {
221
225
  });
222
226
  }, [editor, element, newFileName]);
223
227
  const createFileTipDefault = (0, _react.useMemo)(() => {
224
- return 'Create_a_new_sdoc_file';
228
+ return 'Create_a_new_file';
225
229
  }, []);
226
230
  const createFileName = (0, _react.useMemo)(() => {
227
231
  return `${newFileName}.sdoc`;
@@ -246,15 +250,21 @@ const FileLinkInsertDialog = _ref => {
246
250
  onClick: () => {
247
251
  onSelect(item);
248
252
  }
249
- }, /*#__PURE__*/_react.default.createElement("span", {
250
- className: "file-item-icon sdocfont sdoc-document"
253
+ }, /*#__PURE__*/_react.default.createElement("img", {
254
+ className: "file-item-img",
255
+ src: (0, _helpers2.sdocFileIcon)(),
256
+ alt: ""
251
257
  }), /*#__PURE__*/_react.default.createElement("span", {
252
258
  className: "file-item-name"
253
259
  }, item.name));
254
- }), /*#__PURE__*/_react.default.createElement("div", {
260
+ }), !hiddenMoreMenu && /*#__PURE__*/_react.default.createElement("div", {
255
261
  className: "sdoc-history-files-item",
256
262
  onClick: onShowMore
257
- }, "...", t('More'))), /*#__PURE__*/_react.default.createElement("div", {
263
+ }, /*#__PURE__*/_react.default.createElement("i", {
264
+ className: "file-item-more sdocfont sdoc-more"
265
+ }), /*#__PURE__*/_react.default.createElement("span", {
266
+ className: "more-text"
267
+ }, t('More')))), /*#__PURE__*/_react.default.createElement("div", {
258
268
  className: "sdoc-history-files-add",
259
269
  onClick: onCreateFile
260
270
  }, /*#__PURE__*/_react.default.createElement("i", {
@@ -43,15 +43,9 @@
43
43
  align-items: flex-start;
44
44
  }
45
45
 
46
- .sdoc-history-files-content .sdoc-history-files .sdoc-history-files-item .file-item-icon {
47
- font-size: 16px;
48
- margin-right: 8px;
49
- color: #ff9800;
50
- width: 20px;
51
- height: 20px;
52
- display: flex;
53
- justify-content: center;
54
- align-items: center;
46
+ .sdoc-history-files-content .sdoc-history-files .file-item-img {
47
+ width: 21.6px;
48
+ margin-right: 6px;
55
49
  }
56
50
 
57
51
  .sdoc-history-files-content .sdoc-history-files .sdoc-history-files-item .file-item-name {
@@ -60,6 +54,15 @@
60
54
  overflow: hidden;
61
55
  }
62
56
 
57
+ .sdoc-history-files-content .sdoc-history-files .sdoc-history-files-item .file-item-more {
58
+ font-size: 16px;
59
+ margin-left: 2px;
60
+ }
61
+
62
+ .sdoc-history-files-content .sdoc-history-files .sdoc-history-files-item .more-text {
63
+ margin-left: 10px;
64
+ }
65
+
63
66
  .sdoc-history-files-content .sdoc-history-files .sdoc-history-files-item:hover {
64
67
  background-color: #f5f5f5;
65
68
  }
@@ -22,6 +22,7 @@ var _index3 = _interopRequireDefault(require("../file-insert-dialog/index.js"));
22
22
  var _index4 = _interopRequireDefault(require("../../../../components/toast/index.js"));
23
23
  var _index5 = require("../../plugins/video/constants/index.js");
24
24
  var _constants3 = require("../../../../basic-sdk/constants");
25
+ var _index6 = _interopRequireDefault(require("../../plugins/ai/ai-module/index.js"));
25
26
  const InsertElementDialog = _ref => {
26
27
  let {
27
28
  editor
@@ -55,6 +56,7 @@ const InsertElementDialog = _ref => {
55
56
  duration: 3
56
57
  });
57
58
  }, 0);
59
+ // eslint-disable-next-line react-hooks/exhaustive-deps
58
60
  }, []);
59
61
  const onVideoFileChanged = (0, _react.useCallback)(event => {
60
62
  const files = event.target.files;
@@ -209,6 +211,14 @@ const InsertElementDialog = _ref => {
209
211
  closeDialog: closeDialog
210
212
  });
211
213
  }
214
+ case _constants2.ELEMENT_TYPE.ASK_AI:
215
+ {
216
+ return /*#__PURE__*/_react.default.createElement(_index6.default, {
217
+ element: slateNode,
218
+ editor: editor,
219
+ closeModule: closeDialog
220
+ });
221
+ }
212
222
  default:
213
223
  {
214
224
  return null;
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
- exports.addDataToTree = void 0;
7
+ exports.sdocFileIcon = exports.addDataToTree = void 0;
8
+ var _context = _interopRequireDefault(require("../../../../context"));
7
9
  const addDataToTree = (treeData, indexId, childrenData, path) => {
8
10
  for (let i = 0; i < treeData.length; i++) {
9
11
  var _treeData$i;
@@ -21,4 +23,9 @@ const addDataToTree = (treeData, indexId, childrenData, path) => {
21
23
  }
22
24
  return treeData;
23
25
  };
24
- exports.addDataToTree = addDataToTree;
26
+ exports.addDataToTree = addDataToTree;
27
+ const sdocFileIcon = () => {
28
+ const server = _context.default.getSetting('serviceUrl');
29
+ return `${server}/media/img/file/256/sdoc.png`;
30
+ };
31
+ exports.sdocFileIcon = sdocFileIcon;
@@ -18,3 +18,118 @@
18
18
  background-color: #FF8000;
19
19
  border-color: #FF8000;
20
20
  }
21
+
22
+ .sdoc-file-select-dialog .modal-header-container {
23
+ display: flex;
24
+ position: relative;
25
+ justify-content: space-between;
26
+ align-items: center;
27
+ width: 100%;
28
+ height: 57px;
29
+ padding: 16px;
30
+ border-bottom: 1px solid #e9ecef;
31
+ }
32
+
33
+ .modal-title-container {
34
+ flex: 0 1 auto;
35
+ white-space: nowrap;
36
+ position: relative;
37
+ display: flex;
38
+ align-items: center;
39
+ justify-content: center;
40
+ margin: auto;
41
+ }
42
+
43
+ .search-container {
44
+ display: flex;
45
+ flex: 1;
46
+ align-items: center;
47
+ justify-content: flex-end;
48
+ margin-right: 8px;
49
+ }
50
+
51
+ .sdoc-close-dialog {
52
+ display: flex;
53
+ align-items: center;
54
+ justify-content: center;
55
+ width: 28px;
56
+ }
57
+
58
+ .search-container .search-icon-container .sdoc-find-replace,
59
+ .modal-header-container .sdoc-close1 {
60
+ font-size: 16px;
61
+ color: #666666;
62
+ }
63
+
64
+ .search-container .search-icon-container .sdoc-find-replace:hover,
65
+ .modal-header-container .sdoc-close1:hover {
66
+ background-color: #EFEFEF;
67
+ border-radius: 3px;
68
+ height: 28px;
69
+ width: 28px;
70
+ }
71
+
72
+ .sdoc-files-search-popover{
73
+ display: flex;
74
+ align-items: center;
75
+ justify-content: center;
76
+ width: 28px;
77
+ }
78
+
79
+ .sdoc-files-search-popover-container {
80
+ display: flex;
81
+ justify-content: center;
82
+ align-items: center;
83
+ width: 200px;
84
+ }
85
+
86
+ .sdoc-search-wrapper {
87
+ position: relative;
88
+ display: flex;
89
+ align-items: center;
90
+ width: 100%;
91
+ }
92
+
93
+ .sdoc-search-input {
94
+ flex: 1;
95
+ height: 28px;
96
+ padding: 0 25px;
97
+ line-height: 28px;
98
+
99
+ }
100
+
101
+ .sdoc-search-input::placeholder {
102
+ color: #868E96;
103
+ font-size: 14px;
104
+ }
105
+
106
+ .sdoc-files-search-popover-container .sdoc-search-wrapper .sdoc-close,
107
+ .sdoc-files-search-popover-container .sdoc-search-wrapper .sdoc-search {
108
+ display: flex;
109
+ align-items: center;
110
+ justify-content: center;
111
+ width: 20px;
112
+ }
113
+
114
+ .sdoc-files-search-popover-container .sdoc-search-wrapper .sdoc-close1,
115
+ .sdoc-files-search-popover-container .sdoc-search-wrapper .sdoc-find-replace {
116
+ color: #666666;
117
+ font-size: 14px;
118
+ }
119
+
120
+ .sdoc-files-search-popover-container .sdoc-search-wrapper .sdoc-close1:hover {
121
+ background-color: #EFEFEF;
122
+ border-radius: 3px;
123
+ height: 20px;
124
+ width: 20px;
125
+ }
126
+
127
+ .sdoc-files-search-popover-container .sdoc-search-wrapper .sdoc-search {
128
+ position: absolute;
129
+ left: 4px;
130
+ }
131
+
132
+ .sdoc-files-search-popover-container .sdoc-search-wrapper .sdoc-close {
133
+ position: absolute;
134
+ right: 4px;
135
+ }