@seafile/sdoc-editor 1.0.67 → 1.0.68-beta1

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.
@@ -1,11 +1,6 @@
1
1
  .sdoc-comment-drawer {
2
- position: relative;
3
- width: 360px;
4
- min-width: 360px;
5
- max-width: 620px;
6
- border-left: 1px solid #e2e3e6;
7
- /* Prevent the image menu from still appearing above the comment drawer when scrolled hidden. */
8
- z-index: 102;
2
+ width: 100%;
3
+ height: 100%;
9
4
  }
10
5
 
11
6
  .sdoc-comment-drawer .comments-panel-wrapper {
@@ -20,96 +20,34 @@ var _globalCommentEditor = _interopRequireDefault(require("./global-comment-edit
20
20
  var _constants2 = require("../../../constants");
21
21
  var _core = require("../../../extension/core");
22
22
  require("./index.css");
23
+ var _hooks = require("../../../../hooks");
23
24
  const GlobalComment = _ref => {
24
25
  let {
25
26
  deleteUnseenNotifications,
26
27
  editor
27
28
  } = _ref;
28
29
  const [activeComment, setActiveComment] = (0, _react.useState)(null);
29
- const [isShowCommentList, setShowCommentList] = (0, _react.useState)(false);
30
30
  const [showEditor, setShowEditor] = (0, _react.useState)(false);
31
- const [draggerStyle, setDraggerStyle] = (0, _react.useState)({});
32
31
  const [isScrollDisplayed, setIsScrollDisplayed] = (0, _react.useState)(false);
33
32
  const commentRef = (0, _react.useRef)(null);
34
33
  const contentRef = (0, _react.useRef)(null);
35
- const commentDrawerRef = (0, _react.useRef)(null);
36
- const isResizingRef = (0, _react.useRef)(false);
37
- const commentResizeHandler = (0, _react.useRef)(null);
38
34
  const {
39
35
  commentList,
40
36
  commentType,
41
37
  setCommentType
42
38
  } = (0, _useCommentList.default)();
43
- const setArticleContainerStyle = (0, _react.useCallback)(() => {
44
- const eventBus = _eventBus.default.getInstance();
45
- eventBus.dispatch(_constants2.INTERNAL_EVENT.OUTLINE_STATE_CHANGED, {
46
- scrollIntoArticle: true
47
- });
48
- }, []);
49
- (0, _react.useEffect)(() => {
50
- if (isShowCommentList) {
51
- setArticleContainerStyle();
52
- }
53
- }, [isShowCommentList, setArticleContainerStyle]);
54
- const toggle = (0, _react.useCallback)(() => {
55
- if (isShowCommentList) {
56
- setActiveComment(null);
57
- setShowCommentList(false);
58
- setShowEditor(false);
59
- return;
60
- }
61
- setShowCommentList(true);
62
- }, [isShowCommentList]);
63
- const handleHideDragger = (0, _react.useCallback)(event => {
64
- if (isResizingRef.current) return;
65
- setDraggerStyle({
66
- display: 'none'
67
- });
68
- }, []);
69
- const handleResizeEnd = (0, _react.useCallback)(e => {
70
- isResizingRef.current = false;
71
- document.removeEventListener('mouseup', handleResizeEnd);
72
- handleHideDragger();
73
- }, [handleHideDragger]);
39
+ const {
40
+ closePlugin
41
+ } = (0, _hooks.usePlugins)();
74
42
  const detectScroll = (0, _react.useCallback)(() => {
75
43
  if (!contentRef.current) return;
76
44
  const contentContainer = contentRef.current;
77
45
  const isShowScroll = contentContainer.scrollHeight > contentContainer.clientHeight;
78
46
  setIsScrollDisplayed(isShowScroll);
79
47
  }, []);
80
- const handleResizing = (0, _react.useCallback)(e => {
81
- const commentDrawer = commentDrawerRef.current;
82
- if (isResizingRef.current && commentDrawer) {
83
- let width = commentDrawer.offsetWidth - e.movementX;
84
- // Limit the width of the comment drawer
85
- width = Math.min(width, 620);
86
- width = Math.max(width, 360);
87
- commentDrawer.style.width = `${width}px`;
88
- const isShrink = e.movementX > 0;
89
- setArticleContainerStyle({
90
- width,
91
- isShrink
92
- });
93
- detectScroll();
94
- }
95
- }, [detectScroll, setArticleContainerStyle]);
96
- const handleResizeStart = (0, _react.useCallback)(e => {
97
- isResizingRef.current = true;
98
- document.addEventListener('mouseup', handleResizeEnd);
99
- document.addEventListener('mousemove', handleResizing);
100
- }, [handleResizeEnd, handleResizing]);
101
- (0, _react.useEffect)(() => {
102
- const eventBus = _eventBus.default.getInstance();
103
- const unsubscribe = eventBus.subscribe(_constants2.INTERNAL_EVENT.COMMENT_LIST_CLICK, toggle);
104
- return () => {
105
- unsubscribe();
106
- document.removeEventListener('mousemove', handleResizing);
107
- eventBus.dispatch(_constants2.INTERNAL_EVENT.OUTLINE_STATE_CHANGED);
108
- };
109
- }, [handleResizing, toggle]);
110
48
  (0, _react.useEffect)(() => {
111
49
  detectScroll();
112
- }, [commentList, detectScroll, isShowCommentList]);
50
+ }, [commentList, detectScroll]);
113
51
  const updateScrollPosition = (0, _react.useCallback)(() => {
114
52
  const resolvedDom = document.querySelector('.sdoc-resolved');
115
53
  contentRef.current.scrollTo({
@@ -174,44 +112,17 @@ const GlobalComment = _ref => {
174
112
  const hiddenCommentEditor = (0, _react.useCallback)(() => {
175
113
  setShowEditor(false);
176
114
  }, []);
177
- const handleDisplayDragger = (0, _react.useCallback)(event => {
178
- if (isShowCommentList) {
179
- const {
180
- pageY
181
- } = event;
182
- const {
183
- top
184
- } = commentResizeHandler.current.getBoundingClientRect();
185
- // 15 is the half height of the dragger
186
- const topSize = pageY - top - 15;
187
- setDraggerStyle({
188
- top: `${topSize}px`,
189
- display: 'block'
190
- });
191
- }
192
- }, [isShowCommentList]);
193
115
  const isClickCommentPanelBody = (0, _react.useCallback)(event => {
194
116
  if (contentRef.current && contentRef.current.contains(event.target)) return true;
195
117
  return false;
196
118
  }, []);
197
- if (!isShowCommentList) return null;
198
119
  return /*#__PURE__*/_react.default.createElement("div", {
199
- className: "sdoc-comment-drawer",
200
- ref: commentDrawerRef
201
- }, /*#__PURE__*/_react.default.createElement("div", {
202
- ref: commentResizeHandler,
203
- className: "sdoc-comment-resize-handler",
204
- onMouseDown: handleResizeStart,
205
- onMouseLeave: handleHideDragger,
206
- onMouseMove: handleDisplayDragger
120
+ className: "sdoc-comment-drawer"
207
121
  }, /*#__PURE__*/_react.default.createElement("div", {
208
- style: draggerStyle,
209
- className: "sdoc-comment-move-dragger"
210
- })), /*#__PURE__*/_react.default.createElement("div", {
211
122
  ref: commentRef,
212
123
  className: "comments-panel-wrapper"
213
124
  }, /*#__PURE__*/_react.default.createElement(_globalCommentHeader.default, {
214
- toggle: toggle,
125
+ toggle: closePlugin,
215
126
  toggleGlobalCommentEditor: toggleGlobalCommentEditor
216
127
  }), /*#__PURE__*/_react.default.createElement("div", {
217
128
  className: "comments-panel-body"
@@ -226,6 +137,7 @@ const GlobalComment = _ref => {
226
137
  id: "global-comment-list-container",
227
138
  className: "sdoc-comment-list-container"
228
139
  }, Array.isArray(commentList) && commentList.map(comment => {
140
+ console.log(comment);
229
141
  const elementId = comment.detail.element_id;
230
142
  const element = elementId !== _constants.DOC_COMMENT_ELEMENT_ID ? (0, _core.getNodeById)(editor.children, elementId) : null;
231
143
  const isActive = activeComment && activeComment.id === comment.id;
@@ -13,9 +13,9 @@ const useCommentList = () => {
13
13
  } = (0, _useCommentContext.useCommentContext)();
14
14
  const {
15
15
  comment_list
16
- } = commentsInfo || [];
16
+ } = commentsInfo || {};
17
17
  const [commentType, setCommentType] = (0, _react.useState)(_constants.COMMENT_TYPES.ALL);
18
- const [commentList, setCommentList] = (0, _react.useState)([comment_list]);
18
+ const [commentList, setCommentList] = (0, _react.useState)([]);
19
19
  (0, _react.useEffect)(() => {
20
20
  if (commentType === _constants.COMMENT_TYPES.ALL) {
21
21
  setCommentList(comment_list);
@@ -4,9 +4,23 @@ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWild
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.Z_INDEX = exports.WIKI_EDITOR = exports.REVISION_DIFF_VALUE = exports.REVISION_DIFF_KEY = exports.REBASE_TYPES = exports.REBASE_TYPE = exports.REBASE_ORIGIN = exports.REBASE_MARK_KEY = exports.REBASE_MARKS = exports.PAGE_EDIT_AREA_WIDTH = exports.MODIFY_TYPE = exports.INTERNAL_EVENT = exports.DOCUMENT_PLUGIN_EDITOR = exports.DIFF_VIEWER = exports.COMMENT_EDITOR_EDIT_AREA_WIDTH = exports.COMMENT_EDITOR = void 0;
7
+ exports.PAGE_EDIT_AREA_WIDTH = exports.MODIFY_TYPE = exports.INTERNAL_EVENT = exports.DOCUMENT_PLUGIN_EDITOR = exports.DIFF_VIEWER = exports.COMMENT_EDITOR_EDIT_AREA_WIDTH = exports.COMMENT_EDITOR = void 0;
8
+ Object.defineProperty(exports, "PLUGIN_BTN_POSITION", {
9
+ enumerable: true,
10
+ get: function () {
11
+ return _plugin.PLUGIN_BTN_POSITION;
12
+ }
13
+ });
14
+ Object.defineProperty(exports, "PLUGIN_DISPLAY_TYPE", {
15
+ enumerable: true,
16
+ get: function () {
17
+ return _plugin.PLUGIN_DISPLAY_TYPE;
18
+ }
19
+ });
20
+ exports.Z_INDEX = exports.WIKI_EDITOR = exports.REVISION_DIFF_VALUE = exports.REVISION_DIFF_KEY = exports.REBASE_TYPES = exports.REBASE_TYPE = exports.REBASE_ORIGIN = exports.REBASE_MARK_KEY = exports.REBASE_MARKS = void 0;
8
21
  var Z_INDEX = _interopRequireWildcard(require("./z-index"));
9
22
  exports.Z_INDEX = Z_INDEX;
23
+ var _plugin = require("./plugin");
10
24
  const INTERNAL_EVENT = exports.INTERNAL_EVENT = {
11
25
  CANCEL_TABLE_SELECT_RANGE: 'cancel_table_select_range',
12
26
  SET_TABLE_SELECT_RANGE: 'set_table_select_range',
@@ -19,7 +33,6 @@ const INTERNAL_EVENT = exports.INTERNAL_EVENT = {
19
33
  OUTLINE_STATE_CHANGED: 'outline_state_changed',
20
34
  RELOAD_IMAGE: 'reload_image',
21
35
  ARTICLE_CLICK: 'hidden_comment',
22
- COMMENT_LIST_CLICK: 'comment_list_click',
23
36
  UNSEEN_NOTIFICATIONS_COUNT: 'unseen_notifications_count',
24
37
  CLOSE_CALLOUT_COLOR_PICKER: 'close_callout_color_picker',
25
38
  OPEN_SEARCH_REPLACE_MODAL: 'open_search_replace_modal',
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.PLUGIN_DISPLAY_TYPE = exports.PLUGIN_BTN_POSITION = void 0;
7
+ const PLUGIN_DISPLAY_TYPE = exports.PLUGIN_DISPLAY_TYPE = {
8
+ RIGHT_PANEL: 'right-panel',
9
+ DIALOG: 'dialog'
10
+ };
11
+ const PLUGIN_BTN_POSITION = exports.PLUGIN_BTN_POSITION = {
12
+ MORE_MENU: 'more-menu',
13
+ DEFAULT: 'default'
14
+ };
@@ -22,7 +22,6 @@ var _editableArticle = _interopRequireDefault(require("./editable-article"));
22
22
  var _useColorContext = require("../hooks/use-color-context");
23
23
  var _readonlyArticle = _interopRequireDefault(require("../views/readonly-article"));
24
24
  var _utils = require("../../utils");
25
- var _hooks = require("../../hooks");
26
25
  var _basicSdk = require("../../basic-sdk");
27
26
  var _constants2 = require("../../constants");
28
27
  const SdocEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
@@ -32,7 +31,8 @@ const SdocEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
32
31
  isReloading,
33
32
  showComment,
34
33
  isShowHeaderToolbar = true,
35
- showOutline = true
34
+ showOutline = true,
35
+ plugins = []
36
36
  } = _ref;
37
37
  const validEditor = (0, _react.useMemo)(() => {
38
38
  if (propsEditor) return propsEditor;
@@ -158,7 +158,7 @@ const SdocEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
158
158
  return /*#__PURE__*/_react.default.createElement(_layout.EditorContainer, {
159
159
  editor: validEditor,
160
160
  readonly: isFreezed
161
- }, /*#__PURE__*/_react.default.createElement(_hooks.CollaboratorsProvider, null, /*#__PURE__*/_react.default.createElement(_useColorContext.ColorProvider, null, isShowHeaderToolbar && /*#__PURE__*/_react.default.createElement(_extension.HeaderToolbar, {
161
+ }, /*#__PURE__*/_react.default.createElement(_useColorContext.ColorProvider, null, isShowHeaderToolbar && /*#__PURE__*/_react.default.createElement(_extension.HeaderToolbar, {
162
162
  editor: validEditor,
163
163
  readonly: isFreezed
164
164
  }), /*#__PURE__*/_react.default.createElement(_layout.EditorContent, {
@@ -171,13 +171,12 @@ const SdocEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
171
171
  editor: validEditor,
172
172
  slateValue: slateValue,
173
173
  showComment: true
174
- })))));
174
+ }))));
175
175
  }
176
176
  const isShowComment = typeof showComment === 'boolean' ? showComment : true;
177
- const Provider = isShowComment ? _hooks.CollaboratorsProvider : _react.Fragment;
178
177
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_layout.EditorContainer, {
179
178
  editor: validEditor
180
- }, /*#__PURE__*/_react.default.createElement(Provider, null, /*#__PURE__*/_react.default.createElement(_useColorContext.ColorProvider, null, isShowHeaderToolbar && /*#__PURE__*/_react.default.createElement(_extension.HeaderToolbar, {
179
+ }, /*#__PURE__*/_react.default.createElement(_useColorContext.ColorProvider, null, isShowHeaderToolbar && /*#__PURE__*/_react.default.createElement(_extension.HeaderToolbar, {
181
180
  editor: validEditor
182
181
  }), /*#__PURE__*/_react.default.createElement(_layout.EditorContent, {
183
182
  docValue: slateValue,
@@ -189,7 +188,7 @@ const SdocEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
189
188
  slateValue: slateValue,
190
189
  updateSlateValue: onValueChange,
191
190
  showComment: isShowComment
192
- }))))), /*#__PURE__*/_react.default.createElement(_insertElementDialog.default, {
191
+ })))), /*#__PURE__*/_react.default.createElement(_insertElementDialog.default, {
193
192
  editor: validEditor
194
193
  }));
195
194
  });
@@ -10,9 +10,9 @@ var _react = _interopRequireWildcard(require("react"));
10
10
  var _useScrollContext = require("../hooks/use-scroll-context");
11
11
  var _outline = _interopRequireDefault(require("../outline"));
12
12
  var _classnames = _interopRequireDefault(require("classnames"));
13
- var _comment = _interopRequireDefault(require("../comment"));
14
13
  var _provider = _interopRequireDefault(require("../comment/provider"));
15
14
  var _useParticipants = require("../comment/hooks/use-participants");
15
+ var _rightPanel = _interopRequireDefault(require("../right-panel"));
16
16
  const EditorContent = _ref => {
17
17
  let {
18
18
  readonly,
@@ -34,30 +34,7 @@ const EditorContent = _ref => {
34
34
  'readonly': readonly,
35
35
  'no-outline': !showOutline
36
36
  });
37
- if (!showComment) {
38
- return /*#__PURE__*/_react.default.createElement("div", {
39
- className: "sdoc-content-wrapper"
40
- }, /*#__PURE__*/_react.default.createElement("div", {
41
- ref: scrollRef,
42
- className: "sdoc-scroll-container",
43
- onScroll: onWrapperScroll,
44
- id: "sdoc-scroll-container"
45
- }, /*#__PURE__*/_react.default.createElement(_useScrollContext.ScrollContext.Provider, {
46
- value: {
47
- scrollRef
48
- }
49
- }, /*#__PURE__*/_react.default.createElement("div", {
50
- className: className
51
- }, showOutline && /*#__PURE__*/_react.default.createElement(_outline.default, {
52
- scrollLeft: scrollLeft,
53
- doc: docValue
54
- }), children))));
55
- }
56
- return /*#__PURE__*/_react.default.createElement("div", {
57
- className: "sdoc-content-wrapper"
58
- }, /*#__PURE__*/_react.default.createElement(_provider.default, {
59
- editor: editor
60
- }, /*#__PURE__*/_react.default.createElement(_useParticipants.ParticipantsProvider, null, /*#__PURE__*/_react.default.createElement("div", {
37
+ const dom = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
61
38
  ref: scrollRef,
62
39
  className: "sdoc-scroll-container",
63
40
  onScroll: onWrapperScroll,
@@ -71,10 +48,19 @@ const EditorContent = _ref => {
71
48
  }, showOutline && /*#__PURE__*/_react.default.createElement(_outline.default, {
72
49
  scrollLeft: scrollLeft,
73
50
  doc: docValue
74
- }), children))), /*#__PURE__*/_react.default.createElement(_comment.default, {
75
- editor: editor,
76
- type: "global"
77
- }))));
51
+ }), children))), /*#__PURE__*/_react.default.createElement(_rightPanel.default, {
52
+ editor: editor
53
+ }));
54
+ if (!showComment) {
55
+ return /*#__PURE__*/_react.default.createElement("div", {
56
+ className: "sdoc-content-wrapper"
57
+ }, dom);
58
+ }
59
+ return /*#__PURE__*/_react.default.createElement("div", {
60
+ className: "sdoc-content-wrapper"
61
+ }, /*#__PURE__*/_react.default.createElement(_provider.default, {
62
+ editor: editor
63
+ }, /*#__PURE__*/_react.default.createElement(_useParticipants.ParticipantsProvider, null, dom)));
78
64
  };
79
65
  EditorContent.defaultProps = {
80
66
  readonly: false,
@@ -0,0 +1,14 @@
1
+ .sdoc-content-right-panel-wrapper {
2
+ display: flex;
3
+ flex-direction: row;
4
+ max-width: 620px;
5
+ min-width: 360px;
6
+ position: relative;
7
+ }
8
+
9
+ .sdoc-content-right-panel-wrapper .sdoc-content-right-panel {
10
+ width: 100%;
11
+ height: 100%;
12
+ overflow: hidden;
13
+ border-left: 1px solid #d8d8d8;
14
+ }
@@ -0,0 +1,82 @@
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 _hooks = require("../../hooks");
11
+ var _resizeWidth = _interopRequireDefault(require("./resize-width"));
12
+ var _constants = require("../constants");
13
+ require("./index.css");
14
+ const MIN_PANEL_WIDTH = 360;
15
+ const MAX_PANEL_WIDTH = 620;
16
+ const RightPanel = _ref => {
17
+ let {
18
+ editor
19
+ } = _ref;
20
+ const {
21
+ plugins,
22
+ displayPluginName,
23
+ closePlugin
24
+ } = (0, _hooks.usePlugins)();
25
+ const {
26
+ collaborators
27
+ } = (0, _hooks.useCollaborators)();
28
+ const [width, setWidth] = (0, _react.useState)(MIN_PANEL_WIDTH);
29
+ const panelWrapperStyle = (0, _react.useMemo)(() => {
30
+ if (!displayPluginName) return null;
31
+ let style = {
32
+ width,
33
+ zIndex: 101
34
+ };
35
+ if (!style.width || style.width < MIN_PANEL_WIDTH) {
36
+ style.width = MIN_PANEL_WIDTH;
37
+ } else if (style.width > MAX_PANEL_WIDTH) {
38
+ style.width = MAX_PANEL_WIDTH;
39
+ }
40
+ return style;
41
+ }, [width, displayPluginName]);
42
+ const resizeWidth = (0, _react.useCallback)(width => {
43
+ setWidth(width);
44
+ }, []);
45
+ const resizeWidthEnd = (0, _react.useCallback)(width => {
46
+ const panelWidth = JSON.parse(window.localStorage.getItem('sdoc-panel-width', '{}'));
47
+ window.localStorage.setItem('sdoc-panel-width', JSON.stringify({
48
+ ...panelWidth,
49
+ [displayPluginName]: width
50
+ }));
51
+ }, [displayPluginName]);
52
+ (0, _react.useEffect)(() => {
53
+ const panelWidth = JSON.parse(window.localStorage.getItem('sdoc-panel-width', '{}')) || {};
54
+ const width = Math.max(parseInt(panelWidth[displayPluginName] || MIN_PANEL_WIDTH), MAX_PANEL_WIDTH);
55
+ setWidth(width);
56
+ }, [displayPluginName]);
57
+ if (!displayPluginName) return null;
58
+ const plugin = plugins.find(p => p.name === displayPluginName);
59
+ if (!plugin) return null;
60
+ if (plugin.display_type && plugin.display_type !== _constants.PLUGIN_DISPLAY_TYPE.RIGHT_PANEL) return null;
61
+ const Component = plugin.component;
62
+ if (!Component) return null;
63
+ return /*#__PURE__*/_react.default.createElement("div", {
64
+ className: "sdoc-content-right-panel-wrapper",
65
+ style: panelWrapperStyle
66
+ }, plugin.resizable_width && /*#__PURE__*/_react.default.createElement(_resizeWidth.default, {
67
+ minWidth: MIN_PANEL_WIDTH,
68
+ maxWidth: MAX_PANEL_WIDTH,
69
+ resizeWidth: resizeWidth,
70
+ resizeWidthEnd: resizeWidthEnd
71
+ }), /*#__PURE__*/_react.default.createElement("div", {
72
+ className: "sdoc-content-right-panel",
73
+ id: "sdoc-content-right-panel"
74
+ }, /*#__PURE__*/_react.default.createElement(Component, {
75
+ editor: editor,
76
+ type: "global",
77
+ collaborators: collaborators,
78
+ onClose: closePlugin,
79
+ width: width
80
+ })));
81
+ };
82
+ var _default = exports.default = RightPanel;
@@ -0,0 +1,38 @@
1
+ .sdoc-resize-width-handler {
2
+ height: 100%;
3
+ position: absolute;
4
+ right: 0;
5
+ top: 0;
6
+ width: 6px;
7
+ }
8
+
9
+ .sdoc-resize-width-handler.resize-handler-placement-right {
10
+ left: 0;
11
+ right: auto;
12
+ }
13
+
14
+ .sdoc-resize-width-handler:hover {
15
+ cursor: col-resize;
16
+ }
17
+
18
+ .sdoc-resize-width-handler .sdoc-resize-width-handler-content {
19
+ background-color: initial;
20
+ height: 100%;
21
+ position: relative;
22
+ width: 2px;
23
+ }
24
+
25
+ .sdoc-resize-width-handler:hover .sdoc-resize-width-handler-content {
26
+ background-color: #ccc;
27
+ }
28
+
29
+ .sdoc-resize-width-handler .sdoc-resize-width-handler-bar {
30
+ background-color: #2d7ff9;
31
+ border-radius: 3px;
32
+ content: "";
33
+ left: 50%;
34
+ margin-left: -3px;
35
+ position: absolute;
36
+ width: 6px;
37
+ }
38
+
@@ -0,0 +1,134 @@
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 _classnames = _interopRequireDefault(require("classnames"));
11
+ require("./index.css");
12
+ const ResizeWidth = _ref => {
13
+ let {
14
+ minWidth,
15
+ maxWidth,
16
+ resizeWidth: resizeWidthAPI,
17
+ resizeWidthEnd
18
+ } = _ref;
19
+ const [isShowHandlerBar, setIsShowHandlerBar] = (0, _react.useState)(false);
20
+ const [drag, setDrag] = (0, _react.useState)(null);
21
+ const handlerRef = (0, _react.useRef)(null);
22
+ const handlerBarRef = (0, _react.useRef)(null);
23
+ const setHandlerBarTop = handlerTop => {
24
+ if (!handlerBarRef.current || handlerTop < 0) return;
25
+ handlerBarRef.current.style.top = handlerTop + 'px';
26
+ };
27
+ const setHandlerBarPosition = event => {
28
+ if (!handlerRef.current) return;
29
+ const {
30
+ top
31
+ } = handlerRef.current.getBoundingClientRect();
32
+ const handlerTop = event.pageY - top - 26 / 2;
33
+ setHandlerBarTop(handlerTop);
34
+ };
35
+ const getWidthFromMouseEvent = event => {
36
+ return event.pageX || event.touches && event.touches[0] && event.touches[0].pageX || event.changedTouches && event.changedTouches[event.changedTouches.length - 1].pageX;
37
+ };
38
+ const calculateResizedWidth = event => {
39
+ const width = getWidthFromMouseEvent(event);
40
+ const resizedWidth = document.body.clientWidth - width;
41
+ if (minWidth && resizedWidth < minWidth || maxWidth && resizedWidth > maxWidth) return -1;
42
+ return resizedWidth;
43
+ };
44
+ const onResizeWidth = event => {
45
+ const resizedWidth = calculateResizedWidth(event);
46
+ if (resizedWidth < 0) return;
47
+ if (resizeWidthAPI) {
48
+ resizeWidthAPI(resizedWidth);
49
+ }
50
+ };
51
+ const onDrag = event => {
52
+ onResizeWidth(event);
53
+ };
54
+ const onDragStart = (0, _react.useCallback)(event => {
55
+ if (event && event.dataTransfer && event.dataTransfer.setData) {
56
+ event.dataTransfer.setData('text/plain', 'dummy');
57
+ }
58
+ }, []);
59
+ const onDragEnd = event => {
60
+ onResizeWidth(event);
61
+ };
62
+ const onMouseLeave = () => {
63
+ setIsShowHandlerBar(false);
64
+ };
65
+ const onMouseEnter = event => {
66
+ setIsShowHandlerBar(true);
67
+ setHandlerBarPosition(event);
68
+ if (handlerRef.current) {
69
+ handlerRef.current.addEventListener('mouseleave', onMouseLeave);
70
+ }
71
+ };
72
+ const onMouseOver = (0, _react.useCallback)(event => {
73
+ setHandlerBarPosition(event);
74
+ }, [setHandlerBarPosition]);
75
+ const onMouseDown = event => {
76
+ event.preventDefault && event.preventDefault();
77
+ const currDrag = onDragStart(event);
78
+ if (currDrag === null && event.button !== 0) return;
79
+ window.addEventListener('mouseup', onMouseUp);
80
+ window.addEventListener('mousemove', onMouseMove);
81
+ if (handlerRef.current) {
82
+ handlerRef.current.removeEventListener('mouseleave', onMouseLeave);
83
+ }
84
+ setDrag(currDrag);
85
+ };
86
+ const onMouseMove = event => {
87
+ event.preventDefault && event.preventDefault();
88
+ if (!drag === null) return;
89
+ onDrag(event);
90
+ };
91
+ const onMouseUp = event => {
92
+ window.removeEventListener('mouseup', onMouseUp);
93
+ window.removeEventListener('mousemove', onMouseMove);
94
+ onDragEnd(event, drag);
95
+ setHandlerBarTop(-9999);
96
+ setDrag(null);
97
+ setIsShowHandlerBar(false);
98
+ if (resizeWidthEnd) {
99
+ const resizeWidth = calculateResizedWidth(event);
100
+ if (resizeWidth < 0) return;
101
+ resizeWidthEnd(resizeWidth);
102
+ }
103
+ };
104
+ (0, _react.useEffect)(() => {
105
+ return () => {
106
+ window.removeEventListener('mouseup', onMouseUp);
107
+ window.removeEventListener('mousemove', onMouseMove);
108
+ };
109
+
110
+ // eslint-disable-next-line
111
+ }, []);
112
+ return /*#__PURE__*/_react.default.createElement("div", {
113
+ className: "sdoc-resize-width-handler resize-handler-placement-right",
114
+ ref: handlerRef,
115
+ onMouseDown: onMouseDown,
116
+ onMouseOver: onMouseOver,
117
+ onMouseEnter: onMouseEnter,
118
+ onDrag: onDrag,
119
+ onDragStart: onDragStart,
120
+ onDragEnd: onDragEnd,
121
+ style: {
122
+ zIndex: 4
123
+ }
124
+ }, /*#__PURE__*/_react.default.createElement("div", {
125
+ className: "sdoc-resize-width-handler-content"
126
+ }, isShowHandlerBar && /*#__PURE__*/_react.default.createElement("div", {
127
+ className: "sdoc-resize-width-handler-bar",
128
+ ref: handlerBarRef,
129
+ style: {
130
+ height: 26
131
+ }
132
+ })));
133
+ };
134
+ var _default = exports.default = ResizeWidth;
@@ -11,8 +11,8 @@ var _context = _interopRequireDefault(require("../../context"));
11
11
  var _revisionOperations = _interopRequireDefault(require("./revision-operations"));
12
12
  var _collaboratorsOperation = _interopRequireDefault(require("./collaborators-operation"));
13
13
  var _moreOperations = _interopRequireDefault(require("./more-operations"));
14
- var _commentsOperation = _interopRequireDefault(require("./comments-operation"));
15
14
  var _shareOperation = _interopRequireDefault(require("./share-operation"));
15
+ var _pluginsOperations = _interopRequireDefault(require("./plugins-operations"));
16
16
  var _utils = require("../../utils");
17
17
  require("./style.css");
18
18
  const DocOperations = _ref => {
@@ -39,6 +39,6 @@ const DocOperations = _ref => {
39
39
  handleViewChangesToggle: handleViewChangesToggle,
40
40
  handleRevisionMerged: handleRevisionMerged,
41
41
  handleRevisionPublished: handleRevisionPublished
42
- }), !isPublished && /*#__PURE__*/_react.default.createElement(_commentsOperation.default, null), !isSdocRevision && /*#__PURE__*/_react.default.createElement(_shareOperation.default, null), !isPublished && /*#__PURE__*/_react.default.createElement(_collaboratorsOperation.default, null), !isSdocRevision && /*#__PURE__*/_react.default.createElement(_moreOperations.default, null));
42
+ }), !isSdocRevision && /*#__PURE__*/_react.default.createElement(_pluginsOperations.default, null), !isSdocRevision && /*#__PURE__*/_react.default.createElement(_shareOperation.default, null), !isPublished && /*#__PURE__*/_react.default.createElement(_collaboratorsOperation.default, null), !isSdocRevision && /*#__PURE__*/_react.default.createElement(_moreOperations.default, null));
43
43
  };
44
44
  var _default = exports.default = (0, _reactI18next.withTranslation)('sdoc-editor')(DocOperations);
@@ -0,0 +1,43 @@
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 _classnames = _interopRequireDefault(require("classnames"));
11
+ var _hooks = require("../../hooks");
12
+ var _mouseEvent = require("../../basic-sdk/utils/mouse-event");
13
+ var _constants = require("../../basic-sdk/constants");
14
+ const PluginsOperations = () => {
15
+ const {
16
+ plugins,
17
+ updateDisplayPlugin
18
+ } = (0, _hooks.usePlugins)();
19
+ const onClick = (0, _react.useCallback)((event, pluginName) => {
20
+ (0, _mouseEvent.eventStopPropagation)(event);
21
+ updateDisplayPlugin(pluginName);
22
+ }, [updateDisplayPlugin]);
23
+ return plugins.filter(plugin => !plugin.position || plugin.position === _constants.PLUGIN_BTN_POSITION.DEFAULT).map(plugin => {
24
+ const {
25
+ name,
26
+ icon
27
+ } = plugin;
28
+ let iconDom = '';
29
+ if (typeof icon !== 'string') {
30
+ iconDom = icon;
31
+ } else {
32
+ iconDom = /*#__PURE__*/_react.default.createElement("i", {
33
+ className: (0, _classnames.default)('sdocfont', icon)
34
+ });
35
+ }
36
+ return /*#__PURE__*/_react.default.createElement("span", {
37
+ className: "op-item sdoc-plugin-operation-btn-container",
38
+ onClick: e => onClick(e, name),
39
+ key: name
40
+ }, iconDom);
41
+ });
42
+ };
43
+ var _default = exports.default = PluginsOperations;
@@ -9,6 +9,12 @@ Object.defineProperty(exports, "CollaboratorsProvider", {
9
9
  return _useCollaborators.CollaboratorsProvider;
10
10
  }
11
11
  });
