@seafile/seafile-sdoc-editor 2.0.0

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 (65) hide show
  1. package/dist/assets/css/plugin-editor.css +7 -0
  2. package/dist/assets/css/simple-editor.css +9 -0
  3. package/dist/assets/css/simple-viewer.css +6 -0
  4. package/dist/assets/images/content-replaced.png +0 -0
  5. package/dist/assets/images/revision-avatar.png +0 -0
  6. package/dist/assets/images/sdoc-freezed.png +0 -0
  7. package/dist/components/doc-info/index.css +102 -0
  8. package/dist/components/doc-info/index.js +122 -0
  9. package/dist/components/doc-operations/collaborators-operation/collaborators-popover.css +74 -0
  10. package/dist/components/doc-operations/collaborators-operation/collaborators-popover.js +60 -0
  11. package/dist/components/doc-operations/collaborators-operation/index.js +104 -0
  12. package/dist/components/doc-operations/index.js +47 -0
  13. package/dist/components/doc-operations/more-operations.js +167 -0
  14. package/dist/components/doc-operations/plugins-operations.js +56 -0
  15. package/dist/components/doc-operations/presentation-operation/index.js +44 -0
  16. package/dist/components/doc-operations/revision-operations/changes-count/index.css +34 -0
  17. package/dist/components/doc-operations/revision-operations/changes-count/index.js +120 -0
  18. package/dist/components/doc-operations/revision-operations/index.js +256 -0
  19. package/dist/components/doc-operations/revision-operations/more-revision-operations/index.css +53 -0
  20. package/dist/components/doc-operations/revision-operations/more-revision-operations/index.js +73 -0
  21. package/dist/components/doc-operations/revision-operations/publish-revision/index.js +28 -0
  22. package/dist/components/doc-operations/revision-operations/revisions/index.css +16 -0
  23. package/dist/components/doc-operations/revision-operations/revisions/index.js +69 -0
  24. package/dist/components/doc-operations/revision-operations/revisions/revisions-dialog/index.css +126 -0
  25. package/dist/components/doc-operations/revision-operations/revisions/revisions-dialog/index.js +265 -0
  26. package/dist/components/doc-operations/revision-operations/revisions/revisions-dialog/revision-operation/index.css +34 -0
  27. package/dist/components/doc-operations/revision-operations/revisions/revisions-dialog/revision-operation/index.js +69 -0
  28. package/dist/components/doc-operations/revision-operations/view-changes/index.css +3 -0
  29. package/dist/components/doc-operations/revision-operations/view-changes/index.js +79 -0
  30. package/dist/components/doc-operations/share-operation/index.js +29 -0
  31. package/dist/components/doc-operations/style.css +93 -0
  32. package/dist/components/draft-dropdown/index.js +83 -0
  33. package/dist/components/draft-dropdown/style.css +43 -0
  34. package/dist/components/error-boundary/error-page.css +16 -0
  35. package/dist/components/error-boundary/error-page.js +49 -0
  36. package/dist/components/error-boundary/index.js +47 -0
  37. package/dist/components/modal-header/index.css +18 -0
  38. package/dist/components/modal-header/index.js +27 -0
  39. package/dist/components/modal-portal/index.js +41 -0
  40. package/dist/components/switch/index.css +14 -0
  41. package/dist/components/switch/index.js +35 -0
  42. package/dist/components/tip-dialog/index.css +48 -0
  43. package/dist/components/tip-dialog/index.js +117 -0
  44. package/dist/components/tip-message/index.js +189 -0
  45. package/dist/components/tip-message/style.css +15 -0
  46. package/dist/constants/index.js +46 -0
  47. package/dist/hooks/index.js +12 -0
  48. package/dist/hooks/use-document.js +90 -0
  49. package/dist/index.js +75 -0
  50. package/dist/layout/content.js +35 -0
  51. package/dist/layout/header.js +35 -0
  52. package/dist/layout/index.js +24 -0
  53. package/dist/layout/layout.css +32 -0
  54. package/dist/layout/layout.js +65 -0
  55. package/dist/model/index.js +13 -0
  56. package/dist/model/revision.js +42 -0
  57. package/dist/pages/diff-viewer.js +8 -0
  58. package/dist/pages/published-revision-viewer.js +100 -0
  59. package/dist/pages/sdoc-wiki-editor.js +57 -0
  60. package/dist/pages/simple-editor.js +162 -0
  61. package/dist/pages/simple-viewer.js +120 -0
  62. package/dist/pages/wiki-viewer.js +23 -0
  63. package/dist/utils/date-utils.js +92 -0
  64. package/dist/utils/index.js +48 -0
  65. package/package.json +48 -0
