@seafile/sdoc-editor 3.0.1 → 3.0.3

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 (37) hide show
  1. package/dist/api/seafile-api.js +20 -0
  2. package/dist/context.js +14 -0
  3. package/dist/editor/sdoc-editor.js +3 -0
  4. package/dist/editor/wiki-editor.js +4 -1
  5. package/dist/extension/commons/insert-element-dialog/index.js +26 -13
  6. package/dist/extension/constants/element-type.js +2 -1
  7. package/dist/extension/constants/font.js +1 -2
  8. package/dist/extension/constants/index.js +8 -0
  9. package/dist/extension/constants/menus-config.js +8 -3
  10. package/dist/extension/plugins/code-block/plugin.js +9 -0
  11. package/dist/extension/plugins/file-view/helpers.js +77 -0
  12. package/dist/extension/plugins/file-view/index.js +17 -0
  13. package/dist/extension/plugins/file-view/insert-view-dialog/dropdown-select/constants.js +16 -0
  14. package/dist/extension/plugins/file-view/insert-view-dialog/dropdown-select/index.css +96 -0
  15. package/dist/extension/plugins/file-view/insert-view-dialog/dropdown-select/index.js +156 -0
  16. package/dist/extension/plugins/file-view/insert-view-dialog/dropdown-select/lib.png +0 -0
  17. package/dist/extension/plugins/file-view/insert-view-dialog/dropdown-select/option.css +49 -0
  18. package/dist/extension/plugins/file-view/insert-view-dialog/dropdown-select/option.js +53 -0
  19. package/dist/extension/plugins/file-view/insert-view-dialog/dropdown-select/select-option-group.css +37 -0
  20. package/dist/extension/plugins/file-view/insert-view-dialog/dropdown-select/select-option-group.js +241 -0
  21. package/dist/extension/plugins/file-view/insert-view-dialog/index.js +232 -0
  22. package/dist/extension/plugins/file-view/insert-view-dialog/modal-portal.js +41 -0
  23. package/dist/extension/plugins/file-view/plugin.js +71 -0
  24. package/dist/extension/plugins/file-view/render-elem/index.css +53 -0
  25. package/dist/extension/plugins/file-view/render-elem/index.js +103 -0
  26. package/dist/extension/plugins/html/plugin.js +2 -3
  27. package/dist/extension/plugins/image/use-copy-image.js +2 -2
  28. package/dist/extension/plugins/index.js +9 -2
  29. package/dist/extension/plugins/list/plugin/index.js +2 -1
  30. package/dist/extension/plugins/list/transforms/normalize-list-item.js +1 -1
  31. package/dist/extension/plugins/quick-insert/render-elem.js +1 -0
  32. package/dist/extension/render/custom-element.js +6 -0
  33. package/dist/extension/toolbar/insert-element-toolbar/index.js +16 -1
  34. package/dist/extension/toolbar/side-toolbar/index.js +36 -12
  35. package/dist/extension/toolbar/side-toolbar/insert-block-menu.js +16 -2
  36. package/dist/node-id/index.js +3 -0
  37. package/package.json +2 -2