12
+ Object.defineProperty(exports, "PluginsProvider", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _usePlugins.PluginsProvider;
16
+ }
17
+ });
12
18
  Object.defineProperty(exports, "useCollaborators", {
13
19
  enumerable: true,
14
20
  get: function () {
@@ -21,5 +27,12 @@ Object.defineProperty(exports, "useDocument", {
21
27
  return _useDocument.useDocument;
22
28
  }
23
29
  });
30
+ Object.defineProperty(exports, "usePlugins", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _usePlugins.usePlugins;
34
+ }
35
+ });
24
36
  var _useCollaborators = require("./use-collaborators");
25
- var _useDocument = require("./use-document");
37
+ var _useDocument = require("./use-document");
38
+ var _usePlugins = require("./use-plugins");
@@ -10,12 +10,17 @@ var _react = _interopRequireWildcard(require("react"));
10
10
  var _context = _interopRequireDefault(require("../context"));
11
11
  var _model = require("../model");
12
12
  const CollaboratorsContext = /*#__PURE__*/_react.default.createContext(null);
13
- const CollaboratorsProvider = props => {
13
+ const CollaboratorsProvider = _ref => {
14
+ let {
15
+ collaborators: propsCollaborators,
16
+ children
17
+ } = _ref;
14
18
  const isSdocRevision = _context.default.getSetting('isSdocRevision');
15
19
  const isPublished = _context.default.getSetting('isPublished');
16
- const [collaborators, setCollaborators] = (0, _react.useState)([]);
20
+ const [collaborators, setCollaborators] = (0, _react.useState)(propsCollaborators || []);
17
21
  (0, _react.useEffect)(() => {
18
22
  if (isSdocRevision && isPublished) return;
23
+ if (propsCollaborators) return;
19
24
  _context.default.listRelatedUsers().then(res => {
20
25
  const collaborators = [];
21
26
  res.data.related_users.forEach(user => {
@@ -34,7 +39,7 @@ const CollaboratorsProvider = props => {
34
39
  value: {
35
40
  collaborators
36
41
  }
37
- }, props.children);
42
+ }, children);
38
43
  };
39
44
  exports.CollaboratorsProvider = CollaboratorsProvider;
40
45
  const useCollaborators = () => {
@@ -0,0 +1,63 @@
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.usePlugins = exports.PluginsProvider = void 0;
9
+ var _react = _interopRequireWildcard(require("react"));
10
+ var _constants = require("../basic-sdk/constants");
11
+ var _comment = _interopRequireDefault(require("../basic-sdk/comment"));
12
+ const PluginsContext = /*#__PURE__*/_react.default.createContext(null);
13
+ const PluginsProvider = _ref => {
14
+ let {
15
+ showComment,
16
+ plugins: propsPlugins,
17
+ children
18
+ } = _ref;
19
+ const [displayName, setDisplayName] = (0, _react.useState)('');
20
+ const closePlugin = (0, _react.useCallback)(() => {
21
+ setDisplayName('');
22
+ }, []);
23
+ const plugins = (0, _react.useMemo)(() => {
24
+ const allPlugins = propsPlugins;
25
+ if (showComment) {
26
+ allPlugins.push({
27
+ name: 'sdoc-comment',
28
+ icon: 'sdoc-comments',
29
+ resizable_width: true,
30
+ display_type: _constants.PLUGIN_DISPLAY_TYPE.RIGHT_PANEL,
31
+ component: _comment.default
32
+ });
33
+ }
34
+ return allPlugins;
35
+ }, [showComment, propsPlugins]);
36
+ const updateDisplayPlugin = (0, _react.useCallback)(name => {
37
+ if (!name || displayName === name) {
38
+ setDisplayName('');
39
+ return;
40
+ }
41
+ const plugin = plugins.find(plugin => plugin.name === name);
42
+ if ((plugin === null || plugin === void 0 ? void 0 : plugin.display_type) === _constants.PLUGIN_DISPLAY_TYPE.RIGHT_PANEL) {
43
+ setDisplayName(name);
44
+ }
45
+ }, [displayName, plugins]);
46
+ return /*#__PURE__*/_react.default.createElement(PluginsContext.Provider, {
47
+ value: {
48
+ plugins,
49
+ displayPluginName: displayName,
50
+ updateDisplayPlugin,
51
+ closePlugin
52
+ }
53
+ }, children);
54
+ };
55
+ exports.PluginsProvider = PluginsProvider;
56
+ const usePlugins = () => {
57
+ const context = (0, _react.useContext)(PluginsContext);
58
+ if (!context) {
59
+ throw new Error('\'PluginsContext\' is null');
60
+ }
61
+ return context;
62
+ };
63
+ exports.usePlugins = usePlugins;
@@ -26,7 +26,9 @@ const SimpleEditor = _ref => {
26
26
  showComment,
27
27
  showDocOperations = true,
28
28
  showFileTags = true,
29
- t
29
+ t,
30
+ plugins = [],
31
+ collaborators
30
32
  } = _ref;
31
33
  _context.default.initApi();
32
34
  const editorRef = (0, _react.useRef)(null);
@@ -140,7 +142,12 @@ const SimpleEditor = _ref => {
140
142
  className: "error-tip"
141
143
  }, t(errorMessage)));
142
144
  }
143
- return /*#__PURE__*/_react.default.createElement(_errorBoundary.default, null, /*#__PURE__*/_react.default.createElement(_layout.default, null, /*#__PURE__*/_react.default.createElement(_layout.Header, null, /*#__PURE__*/_react.default.createElement(_docInfo.default, {
145
+ return /*#__PURE__*/_react.default.createElement(_errorBoundary.default, null, /*#__PURE__*/_react.default.createElement(_hooks.CollaboratorsProvider, {
146
+ collaborators: collaborators
147
+ }, /*#__PURE__*/_react.default.createElement(_hooks.PluginsProvider, {
148
+ plugins: plugins,
149
+ showComment: showComment
150
+ }, /*#__PURE__*/_react.default.createElement(_layout.default, null, /*#__PURE__*/_react.default.createElement(_layout.Header, null, /*#__PURE__*/_react.default.createElement(_docInfo.default, {
144
151
  isStarred: isStarred,
145
152
  isDraft: isDraft,
146
153
  showFileTags: showFileTags,
@@ -153,6 +160,6 @@ const SimpleEditor = _ref => {
153
160
  handleViewChangesToggle: handleViewChangesToggle,
154
161
  handleRevisionMerged: handleRevisionMerged,
155
162
  handleRevisionPublished: handleRevisionPublished
156
- })), /*#__PURE__*/_react.default.createElement(_layout.Content, null, renderEditor())));
163
+ })), /*#__PURE__*/_react.default.createElement(_layout.Content, null, renderEditor())))));
157
164
  };
158
165
  var _default = exports.default = (0, _reactI18next.withTranslation)('sdoc-editor')(SimpleEditor);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "1.0.67",
3
+ "version": "1.0.68beta1",
4
4
  "private": false,
5
5
  "description": "This is a sdoc editor",
6
6
  "main": "dist/index.js",
@@ -14,6 +14,8 @@
14
14
  />
15
15
  <missing-glyph />
16
16
 
17
+ <glyph glyph-name="sdoc-info" unicode="&#58999;" d="M512 896c281.6 0 512-230.4 512-512s-230.4-512-512-512S0 102.4 0 384 230.4 896 512 896z m0-96C281.6 800 96 614.4 96 384s185.6-416 416-416 416 185.6 416 416c0 108.8-44.8 217.6-121.6 294.4S620.8 800 512 800z m32-352c19.2 0 32-12.8 32-32v-256c0-19.2-12.8-32-32-32h-64c-19.2 0-32 12.8-32 32V416c0 19.2 12.8 32 32 32h64z m-19.2 192c9.6 0 16-3.2 22.4-9.6 3.2-3.2 6.4-6.4 9.6-6.4 25.6-25.6 25.6-64 0-89.6-3.2-3.2-6.4-6.4-9.6-6.4-6.4-3.2-16-6.4-22.4-9.6h-25.6c-9.6 0-16 3.2-22.4 9.6-3.2 3.2-6.4 6.4-9.6 6.4-25.6 25.6-25.6 64 0 89.6 3.2 3.2 6.4 6.4 9.6 6.4 6.4 3.2 16 6.4 22.4 9.6h25.6z" horiz-adv-x="1024" />
18
+
17
19
  <glyph glyph-name="sdoc-inline-code" unicode="&#58998;" d="M1024 384l-272-288-67.2 70.4 204.8 217.6-204.8 217.6L752 672l272-288zM0 384l272-288 67.2 70.4L134.4 384l204.8 217.6L272 672 0 384z m451.2-512l-99.2 3.2L579.2 896h99.2l-227.2-1024z" horiz-adv-x="1024" />
18
20
 
19
21
  <glyph glyph-name="sdoc-sort" unicode="&#58996;" d="M294.4 790.4l201.6-204.8c19.2-19.2 19.2-51.2 0-73.6-19.2-19.2-51.2-19.2-70.4 0L320 620.8v-604.8c0-25.6-22.4-48-48-48S224-9.6 224 16V620.8L118.4 512c-19.2-19.2-48-19.2-67.2-3.2l-3.2 3.2c-19.2 19.2-19.2 51.2 0 73.6l201.6 204.8c12.8 12.8 32 12.8 44.8 0zM752 800c25.6 0 48-22.4 48-48v-604.8l105.6 108.8c19.2 19.2 51.2 19.2 70.4 0 19.2-19.2 19.2-51.2 0-73.6l-201.6-204.8c-12.8-12.8-32-12.8-44.8 0l-201.6 204.8c-19.2 19.2-19.2 51.2 0 73.6l3.2 3.2c19.2 16 48 16 67.2-3.2l105.6-108.8V752c0 25.6 22.4 48 48 48z" horiz-adv-x="1024" />
@@ -1,11 +1,11 @@
1
1
  @font-face {
2
2
  font-family: "sdocfont"; /* Project id 4097705 */
3
- src: url('./sdoc-editor-font/iconfont.eot?t=1724747529924'); /* IE9 */
4
- src: url('./sdoc-editor-font/iconfont.eot?t=1724747529924#iefix') format('embedded-opentype'), /* IE6-IE8 */
5
- url('./sdoc-editor-font/iconfont.woff2?t=1724747529924') format('woff2'),
6
- url('./sdoc-editor-font/iconfont.woff?t=1724747529924') format('woff'),
7
- url('./sdoc-editor-font/iconfont.ttf?t=1724747529924') format('truetype'),
8
- url('./sdoc-editor-font/iconfont.svg?t=1724747529924#sdocfont') format('svg');
3
+ src: url('./sdoc-editor-font/iconfont.eot?t=1725002301707'); /* IE9 */
4
+ src: url('./sdoc-editor-font/iconfont.eot?t=1725002301707#iefix') format('embedded-opentype'), /* IE6-IE8 */
5
+ url('./sdoc-editor-font/iconfont.woff2?t=1725002301707') format('woff2'),
6
+ url('./sdoc-editor-font/iconfont.woff?t=1725002301707') format('woff'),
7
+ url('./sdoc-editor-font/iconfont.ttf?t=1725002301707') format('truetype'),
8
+ url('./sdoc-editor-font/iconfont.svg?t=1725002301707#sdocfont') format('svg');
9
9
  }
10
10
 
11
11
  .sdocfont {
@@ -16,6 +16,10 @@
16
16
  -moz-osx-font-smoothing: grayscale;
17
17
  }
18
18
 
19
+ .sdoc-info:before {
20
+ content: "\e677";
21
+ }
22
+
19
23
  .sdoc-inline-code:before {
20
24
  content: "\e676";
21
25
  }
@@ -1,14 +0,0 @@
1
- .sdoc-notification-container .sdoc-notification-count {
2
- position: absolute;
3
- color: #fff;
4
- font-size: 12px;
5
- top: -7px;
6
- right: -10px;
7
- padding: 2px;
8
- background: #fc6440;
9
- border-radius: 50%;
10
- min-width: 20px;
11
- min-height: 20px;
12
- transform: scale(.7);
13
- text-align: center;
14
- }
@@ -1,36 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.default = CommentsOperation;
8
- var _react = _interopRequireWildcard(require("react"));
9
- var _basicSdk = require("../../../basic-sdk");
10
- var _mouseEvent = require("../../../basic-sdk/utils/mouse-event");
11
- var _constants = require("../../../basic-sdk/constants");
12
- require("./index.css");
13
- function CommentsOperation() {
14
- const [unseenNotificationsCount, setUnseenNotificationsCount] = (0, _react.useState)(0);
15
- const onCommentsToggle = (0, _react.useCallback)(event => {
16
- (0, _mouseEvent.eventStopPropagation)(event);
17
- const eventBus = _basicSdk.EventBus.getInstance();
18
- eventBus.dispatch(_constants.INTERNAL_EVENT.COMMENT_LIST_CLICK);
19
- }, []);
20
- (0, _react.useEffect)(() => {
21
- const eventBus = _basicSdk.EventBus.getInstance();
22
- const unsubscribeUnseenNotificationsCount = eventBus.subscribe(_constants.INTERNAL_EVENT.UNSEEN_NOTIFICATIONS_COUNT, count => setUnseenNotificationsCount(count));
23
- return () => {
24
- unsubscribeUnseenNotificationsCount();
25
- };
26
- // eslint-disable-next-line react-hooks/exhaustive-deps
27
- }, []);
28
- return /*#__PURE__*/_react.default.createElement("span", {
29
- className: "op-item sdoc-notification-container",
30
- onClick: onCommentsToggle
31
- }, /*#__PURE__*/_react.default.createElement("i", {
32
- className: "sdocfont sdoc-comments"
33
- }), unseenNotificationsCount > 0 && /*#__PURE__*/_react.default.createElement("span", {
34
- className: "sdoc-notification-count"
35
- }, unseenNotificationsCount));
36
- }