@@ -0,0 +1,256 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = void 0;
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
10
+ var _react = _interopRequireWildcard(require("react"));
11
+ var _reactI18next = require("react-i18next");
12
+ var _sdocEditor = require("@seafile/sdoc-editor");
13
+ var _constants = require("../../../constants");
14
+ var _hooks = require("../../../hooks");
15
+ var _tipDialog = _interopRequireDefault(require("../../tip-dialog"));
16
+ var _changesCount = _interopRequireDefault(require("./changes-count"));
17
+ var _moreRevisionOperations = _interopRequireDefault(require("./more-revision-operations"));
18
+ var _publishRevision = _interopRequireDefault(require("./publish-revision"));
19
+ var _revisions = _interopRequireDefault(require("./revisions"));
20
+ var _viewChanges = _interopRequireDefault(require("./view-changes"));
21
+ var RevisionOperations = function RevisionOperations(_ref) {
22
+ var isShowChanges = _ref.isShowChanges,
23
+ _ref$isPublished = _ref.isPublished,
24
+ isPublished = _ref$isPublished === void 0 ? false : _ref$isPublished,
25
+ changes = _ref.changes,
26
+ handleViewChangesToggle = _ref.handleViewChangesToggle,
27
+ handleRevisionMerged = _ref.handleRevisionMerged,
28
+ handleRevisionPublished = _ref.handleRevisionPublished;
29
+ var isSdocRevision = _sdocEditor.context.getSetting('isSdocRevision');
30
+ var _useTranslation = (0, _reactI18next.useTranslation)('sdoc-editor'),
31
+ t = _useTranslation.t;
32
+ var _useState = (0, _react.useState)(false),
33
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
34
+ isShowTip = _useState2[0],
35
+ setShowTip = _useState2[1];
36
+ var _useState3 = (0, _react.useState)(''),
37
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
38
+ tipType = _useState4[0],
39
+ setTipType = _useState4[1];
40
+ var _useState5 = (0, _react.useState)(null),
41
+ _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
42
+ mergeValue = _useState6[0],
43
+ setMergeValue = _useState6[1];
44
+ var _useState7 = (0, _react.useState)(false),
45
+ _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
46
+ isLoading = _useState8[0],
47
+ setLoading = _useState8[1];
48
+ var _useDocument = (0, _hooks.useDocument)(false),
49
+ loadDocument = _useDocument.loadDocument;
50
+ (0, _react.useEffect)(function () {
51
+ if (!isSdocRevision) return;
52
+ if (isShowChanges) return;
53
+ if (isPublished) return;
54
+ var revisionPromise = loadDocument();
55
+ var baseVersionPromise = _sdocEditor.context.getRevisionBaseVersionContent();
56
+ var originVersionPromise = _sdocEditor.context.getSeadocOriginFileContent();
57
+ Promise.all([revisionPromise, baseVersionPromise, originVersionPromise]).then(function (results) {
58
+ var _results = (0, _slicedToArray2["default"])(results, 3),
59
+ revisionContent = _results[0],
60
+ baseRes = _results[1],
61
+ masterRes = _results[2];
62
+ var baseContent = JSON.parse(baseRes.data.content);
63
+ var masterContent = JSON.parse(masterRes.data.content);
64
+
65
+ // no changes
66
+ if (masterContent.version === baseContent.version) return;
67
+ setShowTip(true);
68
+ var _getRebase = (0, _sdocEditor.getRebase)(masterContent, baseContent, revisionContent),
69
+ value = _getRebase.value;
70
+ setMergeValue(value);
71
+ setTipType(_constants.TIP_TYPE.SOURCE_DOCUMENT_CHANGED);
72
+ })["catch"](function (error) {
73
+ if (typeof error === 'string') {
74
+ _sdocEditor.toaster.danger(t(error));
75
+ return;
76
+ }
77
+ _sdocEditor.toaster.danger(t('Error'));
78
+ setShowTip(false);
79
+ setTipType('');
80
+ });
81
+ // eslint-disable-next-line react-hooks/exhaustive-deps
82
+ }, []);
83
+ var onDocumentReplaced = (0, _react.useCallback)(function () {
84
+ if (isShowTip) return;
85
+ setTipType(_constants.TIP_TYPE.HAS_BEEN_REPLACED);
86
+ setShowTip(true);
87
+ }, [isShowTip]);
88
+ var hasPublishRevision = (0, _react.useCallback)(function () {
89
+ handleRevisionPublished();
90
+ _sdocEditor.toaster.success(t(_constants.TIP_CONTENT[_constants.TIP_TYPE.HAS_BEEN_PUBLISHED]));
91
+ }, [handleRevisionPublished, t]);
92
+ var onDocumentRemoved = (0, _react.useCallback)(function () {
93
+ if (isShowTip) return;
94
+ setTipType(_constants.TIP_TYPE.HAS_BEEN_REMOVED);
95
+ setShowTip(true);
96
+ }, [isShowTip]);
97
+ var onError = (0, _react.useCallback)(function () {
98
+ _sdocEditor.toaster.danger(t('Error'));
99
+
100
+ // eslint-disable-next-line react-hooks/exhaustive-deps
101
+ }, []);
102
+ (0, _react.useEffect)(function () {
103
+ var eventBus = _sdocEditor.EventBus.getInstance();
104
+ var unsubscribeMergeDocument = eventBus.subscribe(_sdocEditor.INTERNAL_EVENT.DOCUMENT_REPLACED, onDocumentReplaced);
105
+ var unsubscribeMergeDocumentError = eventBus.subscribe(_sdocEditor.INTERNAL_EVENT.DOCUMENT_REPLACED_ERROR, onError);
106
+ var unsubscribePublishDocument = eventBus.subscribe(_sdocEditor.INTERNAL_EVENT.PUBLISH_DOCUMENT, hasPublishRevision);
107
+ var unsubscribePublishDocumentError = eventBus.subscribe(_sdocEditor.INTERNAL_EVENT.PUBLISH_DOCUMENT_ERROR, onError);
108
+ var unsubscribeRemoveDocument = eventBus.subscribe(_sdocEditor.INTERNAL_EVENT.REMOVE_DOCUMENT, onDocumentRemoved);
109
+ var unsubscribeRemoveDocumentError = eventBus.subscribe(_sdocEditor.INTERNAL_EVENT.REMOVE_DOCUMENT_ERROR, onError);
110
+ return function () {
111
+ unsubscribeMergeDocument();
112
+ unsubscribeMergeDocumentError();
113
+ unsubscribePublishDocument();
114
+ unsubscribePublishDocumentError();
115
+ unsubscribeRemoveDocument();
116
+ unsubscribeRemoveDocumentError();
117
+ };
118
+
119
+ // eslint-disable-next-line react-hooks/exhaustive-deps
120
+ }, []);
121
+
122
+ // solve show change view in revision editor
123
+ var onViewChangesToggle = (0, _react.useCallback)(function (isShowChanges) {
124
+ if (isLoading) return;
125
+ setLoading(true);
126
+ if (!isPublished && isShowChanges) {
127
+ // The trick here is to send one more api request in order to use the same information box.
128
+ loadDocument().then(function (revisionContent) {
129
+ // Prevent users from switching if document contains conflicting content
130
+ if ((0, _sdocEditor.hasConflict)(revisionContent.elements)) {
131
+ setTipType(_constants.TIP_TYPE.HAS_CONFLICT_BEFORE_VIEW_CHANGES);
132
+ setShowTip(true);
133
+ } else {
134
+ handleViewChangesToggle(isShowChanges);
135
+ }
136
+ setLoading(false);
137
+ })["catch"](function (errorMessage) {
138
+ _sdocEditor.toaster.danger(t(errorMessage));
139
+ setLoading(false);
140
+ });
141
+ return;
142
+ }
143
+ handleViewChangesToggle(isShowChanges);
144
+ setLoading(false);
145
+ }, [handleViewChangesToggle, loadDocument, t, isPublished, isLoading]);
146
+
147
+ // publish revision
148
+ var publishRevision = (0, _react.useCallback)(function () {
149
+ setShowTip(true);
150
+ setTipType(_constants.TIP_TYPE.CHECKING);
151
+ var revisionPromise = loadDocument();
152
+ var baseVersionPromise = _sdocEditor.context.getRevisionBaseVersionContent();
153
+ var originVersionPromise = _sdocEditor.context.getSeadocOriginFileContent();
154
+ Promise.all([revisionPromise, baseVersionPromise, originVersionPromise]).then(function (results) {
155
+ var _results2 = (0, _slicedToArray2["default"])(results, 3),
156
+ revisionContent = _results2[0],
157
+ baseRes = _results2[1],
158
+ masterRes = _results2[2];
159
+ var baseContent = JSON.parse(baseRes.data.content);
160
+ var masterContent = JSON.parse(masterRes.data.content);
161
+ if ((0, _sdocEditor.hasConflict)(revisionContent.elements)) {
162
+ setTipType(_constants.TIP_TYPE.HAS_CONFLICT_BEFORE_PUBLISH);
163
+ return;
164
+ }
165
+ var _getRebase2 = (0, _sdocEditor.getRebase)(masterContent, baseContent, revisionContent),
166
+ canMerge = _getRebase2.canMerge,
167
+ isNeedReplaceMaster = _getRebase2.isNeedReplaceMaster,
168
+ value = _getRebase2.value;
169
+ // change to HAS_BEEN_PUBLISHED
170
+ if (canMerge && isNeedReplaceMaster) {
171
+ setTipType(_constants.TIP_TYPE.PUBLISHING);
172
+ _sdocEditor.context.publishRevision().then(function (res) {
173
+ setShowTip(false);
174
+ setTipType('');
175
+ })["catch"](function (error) {
176
+ _sdocEditor.toaster.danger(t('Error'));
177
+ });
178
+ return;
179
+ }
180
+
181
+ // change to DELETE_NO_CHANGES_REVISION
182
+ if (canMerge && !isNeedReplaceMaster) {
183
+ setTipType(_constants.TIP_TYPE.DELETE_NO_CHANGES_REVISION);
184
+ return;
185
+ }
186
+
187
+ // change to MERGE
188
+ setMergeValue(value);
189
+ setTipType(_constants.TIP_TYPE.MERGE);
190
+ })["catch"](function (error) {
191
+ if (typeof error === 'string') {
192
+ _sdocEditor.toaster.danger(t(error));
193
+ return;
194
+ }
195
+ _sdocEditor.toaster.danger(t('Error'));
196
+ });
197
+ }, [loadDocument, t]);
198
+
199
+ // confirm publish
200
+ var onSubmit = (0, _react.useCallback)(function () {
201
+ if (tipType === _constants.TIP_TYPE.HAS_BEEN_PUBLISHED) {
202
+ // nothing todo
203
+ return;
204
+ }
205
+ if (tipType === _constants.TIP_TYPE.DELETE_NO_CHANGES_REVISION) {
206
+ _sdocEditor.context.deleteSdocRevision().then(function (res) {
207
+ // update current location
208
+ var originFileURL = _sdocEditor.context.getSetting('originFileURL');
209
+ window.location.href = originFileURL;
210
+ })["catch"](function (error) {
211
+ _sdocEditor.toaster.danger(t('Error'));
212
+ });
213
+ return;
214
+ }
215
+ if (tipType === _constants.TIP_TYPE.MERGE || tipType === _constants.TIP_TYPE.SOURCE_DOCUMENT_CHANGED) {
216
+ var _context$getUserInfo = _sdocEditor.context.getUserInfo(),
217
+ username = _context$getUserInfo.username;
218
+ var doc = {
219
+ elements: mergeValue.elements,
220
+ version: mergeValue.version,
221
+ format_version: mergeValue.format_version,
222
+ last_modify_user: username
223
+ };
224
+ _sdocEditor.context.updateSdocRevision(doc).then(function (res) {
225
+ var origin_file_version = res.data.origin_file_version;
226
+ _sdocEditor.context.updateSettings({
227
+ 'originFileVersion': origin_file_version
228
+ });
229
+ handleRevisionMerged && handleRevisionMerged(mergeValue);
230
+ setShowTip(false);
231
+ })["catch"](function (error) {
232
+ _sdocEditor.toaster.danger(t('Error'));
233
+ });
234
+ return;
235
+ }
236
+
237
+ // eslint-disable-next-line react-hooks/exhaustive-deps
238
+ }, [tipType, mergeValue, document]);
239
+ var onClose = (0, _react.useCallback)(function () {
240
+ setShowTip(false);
241
+ }, []);
242
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, !isSdocRevision && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_moreRevisionOperations["default"], null), /*#__PURE__*/_react["default"].createElement(_revisions["default"], null)), isSdocRevision && isShowChanges && /*#__PURE__*/_react["default"].createElement(_changesCount["default"], {
243
+ allChanges: changes
244
+ }), isSdocRevision && /*#__PURE__*/_react["default"].createElement(_viewChanges["default"], {
245
+ isShowChanges: isShowChanges,
246
+ onViewChangesToggle: onViewChangesToggle
247
+ }), isSdocRevision && !isPublished && /*#__PURE__*/_react["default"].createElement(_publishRevision["default"], {
248
+ publishRevision: publishRevision
249
+ }), isShowTip && /*#__PURE__*/_react["default"].createElement(_tipDialog["default"], {
250
+ tipType: tipType,
251
+ onSubmit: onSubmit,
252
+ onClose: onClose,
253
+ zIndex: 1072
254
+ }));
255
+ };
256
+ var _default = exports["default"] = RevisionOperations;
@@ -0,0 +1,53 @@
1
+ .sdoc-more-revision-operations-dropdown .sdoc-more-revision-operations-toggle {
2
+ width: 66px;
3
+ height: 28px;
4
+ border-radius: 14px;
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
+ background-color: #E4E4E4;
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
+ height: 64px;
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
+ }
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = void 0;
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
10
+ var _react = _interopRequireWildcard(require("react"));
11
+ var _reactI18next = require("react-i18next");
12
+ var _reactstrap = require("reactstrap");
13
+ var _sdocEditor = require("@seafile/sdoc-editor");
14
+ var _constants = require("../../../../constants");
15
+ require("./index.css");
16
+ var MoreRevisionOperations = function MoreRevisionOperations(_ref) {
17
+ var t = _ref.t;
18
+ var id = 'sdoc_revisions';
19
+ var eventBus = _sdocEditor.EventBus.getInstance();
20
+ var _useState = (0, _react.useState)(false),
21
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
22
+ isDropdownOpen = _useState2[0],
23
+ setIsDropdownOpen = _useState2[1];
24
+ var toggleDropdown = (0, _react.useCallback)(function (isDropdownOpen) {
25
+ setIsDropdownOpen(!isDropdownOpen);
26
+ }, []);
27
+ var startRevise = (0, _react.useCallback)(function () {
28
+ _sdocEditor.context.startRevise().then(function (res) {
29
+ var repoID = _sdocEditor.context.getSetting('repoID');
30
+ var siteRoot = _sdocEditor.context.getSetting('siteRoot');
31
+ var revisionURL = "".concat(siteRoot, "lib/").concat(repoID, "/revisions/").concat(res.data.revision_id, "/");
32
+ window.open(revisionURL, '_blank');
33
+ eventBus.dispatch(_constants.NEW_REVISION);
34
+ })["catch"](function (error) {
35
+ _sdocEditor.toaster.danger(t('Error'));
36
+ });
37
+ // eslint-disable-next-line react-hooks/exhaustive-deps
38
+ }, []);
39
+ return /*#__PURE__*/_react["default"].createElement(_reactstrap.Dropdown, {
40
+ isOpen: isDropdownOpen,
41
+ toggle: function toggle() {
42
+ return toggleDropdown(isDropdownOpen);
43
+ },
44
+ className: "sdoc-more-revision-operations-dropdown"
45
+ }, /*#__PURE__*/_react["default"].createElement(_reactstrap.DropdownToggle, {
46
+ id: id,
47
+ className: "ml-4 sdoc-more-revision-operations-toggle",
48
+ tag: "div"
49
+ }, /*#__PURE__*/_react["default"].createElement("i", {
50
+ className: "sdocfont sdoc-revise"
51
+ }), /*#__PURE__*/_react["default"].createElement("span", {
52
+ className: "sdocfont sdoc-".concat(isDropdownOpen ? 'caret-up' : 'drop-down')
53
+ })), /*#__PURE__*/_react["default"].createElement(_sdocEditor.Tooltip, {
54
+ target: id
55
+ }, t('Revise')), /*#__PURE__*/_react["default"].createElement(_reactstrap.DropdownMenu, {
56
+ className: "sdoc-dropdown-menu",
57
+ end: true
58
+ }, /*#__PURE__*/_react["default"].createElement(_reactstrap.DropdownItem, {
59
+ className: "sdoc-dropdown-menu-item",
60
+ onClick: startRevise
61
+ }, /*#__PURE__*/_react["default"].createElement("div", {
62
+ className: "sdoc-more-revision-operation"
63
+ }, /*#__PURE__*/_react["default"].createElement("div", {
64
+ className: "sdoc-more-revision-operation-title"
65
+ }, /*#__PURE__*/_react["default"].createElement("i", {
66
+ className: "sdocfont sdoc-revise"
67
+ }), /*#__PURE__*/_react["default"].createElement("span", {
68
+ className: "sdoc-more-revision-operation-title-name"
69
+ }, t('Revise'))), /*#__PURE__*/_react["default"].createElement("div", {
70
+ className: "sdoc-more-revision-operation-describe"
71
+ }, t('Start_revise_tip'))))));
72
+ };
73
+ var _default = exports["default"] = (0, _reactI18next.withTranslation)('sdoc-editor')(MoreRevisionOperations);
@@ -0,0 +1,28 @@
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"] = void 0;
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ var _reactI18next = require("react-i18next");
10
+ var _reactstrap = require("reactstrap");
11
+ var PublishRevision = function PublishRevision(_ref) {
12
+ var publishRevision = _ref.publishRevision;
13
+ var _useTranslation = (0, _reactI18next.useTranslation)('sdoc-editor'),
14
+ t = _useTranslation.t;
15
+ var onPublishRevision = (0, _react.useCallback)(function (event) {
16
+ event.stopPropagation();
17
+ event.nativeEvent.stopImmediatePropagation();
18
+ publishRevision();
19
+
20
+ // eslint-disable-next-line react-hooks/exhaustive-deps
21
+ }, []);
22
+ return /*#__PURE__*/_react["default"].createElement(_reactstrap.Button, {
23
+ color: "success",
24
+ onClick: onPublishRevision,
25
+ className: "ml-4"
26
+ }, t('Publish'));
27
+ };
28
+ var _default = exports["default"] = PublishRevision;
@@ -0,0 +1,16 @@
1
+ .sdoc-revisions-count {
2
+ height: 28px;
3
+ width: fit-content;
4
+ border: 1px solid #E5E5E5;
5
+ border-radius: 3px;
6
+ line-height: 26px;
7
+ text-align: center;
8
+ padding: 0 16px;
9
+ margin-left: 1rem;
10
+ color: #666;
11
+ }
12
+
13
+ .sdoc-revisions-count:hover {
14
+ cursor: pointer;
15
+ color: #333;
16
+ }
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = void 0;
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
10
+ var _react = _interopRequireWildcard(require("react"));
11
+ var _reactI18next = require("react-i18next");
12
+ var _sdocEditor = require("@seafile/sdoc-editor");
13
+ var _constants = require("../../../../constants");
14
+ var _utils = require("../../../../utils");
15
+ var _revisionsDialog = _interopRequireDefault(require("./revisions-dialog"));
16
+ require("./index.css");
17
+ var Revisions = function Revisions() {
18
+ var eventBus = _sdocEditor.EventBus.getInstance();
19
+ var _useTranslation = (0, _reactI18next.useTranslation)('sdoc-editor'),
20
+ t = _useTranslation.t;
21
+ var _useState = (0, _react.useState)(0),
22
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
23
+ revisionsCount = _useState2[0],
24
+ setRevisionsCount = _useState2[1];
25
+ var _useState3 = (0, _react.useState)(false),
26
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
27
+ isShowRevisions = _useState4[0],
28
+ setShowRevisions = _useState4[1];
29
+ var autoIncrementRevisionsCount = (0, _react.useCallback)(function () {
30
+ setRevisionsCount(revisionsCount + 1);
31
+ }, [revisionsCount]);
32
+
33
+ // did mount
34
+ (0, _react.useEffect)(function () {
35
+ _sdocEditor.context.getSdocRevisionsCount().then(function (res) {
36
+ var count = res.data.count;
37
+ setRevisionsCount(count);
38
+ })["catch"](function (error) {
39
+ var errorMessage = (0, _utils.getErrorMsg)(error);
40
+ _sdocEditor.toaster.danger(t(errorMessage));
41
+ });
42
+
43
+ // eslint-disable-next-line react-hooks/exhaustive-deps
44
+ }, []);
45
+ (0, _react.useEffect)(function () {
46
+ var autoIncrementRevisionSubscribe = eventBus.subscribe(_constants.NEW_REVISION, autoIncrementRevisionsCount);
47
+ return function () {
48
+ autoIncrementRevisionSubscribe();
49
+ };
50
+ // eslint-disable-next-line react-hooks/exhaustive-deps
51
+ }, [autoIncrementRevisionsCount]);
52
+ var showRevisions = (0, _react.useCallback)(function () {
53
+ setShowRevisions(true);
54
+ }, []);
55
+ var closeRevisions = (0, _react.useCallback)(function () {
56
+ setShowRevisions(false);
57
+ }, []);
58
+ if (revisionsCount === 0) return null;
59
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", {
60
+ className: "sdoc-revisions-count",
61
+ onClick: showRevisions
62
+ }, revisionsCount === 1 && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, t('1_revision')), revisionsCount > 1 && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, t('x_revisions', {
63
+ count: revisionsCount
64
+ }))), isShowRevisions && /*#__PURE__*/_react["default"].createElement(_revisionsDialog["default"], {
65
+ updateRevisionsCount: setRevisionsCount,
66
+ toggle: closeRevisions
67
+ }));
68
+ };
69
+ var _default = exports["default"] = Revisions;
@@ -0,0 +1,126 @@
1
+ .revisions-dialog {
2
+ width: 700px;
3
+ max-width: 700px;
4
+ height: calc(100% - 56px);
5
+ }
6
+
7
+ .revisions-dialog .modal-content {
8
+ height: 100%;
9
+ overflow: hidden;
10
+ }
11
+
12
+ .revisions-dialog .revisions-body {
13
+ height: calc(100% - 50px);
14
+ padding: 0;
15
+ overflow: hidden;
16
+ }
17
+
18
+ .revisions-dialog .sdoc-revisions-container {
19
+ width: 100%;
20
+ height: 100%;
21
+ display: flex;
22
+ flex-direction: column;
23
+ }
24
+
25
+ .revisions-dialog .sdoc-revisions-container .sdoc-revisions-header {
26
+ height: 41px;
27
+ width: calc(100% - 32px);
28
+ border-bottom: 1px solid rgba(0, 40, 100, 0.12);
29
+ margin: 0 16px;
30
+ display: flex;
31
+ align-items: center;
32
+ justify-content: center;
33
+ }
34
+
35
+ .revisions-dialog .sdoc-revisions-container .sdoc-revisions-content {
36
+ flex: 1;
37
+ overflow-x: hidden;
38
+ overflow-y: scroll;
39
+ padding: 0 16px 16px 16px;
40
+ }
41
+
42
+ .revisions-dialog .sdoc-revisions-container .sdoc-revisions-list {
43
+ display: flex;
44
+ flex-direction: column;
45
+ align-items: center;
46
+ justify-content: center;
47
+ }
48
+
49
+ .revisions-dialog .sdoc-revisions-container.loading {
50
+ align-items: center;
51
+ justify-content: center;
52
+ }
53
+
54
+ .revisions-dialog .revisions-body .sdoc-revision {
55
+ height: 41px;
56
+ width: 100%;
57
+ display: flex;
58
+ justify-content: center;
59
+ align-items: flex-start;
60
+ border-bottom: 1px solid rgba(0, 40, 100, 0.12);
61
+ }
62
+
63
+ .revisions-dialog .revisions-body .sdoc-revision.operating {
64
+ background-color: #f5f5f5;
65
+ }
66
+
67
+ .revisions-dialog .revisions-body .sdoc-revision:hover {
68
+ cursor: pointer;
69
+ background-color: #f5f5f5;
70
+ }
71
+
72
+ .revisions-dialog .sdoc-revision-name-header,
73
+ .revisions-dialog .sdoc-revision-user-header,
74
+ .revisions-dialog .sdoc-revision-time-header {
75
+ padding-left: 9px;
76
+ color: #999;
77
+ }
78
+
79
+ .revisions-dialog .sdoc-revision .sdoc-revision-user {
80
+ height: 100%;
81
+ overflow: hidden;
82
+ display: flex;
83
+ align-items: center;
84
+ padding-left: 9px;
85
+ }
86
+
87
+ .revisions-dialog .sdoc-revision .sdoc-revision-name {
88
+ height: 100%;
89
+ overflow: hidden;
90
+ display: flex;
91
+ align-items: center;
92
+ padding-left: 9px;
93
+ }
94
+
95
+ .revisions-dialog .sdoc-revision .sdoc-revision-name-content {
96
+ max-width: 100%;
97
+ overflow: hidden;
98
+ text-overflow: ellipsis;
99
+ white-space: nowrap;
100
+ }
101
+
102
+ .revisions-dialog .sdoc-revision .sdoc-revision-time {
103
+ height: 100%;
104
+ padding-left: 9px;
105
+ overflow: hidden;
106
+ display: flex;
107
+ align-items: center;
108
+ }
109
+
110
+ .revisions-dialog .revisions-body .sdoc-revision.loading {
111
+ height: 40px;
112
+ align-items: center;
113
+ border-bottom: none;
114
+ }
115
+
116
+ .revisions-dialog .sdoc-revision.loading:hover {
117
+ background-color: unset;
118
+ }
119
+
120
+ .revisions-dialog .sdoc-revision-operations {
121
+ height: 100%;
122
+ width: 100%;
123
+ display: flex;
124
+ align-items: center;
125
+ justify-content: center;
126
+ }