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

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,20 @@
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
+ });
19
+ };
20
+ var _default = exports.default = ArticleInfo;
@@ -0,0 +1,20 @@
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
+ });
19
+ };
20
+ var _default = exports.default = CommentPanel;
@@ -14,12 +14,14 @@ 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 STORAGE_KEY = 'panelWidth';
18
+ const SidePanel = _ref => {
18
19
  let {
19
- isVisible
20
+ isVisible,
21
+ eventType
20
22
  } = _ref;
21
23
  const [width, setWidth] = (0, _react.useState)(MIN_PANEL_WIDTH);
22
- const [fileDetails, setFileDetails] = (0, _react.useState)({});
24
+ const [config, setConfig] = (0, _react.useState)({});
23
25
  const containerWrapperStyle = (0, _react.useMemo)(() => {
24
26
  const style = {
25
27
  width,
@@ -33,48 +35,46 @@ const ArticleInfo = _ref => {
33
35
  }
34
36
  return style;
35
37
  }, [width, isVisible]);
36
- const resizeWidth = (0, _react.useCallback)(width => {
37
- if (width >= MIN_PANEL_WIDTH && width <= MAX_PANEL_WIDTH) {
38
- setWidth(width);
38
+ const resizeWidth = (0, _react.useCallback)(newWidth => {
39
+ if (newWidth >= MIN_PANEL_WIDTH && newWidth <= MAX_PANEL_WIDTH) {
40
+ setWidth(newWidth);
39
41
  }
40
42
  }, []);
41
- const resizeWidthEnd = (0, _react.useCallback)(width => {
43
+ const resizeWidthEnd = (0, _react.useCallback)(newWidth => {
42
44
  const settings = JSON.parse(window.localStorage.getItem('sf-editor') || '{}');
43
45
  window.localStorage.setItem('sf-editor', JSON.stringify((0, _objectSpread2.default)((0, _objectSpread2.default)({}, settings), {}, {
44
- panelWidth: width
46
+ [STORAGE_KEY]: newWidth
45
47
  })));
46
48
  const eventBus = _eventBus.default.getInstance();
47
49
  eventBus.dispatch(_eventTypes.INTERNAL_EVENTS.RESIZE_ARTICLE);
48
50
  }, []);
49
51
  (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));
52
+ const settings = JSON.parse(window.localStorage.getItem('sf-editor') || '{}');
53
+ const storedWidth = settings[STORAGE_KEY];
54
+ const width = Math.max(MIN_PANEL_WIDTH, Math.min(parseInt(storedWidth, 10) || MIN_PANEL_WIDTH, MAX_PANEL_WIDTH));
55
55
  setWidth(width);
56
56
  }, []);
57
- const handleFileDetails = (0, _react.useCallback)(fileDetails => {
58
- setFileDetails(fileDetails);
57
+ const handleConfig = (0, _react.useCallback)(configData => {
58
+ setConfig(configData);
59
59
  }, []);
60
60
  (0, _react.useEffect)(() => {
61
61
  const eventBus = _eventBus.default.getInstance();
62
- const unsubscribeArticleInfoDetail = eventBus.subscribe(_eventTypes.EXTERNAL_EVENTS.ON_ARTICLE_INFO_TOGGLE, handleFileDetails);
62
+ const unsubscribePanel = eventBus.subscribe(eventType, handleConfig);
63
63
  return () => {
64
- unsubscribeArticleInfoDetail();
64
+ unsubscribePanel();
65
65
  };
66
66
  // eslint-disable-next-line react-hooks/exhaustive-deps
67
67
  }, []);
68
68
  (0, _react.useEffect)(() => {
69
69
  const eventBus = _eventBus.default.getInstance();
70
70
  eventBus.dispatch(_eventTypes.INTERNAL_EVENTS.RESIZE_ARTICLE);
71
- }, [isVisible, fileDetails]);
71
+ }, [isVisible, config]);
72
72
  const {
73
- component: fileDetailsComponent,
74
- props: fileDetailsProps
75
- } = fileDetails || {};
73
+ component: panelComponent,
74
+ props: panelProps
75
+ } = config || {};
76
76
  return /*#__PURE__*/_react.default.createElement("div", {
77
- className: "sf-article-info-container-wrapper",
77
+ className: "sf-panel-wrapper",
78
78
  style: containerWrapperStyle
79
79
  }, /*#__PURE__*/_react.default.createElement(_resizeWidth.default, {
80
80
  minWidth: MIN_PANEL_WIDTH,
@@ -82,12 +82,12 @@ const ArticleInfo = _ref => {
82
82
  resizeWidth: resizeWidth,
83
83
  resizeWidthEnd: resizeWidthEnd
84
84
  }), /*#__PURE__*/_react.default.createElement("div", {
85
- className: "sf-article-info-container",
85
+ className: "sf-panel-container",
86
86
  style: {
87
87
  width
88
88
  }
89
- }, fileDetailsComponent && /*#__PURE__*/_react.default.createElement(fileDetailsComponent, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, fileDetailsProps), {}, {
89
+ }, panelComponent && panelProps && /*#__PURE__*/_react.default.createElement(panelComponent, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, panelProps), {}, {
90
90
  width
91
91
  }))));
92
92
  };
93
- var _default = exports.default = ArticleInfo;
93
+ 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.2",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {