@seafile/seafile-editor 3.0.7 → 3.0.8-alpha.1

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.
@@ -18,6 +18,7 @@ const INTERNAL_EVENTS = exports.INTERNAL_EVENTS = {
18
18
  const EXTERNAL_EVENTS = exports.EXTERNAL_EVENTS = {
19
19
  ON_HELP_INFO_TOGGLE: 'on_help_info_toggle',
20
20
  ON_ARTICLE_INFO_TOGGLE: 'on_article_info_toggle',
21
+ ON_COMMENT_PANEL_TOGGLE: 'on_comment_panel_toggle',
21
22
  ON_LINK_CLICK: 'on_link_click',
22
23
  ON_INSERT_IMAGE: 'on_insert_image',
23
24
  INSERT_ATTACHMENTS: 'insert_attachments',
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _ = _interopRequireDefault(require("."));
10
+ var _eventTypes = require("../../constants/event-types");
11
+ const ArticleInfo = _ref => {
12
+ let {
13
+ isVisible
14
+ } = _ref;
15
+ return /*#__PURE__*/_react.default.createElement(_.default, {
16
+ isVisible: isVisible,
17
+ eventType: _eventTypes.EXTERNAL_EVENTS.ON_ARTICLE_INFO_TOGGLE,
18
+ storageKey: "panelWidth",
19
+ containerClassName: "sf-article-info-container"
20
+ });
21
+ };
22
+ var _default = exports.default = ArticleInfo;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _ = _interopRequireDefault(require("."));
10
+ var _eventTypes = require("../../constants/event-types");
11
+ const CommentPanel = _ref => {
12
+ let {
13
+ isVisible
14
+ } = _ref;
15
+ return /*#__PURE__*/_react.default.createElement(_.default, {
16
+ isVisible: isVisible,
17
+ eventType: _eventTypes.EXTERNAL_EVENTS.ON_COMMENT_PANEL_TOGGLE,
18
+ storageKey: "panelWidth",
19
+ containerClassName: "sf-comment-panel-container"
20
+ });
21
+ };
22
+ var _default = exports.default = CommentPanel;
@@ -14,12 +14,15 @@ var _eventTypes = require("../../constants/event-types");
14
14
  require("./style.css");
15
15
  const MIN_PANEL_WIDTH = 360;
16
16
  const MAX_PANEL_WIDTH = 620;
17
- const ArticleInfo = _ref => {
17
+ const SidePanel = _ref => {
18
18
  let {
19
- isVisible
19
+ isVisible,
20
+ eventType,
21
+ storageKey,
22
+ containerClassName
20
23
  } = _ref;
21
24
  const [width, setWidth] = (0, _react.useState)(MIN_PANEL_WIDTH);
22
- const [fileDetails, setFileDetails] = (0, _react.useState)({});
25
+ const [config, setConfig] = (0, _react.useState)({});
23
26
  const containerWrapperStyle = (0, _react.useMemo)(() => {
24
27
  const style = {
25
28
  width,
@@ -33,48 +36,46 @@ const ArticleInfo = _ref => {
33
36
  }
34
37
  return style;
35
38
  }, [width, isVisible]);
36
- const resizeWidth = (0, _react.useCallback)(width => {
37
- if (width >= MIN_PANEL_WIDTH && width <= MAX_PANEL_WIDTH) {
38
- setWidth(width);
39
+ const resizeWidth = (0, _react.useCallback)(newWidth => {
40
+ if (newWidth >= MIN_PANEL_WIDTH && newWidth <= MAX_PANEL_WIDTH) {
41
+ setWidth(newWidth);
39
42
  }
40
43
  }, []);
41
- const resizeWidthEnd = (0, _react.useCallback)(width => {
44
+ const resizeWidthEnd = (0, _react.useCallback)(newWidth => {
42
45
  const settings = JSON.parse(window.localStorage.getItem('sf-editor') || '{}');
43
46
  window.localStorage.setItem('sf-editor', JSON.stringify((0, _objectSpread2.default)((0, _objectSpread2.default)({}, settings), {}, {
44
- panelWidth: width
47
+ [storageKey]: newWidth
45
48
  })));
46
49
  const eventBus = _eventBus.default.getInstance();
47
50
  eventBus.dispatch(_eventTypes.INTERNAL_EVENTS.RESIZE_ARTICLE);
48
- }, []);
51
+ }, [storageKey]);
49
52
  (0, _react.useEffect)(() => {
50
- const settings = JSON.parse(window.localStorage.getItem('sf-editor', '{}')) || {};
51
- const {
52
- panelWidth
53
- } = settings;
54
- const width = Math.max(MIN_PANEL_WIDTH, Math.min(parseInt(panelWidth, 10) || MIN_PANEL_WIDTH, MAX_PANEL_WIDTH));
53
+ const settings = JSON.parse(window.localStorage.getItem('sf-editor') || '{}');
54
+ const storedWidth = settings[storageKey];
55
+ const width = Math.max(MIN_PANEL_WIDTH, Math.min(parseInt(storedWidth, 10) || MIN_PANEL_WIDTH, MAX_PANEL_WIDTH));
55
56
  setWidth(width);
56
- }, []);
57
- const handleFileDetails = (0, _react.useCallback)(fileDetails => {
58
- setFileDetails(fileDetails);
57
+ }, [storageKey]);
58
+ const handleConfig = (0, _react.useCallback)(configData => {
59
+ setConfig(configData);
59
60
  }, []);
60
61
  (0, _react.useEffect)(() => {
61
62
  const eventBus = _eventBus.default.getInstance();
62
- const unsubscribeArticleInfoDetail = eventBus.subscribe(_eventTypes.EXTERNAL_EVENTS.ON_ARTICLE_INFO_TOGGLE, handleFileDetails);
63
+ const unsubscribePanel = eventBus.subscribe(eventType, handleConfig);
63
64
  return () => {
64
- unsubscribeArticleInfoDetail();
65
+ unsubscribePanel();
65
66
  };
66
67
  // eslint-disable-next-line react-hooks/exhaustive-deps
67
68
  }, []);
68
69
  (0, _react.useEffect)(() => {
69
70
  const eventBus = _eventBus.default.getInstance();
70
71
  eventBus.dispatch(_eventTypes.INTERNAL_EVENTS.RESIZE_ARTICLE);
71
- }, [isVisible, fileDetails]);
72
+ }, [isVisible, config]);
72
73
  const {
73
- component: fileDetailsComponent,
74
- props: fileDetailsProps
75
- } = fileDetails || {};
74
+ component: panelComponent,
75
+ props: panelProps
76
+ } = config || {};
76
77
  return /*#__PURE__*/_react.default.createElement("div", {
77
- className: "sf-article-info-container-wrapper",
78
+ className: "sf-panel-wrapper",
78
79
  style: containerWrapperStyle
79
80
  }, /*#__PURE__*/_react.default.createElement(_resizeWidth.default, {
80
81
  minWidth: MIN_PANEL_WIDTH,
@@ -82,12 +83,17 @@ const ArticleInfo = _ref => {
82
83
  resizeWidth: resizeWidth,
83
84
  resizeWidthEnd: resizeWidthEnd
84
85
  }), /*#__PURE__*/_react.default.createElement("div", {
85
- className: "sf-article-info-container",
86
+ className: "sf-panel-container ".concat(containerClassName),
86
87
  style: {
87
88
  width
88
89
  }
89
- }, fileDetailsComponent && /*#__PURE__*/_react.default.createElement(fileDetailsComponent, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, fileDetailsProps), {}, {
90
+ }, panelComponent && panelProps && /*#__PURE__*/_react.default.createElement(panelComponent, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, panelProps), {}, {
90
91
  width
91
92
  }))));
92
93
  };
93
- var _default = exports.default = ArticleInfo;
94
+ SidePanel.defaultProps = {
95
+ eventType: _eventTypes.EXTERNAL_EVENTS.ON_ARTICLE_INFO_TOGGLE,
96
+ storageKey: 'panelWidth',
97
+ containerClassName: 'sf-article-info-container'
98
+ };
99
+ var _default = exports.default = SidePanel;
@@ -1,4 +1,4 @@
1
- .sf-article-info-container-wrapper {
1
+ .sf-panel-wrapper {
2
2
  display: flex;
3
3
  flex-direction: row;
4
4
  max-width: 620px;
@@ -7,16 +7,16 @@
7
7
  height: 100%;
8
8
  }
9
9
 
10
- .sf-article-info-container {
10
+ .sf-panel-container {
11
11
  height: 100%;
12
12
  }
13
13
 
14
- .sf-article-info-container[style*="display: none"] {
14
+ .sf-panel-container[style*="display: none"] {
15
15
  opacity: 0;
16
16
  pointer-events: none;
17
17
  }
18
18
 
19
- .sf-article-info-container[style*="display: block"] {
19
+ .sf-panel-container[style*="display: block"] {
20
20
  opacity: 1;
21
21
  pointer-events: auto;
22
22
  }
@@ -11,7 +11,8 @@ var _classnames = _interopRequireDefault(require("classnames"));
11
11
  var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
12
12
  var _eventTypes = require("../../../constants/event-types");
13
13
  var _hotkeysHelper = _interopRequireDefault(require("../../../containers/hotkeys-helper"));
14
- var _articleInfo = _interopRequireDefault(require("../../../containers/article-info"));
14
+ var _articleInfo = _interopRequireDefault(require("../../../containers/side-panel/article-info"));
15
+ var _comment = _interopRequireDefault(require("../../../containers/side-panel/comment"));
15
16
  require("./style.css");
16
17
  function EditorHelp(_ref) {
17
18
  let {
@@ -19,32 +20,57 @@ function EditorHelp(_ref) {
19
20
  } = _ref;
20
21
  const [isShowHelpInfo, setIsShowHelpInfo] = (0, _react.useState)(false);
21
22
  const [isShowArticleInfo, setIsShowArticleInfo] = (0, _react.useState)(false);
22
- const updateArticleInfoState = (0, _react.useCallback)(() => {
23
- setIsShowArticleInfo(prevState => !prevState);
23
+ const [isShowCommentPanel, setIsShowCommentPanel] = (0, _react.useState)(false);
24
+ const closeAllPanels = (0, _react.useCallback)(() => {
24
25
  setIsShowHelpInfo(false);
25
- }, []);
26
- const updateHelpInfoState = (0, _react.useCallback)(state => {
27
- setIsShowHelpInfo(state);
28
26
  setIsShowArticleInfo(false);
27
+ setIsShowCommentPanel(false);
29
28
  const eventBus = _eventBus.default.getInstance();
30
29
  eventBus.dispatch(_eventTypes.INTERNAL_EVENTS.RESIZE_ARTICLE);
31
30
  }, []);
31
+ const updateArticleInfoState = (0, _react.useCallback)(details => {
32
+ if (details === null) {
33
+ setIsShowArticleInfo(false);
34
+ } else {
35
+ closeAllPanels();
36
+ setIsShowArticleInfo(true);
37
+ }
38
+ }, [closeAllPanels]);
39
+ const updateHelpInfoState = (0, _react.useCallback)(state => {
40
+ if (isShowHelpInfo && state === false) {
41
+ setIsShowHelpInfo(false);
42
+ } else if (!isShowHelpInfo && state !== false) {
43
+ closeAllPanels();
44
+ setIsShowHelpInfo(true);
45
+ }
46
+ }, [isShowHelpInfo, closeAllPanels]);
47
+ const updateCommentPanelState = (0, _react.useCallback)(config => {
48
+ if (config === null) {
49
+ setIsShowCommentPanel(false);
50
+ } else {
51
+ closeAllPanels();
52
+ setIsShowCommentPanel(true);
53
+ }
54
+ }, [closeAllPanels]);
32
55
  (0, _react.useEffect)(() => {
33
56
  const eventBus = _eventBus.default.getInstance();
34
57
  const unsubscribeArticleInfo = eventBus.subscribe(_eventTypes.EXTERNAL_EVENTS.ON_ARTICLE_INFO_TOGGLE, updateArticleInfoState);
35
58
  const unsubscribeHelpInfo = eventBus.subscribe(_eventTypes.EXTERNAL_EVENTS.ON_HELP_INFO_TOGGLE, updateHelpInfoState);
59
+ const unsubscribeCommentPanel = eventBus.subscribe(_eventTypes.EXTERNAL_EVENTS.ON_COMMENT_PANEL_TOGGLE, updateCommentPanelState);
36
60
  return () => {
37
61
  unsubscribeHelpInfo();
38
62
  unsubscribeArticleInfo();
63
+ unsubscribeCommentPanel();
39
64
  };
40
- // eslint-disable-next-line react-hooks/exhaustive-deps
41
- }, [updateArticleInfoState, updateHelpInfoState]);
65
+ }, [updateArticleInfoState, updateHelpInfoState, updateCommentPanelState]);
42
66
  const containerClass = (0, _classnames.default)('sf-markdown-help-wrapper', {
43
- 'active': isShowArticleInfo || isShowHelpInfo
67
+ 'active': isShowArticleInfo || isShowHelpInfo || isShowCommentPanel
44
68
  });
45
69
  return /*#__PURE__*/_react.default.createElement("div", {
46
70
  className: containerClass
47
71
  }, /*#__PURE__*/_react.default.createElement(_articleInfo.default, {
48
72
  isVisible: isShowArticleInfo
49
- }), isShowHelpInfo && /*#__PURE__*/_react.default.createElement(_hotkeysHelper.default, null));
73
+ }), isShowHelpInfo && /*#__PURE__*/_react.default.createElement(_hotkeysHelper.default, null), /*#__PURE__*/_react.default.createElement(_comment.default, {
74
+ isVisible: isShowCommentPanel
75
+ }));
50
76
  }
@@ -1,5 +1,5 @@
1
1
  .menu-group-item.sf-insert-toolbar-btn {
2
- width: 76px;
2
+ width: 80px;
3
3
  display: flex;
4
4
  align-items: center;
5
5
  justify-content: space-between;
@@ -50,7 +50,8 @@
50
50
  font-size: 14px;
51
51
  }
52
52
 
53
- .menu-group-item.sf-insert-toolbar-btn .md-arrow-down {
53
+ .menu-group-item.sf-insert-toolbar-btn .md-arrow-down,
54
+ .menu-group-item.sf-insert-toolbar-btn .md-arrow-up {
54
55
  font-size: 12px;
55
56
  margin-right: 6px;
56
57
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/seafile-editor",
3
- "version": "3.0.7",
3
+ "version": "3.0.8-alpha.1",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {