@seafile/sdoc-editor 0.1.78-beta1 → 0.1.78-beta2

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.
@@ -7,7 +7,8 @@ import { EXTERNAL_EVENT } from '../../constants';
7
7
  import { DateUtils } from '../../utils';
8
8
  var DocInfo = function DocInfo(_ref) {
9
9
  var t = _ref.t,
10
- isStarred = _ref.isStarred;
10
+ isStarred = _ref.isStarred,
11
+ isEditMode = _ref.isEditMode;
11
12
  var onInternalLinkClick = useCallback(function () {
12
13
  var eventBus = EventBus.getInstance();
13
14
  eventBus.dispatch(EXTERNAL_EVENT.INTERNAL_LINK_CLICK);
@@ -32,7 +33,9 @@ var DocInfo = function DocInfo(_ref) {
32
33
  className: "internal-link sdocfont sdoc-link",
33
34
  title: t('Internal_link'),
34
35
  onClick: onInternalLinkClick
35
- })), /*#__PURE__*/React.createElement(TipMessage, null));
36
+ })), /*#__PURE__*/React.createElement(TipMessage, {
37
+ isEditMode: isEditMode
38
+ }));
36
39
  if (!isSdocRevision) {
37
40
  return /*#__PURE__*/React.createElement("div", {
38
41
  className: "doc-info"
@@ -48,7 +51,9 @@ var DocInfo = function DocInfo(_ref) {
48
51
  className: "doc-name-container d-flex align-items-center justify-content-start w-100"
49
52
  }, /*#__PURE__*/React.createElement("div", {
50
53
  className: "doc-name"
51
- }, oldDocName), /*#__PURE__*/React.createElement(TipMessage, null)), /*#__PURE__*/React.createElement("div", {
54
+ }, oldDocName), /*#__PURE__*/React.createElement(TipMessage, {
55
+ isEditMode: isEditMode
56
+ })), /*#__PURE__*/React.createElement("div", {
52
57
  className: "doc-state"
53
58
  }, /*#__PURE__*/React.createElement("span", {
54
59
  className: "mr-2"
@@ -1,13 +1,16 @@
1
1
  import React from 'react';
2
+ import context from '../../../context';
2
3
  import PublishRevision from './publish-button';
3
4
  import ViewChanges from './view-changes';
4
5
  import MoreRevisionOperations from './more-revision-operations';
5
6
  var RevisionOperations = function RevisionOperations(_ref) {
6
7
  var isShowChanges = _ref.isShowChanges,
7
8
  toggleViewChanges = _ref.toggleViewChanges;
8
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(MoreRevisionOperations, null), /*#__PURE__*/React.createElement(ViewChanges, {
9
+ var isSdocRevision = context.getSetting('isSdocRevision');
10
+ var isPublished = context.getSetting('isPublished');
11
+ return /*#__PURE__*/React.createElement(React.Fragment, null, !isSdocRevision && /*#__PURE__*/React.createElement(MoreRevisionOperations, null), isSdocRevision && /*#__PURE__*/React.createElement(ViewChanges, {
9
12
  isShowChanges: isShowChanges,
10
13
  toggleViewChanges: toggleViewChanges
11
- }), /*#__PURE__*/React.createElement(PublishRevision, null));
14
+ }), isSdocRevision && !isPublished && /*#__PURE__*/React.createElement(PublishRevision, null));
12
15
  };
13
16
  export default RevisionOperations;
@@ -0,0 +1,58 @@
1
+ .sdoc-more-revision-operations-dropdown .sdoc-more-revision-operations-toggle {
2
+ width: 66px;
3
+ height: 30px;
4
+ border-radius: 15px;
5
+ background-color: #F0F0F0;
6
+ display: flex;
7
+ align-items: center;
8
+ justify-content: center;
9
+ color: #666;
10
+ }
11
+
12
+ .sdoc-more-revision-operations-dropdown .sdoc-more-revision-operations-toggle:hover {
13
+ cursor: pointer;
14
+ color: #333;
15
+ }
16
+
17
+ .sdoc-more-revision-operations-dropdown .sdoc-more-revision-operations-toggle .sdoc-revise {
18
+ margin-right: 10px;
19
+ }
20
+
21
+ .sdoc-more-revision-operations-dropdown .sdoc-more-revision-operations-toggle .sdocfont {
22
+ font-size: 14px;
23
+ }
24
+
25
+ .sdoc-more-revision-operations-dropdown .dropdown-item {
26
+ padding: 12px;
27
+ min-height: 32px;
28
+ }
29
+
30
+ .sdoc-more-revision-operations-dropdown .sdoc-more-revision-operation {
31
+ width: 373px;
32
+ display: flex;
33
+ flex-direction: column;
34
+ align-items: flex-start;
35
+ }
36
+
37
+ .sdoc-more-revision-operations-dropdown .sdoc-more-revision-operation-title .sdocfont {
38
+ font-size: 14px;
39
+ margin-right: 6px;
40
+ }
41
+
42
+ .sdoc-more-revision-operations-dropdown .sdoc-more-revision-operation-title-name {
43
+ color: #212529;
44
+ font-size: 14px;
45
+ }
46
+
47
+ .sdoc-more-revision-operations-dropdown .sdoc-more-revision-operation-describe {
48
+ padding-left: 20px;
49
+ color: #999;
50
+ font-size: 13px;
51
+ width: 100%;
52
+ white-space: break-spaces;
53
+ }
54
+
55
+ .sdoc-more-revision-operations-dropdown .dropdown-item:hover .sdoc-more-revision-operation-title-name,
56
+ .sdoc-more-revision-operations-dropdown .dropdown-item:hover .sdoc-more-revision-operation-describe {
57
+ color: #fff;
58
+ }
@@ -0,0 +1,56 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
+ import React, { useCallback, useState } from 'react';
3
+ import { withTranslation } from 'react-i18next';
4
+ import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';
5
+ import context from '../../../../context';
6
+ import toaster from '../../../toast';
7
+ import './index.css';
8
+ var MoreRevisionOperations = function MoreRevisionOperations(_ref) {
9
+ var t = _ref.t;
10
+ var repoID = context.getSetting('repoID');
11
+ var siteRoot = context.getSetting('siteRoot');
12
+ var _useState = useState(false),
13
+ _useState2 = _slicedToArray(_useState, 2),
14
+ isDropdownOpen = _useState2[0],
15
+ setIsDropdownOpen = _useState2[1];
16
+ var toggleDropdown = useCallback(function (isDropdownOpen) {
17
+ setIsDropdownOpen(!isDropdownOpen);
18
+ }, []);
19
+ var startRevise = useCallback(function () {
20
+ context.startRevise().then(function (res) {
21
+ window.location.href = "".concat(siteRoot, "lib/").concat(repoID, "/file").concat(res.data.file_path);
22
+ }).catch(function (error) {
23
+ toaster.danger(t('Error'));
24
+ });
25
+ // eslint-disable-next-line react-hooks/exhaustive-deps
26
+ }, []);
27
+ return /*#__PURE__*/React.createElement(Dropdown, {
28
+ isOpen: isDropdownOpen,
29
+ toggle: function toggle() {
30
+ return toggleDropdown(isDropdownOpen);
31
+ },
32
+ className: "sdoc-more-revision-operations-dropdown"
33
+ }, /*#__PURE__*/React.createElement(DropdownToggle, {
34
+ className: "ml-4 sdoc-more-revision-operations-toggle",
35
+ tag: "div"
36
+ }, /*#__PURE__*/React.createElement("i", {
37
+ className: "sdocfont sdoc-revise"
38
+ }), /*#__PURE__*/React.createElement("span", {
39
+ className: "sdocfont sdoc-".concat(isDropdownOpen ? 'caret-up' : 'drop-down')
40
+ })), /*#__PURE__*/React.createElement(DropdownMenu, {
41
+ right: true
42
+ }, /*#__PURE__*/React.createElement(DropdownItem, {
43
+ onClick: startRevise
44
+ }, /*#__PURE__*/React.createElement("div", {
45
+ className: "sdoc-more-revision-operation"
46
+ }, /*#__PURE__*/React.createElement("div", {
47
+ className: "sdoc-more-revision-operation-title"
48
+ }, /*#__PURE__*/React.createElement("i", {
49
+ className: "sdocfont sdoc-revise"
50
+ }), /*#__PURE__*/React.createElement("span", {
51
+ className: "sdoc-more-revision-operation-title-name"
52
+ }, t('Revise'))), /*#__PURE__*/React.createElement("div", {
53
+ className: "sdoc-more-revision-operation-describe"
54
+ }, t('Start_revise_tip'))))));
55
+ };
56
+ export default withTranslation('sdoc-editor')(MoreRevisionOperations);
@@ -5,8 +5,6 @@ import context from '../../../context';
5
5
  import toaster from '../../../components/toast';
6
6
  var PublishRevision = function PublishRevision(_ref) {
7
7
  var t = _ref.t;
8
- var isSdocRevision = context.getSetting('isSdocRevision');
9
- var isPublished = context.getSetting('isPublished');
10
8
  var repoID = context.getSetting('repoID');
11
9
  var siteRoot = context.getSetting('siteRoot');
12
10
  var publish = useCallback(function (event) {
@@ -21,8 +19,6 @@ var PublishRevision = function PublishRevision(_ref) {
21
19
 
22
20
  // eslint-disable-next-line react-hooks/exhaustive-deps
23
21
  }, []);
24
- if (!isSdocRevision) return null;
25
- if (isPublished) return null;
26
22
  return /*#__PURE__*/React.createElement(Button, {
27
23
  color: "success",
28
24
  onClick: publish,
@@ -23,7 +23,10 @@ var TipMessage = /*#__PURE__*/function (_React$Component) {
23
23
  });
24
24
  };
25
25
  _this.onDisconnect = function () {
26
- var t = _this.props.t;
26
+ var _this$props = _this.props,
27
+ t = _this$props.t,
28
+ isEditMode = _this$props.isEditMode;
29
+ if (!isEditMode) return;
27
30
  var message = t('Server_is_not_connected_Operation_will_be_sent_to_server_later');
28
31
  toaster.warning(message, {
29
32
  hasCloseButton: true,
@@ -11,32 +11,42 @@ import DiffViewer from './diff-viewer';
11
11
  import '../assets/css/simple-editor.css';
12
12
  var SimpleEditor = function SimpleEditor(_ref) {
13
13
  var isStarred = _ref.isStarred;
14
- var _useState = useState(false),
14
+ var _useState = useState(true),
15
15
  _useState2 = _slicedToArray(_useState, 2),
16
- isContextInit = _useState2[0],
17
- setContextInit = _useState2[1];
16
+ isFirstLoad = _useState2[0],
17
+ setFirstLoad = _useState2[1];
18
18
  var _useState3 = useState(false),
19
19
  _useState4 = _slicedToArray(_useState3, 2),
20
- isShowChanges = _useState4[0],
21
- setShowChanges = _useState4[1];
20
+ isContextInit = _useState4[0],
21
+ setContextInit = _useState4[1];
22
22
  var _useState5 = useState(''),
23
23
  _useState6 = _slicedToArray(_useState5, 2),
24
24
  errorMessage = _useState6[0],
25
25
  setErrorMessage = _useState6[1];
26
- var _useState7 = useState(null),
26
+ var _useState7 = useState(false),
27
27
  _useState8 = _slicedToArray(_useState7, 2),
28
- document = _useState8[0],
29
- setDocument = _useState8[1];
28
+ isShowChanges = _useState8[0],
29
+ setShowChanges = _useState8[1];
30
30
  var _useState9 = useState(null),
31
31
  _useState10 = _slicedToArray(_useState9, 2),
32
- currentContent = _useState10[0],
33
- setCurrentContent = _useState10[1];
32
+ document = _useState10[0],
33
+ setDocument = _useState10[1];
34
34
  var _useState11 = useState(null),
35
35
  _useState12 = _slicedToArray(_useState11, 2),
36
- lastContent = _useState12[0],
37
- setLastContent = _useState12[1];
36
+ currentContent = _useState12[0],
37
+ setCurrentContent = _useState12[1];
38
+ var _useState13 = useState(null),
39
+ _useState14 = _slicedToArray(_useState13, 2),
40
+ lastContent = _useState14[0],
41
+ setLastContent = _useState14[1];
38
42
  useEffect(function () {
39
43
  context.initApi();
44
+ initDocumentData(true);
45
+
46
+ // eslint-disable-next-line react-hooks/exhaustive-deps
47
+ }, []);
48
+ var initDocumentData = useCallback(function (isFirstLoad) {
49
+ setShowChanges(false);
40
50
  context.getFileContent().then(function (res) {
41
51
  var result = res.data || generateDefaultDocContent();
42
52
  if (result && !result.children) {
@@ -48,90 +58,84 @@ var SimpleEditor = function SimpleEditor(_ref) {
48
58
  }
49
59
  setDocument(result);
50
60
  setContextInit(true);
61
+ isFirstLoad && setFirstLoad(false);
51
62
  }).catch(function (error) {
52
63
  // eslint-disable-next-line
53
64
  console.log(error);
54
65
  setErrorMessage('load doc content error');
55
66
  setDocument(null);
56
67
  setContextInit(true);
68
+ isFirstLoad && setFirstLoad(false);
57
69
  });
70
+
71
+ // eslint-disable-next-line react-hooks/exhaustive-deps
58
72
  }, []);
59
- var toggleViewChanges = useCallback(function (isShowChanges) {
60
- setContextInit(false);
61
- if (isShowChanges) {
62
- context.getSeadocRevisionDownloadLinks().then(function (res) {
63
- var _res$data = res.data,
64
- fileDownloadLink = _res$data.file_download_link,
65
- originFileDownloadLink = _res$data.origin_file_download_link;
66
- fetch(fileDownloadLink).then(function (res) {
73
+ var initChangesData = useCallback(function () {
74
+ setShowChanges(true);
75
+ context.getSeadocRevisionDownloadLinks().then(function (res) {
76
+ var _res$data = res.data,
77
+ fileDownloadLink = _res$data.file_download_link,
78
+ originFileDownloadLink = _res$data.origin_file_download_link;
79
+ fetch(fileDownloadLink).then(function (res) {
80
+ return res.json();
81
+ }).then(function (revisionContent) {
82
+ fetch(originFileDownloadLink).then(function (res) {
67
83
  return res.json();
68
- }).then(function (revisionContent) {
69
- fetch(originFileDownloadLink).then(function (res) {
70
- return res.json();
71
- }).then(function (originContent) {
72
- setCurrentContent(revisionContent);
73
- setLastContent(originContent);
74
- setErrorMessage(null);
75
- setContextInit(true);
76
- setShowChanges(true);
77
- }).catch(function (error) {
78
- setErrorMessage('load doc content error');
79
- setContextInit(true);
80
- setShowChanges(true);
81
- });
84
+ }).then(function (originContent) {
85
+ setCurrentContent(revisionContent);
86
+ setLastContent(originContent);
87
+ setErrorMessage(null);
88
+ setContextInit(true);
82
89
  }).catch(function (error) {
83
90
  setErrorMessage('load doc content error');
84
91
  setContextInit(true);
85
- setShowChanges(true);
86
92
  });
87
93
  }).catch(function (error) {
88
94
  setErrorMessage('load doc content error');
89
95
  setContextInit(true);
90
- setShowChanges(true);
91
- });
92
- } else {
93
- context.getFileContent().then(function (res) {
94
- var result = res.data || generateDefaultDocContent();
95
- if (result && !result.children) {
96
- result = {
97
- version: 0,
98
- children: result.content,
99
- cursors: result.cursors || {}
100
- };
101
- }
102
- setDocument(result);
103
- setShowChanges(false);
104
- setContextInit(true);
105
- }).catch(function (error) {
106
- // eslint-disable-next-line
107
- console.log(error);
108
- setErrorMessage('load doc content error');
109
- setDocument(null);
110
- setShowChanges(false);
111
- setContextInit(true);
112
96
  });
97
+ }).catch(function (error) {
98
+ setErrorMessage('load doc content error');
99
+ setContextInit(true);
100
+ });
101
+
102
+ // eslint-disable-next-line react-hooks/exhaustive-deps
103
+ }, []);
104
+ var toggleViewChanges = useCallback(function (isShowChanges) {
105
+ setContextInit(false);
106
+ if (isShowChanges) {
107
+ initChangesData();
108
+ return;
113
109
  }
110
+ initDocumentData(false);
111
+
112
+ // eslint-disable-next-line react-hooks/exhaustive-deps
114
113
  }, []);
115
- if (!isContextInit) {
114
+ if (isFirstLoad && !isContextInit) {
116
115
  return /*#__PURE__*/React.createElement(Loading, null);
117
116
  }
118
- if (errorMessage) {
117
+ if (isFirstLoad && errorMessage) {
119
118
  return /*#__PURE__*/React.createElement("div", {
120
119
  className: "d-flex justify-content-center"
121
120
  }, errorMessage);
122
121
  }
123
122
  return /*#__PURE__*/React.createElement(Layout, null, /*#__PURE__*/React.createElement(Header, null, /*#__PURE__*/React.createElement(DocInfo, {
124
- isStarred: isStarred
123
+ isStarred: isStarred,
124
+ isEditMode: !isShowChanges
125
125
  }), /*#__PURE__*/React.createElement(DocOperations, {
126
126
  isShowChanges: isShowChanges,
127
127
  toggleViewChanges: toggleViewChanges
128
- })), /*#__PURE__*/React.createElement(Content, null, isShowChanges ? /*#__PURE__*/React.createElement(DiffViewer, {
128
+ })), /*#__PURE__*/React.createElement(Content, null, !isContextInit && /*#__PURE__*/React.createElement("div", {
129
+ className: "w-100 h-100 d-flex align-items-center justify-content-center"
130
+ }, /*#__PURE__*/React.createElement(Loading, null)), !isContextInit && errorMessage && /*#__PURE__*/React.createElement("div", {
131
+ className: "w-100 h-100 d-flex justify-content-center align-items-center"
132
+ }, errorMessage), isContextInit && /*#__PURE__*/React.createElement(React.Fragment, null, isShowChanges ? /*#__PURE__*/React.createElement(DiffViewer, {
129
133
  currentContent: currentContent,
130
134
  lastContent: lastContent
131
135
  }) : /*#__PURE__*/React.createElement(SDocEditor, {
132
136
  config: context.getEditorConfig(),
133
137
  document: document,
134
138
  isOpenSocket: context.getSetting('isOpenSocket')
135
- })));
139
+ }))));
136
140
  };
137
141
  export default SimpleEditor;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "0.1.78beta1",
3
+ "version": "0.1.78beta2",
4
4
  "private": false,
5
5
  "description": "This is a sdoc editor",
6
6
  "main": "dist/index.js",
@@ -258,5 +258,6 @@
258
258
  "Revision": "Revision",
259
259
  "Error": "Error",
260
260
  "Start_revise": "Start revise",
261
- "Failed_to_execute_operation_on_server": "Failed to execute operation on server"
261
+ "Failed_to_execute_operation_on_server": "Failed to execute operation on server",
262
+ "Start_revise_tip": "Create a temporary document and modify on it, merge it back after reviewing changes"
262
263
  }
@@ -258,5 +258,6 @@
258
258
  "Revision": "修订",
259
259
  "Error": "错误",
260
260
  "Start_revise": "开始修订",
261
- "Failed_to_execute_operation_on_server": "无法在服务器上执行操作"
261
+ "Failed_to_execute_operation_on_server": "无法在服务器上执行操作",
262
+ "Start_revise_tip": "Create a temporary document and modify on it, merge it back after reviewing changes"
262
263
  }
@@ -1,60 +0,0 @@
1
- import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
2
- import _createClass from "@babel/runtime/helpers/esm/createClass";
3
- import _assertThisInitialized from "@babel/runtime/helpers/esm/assertThisInitialized";
4
- import _inherits from "@babel/runtime/helpers/esm/inherits";
5
- import _createSuper from "@babel/runtime/helpers/esm/createSuper";
6
- import React, { Component, useCallback, useState } from 'react';
7
- import { withTranslation } from 'react-i18next';
8
- import { UncontrolledPopover } from 'reactstrap';
9
- var MoreRevisionOperations = /*#__PURE__*/function (_Component) {
10
- _inherits(MoreRevisionOperations, _Component);
11
- var _super = _createSuper(MoreRevisionOperations);
12
- function MoreRevisionOperations(props) {
13
- var _this;
14
- _classCallCheck(this, MoreRevisionOperations);
15
- _this = _super.call(this, props);
16
- _this.setRef = function (ref) {
17
- console.log('click');
18
- var that = _assertThisInitialized(_this);
19
- if (!ref) return;
20
- var toggle = ref.toggle;
21
- ref.toggle = function (c) {
22
- console.log(c);
23
- toggle && toggle();
24
- that.setState({
25
- isShowMenu: !that.state.isShowMenu
26
- });
27
- };
28
- };
29
- _this.state = {
30
- isShowMenu: false
31
- };
32
- _this.id = 'sdoc-revision-more-operations';
33
- return _this;
34
- }
35
- _createClass(MoreRevisionOperations, [{
36
- key: "render",
37
- value: function render() {
38
- var isShowMenu = this.state.isShowMenu;
39
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
40
- id: this.id,
41
- className: ""
42
- }, /*#__PURE__*/React.createElement("i", {
43
- className: "mr-2 sdocfont sdoc-revise"
44
- }), /*#__PURE__*/React.createElement("span", {
45
- className: "sdocfont sdoc-".concat(isShowMenu ? 'caret-up' : 'drop-down')
46
- })), /*#__PURE__*/React.createElement(UncontrolledPopover, {
47
- target: this.id,
48
- className: "sdoc-common-menu-popover",
49
- trigger: "legacy",
50
- placement: "bottom-start",
51
- hideArrow: true,
52
- ref: this.setRef
53
- }, /*#__PURE__*/React.createElement("div", {
54
- className: "sdoc-common-menu-popover-container"
55
- }, "123")));
56
- }
57
- }]);
58
- return MoreRevisionOperations;
59
- }(Component);
60
- export default withTranslation('sdoc-editor')(MoreRevisionOperations);