@@ -0,0 +1,232 @@
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 _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
11
+ var _react = _interopRequireWildcard(require("react"));
12
+ var _reactI18next = require("react-i18next");
13
+ var _reactstrap = require("reactstrap");
14
+ var _loading = _interopRequireDefault(require("../../../../components/loading"));
15
+ var _toast = _interopRequireDefault(require("../../../../components/toast"));
16
+ var _context = _interopRequireDefault(require("../../../../context"));
17
+ var _commonUtils = require("../../../../utils/common-utils");
18
+ var _helpers = require("../helpers");
19
+ var _dropdownSelect = _interopRequireDefault(require("./dropdown-select"));
20
+ var InsertViewDialog = function InsertViewDialog(_ref) {
21
+ var className = _ref.className,
22
+ editor = _ref.editor,
23
+ _ref$element = _ref.element,
24
+ element = _ref$element === void 0 ? {} : _ref$element,
25
+ slateNode = _ref.slateNode,
26
+ insertPosition = _ref.insertPosition,
27
+ closeDialog = _ref.closeDialog;
28
+ var _element$data = element.data,
29
+ data = _element$data === void 0 ? {} : _element$data;
30
+ var _useTranslation = (0, _reactI18next.useTranslation)('sdoc-editor'),
31
+ t = _useTranslation.t;
32
+ var _useState = (0, _react.useState)(true),
33
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
34
+ isLoading = _useState2[0],
35
+ setIsLoading = _useState2[1];
36
+ var _useState3 = (0, _react.useState)(''),
37
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
38
+ viewName = _useState4[0],
39
+ setViewName = _useState4[1];
40
+ var _useState5 = (0, _react.useState)(null),
41
+ _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
42
+ currentTypeOption = _useState6[0],
43
+ setCurrentTypeOption = _useState6[1];
44
+ var _useState7 = (0, _react.useState)(null),
45
+ _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
46
+ currentRepoOption = _useState8[0],
47
+ setCurrentRepoOption = _useState8[1];
48
+ var _useState9 = (0, _react.useState)(''),
49
+ _useState0 = (0, _slicedToArray2["default"])(_useState9, 2),
50
+ viewNameErrorMessage = _useState0[0],
51
+ setViewNameErrorMessage = _useState0[1];
52
+ var _useState1 = (0, _react.useState)(''),
53
+ _useState10 = (0, _slicedToArray2["default"])(_useState1, 2),
54
+ typeErrorMessage = _useState10[0],
55
+ setTypeErrorMessage = _useState10[1];
56
+ var _useState11 = (0, _react.useState)(''),
57
+ _useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
58
+ repoErrorMessage = _useState12[0],
59
+ setRepoErrorMessage = _useState12[1];
60
+ var _useState13 = (0, _react.useState)([]),
61
+ _useState14 = (0, _slicedToArray2["default"])(_useState13, 2),
62
+ repoOptions = _useState14[0],
63
+ setRepoOptions = _useState14[1];
64
+ var TYPE_OPERATIONS = (0, _react.useMemo)(function () {
65
+ return [{
66
+ id: 'table',
67
+ name: 'table',
68
+ value: 'table',
69
+ label: 'table'
70
+ }];
71
+ }, []);
72
+ (0, _react.useEffect)(function () {
73
+ var _element$data2 = element.data,
74
+ data = _element$data2 === void 0 ? {} : _element$data2;
75
+ setViewName(data.view_name);
76
+ var typeOption = TYPE_OPERATIONS.find(function (item) {
77
+ return item.value === data.view_type;
78
+ }) || null;
79
+ setCurrentTypeOption(typeOption);
80
+ var wikiSettings = (0, _helpers.getWikiSettings)();
81
+ var accessibleRepos = (0, _helpers.getAccessibleRepos)();
82
+ var linkedRepoIds = wikiSettings.linked_repos;
83
+ var repoList = accessibleRepos.map(function (item) {
84
+ item.sharePermission = 'rw';
85
+ return item;
86
+ });
87
+ var options = repoList.map(function (item) {
88
+ return {
89
+ id: item.repo_id,
90
+ name: item.repo_name,
91
+ value: item.repo_name,
92
+ label: item.repo_name,
93
+ permission: item.permission
94
+ };
95
+ });
96
+ var optionsMap = options.reduce(function (result, item) {
97
+ result[item.id] = item;
98
+ return result;
99
+ }, {});
100
+ var repoOptions = linkedRepoIds.map(function (id) {
101
+ return optionsMap[id];
102
+ }).filter(Boolean);
103
+ setRepoOptions(repoOptions);
104
+ setCurrentRepoOption(repoOptions.find(function (item) {
105
+ return item.id === data.linked_repo_id;
106
+ }));
107
+ setIsLoading(false);
108
+ // eslint-disable-next-line react-hooks/exhaustive-deps
109
+ }, []);
110
+ var submit = (0, _react.useCallback)(function () {
111
+ setViewNameErrorMessage('');
112
+ setTypeErrorMessage('');
113
+ setRepoErrorMessage('');
114
+ if (!viewName) {
115
+ setViewNameErrorMessage(t('The_view_name_is_required'));
116
+ return;
117
+ }
118
+ if (!currentTypeOption) {
119
+ setTypeErrorMessage(t('The_view_type_is_required'));
120
+ return;
121
+ }
122
+ if (!currentRepoOption) {
123
+ setRepoErrorMessage(t('The_linked_library_is_required'));
124
+ return;
125
+ }
126
+ var viewType = currentTypeOption.value;
127
+ var linkedRepoId = currentRepoOption.id;
128
+ var wikiId = _context["default"].getSetting('wikiId');
129
+ var data = {
130
+ wiki_id: wikiId,
131
+ view_name: viewName,
132
+ view_type: viewType,
133
+ link_repo_id: linkedRepoId
134
+ };
135
+ _context["default"].insertWikiView(data).then(function (res) {
136
+ var view = res.data.view;
137
+ var viewData = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, data), {}, {
138
+ view_id: view._id
139
+ });
140
+ (0, _helpers.insertFileView)(viewData, editor, insertPosition, slateNode);
141
+ closeDialog();
142
+ })["catch"](function (error) {
143
+ var errorMessage = (0, _commonUtils.getErrorMsg)(error);
144
+ _toast["default"].danger(errorMessage);
145
+ });
146
+ }, [viewName, currentTypeOption, currentRepoOption, t, editor, insertPosition, slateNode, closeDialog]);
147
+ var onKeyDown = (0, _react.useCallback)(function (event) {
148
+ if (event.keyCode === 13) {
149
+ event.preventDefault();
150
+ submit();
151
+ return;
152
+ }
153
+ }, [submit]);
154
+ var onValueChanged = (0, _react.useCallback)(function (event) {
155
+ var value = event.target.value;
156
+ if (value === viewName) return;
157
+ setViewName(value);
158
+ setViewNameErrorMessage('');
159
+ }, [viewName]);
160
+ var onSelectTypeOption = (0, _react.useCallback)(function (option) {
161
+ setCurrentTypeOption(option);
162
+ setTypeErrorMessage('');
163
+ }, []);
164
+ var onSelectTableOption = (0, _react.useCallback)(function (option) {
165
+ setCurrentRepoOption(option);
166
+ setRepoErrorMessage('');
167
+ }, []);
168
+ var close = (0, _react.useMemo)(function () {
169
+ return /*#__PURE__*/_react["default"].createElement("span", {
170
+ className: "sdoc-add-link-close-icon",
171
+ onClick: closeDialog
172
+ }, /*#__PURE__*/_react["default"].createElement("i", {
173
+ className: "sdocfont sdoc-sm-close",
174
+ "aria-hidden": "true"
175
+ }));
176
+ }, [closeDialog]);
177
+ return /*#__PURE__*/_react["default"].createElement(_reactstrap.Modal, {
178
+ isOpen: true,
179
+ autoFocus: false,
180
+ toggle: closeDialog,
181
+ className: className,
182
+ zIndex: 1071,
183
+ returnFocusAfterClose: false
184
+ }, /*#__PURE__*/_react["default"].createElement(_reactstrap.ModalHeader, {
185
+ close: close
186
+ }, t('Insert_file_view')), /*#__PURE__*/_react["default"].createElement(_reactstrap.ModalBody, null, isLoading && /*#__PURE__*/_react["default"].createElement(_loading["default"], null), !isLoading && repoOptions.length === 0 && /*#__PURE__*/_react["default"].createElement("div", {
187
+ className: ""
188
+ }, t('Linked_repo_tip')), !isLoading && repoOptions.length !== 0 && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", {
189
+ className: "form-group"
190
+ }, /*#__PURE__*/_react["default"].createElement(_reactstrap.Label, {
191
+ "for": "addTitle"
192
+ }, t('View_name')), /*#__PURE__*/_react["default"].createElement("input", {
193
+ onKeyDown: onKeyDown,
194
+ type: "text",
195
+ className: "form-control",
196
+ id: "addTitle",
197
+ value: data.view_name,
198
+ onChange: onValueChanged
199
+ }), viewNameErrorMessage && /*#__PURE__*/_react["default"].createElement(_reactstrap.Alert, {
200
+ color: "danger",
201
+ className: "mt-2"
202
+ }, t(viewNameErrorMessage))), /*#__PURE__*/_react["default"].createElement("div", {
203
+ className: "form-group"
204
+ }, /*#__PURE__*/_react["default"].createElement(_reactstrap.Label, null, t('View_type')), /*#__PURE__*/_react["default"].createElement(_dropdownSelect["default"], {
205
+ selectedOption: currentTypeOption,
206
+ options: TYPE_OPERATIONS,
207
+ onSelectOption: onSelectTypeOption,
208
+ isInModal: true
209
+ }), typeErrorMessage && /*#__PURE__*/_react["default"].createElement(_reactstrap.Alert, {
210
+ color: "danger",
211
+ className: "mt-2"
212
+ }, t(typeErrorMessage))), /*#__PURE__*/_react["default"].createElement("div", {
213
+ className: "form-group"
214
+ }, /*#__PURE__*/_react["default"].createElement(_reactstrap.Label, null, t('Linked_library')), /*#__PURE__*/_react["default"].createElement(_dropdownSelect["default"], {
215
+ hasIcon: true,
216
+ selectedOption: currentRepoOption,
217
+ options: repoOptions,
218
+ onSelectOption: onSelectTableOption,
219
+ isInModal: true
220
+ }), repoErrorMessage && /*#__PURE__*/_react["default"].createElement(_reactstrap.Alert, {
221
+ color: "danger",
222
+ className: "mt-2"
223
+ }, t(repoErrorMessage))))), !isLoading && repoOptions.length !== 0 && /*#__PURE__*/_react["default"].createElement(_reactstrap.ModalFooter, null, /*#__PURE__*/_react["default"].createElement(_reactstrap.Button, {
224
+ color: "secondary",
225
+ onClick: closeDialog
226
+ }, t('Cancel')), /*#__PURE__*/_react["default"].createElement(_reactstrap.Button, {
227
+ color: "primary",
228
+ disabled: false,
229
+ onClick: submit
230
+ }, t('Submit'))));
231
+ };
232
+ var _default = exports["default"] = InsertViewDialog;
@@ -0,0 +1,41 @@
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 _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/classCallCheck"));
9
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createClass"));
10
+ var _callSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/callSuper"));
11
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/inherits"));
12
+ var _react = _interopRequireDefault(require("react"));
13
+ var _reactDom = require("react-dom");
14
+ var modalRoot = document.getElementById('modal-wrapper');
15
+ var ModalPortal = /*#__PURE__*/function (_React$Component) {
16
+ function ModalPortal(props) {
17
+ var _this;
18
+ (0, _classCallCheck2["default"])(this, ModalPortal);
19
+ _this = (0, _callSuper2["default"])(this, ModalPortal, [props]);
20
+ _this.el = document.createElement('div');
21
+ return _this;
22
+ }
23
+ (0, _inherits2["default"])(ModalPortal, _React$Component);
24
+ return (0, _createClass2["default"])(ModalPortal, [{
25
+ key: "componentDidMount",
26
+ value: function componentDidMount() {
27
+ modalRoot.appendChild(this.el);
28
+ }
29
+ }, {
30
+ key: "componentWillUnmount",
31
+ value: function componentWillUnmount() {
32
+ modalRoot.removeChild(this.el);
33
+ }
34
+ }, {
35
+ key: "render",
36
+ value: function render() {
37
+ return /*#__PURE__*/(0, _reactDom.createPortal)(this.props.children, this.el);
38
+ }
39
+ }]);
40
+ }(_react["default"].Component);
41
+ var _default = exports["default"] = ModalPortal;
@@ -0,0 +1,71 @@
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 _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
9
+ var _slate = require("@seafile/slate");
10
+ var _isHotkey = _interopRequireDefault(require("is-hotkey"));
11
+ var _constants = require("../../constants");
12
+ var _core = require("../../core");
13
+ var _helpers = require("../../toolbar/side-toolbar/helpers");
14
+ var withFileView = function withFileView(editor) {
15
+ var isVoid = editor.isVoid,
16
+ onHotKeyDown = editor.onHotKeyDown,
17
+ normalizeNode = editor.normalizeNode;
18
+ var newEditor = editor;
19
+
20
+ // Make video as void node
21
+ newEditor.isVoid = function (elem) {
22
+ var type = elem.type;
23
+ if (type === _constants.FILE_VIEW) {
24
+ return true;
25
+ }
26
+ return isVoid(elem);
27
+ };
28
+ newEditor.onHotKeyDown = function (event) {
29
+ var _ref = (0, _core.getSelectedNodeEntryByType)(editor, _constants.FILE_VIEW) || [],
30
+ _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
31
+ fileNode = _ref2[0],
32
+ path = _ref2[1];
33
+ if (path) {
34
+ // Insert empty paragraph node after video when clicking 'enter' on selected video
35
+ if ((0, _isHotkey["default"])('enter', event)) {
36
+ event.preventDefault();
37
+ var emptyParagraph = (0, _core.generateEmptyElement)(_constants.PARAGRAPH);
38
+ _slate.Transforms.insertNodes(editor, emptyParagraph, {
39
+ at: _slate.Path.next(path)
40
+ });
41
+ var focusPoint = _slate.Editor.end(editor, _slate.Path.next(path));
42
+ (0, _core.focusEditor)(newEditor, focusPoint);
43
+ }
44
+ if ((0, _isHotkey["default"])('mod+c', event)) {
45
+ (0, _helpers.onCopyNode)(editor, fileNode);
46
+ }
47
+ return true;
48
+ }
49
+ return onHotKeyDown && onHotKeyDown(event);
50
+ };
51
+ newEditor.normalizeNode = function (_ref3) {
52
+ var _ref4 = (0, _slicedToArray2["default"])(_ref3, 2),
53
+ node = _ref4[0],
54
+ path = _ref4[1];
55
+ var type = (0, _core.getNodeType)(node);
56
+ if (type !== _constants.ELEMENT_TYPE.FILE_VIEW) {
57
+ return normalizeNode([node, path]);
58
+ }
59
+
60
+ // insert empty node,continue editor
61
+ var isLast = (0, _core.isLastNode)(newEditor, node);
62
+ if (isLast) {
63
+ var p = (0, _core.generateEmptyElement)(_constants.PARAGRAPH);
64
+ _slate.Transforms.insertNodes(newEditor, p, {
65
+ at: [path[0] + 1]
66
+ });
67
+ }
68
+ };
69
+ return newEditor;
70
+ };
71
+ var _default = exports["default"] = withFileView;
@@ -0,0 +1,53 @@
1
+ .sdoc-file-view-container {
2
+ position: relative;
3
+ display: flex;
4
+ flex-direction: column;
5
+ border: 2px;
6
+ border: 2px solid #eee;
7
+ border-radius: 4px;
8
+ }
9
+
10
+ .sdoc-file-view-container.is-selected {
11
+ border: 2px solid rgb(0, 123, 255);
12
+ border-radius: 4px;
13
+ }
14
+
15
+ .sdoc-file-view-container .sdoc-file-view-title {
16
+ position: absolute;
17
+ height: 44px;
18
+ line-height: 44px;
19
+ top: 0px;
20
+ left: 0px;
21
+ z-index: 10;
22
+ height: 44px;
23
+ line-height: 44px;
24
+ margin-left: 16px;
25
+ cursor: pointer;
26
+ }
27
+
28
+ .sdoc-file-view-container .sdoc-file-view-content {
29
+ position: relative;
30
+ }
31
+
32
+ .sdoc-file-view-container .iframe-skeleton {
33
+ position: absolute;
34
+ left: 0;
35
+ right: 0;
36
+ top: 0;
37
+ bottom: 0;
38
+ }
39
+
40
+ .sdoc-file-view-container .iframe-skeleton {
41
+ display: flex;
42
+ align-items: center;
43
+ justify-content: center;
44
+ }
45
+
46
+ .sdoc-file-view-container .sdoc-file-view-mask {
47
+ position: absolute;
48
+ left: 0;
49
+ right: 0;
50
+ top: 0;
51
+ bottom: 0;
52
+ background-color: transparent;
53
+ }
@@ -0,0 +1,103 @@
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.renderFileView = void 0;
9
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
11
+ var _react = _interopRequireWildcard(require("react"));
12
+ var _slateReact = require("@seafile/slate-react");
13
+ var _classnames = _interopRequireDefault(require("classnames"));
14
+ var _fileLoading = _interopRequireDefault(require("../../../../components/file-loading"));
15
+ var _toast = _interopRequireDefault(require("../../../../components/toast"));
16
+ var _context = _interopRequireDefault(require("../../../../context"));
17
+ var _commonUtils = require("../../../../utils/common-utils");
18
+ var _localStorageUtils = _interopRequireDefault(require("../../../../utils/local-storage-utils"));
19
+ var _constants = require("../../../constants");
20
+ var _helpers = require("../helpers");
21
+ require("./index.css");
22
+ var FileView = function FileView(_ref) {
23
+ var element = _ref.element,
24
+ children = _ref.children,
25
+ attributes = _ref.attributes;
26
+ var data = element.data;
27
+ var editor = (0, _slateReact.useSlateStatic)();
28
+ var isSelected = (0, _slateReact.useSelected)();
29
+ var _useState = (0, _react.useState)(true),
30
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
31
+ isLoading = _useState2[0],
32
+ setIsLoading = _useState2[1];
33
+ var _useState3 = (0, _react.useState)(true),
34
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
35
+ isShowMask = _useState4[0],
36
+ setIsShowMask = _useState4[1];
37
+ (0, _react.useEffect)(function () {
38
+ if (!isSelected) {
39
+ setIsShowMask(true);
40
+ }
41
+ }, [isSelected]);
42
+ (0, _react.useEffect)(function () {
43
+ var copyContent = _localStorageUtils["default"].getItem(_constants.RECENT_COPY_CONTENT);
44
+ var wikiId = _context["default"].getSetting('wikiId');
45
+ if (wikiId !== data.wiki_id) return;
46
+ if (!copyContent) return;
47
+ var stringContent = JSON.stringify(copyContent);
48
+ if (stringContent.indexOf(data.wiki_id) > -1 && stringContent.indexOf(data.view_id) > -1) {
49
+ _context["default"].duplicateWikiView(data.view_id).then(function (res) {
50
+ var view = res.data.view;
51
+ var newData = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, data), {}, {
52
+ view_id: view._id,
53
+ view_name: view.name
54
+ });
55
+ (0, _helpers.updateFileView)(newData, editor, element);
56
+ })["catch"](function (error) {
57
+ var errorMessage = (0, _commonUtils.getErrorMsg)(error);
58
+ _toast["default"].danger(errorMessage);
59
+ });
60
+ }
61
+ // eslint-disable-next-line react-hooks/exhaustive-deps
62
+ }, []);
63
+ var handleLoad = (0, _react.useCallback)(function () {
64
+ setIsLoading(false);
65
+ }, []);
66
+ var onClick = (0, _react.useCallback)(function () {
67
+ setIsShowMask(false);
68
+ }, []);
69
+ return /*#__PURE__*/_react["default"].createElement("div", Object.assign({
70
+ "data-id": element.id
71
+ }, attributes, {
72
+ className: (0, _classnames["default"])('sdoc-file-view-container', {
73
+ 'is-selected': isSelected
74
+ }),
75
+ contentEditable: "false",
76
+ suppressContentEditableWarning: true
77
+ }), /*#__PURE__*/_react["default"].createElement("div", {
78
+ className: "sdoc-file-view-title"
79
+ }, data.view_name), /*#__PURE__*/_react["default"].createElement("div", {
80
+ className: "sdoc-file-view-content"
81
+ }, /*#__PURE__*/_react["default"].createElement("iframe", {
82
+ className: "sdoc-file-view-element",
83
+ title: data.view_name,
84
+ src: (0, _helpers.getFileUrl)(element),
85
+ onLoad: handleLoad,
86
+ style: {
87
+ width: '100%',
88
+ height: '100%',
89
+ border: 'none',
90
+ opacity: isLoading ? 0 : 1,
91
+ transition: 'opacity 0.3s ease-in-out',
92
+ minHeight: '370px'
93
+ }
94
+ }), isLoading && /*#__PURE__*/_react["default"].createElement("div", {
95
+ className: "iframe-skeleton"
96
+ }, /*#__PURE__*/_react["default"].createElement(_fileLoading["default"], null)), !isLoading && isShowMask && /*#__PURE__*/_react["default"].createElement("div", {
97
+ className: "sdoc-file-view-mask",
98
+ onClick: onClick
99
+ })), children);
100
+ };
101
+ var renderFileView = exports.renderFileView = function renderFileView(props) {
102
+ return /*#__PURE__*/_react["default"].createElement(FileView, props);
103
+ };
@@ -8,7 +8,6 @@ exports["default"] = void 0;
8
8
  var _slugid = _interopRequireDefault(require("slugid"));
9
9
  var _localStorageUtils = _interopRequireDefault(require("../../../utils/local-storage-utils"));
10
10
  var _constants = require("../../constants");
11
- var _font = require("../../constants/font");
12
11
  var _core = require("../../core");
13
12
  var _helper = require("./helper");
14
13
  var withHtml = function withHtml(editor) {
@@ -39,11 +38,11 @@ var withHtml = function withHtml(editor) {
39
38
  var htmlContent = data.getData('text/html') || '';
40
39
  if (htmlContent) {
41
40
  var content = (0, _helper.deserializeHtml)(htmlContent);
42
- _localStorageUtils["default"].setItem(_font.RECENT_PASTE_HTML_CONTENT, htmlContent);
41
+ _localStorageUtils["default"].setItem(_constants.RECENT_COPY_CONTENT, htmlContent);
43
42
  editor.insertFragment(content);
44
43
  return;
45
44
  }
46
- _localStorageUtils["default"].setItem(_font.RECENT_PASTE_HTML_CONTENT, data);
45
+ _localStorageUtils["default"].setItem(_constants.RECENT_COPY_CONTENT, data);
47
46
  insertData(data);
48
47
  }
49
48
  };
@@ -14,7 +14,7 @@ var _slate = require("@seafile/slate");
14
14
  var _slateReact = require("@seafile/slate-react");
15
15
  var _context3 = _interopRequireDefault(require("../../../context"));
16
16
  var _localStorageUtils = _interopRequireDefault(require("../../../utils/local-storage-utils"));
17
- var _font = require("../../constants/font");
17
+ var _constants = require("../../constants");
18
18
  var _helpers = require("./helpers");
19
19
  var updateImageNode = /*#__PURE__*/function () {
20
20
  var _ref = (0, _asyncToGenerator2["default"])(/*#__PURE__*/(0, _regenerator2["default"])().m(function _callee(editor, element, newUrl) {
@@ -70,7 +70,7 @@ var useCopyImage = function useCopyImage(_ref2) {
70
70
 
71
71
  // not md convert to sdoc
72
72
  if (url.indexOf('/file/images/auto-upload/') < 0) {
73
- var cacheContent = _localStorageUtils["default"].getItem(_font.RECENT_PASTE_HTML_CONTENT);
73
+ var cacheContent = _localStorageUtils["default"].getItem(_constants.RECENT_COPY_CONTENT);
74
74
  // sync content from another user's copy
75
75
  if (!cacheContent || JSON.stringify(cacheContent).indexOf(url) === -1) return;
76
76
  }
@@ -35,6 +35,12 @@ Object.defineProperty(exports, "FileLinkPlugin", {
35
35
  return _fileLink["default"];
36
36
  }
37
37
  });
38
+ Object.defineProperty(exports, "FileViewPlugin", {
39
+ enumerable: true,
40
+ get: function get() {
41
+ return _fileView["default"];
42
+ }
43
+ });
38
44
  Object.defineProperty(exports, "FontPlugin", {
39
45
  enumerable: true,
40
46
  get: function get() {
@@ -161,6 +167,7 @@ var _callout = _interopRequireDefault(require("./callout"));
161
167
  var _checkList = _interopRequireDefault(require("./check-list"));
162
168
  var _codeBlock = _interopRequireDefault(require("./code-block"));
163
169
  var _fileLink = _interopRequireDefault(require("./file-link"));
170
+ var _fileView = _interopRequireDefault(require("./file-view"));
164
171
  var _font = _interopRequireDefault(require("./font"));
165
172
  var _group = _interopRequireDefault(require("./group"));
166
173
  var _header = _interopRequireDefault(require("./header"));
@@ -181,7 +188,7 @@ var _textStyle = _interopRequireDefault(require("./text-style"));
181
188
  var _video = _interopRequireDefault(require("./video"));
182
189
  var _whiteboard = _interopRequireDefault(require("./whiteboard"));
183
190
  var _wikiLink = _interopRequireDefault(require("./wiki-link"));
184
- var Plugins = [_markdown["default"], _html["default"], _header["default"], _link["default"], _blockquote["default"], _list["default"], _checkList["default"], _codeBlock["default"], _image["default"], _video["default"], _table["default"], _multiColumn["default"], _textStyle["default"], _textAlign["default"], _font["default"], _sdocLink["default"], _paragraph["default"], _fileLink["default"], _callout["default"], _searchReplace["default"], _quickInsert["default"], _group["default"], _whiteboard["default"]];
185
- var WikiPlugins = exports.WikiPlugins = [].concat(Plugins, [_wikiLink["default"]]);
191
+ var Plugins = [_markdown["default"], _html["default"], _header["default"], _link["default"], _blockquote["default"], _list["default"], _checkList["default"], _codeBlock["default"], _image["default"], _video["default"], _table["default"], _multiColumn["default"], _textStyle["default"], _textAlign["default"], _font["default"], _sdocLink["default"], _paragraph["default"], _fileLink["default"], _callout["default"], _searchReplace["default"], _quickInsert["default"], _group["default"], _whiteboard["default"], _fileView["default"]];
192
+ var WikiPlugins = exports.WikiPlugins = [].concat(Plugins, [_wikiLink["default"], _fileView["default"]]);
186
193
  var CommentPlugins = exports.CommentPlugins = [_markdown["default"], _html["default"], _paragraph["default"], _textStyle["default"], _list["default"], _image["default"], _link["default"], _mention["default"], _blockquote["default"]];
187
194
  var _default = exports["default"] = Plugins;
@@ -24,7 +24,8 @@ var withList = function withList(editor) {
24
24
  var insertBreak = editor.insertBreak,
25
25
  handleTab = editor.handleTab,
26
26
  insertText = editor.insertText,
27
- deleteBackward = editor.deleteBackward;
27
+ deleteBackward = editor.deleteBackward,
28
+ onHotKeyDown = editor.onHotKeyDown;
28
29
  var newEditor = editor;
29
30
  newEditor.insertBreak = function () {
30
31
  if ((0, _insertBreakList.insertBreakList)(editor)) return;
@@ -17,7 +17,7 @@ var _moveListItemUp = require("./move-list-item-up");
17
17
  var normalizeListItem = exports.normalizeListItem = function normalizeListItem(editor, _ref) {
18
18
  var listItem = _ref.listItem;
19
19
  var changed = false;
20
- var validLiChildrenTypes = [].concat((0, _toConsumableArray2["default"])((0, _queries.getListTypes)()), [_constants.PARAGRAPH, _constants.GROUP]);
20
+ var validLiChildrenTypes = [].concat((0, _toConsumableArray2["default"])((0, _queries.getListTypes)()), [_constants.PARAGRAPH, _constants.CODE_BLOCK, _constants.GROUP]);
21
21
  var _listItem = (0, _slicedToArray2["default"])(listItem, 2),
22
22
  liPath = _listItem[1];
23
23
  var liChildren = (0, _core.getChildren)(listItem);
@@ -76,6 +76,7 @@ var RenderQuickInsert = function RenderQuickInsert(_ref, editor, readonly) {
76
76
  document.addEventListener('click', handleClick);
77
77
  scrollDom.addEventListener('scroll', handleScroll);
78
78
  resizeObserver = new ResizeObserver(function (entries) {
79
+ // eslint-disable-next-line no-unused-vars
79
80
  var _iterator = (0, _createForOfIteratorHelper2["default"])(entries),
80
81
  _step;
81
82
  try {
@@ -240,6 +240,12 @@ var CustomRenderElement = function CustomRenderElement(props) {
240
240
  renderWhiteboard = _WhiteboardPlugin$ren[0];
241
241
  return renderWhiteboard((0, _objectSpread2["default"])({}, props), editor);
242
242
  }
243
+ case _elementType.FILE_VIEW:
244
+ {
245
+ var _FileViewPlugin$rende = (0, _slicedToArray2["default"])(_plugins.FileViewPlugin.renderElements, 1),
246
+ renderFileView = _FileViewPlugin$rende[0];
247
+ return renderFileView((0, _objectSpread2["default"])({}, props));
248
+ }
243
249
  default:
244
250
  {
245
251
  var _ParagraphPlugin$rend3 = (0, _slicedToArray2["default"])(_plugins.ParagraphPlugin.renderElements, 1),
@@ -112,6 +112,16 @@ var QuickInsertBlockMenu = function QuickInsertBlockMenu(_ref) {
112
112
  });
113
113
  // eslint-disable-next-line react-hooks/exhaustive-deps
114
114
  }, [insertPosition]);
115
+ var openFileViewDialog = (0, _react.useCallback)(function () {
116
+ callback && callback();
117
+ var eventBus = _eventBus["default"].getInstance();
118
+ eventBus.dispatch(_constants.INTERNAL_EVENT.INSERT_ELEMENT, {
119
+ type: _constants2.ELEMENT_TYPE.FILE_VIEW,
120
+ insertPosition: insertPosition,
121
+ slateNode: slateNode
122
+ });
123
+ // eslint-disable-next-line react-hooks/exhaustive-deps
124
+ }, [insertPosition]);
115
125
  var onInsertCodeBlock = (0, _react.useCallback)(function () {
116
126
  callback && callback();
117
127
  var newInsertPosition = slateNode.type === _constants2.ELEMENT_TYPE.LIST_ITEM ? _constants2.INSERT_POSITION.AFTER : insertPosition;
@@ -203,7 +213,12 @@ var QuickInsertBlockMenu = function QuickInsertBlockMenu(_ref) {
203
213
  (0, _helper2.insertMultiColumn)(editor, editor.selection, newInsertPosition, type);
204
214
  }, [callback, editor, insertPosition, slateNode]);
205
215
  var dropDownItems = (0, _react.useMemo)(function () {
206
- var items = (0, _objectSpread4["default"])((0, _objectSpread4["default"])((0, _defineProperty2["default"])({}, _constants2.IMAGE, /*#__PURE__*/_react["default"].createElement(_dropdownMenuItem["default"], {
216
+ var items = (0, _objectSpread4["default"])((0, _objectSpread4["default"])((0, _objectSpread4["default"])({}, editor.editorType === _constants.WIKI_EDITOR && (0, _defineProperty2["default"])({}, _constants2.FILE_VIEW, /*#__PURE__*/_react["default"].createElement(_dropdownMenuItem["default"], {
217
+ isHidden: !quickInsertMenuSearchMap[_constants2.FILE_VIEW],
218
+ key: "sdoc-insert-menu-file-view",
219
+ menuConfig: (0, _objectSpread4["default"])({}, _constants2.SIDE_INSERT_MENUS_CONFIG[_constants2.ELEMENT_TYPE.FILE_VIEW]),
220
+ onClick: openFileViewDialog
221
+ }))), {}, (0, _defineProperty2["default"])({}, _constants2.IMAGE, /*#__PURE__*/_react["default"].createElement(_dropdownMenuItem["default"], {
207
222
  isHidden: !quickInsertMenuSearchMap[_constants2.IMAGE],
208
223
  disabled: isDisableImage,
209
224
  key: "sdoc-insert-menu-image",