@seafile/comment-editor 0.0.1-alpha.0 → 0.0.1-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.
- package/README.md +2 -4
- package/dist/basic-sdk/assets/css/layout.css +2 -2
- package/dist/basic-sdk/assets/css/sdoc-comment-editor-plugin.css +4 -4
- package/dist/basic-sdk/comment/components/comment-all-participants/index.css +8 -8
- package/dist/basic-sdk/comment/components/comment-editor.js +123 -7
- package/dist/basic-sdk/comment/components/comment-item-collapse-wrapper.js +2 -2
- package/dist/basic-sdk/comment/components/comment-item-content.js +11 -13
- package/dist/basic-sdk/comment/components/comment-item-wrapper.js +32 -36
- package/dist/basic-sdk/comment/components/comment-list.css +4 -4
- package/dist/basic-sdk/comment/components/comment-participants-editor/index.js +2 -2
- package/dist/basic-sdk/comment/components/global-comment/global-comment-body-header.js +5 -4
- package/dist/basic-sdk/comment/components/global-comment/global-comment-header.js +11 -4
- package/dist/basic-sdk/comment/components/global-comment/index.css +56 -54
- package/dist/basic-sdk/comment/components/global-comment/index.js +41 -36
- package/dist/basic-sdk/comment/hooks/comment-hooks/use-comment-mount.js +3 -4
- package/dist/basic-sdk/comment/hooks/notification-hooks/use-notification-mount.js +2 -6
- package/dist/basic-sdk/comment/index.js +2 -48
- package/dist/basic-sdk/constants/index.js +1 -2
- package/dist/basic-sdk/context.js +8 -8
- package/dist/basic-sdk/extension/plugins/link/menu/index.js +1 -1
- package/dist/basic-sdk/extension/plugins/mention/render-elem/participant-popover.js +3 -6
- package/dist/basic-sdk/extension/render/render-comment-editor-element.js +1 -1
- package/dist/basic-sdk/extension/toolbar/comment-editor-toolbar/index.js +3 -3
- package/dist/basic-sdk/extension/toolbar/comment-editor-toolbar/post-comment/index.js +2 -2
- package/dist/basic-sdk/hooks/use-comment.js +218 -0
- package/dist/basic-sdk/index.js +12 -32
- package/dist/basic-sdk/{right-panel → layout/comment-layout}/index.css +2 -2
- package/dist/basic-sdk/{right-panel → layout/comment-layout}/index.js +29 -28
- package/dist/basic-sdk/layout/comment-layout/resize-width/index.css +38 -0
- package/dist/basic-sdk/{right-panel → layout/comment-layout}/resize-width/index.js +3 -3
- package/dist/basic-sdk/layout/index.js +0 -7
- package/dist/index.js +12 -0
- package/dist/pages/seafile-comment-editor.js +19 -52
- package/package.json +2 -1
- package/dist/basic-sdk/comment/components/global-comment/global-comment-editor.js +0 -36
- package/dist/basic-sdk/comment/provider/comment-context-provider.js +0 -37
- package/dist/basic-sdk/comment/provider/index.js +0 -23
- package/dist/basic-sdk/comment/provider/notification-context-provider.js +0 -31
- package/dist/basic-sdk/comment/provider/participants-content-provider.js +0 -96
- package/dist/basic-sdk/editor/comment-article.js +0 -104
- package/dist/basic-sdk/editor/sdoc-comment-editor.js +0 -128
- package/dist/basic-sdk/editor/sdoc-editor.js +0 -50
- package/dist/basic-sdk/hooks/use-collaborators.js +0 -62
- package/dist/basic-sdk/hooks/use-plugins.js +0 -9
- package/dist/basic-sdk/layout/article-container.js +0 -89
- package/dist/basic-sdk/right-panel/resize-width/index.css +0 -38
- package/dist/hooks/index.js +0 -12
- package/dist/hooks/use-document.js +0 -75
|
@@ -10,60 +10,27 @@ var _react = _interopRequireWildcard(require("react"));
|
|
|
10
10
|
var _reactI18next = require("react-i18next");
|
|
11
11
|
var _basicSdk = require("../basic-sdk");
|
|
12
12
|
var _errorBoundary = _interopRequireDefault(require("../components/error-boundary"));
|
|
13
|
-
var _hooks = require("../hooks");
|
|
14
|
-
require("../assets/css/simple-editor.css");
|
|
15
13
|
const SeafileCommentEditor = _ref => {
|
|
16
14
|
let {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
15
|
+
editor,
|
|
16
|
+
pluginName = '',
|
|
17
|
+
className = '',
|
|
18
|
+
pluginEventBus,
|
|
19
|
+
pluginEvent,
|
|
20
|
+
api,
|
|
21
|
+
onCloseCommentPanel
|
|
24
22
|
} = _ref;
|
|
25
|
-
_basicSdk.context.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
const editorConfig = _basicSdk.context.getEditorConfig();
|
|
38
|
-
const newEditor = (0, _basicSdk.withNodeId)((0, _basicSdk.withSocketIO)(defaultEditor, {
|
|
39
|
-
document,
|
|
40
|
-
config: editorConfig
|
|
41
|
-
}));
|
|
42
|
-
const {
|
|
43
|
-
cursors
|
|
44
|
-
} = document;
|
|
45
|
-
newEditor.cursors = cursors || {};
|
|
46
|
-
newEditor.width = 672; // default width
|
|
47
|
-
return newEditor;
|
|
48
|
-
|
|
49
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
50
|
-
}, []);
|
|
51
|
-
if (isFirstLoading) {
|
|
52
|
-
return /*#__PURE__*/_react.default.createElement(_basicSdk.Loading, null);
|
|
53
|
-
}
|
|
54
|
-
if (errorMessage) {
|
|
55
|
-
return /*#__PURE__*/_react.default.createElement("div", {
|
|
56
|
-
className: "error-page"
|
|
57
|
-
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
58
|
-
className: "error-tip"
|
|
59
|
-
}, t(errorMessage)));
|
|
60
|
-
}
|
|
61
|
-
return /*#__PURE__*/_react.default.createElement(_errorBoundary.default, null, /*#__PURE__*/_react.default.createElement(_basicSdk.CollaboratorsProvider, {
|
|
62
|
-
collaborators: collaborators
|
|
63
|
-
}, /*#__PURE__*/_react.default.createElement(_basicSdk.Provider, {
|
|
64
|
-
editor: validEditor
|
|
65
|
-
}, /*#__PURE__*/_react.default.createElement(_basicSdk.RightPanel, {
|
|
66
|
-
editor: validEditor
|
|
67
|
-
}))));
|
|
23
|
+
_basicSdk.context.init();
|
|
24
|
+
return /*#__PURE__*/_react.default.createElement(_errorBoundary.default, null, /*#__PURE__*/_react.default.createElement(_basicSdk.CommentProvider, {
|
|
25
|
+
editor: editor,
|
|
26
|
+
pluginName: pluginName,
|
|
27
|
+
className: className,
|
|
28
|
+
pluginEventBus: pluginEventBus,
|
|
29
|
+
pluginEvent: pluginEvent,
|
|
30
|
+
api: api,
|
|
31
|
+
onCloseCommentPanel: onCloseCommentPanel
|
|
32
|
+
}, /*#__PURE__*/_react.default.createElement(_basicSdk.CommentLayout, {
|
|
33
|
+
editor: editor
|
|
34
|
+
})));
|
|
68
35
|
};
|
|
69
36
|
var _default = exports.default = (0, _reactI18next.withTranslation)('sdoc-editor')(SeafileCommentEditor);
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seafile/comment-editor",
|
|
3
|
-
"version": "0.0.1-alpha.
|
|
3
|
+
"version": "0.0.1-alpha.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "This is a comment editor",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"dependencies": {
|
|
8
|
+
"@seafile/comment-editor": "^0.0.1-alpha.0",
|
|
8
9
|
"@seafile/print-js": "1.6.6",
|
|
9
10
|
"@seafile/react-image-lightbox": "4.0.2",
|
|
10
11
|
"@seafile/sdoc-editor": "2.0.60",
|
|
@@ -1,36 +0,0 @@
|
|
|
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 _classnames = _interopRequireDefault(require("classnames"));
|
|
10
|
-
var _commentEditor = _interopRequireDefault(require("../comment-editor"));
|
|
11
|
-
const GlobalCommentEditor = _ref => {
|
|
12
|
-
let {
|
|
13
|
-
isScrollDisplayed,
|
|
14
|
-
globalCommentContent,
|
|
15
|
-
type,
|
|
16
|
-
insertDocComment,
|
|
17
|
-
hiddenCommentEditor,
|
|
18
|
-
onContentChange
|
|
19
|
-
} = _ref;
|
|
20
|
-
return /*#__PURE__*/_react.default.createElement("div", {
|
|
21
|
-
className: (0, _classnames.default)('sdoc-doc-comment-editor-container', 'sdoc-comment-list-container', {
|
|
22
|
-
'scrolled': isScrollDisplayed
|
|
23
|
-
})
|
|
24
|
-
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
25
|
-
className: "sdoc-doc-comment-editor-content"
|
|
26
|
-
}, /*#__PURE__*/_react.default.createElement(_commentEditor.default, {
|
|
27
|
-
type: type,
|
|
28
|
-
className: "sdoc-doc-comment-editor",
|
|
29
|
-
commentContent: globalCommentContent,
|
|
30
|
-
hiddenUserInfo: true,
|
|
31
|
-
insertContent: insertDocComment,
|
|
32
|
-
hiddenComment: hiddenCommentEditor,
|
|
33
|
-
onContentChange: onContentChange
|
|
34
|
-
})));
|
|
35
|
-
};
|
|
36
|
-
var _default = exports.default = GlobalCommentEditor;
|
|
@@ -1,37 +0,0 @@
|
|
|
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 _constants = require("../../constants");
|
|
11
|
-
var _eventBus = _interopRequireDefault(require("../../utils/event-bus"));
|
|
12
|
-
var _useCommentContext = require("../hooks/comment-hooks/use-comment-context");
|
|
13
|
-
var _useCommentMount = require("../hooks/comment-hooks/use-comment-mount");
|
|
14
|
-
var _commentReducer = require("../reducer/comment-reducer");
|
|
15
|
-
const CommentContextProvider = _ref => {
|
|
16
|
-
let {
|
|
17
|
-
children,
|
|
18
|
-
editor
|
|
19
|
-
} = _ref;
|
|
20
|
-
const [commentsInfo, dispatch] = (0, _react.useReducer)(_commentReducer.commentReducer, _commentReducer.initCommentsInfo);
|
|
21
|
-
(0, _useCommentMount.useCommentsMount)(dispatch);
|
|
22
|
-
(0, _react.useEffect)(() => {
|
|
23
|
-
if (Object.keys(commentsInfo.element_comments_map).length) {
|
|
24
|
-
editor.element_comments_map = commentsInfo.element_comments_map;
|
|
25
|
-
const eventBus = _eventBus.default.getInstance();
|
|
26
|
-
eventBus.dispatch(_constants.INTERNAL_EVENT.RELOAD_COMMENT);
|
|
27
|
-
}
|
|
28
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
29
|
-
}, [commentsInfo.element_comments_map]);
|
|
30
|
-
return /*#__PURE__*/_react.default.createElement(_useCommentContext.CommentContext.Provider, {
|
|
31
|
-
value: {
|
|
32
|
-
commentsInfo,
|
|
33
|
-
dispatch
|
|
34
|
-
}
|
|
35
|
-
}, children);
|
|
36
|
-
};
|
|
37
|
-
var _default = exports.default = CommentContextProvider;
|
|
@@ -1,23 +0,0 @@
|
|
|
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 _commentContextProvider = _interopRequireDefault(require("./comment-context-provider"));
|
|
10
|
-
var _notificationContextProvider = _interopRequireDefault(require("./notification-context-provider"));
|
|
11
|
-
var _participantsContentProvider = _interopRequireDefault(require("./participants-content-provider"));
|
|
12
|
-
const Provider = _ref => {
|
|
13
|
-
let {
|
|
14
|
-
children,
|
|
15
|
-
editor
|
|
16
|
-
} = _ref;
|
|
17
|
-
return /*#__PURE__*/_react.default.createElement(_notificationContextProvider.default, {
|
|
18
|
-
editor: editor
|
|
19
|
-
}, /*#__PURE__*/_react.default.createElement(_commentContextProvider.default, {
|
|
20
|
-
editor: editor
|
|
21
|
-
}, /*#__PURE__*/_react.default.createElement(_participantsContentProvider.default, null, children)));
|
|
22
|
-
};
|
|
23
|
-
var _default = exports.default = Provider;
|
|
@@ -1,31 +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 = void 0;
|
|
8
|
-
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
-
var _notificationHooks = require("../hooks/notification-hooks");
|
|
10
|
-
var _notificationReducer = require("../reducer/notification-reducer");
|
|
11
|
-
const NotificationContextProvider = _ref => {
|
|
12
|
-
let {
|
|
13
|
-
children,
|
|
14
|
-
editor
|
|
15
|
-
} = _ref;
|
|
16
|
-
const [notificationsInfo, dispatch] = (0, _react.useReducer)(_notificationReducer.notificationReducer, _notificationReducer.initNotificationsInfo);
|
|
17
|
-
(0, _notificationHooks.useNotificationsMount)(dispatch);
|
|
18
|
-
(0, _react.useEffect)(() => {
|
|
19
|
-
editor.notifications_map = {
|
|
20
|
-
...notificationsInfo.notifications_map
|
|
21
|
-
};
|
|
22
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
23
|
-
}, [notificationsInfo]);
|
|
24
|
-
return /*#__PURE__*/_react.default.createElement(_notificationHooks.NotificationContext.Provider, {
|
|
25
|
-
value: {
|
|
26
|
-
notificationsInfo,
|
|
27
|
-
dispatch
|
|
28
|
-
}
|
|
29
|
-
}, children);
|
|
30
|
-
};
|
|
31
|
-
var _default = exports.default = NotificationContextProvider;
|
|
@@ -1,96 +0,0 @@
|
|
|
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 _reactI18next = require("react-i18next");
|
|
11
|
-
var _toast = _interopRequireDefault(require("../../components/toast"));
|
|
12
|
-
var _constants = require("../../constants");
|
|
13
|
-
var _context = _interopRequireDefault(require("../../context"));
|
|
14
|
-
var _model = require("../../model");
|
|
15
|
-
var _commonUtils = require("../../utils/common-utils");
|
|
16
|
-
var _eventBus = _interopRequireDefault(require("../../utils/event-bus"));
|
|
17
|
-
var _useParticipants = require("../hooks/use-participants");
|
|
18
|
-
const ParticipantsProvider = _ref => {
|
|
19
|
-
let {
|
|
20
|
-
children
|
|
21
|
-
} = _ref;
|
|
22
|
-
const isSdocRevision = _context.default.getSetting('isSdocRevision');
|
|
23
|
-
const isPublished = _context.default.getSetting('isPublished');
|
|
24
|
-
const [participants, setParticipants] = (0, _react.useState)([]);
|
|
25
|
-
const {
|
|
26
|
-
t
|
|
27
|
-
} = (0, _reactI18next.useTranslation)('sdoc-editor');
|
|
28
|
-
const updateLocalParticipants = (0, _react.useCallback)(function () {
|
|
29
|
-
let added = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
30
|
-
if (!Array.isArray(added) || added.length === 0) return;
|
|
31
|
-
let newParticipants = participants.slice(0);
|
|
32
|
-
added.forEach(participant => {
|
|
33
|
-
const newParticipant = new _model.User(participant);
|
|
34
|
-
if (!newParticipants.find(item => item.username === newParticipant.username)) {
|
|
35
|
-
newParticipants.push(newParticipant);
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
setParticipants(newParticipants);
|
|
39
|
-
}, [participants]);
|
|
40
|
-
const addParticipants = (0, _react.useCallback)(otherEmail => {
|
|
41
|
-
if (participants.find(participant => participant.username === otherEmail)) return;
|
|
42
|
-
_context.default.addParticipants([otherEmail]).then(res => {
|
|
43
|
-
const {
|
|
44
|
-
success
|
|
45
|
-
} = res.data;
|
|
46
|
-
updateLocalParticipants(success);
|
|
47
|
-
}).catch(error => {
|
|
48
|
-
const errorMessage = (0, _commonUtils.getErrorMsg)(error);
|
|
49
|
-
_toast.default.danger(t(errorMessage));
|
|
50
|
-
});
|
|
51
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
52
|
-
}, [updateLocalParticipants, participants]);
|
|
53
|
-
const deleteLocalParticipant = (0, _react.useCallback)(email => {
|
|
54
|
-
if (!participants.find(participant => participant.username === email)) return;
|
|
55
|
-
let newParticipants = participants.slice(0);
|
|
56
|
-
newParticipants = newParticipants.filter(participant => participant.username !== email);
|
|
57
|
-
setParticipants(newParticipants);
|
|
58
|
-
}, [participants]);
|
|
59
|
-
const deleteParticipant = (0, _react.useCallback)(email => {
|
|
60
|
-
if (!participants.find(participant => participant.username === email)) return;
|
|
61
|
-
_context.default.deleteParticipants(email).then(res => {
|
|
62
|
-
let newParticipants = participants.slice(0);
|
|
63
|
-
newParticipants = newParticipants.filter(participant => participant.username !== email);
|
|
64
|
-
setParticipants(newParticipants);
|
|
65
|
-
}).catch(error => {
|
|
66
|
-
const errorMessage = (0, _commonUtils.getErrorMsg)(error);
|
|
67
|
-
_toast.default.danger(t(errorMessage));
|
|
68
|
-
});
|
|
69
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
70
|
-
}, [participants]);
|
|
71
|
-
(0, _react.useEffect)(() => {
|
|
72
|
-
if (isSdocRevision && isPublished) return;
|
|
73
|
-
_context.default.listParticipants().then(res => {
|
|
74
|
-
const participants = res.data.participant_list;
|
|
75
|
-
updateLocalParticipants(participants);
|
|
76
|
-
}).catch(error => {});
|
|
77
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
78
|
-
}, []);
|
|
79
|
-
(0, _react.useEffect)(() => {
|
|
80
|
-
const eventBus = _eventBus.default.getInstance();
|
|
81
|
-
const unsubscribeParticipantAdded = eventBus.subscribe(_constants.INTERNAL_EVENT.PARTICIPANT_ADDED, updateLocalParticipants);
|
|
82
|
-
const unsubscribeParticipantRemoved = eventBus.subscribe(_constants.INTERNAL_EVENT.PARTICIPANT_REMOVED, deleteLocalParticipant);
|
|
83
|
-
return () => {
|
|
84
|
-
unsubscribeParticipantAdded();
|
|
85
|
-
unsubscribeParticipantRemoved();
|
|
86
|
-
};
|
|
87
|
-
}, [updateLocalParticipants, deleteLocalParticipant]);
|
|
88
|
-
return /*#__PURE__*/_react.default.createElement(_useParticipants.ParticipantsContext.Provider, {
|
|
89
|
-
value: {
|
|
90
|
-
participants,
|
|
91
|
-
addParticipants,
|
|
92
|
-
deleteParticipant
|
|
93
|
-
}
|
|
94
|
-
}, children);
|
|
95
|
-
};
|
|
96
|
-
var _default = exports.default = ParticipantsProvider;
|
|
@@ -1,104 +0,0 @@
|
|
|
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 _slate = require("@seafile/slate");
|
|
11
|
-
var _slateReact = require("@seafile/slate-react");
|
|
12
|
-
var _isHotkey = _interopRequireDefault(require("is-hotkey"));
|
|
13
|
-
var _scrollIntoViewIfNeeded = _interopRequireDefault(require("scroll-into-view-if-needed"));
|
|
14
|
-
var _constants = require("../constants");
|
|
15
|
-
var _useCursors = require("../cursor/use-cursors");
|
|
16
|
-
var _decorates = require("../decorates");
|
|
17
|
-
var _extension = require("../extension");
|
|
18
|
-
var _constants2 = require("../extension/constants");
|
|
19
|
-
var _renderCommentEditorElement = _interopRequireDefault(require("../extension/render/render-comment-editor-element"));
|
|
20
|
-
var _eventBus = _interopRequireDefault(require("../utils/event-bus"));
|
|
21
|
-
var _eventHandler = _interopRequireDefault(require("../utils/event-handler"));
|
|
22
|
-
const CommentArticle = _ref => {
|
|
23
|
-
let {
|
|
24
|
-
editor,
|
|
25
|
-
slateValue,
|
|
26
|
-
updateSlateValue,
|
|
27
|
-
type
|
|
28
|
-
} = _ref;
|
|
29
|
-
const {
|
|
30
|
-
cursors
|
|
31
|
-
} = (0, _useCursors.useCursors)(editor);
|
|
32
|
-
const decorate = (0, _decorates.usePipDecorate)(editor);
|
|
33
|
-
// init eventHandler
|
|
34
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
35
|
-
const eventProxy = (0, _react.useMemo)(() => new _eventHandler.default(editor), []);
|
|
36
|
-
const onMouseDown = (0, _react.useCallback)(event => {
|
|
37
|
-
if (event.button === 0) {
|
|
38
|
-
// Compatible with the editor which unload table plugin
|
|
39
|
-
editor.reSetTableSelectedRange && editor.reSetTableSelectedRange();
|
|
40
|
-
const eventBus = _eventBus.default.getInstance();
|
|
41
|
-
eventBus.dispatch(_constants.INTERNAL_EVENT.CANCEL_TABLE_SELECT_RANGE);
|
|
42
|
-
}
|
|
43
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
44
|
-
}, []);
|
|
45
|
-
const handleScrollIntoView = (0, _react.useCallback)((editor, domRange) => {
|
|
46
|
-
try {
|
|
47
|
-
const {
|
|
48
|
-
selection
|
|
49
|
-
} = editor;
|
|
50
|
-
// Do not scroll into view, when focus on image
|
|
51
|
-
const [imageNodeEntry] = _slate.Editor.nodes(editor, {
|
|
52
|
-
match: n => [_constants2.IMAGE, _constants2.IMAGE_BLOCK].includes(n.type),
|
|
53
|
-
at: selection
|
|
54
|
-
});
|
|
55
|
-
if (imageNodeEntry) return;
|
|
56
|
-
const focusedNode = _slate.Node.get(editor, selection.focus.path);
|
|
57
|
-
const domNode = _slateReact.ReactEditor.toDOMNode(editor, focusedNode);
|
|
58
|
-
if (!domNode) return;
|
|
59
|
-
(0, _scrollIntoViewIfNeeded.default)(domNode, {
|
|
60
|
-
'scrollMode': 'if-needed'
|
|
61
|
-
});
|
|
62
|
-
} catch (error) {
|
|
63
|
-
//
|
|
64
|
-
}
|
|
65
|
-
}, []);
|
|
66
|
-
const onKeyDown = (0, _react.useCallback)(event => {
|
|
67
|
-
if ((0, _isHotkey.default)('enter', event)) {
|
|
68
|
-
event.preventDefault();
|
|
69
|
-
const eventBus = _eventBus.default.getInstance();
|
|
70
|
-
eventBus.dispatch(_constants.INTERNAL_EVENT.COMMENT_EDITOR_POST_COMMENT, event);
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
if ((0, _isHotkey.default)('shift+enter', event)) {
|
|
74
|
-
event.preventDefault();
|
|
75
|
-
_slate.Editor.insertBreak(editor);
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
eventProxy.onKeyDown(event);
|
|
79
|
-
}, [eventProxy, editor]);
|
|
80
|
-
return /*#__PURE__*/_react.default.createElement(_slateReact.Slate, {
|
|
81
|
-
editor: editor,
|
|
82
|
-
value: slateValue,
|
|
83
|
-
onChange: updateSlateValue
|
|
84
|
-
}, /*#__PURE__*/_react.default.createElement(_slateReact.Editable, {
|
|
85
|
-
id: "sdoc-editor",
|
|
86
|
-
scrollSelectionIntoView: handleScrollIntoView,
|
|
87
|
-
cursors: cursors,
|
|
88
|
-
renderElement: props => (0, _renderCommentEditorElement.default)({
|
|
89
|
-
...props,
|
|
90
|
-
commentType: type
|
|
91
|
-
}),
|
|
92
|
-
renderLeaf: _extension.renderLeaf,
|
|
93
|
-
onMouseDown: onMouseDown,
|
|
94
|
-
decorate: decorate,
|
|
95
|
-
onCut: eventProxy.onCut,
|
|
96
|
-
onCopy: eventProxy.onCopy,
|
|
97
|
-
onCompositionStart: eventProxy.onCompositionStart,
|
|
98
|
-
onCompositionUpdate: eventProxy.onCompositionUpdate,
|
|
99
|
-
onCompositionEnd: eventProxy.onCompositionEnd,
|
|
100
|
-
onKeyDown: onKeyDown,
|
|
101
|
-
onBeforeInput: eventProxy.onBeforeInput
|
|
102
|
-
}));
|
|
103
|
-
};
|
|
104
|
-
var _default = exports.default = CommentArticle;
|
|
@@ -1,128 +0,0 @@
|
|
|
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 _slate = require("@seafile/slate");
|
|
11
|
-
var _deepCopy = _interopRequireDefault(require("deep-copy"));
|
|
12
|
-
var _fileLoading = _interopRequireDefault(require("../components/file-loading"));
|
|
13
|
-
var _constants = require("../constants");
|
|
14
|
-
var _context = _interopRequireDefault(require("../context"));
|
|
15
|
-
var _extension = require("../extension");
|
|
16
|
-
var _core = require("../extension/core");
|
|
17
|
-
var _commentEditorToolbar = _interopRequireDefault(require("../extension/toolbar/comment-editor-toolbar"));
|
|
18
|
-
var _useCollaborators = require("../hooks/use-collaborators");
|
|
19
|
-
var _useScrollContext = require("../hooks/use-scroll-context");
|
|
20
|
-
var _layout = require("../layout");
|
|
21
|
-
var _nodeId = _interopRequireDefault(require("../node-id"));
|
|
22
|
-
var _socket = require("../socket");
|
|
23
|
-
var _commentArticle = _interopRequireDefault(require("./comment-article"));
|
|
24
|
-
const SdocCommentEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
25
|
-
let {
|
|
26
|
-
editor: propsEditor,
|
|
27
|
-
document,
|
|
28
|
-
isReloading,
|
|
29
|
-
type,
|
|
30
|
-
onSubmit,
|
|
31
|
-
submitBtnText,
|
|
32
|
-
onCancel
|
|
33
|
-
} = _ref;
|
|
34
|
-
const [slateValue, setSlateValue] = (0, _react.useState)(document.elements);
|
|
35
|
-
const commentEditorContainerRef = (0, _react.useRef)(null);
|
|
36
|
-
const validEditor = (0, _react.useMemo)(() => {
|
|
37
|
-
if (propsEditor) return propsEditor;
|
|
38
|
-
const defaultEditor = (0, _extension.createCommentEditor)();
|
|
39
|
-
const editorConfig = _context.default.getEditorConfig();
|
|
40
|
-
const newEditor = (0, _nodeId.default)((0, _socket.withSocketIO)(defaultEditor, {
|
|
41
|
-
document,
|
|
42
|
-
config: editorConfig
|
|
43
|
-
}));
|
|
44
|
-
const {
|
|
45
|
-
cursors
|
|
46
|
-
} = document;
|
|
47
|
-
newEditor.cursors = cursors || {};
|
|
48
|
-
newEditor.width = _constants.COMMENT_EDITOR_EDIT_AREA_WIDTH; // default width
|
|
49
|
-
|
|
50
|
-
return newEditor;
|
|
51
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
52
|
-
}, []);
|
|
53
|
-
|
|
54
|
-
// useMount: focus editor
|
|
55
|
-
(0, _react.useEffect)(() => {
|
|
56
|
-
const [firstNode] = validEditor.children;
|
|
57
|
-
if (firstNode) {
|
|
58
|
-
const [firstNodeFirstChild] = firstNode.children;
|
|
59
|
-
if (firstNodeFirstChild) {
|
|
60
|
-
const endOfFirstNode = _slate.Editor.end(validEditor, [0, 0]);
|
|
61
|
-
const range = {
|
|
62
|
-
anchor: endOfFirstNode,
|
|
63
|
-
focus: endOfFirstNode
|
|
64
|
-
};
|
|
65
|
-
(0, _core.focusEditor)(validEditor, range);
|
|
66
|
-
}
|
|
67
|
-
// Force refresh to fix comment list
|
|
68
|
-
setSlateValue([...validEditor.children]);
|
|
69
|
-
}
|
|
70
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
71
|
-
}, []);
|
|
72
|
-
|
|
73
|
-
// The parent component can call the method of this component through ref
|
|
74
|
-
(0, _react.useImperativeHandle)(ref, () => ({
|
|
75
|
-
setSlateValue: document => {
|
|
76
|
-
// Force update of editor's child elements
|
|
77
|
-
validEditor.children = document.elements;
|
|
78
|
-
setSlateValue([...document.elements]);
|
|
79
|
-
},
|
|
80
|
-
updateDocumentVersion: document => {
|
|
81
|
-
validEditor.updateDocumentVersion(document);
|
|
82
|
-
},
|
|
83
|
-
// get value
|
|
84
|
-
getSlateValue: () => {
|
|
85
|
-
return (0, _deepCopy.default)({
|
|
86
|
-
...document,
|
|
87
|
-
elements: slateValue
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
92
|
-
}), [document, validEditor, slateValue]);
|
|
93
|
-
if (isReloading) {
|
|
94
|
-
return /*#__PURE__*/_react.default.createElement("div", {
|
|
95
|
-
className: "h-100 w-100 d-flex align-items-center justify-content-center"
|
|
96
|
-
}, /*#__PURE__*/_react.default.createElement(_fileLoading.default, null));
|
|
97
|
-
}
|
|
98
|
-
const handleFocusEditor = e => {
|
|
99
|
-
if (e.target === commentEditorContainerRef.current) {
|
|
100
|
-
const focusPoint = _slate.Editor.end(validEditor, []);
|
|
101
|
-
(0, _core.focusEditor)(validEditor, focusPoint);
|
|
102
|
-
}
|
|
103
|
-
};
|
|
104
|
-
return /*#__PURE__*/_react.default.createElement(_layout.EditorContainer, {
|
|
105
|
-
editor: validEditor
|
|
106
|
-
}, /*#__PURE__*/_react.default.createElement(_useCollaborators.CollaboratorsProvider, null, /*#__PURE__*/_react.default.createElement("div", {
|
|
107
|
-
className: "sdoc-comment-editor-wrapper"
|
|
108
|
-
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
109
|
-
ref: commentEditorContainerRef,
|
|
110
|
-
className: "article sdoc-comment-editor",
|
|
111
|
-
onClick: handleFocusEditor
|
|
112
|
-
}, /*#__PURE__*/_react.default.createElement(_useScrollContext.ScrollContext.Provider, {
|
|
113
|
-
value: {
|
|
114
|
-
scrollRef: commentEditorContainerRef
|
|
115
|
-
}
|
|
116
|
-
}, /*#__PURE__*/_react.default.createElement(_commentArticle.default, {
|
|
117
|
-
type: type,
|
|
118
|
-
editor: validEditor,
|
|
119
|
-
slateValue: slateValue,
|
|
120
|
-
updateSlateValue: setSlateValue
|
|
121
|
-
}))), /*#__PURE__*/_react.default.createElement(_commentEditorToolbar.default, {
|
|
122
|
-
editor: validEditor,
|
|
123
|
-
onSubmit: onSubmit,
|
|
124
|
-
submitBtnText: submitBtnText,
|
|
125
|
-
onCancel: onCancel
|
|
126
|
-
}))));
|
|
127
|
-
});
|
|
128
|
-
var _default = exports.default = SdocCommentEditor;
|
|
@@ -1,50 +0,0 @@
|
|
|
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 _provider = _interopRequireDefault(require("../comment/provider"));
|
|
11
|
-
var _constants = require("../constants");
|
|
12
|
-
var _context = _interopRequireDefault(require("../context"));
|
|
13
|
-
var _extension = require("../extension");
|
|
14
|
-
var _nodeId = _interopRequireDefault(require("../node-id"));
|
|
15
|
-
var _rightPanel = _interopRequireDefault(require("../right-panel"));
|
|
16
|
-
var _socket = require("../socket");
|
|
17
|
-
const SdocEditor = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
|
|
18
|
-
let {
|
|
19
|
-
editor: propsEditor,
|
|
20
|
-
document,
|
|
21
|
-
isReloading,
|
|
22
|
-
showComment,
|
|
23
|
-
isShowHeaderToolbar = true,
|
|
24
|
-
showOutline = true
|
|
25
|
-
} = _ref;
|
|
26
|
-
const validEditor = (0, _react.useMemo)(() => {
|
|
27
|
-
if (propsEditor) return propsEditor;
|
|
28
|
-
const defaultEditor = (0, _extension.createDefaultEditor)();
|
|
29
|
-
const editorConfig = _context.default.getEditorConfig();
|
|
30
|
-
const newEditor = (0, _nodeId.default)((0, _socket.withSocketIO)(defaultEditor, {
|
|
31
|
-
document,
|
|
32
|
-
config: editorConfig
|
|
33
|
-
}));
|
|
34
|
-
const {
|
|
35
|
-
cursors
|
|
36
|
-
} = document;
|
|
37
|
-
newEditor.cursors = cursors || {};
|
|
38
|
-
newEditor.width = _constants.PAGE_EDIT_AREA_WIDTH; // default width
|
|
39
|
-
return newEditor;
|
|
40
|
-
|
|
41
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
42
|
-
}, []);
|
|
43
|
-
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_provider.default, {
|
|
44
|
-
children: _rightPanel.default,
|
|
45
|
-
editor: validEditor
|
|
46
|
-
}, /*#__PURE__*/_react.default.createElement(_rightPanel.default, {
|
|
47
|
-
editor: validEditor
|
|
48
|
-
})));
|
|
49
|
-
});
|
|
50
|
-
var _default = exports.default = SdocEditor;
|
|
@@ -1,62 +0,0 @@
|
|
|
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.useCollaborators = exports.CollaboratorsProvider = void 0;
|
|
9
|
-
var _react = _interopRequireWildcard(require("react"));
|
|
10
|
-
var _context = _interopRequireDefault(require("../context"));
|
|
11
|
-
var _model = require("../model");
|
|
12
|
-
const CollaboratorsContext = /*#__PURE__*/_react.default.createContext(null);
|
|
13
|
-
const CollaboratorsProvider = _ref => {
|
|
14
|
-
let {
|
|
15
|
-
collaborators: propsCollaborators,
|
|
16
|
-
children
|
|
17
|
-
} = _ref;
|
|
18
|
-
const isSdocRevision = _context.default.getSetting('isSdocRevision');
|
|
19
|
-
const isPublished = _context.default.getSetting('isPublished');
|
|
20
|
-
const [collaborators, setCollaborators] = (0, _react.useState)(propsCollaborators || []);
|
|
21
|
-
(0, _react.useEffect)(() => {
|
|
22
|
-
if (isSdocRevision && isPublished) return;
|
|
23
|
-
if (propsCollaborators) return;
|
|
24
|
-
_context.default.listRelatedUsers().then(res => {
|
|
25
|
-
const collaborators = [];
|
|
26
|
-
res.data.related_users.forEach(user => {
|
|
27
|
-
const collaborator = new _model.User(user);
|
|
28
|
-
collaborators.push(collaborator);
|
|
29
|
-
});
|
|
30
|
-
setCollaborators(collaborators);
|
|
31
|
-
}).catch(error => {
|
|
32
|
-
// eslint-disable-next-line
|
|
33
|
-
console.log(error);
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
37
|
-
}, []);
|
|
38
|
-
(0, _react.useEffect)(() => {
|
|
39
|
-
if (Array.isArray(propsCollaborators) && propsCollaborators.length > 0) {
|
|
40
|
-
setCollaborators(propsCollaborators);
|
|
41
|
-
}
|
|
42
|
-
}, [propsCollaborators]);
|
|
43
|
-
return /*#__PURE__*/_react.default.createElement(CollaboratorsContext.Provider, {
|
|
44
|
-
value: {
|
|
45
|
-
collaborators
|
|
46
|
-
}
|
|
47
|
-
}, children);
|
|
48
|
-
};
|
|
49
|
-
exports.CollaboratorsProvider = CollaboratorsProvider;
|
|
50
|
-
const useCollaborators = () => {
|
|
51
|
-
const context = (0, _react.useContext)(CollaboratorsContext);
|
|
52
|
-
if (!context) {
|
|
53
|
-
throw new Error('\'CollaboratorsContext\' is null');
|
|
54
|
-
}
|
|
55
|
-
const {
|
|
56
|
-
collaborators
|
|
57
|
-
} = context;
|
|
58
|
-
return {
|
|
59
|
-
collaborators
|
|
60
|
-
};
|
|
61
|
-
};
|
|
62
|
-
exports.useCollaborators = useCollaborators;
|