@seafile/sdoc-editor 2.0.146 → 2.0.147

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.
@@ -37,6 +37,17 @@ var SDocServerApi = /*#__PURE__*/function () {
37
37
  }
38
38
  });
39
39
  }
40
+ }, {
41
+ key: "getFileContentByDocUuidAndAccessToken",
42
+ value: function getFileContentByDocUuidAndAccessToken(docUuid, access_token) {
43
+ var server = this.server;
44
+ var url = "".concat(server, "/api/v1/docs/").concat(docUuid, "/");
45
+ return _axios["default"].get(url, {
46
+ headers: {
47
+ Authorization: "Token ".concat(access_token)
48
+ }
49
+ });
50
+ }
40
51
  }, {
41
52
  key: "normalizeSdocContent",
42
53
  value: function normalizeSdocContent() {
@@ -299,6 +299,12 @@ var SeafileAPI = /*#__PURE__*/function () {
299
299
  form.append('file_uuid', docUuid);
300
300
  return this.req.post(url, form);
301
301
  }
302
+ }, {
303
+ key: "getTokenByDocUuid",
304
+ value: function getTokenByDocUuid(docUuid) {
305
+ var url = "/api/v2.1/seadoc/access-token-by-uuid/".concat(docUuid, "/");
306
+ return this.req.get(url);
307
+ }
302
308
  }]);
303
309
  }();
304
310
  var _default = exports["default"] = SeafileAPI;
@@ -76,7 +76,8 @@ var INTERNAL_EVENT = exports.INTERNAL_EVENT = {
76
76
  CREATE_WIKI_PAGE: 'create_wiki_page',
77
77
  IMAGE_COLUMN_TOGGLE: 'Image_column_toggle',
78
78
  CREATE_WHITEBOARD_FILE: 'create_whiteboard_file',
79
- GENERATE_EXDRAW_READ_ONLY_LINK: 'generate_exdraw_read_only_link'
79
+ GENERATE_EXDRAW_READ_ONLY_LINK: 'generate_exdraw_read_only_link',
80
+ TRANSFER_PREVIEW_FILE_ID: 'transfer_preview_file_id'
80
81
  };
81
82
  var PAGE_EDIT_AREA_WIDTH = exports.PAGE_EDIT_AREA_WIDTH = 672; // 672 = 794 - 2[borderLeft + borderRight] - 120[paddingLeft + paddingRight]
82
83
  var COMMENT_EDITOR_EDIT_AREA_WIDTH = exports.COMMENT_EDITOR_EDIT_AREA_WIDTH = 364;
package/dist/context.js CHANGED
@@ -129,6 +129,11 @@ var Context = /*#__PURE__*/function () {
129
129
  return res;
130
130
  });
131
131
  }
132
+ }, {
133
+ key: "getFileContentByDocUuidAndAccessToken",
134
+ value: function getFileContentByDocUuidAndAccessToken(docUuid, access_token) {
135
+ return this.sdocServerApi.getFileContentByDocUuidAndAccessToken(docUuid, access_token);
136
+ }
132
137
  }, {
133
138
  key: "normalizeSdocContent",
134
139
  value: function normalizeSdocContent() {
@@ -374,6 +379,11 @@ var Context = /*#__PURE__*/function () {
374
379
  if (!this.config) return;
375
380
  this.config['docUuid'] = docUuid;
376
381
  }
382
+ }, {
383
+ key: "getTokenByDocUuid",
384
+ value: function getTokenByDocUuid(docUuid) {
385
+ return this.api.getTokenByDocUuid(docUuid);
386
+ }
377
387
  }]);
378
388
  }();
379
389
  var context = new Context();
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.saveSdocToken = exports.getSdocToken = void 0;
7
+ var saveSdocToken = exports.saveSdocToken = function saveSdocToken(docUuid, token) {
8
+ var now = Date.now();
9
+ // 3 days is the valid time token set by back-end
10
+ var expireTime = now + 3 * 24 * 60 * 60 * 1000;
11
+ localStorage.setItem("access_token_".concat(docUuid), token);
12
+ localStorage.setItem("access_token_".concat(docUuid, "_expire"), expireTime.toString());
13
+ };
14
+ var getSdocToken = exports.getSdocToken = function getSdocToken(docUuid) {
15
+ var token = localStorage.getItem("access_token_".concat(docUuid));
16
+ var expire = localStorage.getItem("access_token_".concat(docUuid, "_expire"));
17
+ if (!token || !expire) return null;
18
+ if (Date.now() > parseInt(expire)) {
19
+ localStorage.removeItem("access_token_".concat(docUuid));
20
+ localStorage.removeItem("access_token_".concat(docUuid, "_expire"));
21
+ return null;
22
+ }
23
+ return token;
24
+ };
@@ -0,0 +1,148 @@
1
+ .sdoc-file-preview-drawer {
2
+ width: 100%;
3
+ height: 100%;
4
+ }
5
+
6
+ .sdoc-file-preview-drawer .file-preview-panel-wrapper {
7
+ /* 100vh - toolbar height*/
8
+ height: calc(100vh - 93px);
9
+ display: flex;
10
+ flex-direction: column;
11
+ background: #fff;
12
+ }
13
+
14
+ .sdoc-file-preview-drawer .file-preview-panel-header {
15
+ padding: 0 16px;
16
+ height: 46px;
17
+ display: flex;
18
+ align-items: center;
19
+ justify-content: space-between;
20
+ border-bottom: 1px solid #EAECEF;
21
+ }
22
+
23
+ .sdoc-file-preview-drawer .file-preview-panel-header .file-preview-panel-header-left {
24
+ display: flex;
25
+ align-items: center;
26
+ }
27
+
28
+ .sdoc-file-preview-drawer .file-preview-panel-header-right .file-preview-full-screen {
29
+ align-items: center;
30
+ cursor: pointer;
31
+ display: flex;
32
+ height: 24px;
33
+ justify-content: center;
34
+ width: 24px;
35
+ margin-right: 8px;
36
+ }
37
+
38
+ .sdoc-file-preview-drawer .file-preview-panel-header-right .file-preview-full-screen:hover {
39
+ border-radius: 3px;
40
+ background-color: #EFEFEF;
41
+ }
42
+
43
+ .sdoc-file-preview-drawer .file-preview-panel-header-right .file-preview-full-screen .icon-font {
44
+ color: #999;
45
+ font-size: 14px;
46
+ }
47
+
48
+
49
+ .sdoc-file-preview-drawer .file-preview-panel-header .file-preview-panel-header-left .detail-header-icon-container {
50
+ align-items: center;
51
+ display: flex;
52
+ flex-shrink: 0;
53
+ height: 32px;
54
+ justify-content: center;
55
+ width: 32px
56
+ }
57
+
58
+ .sdoc-file-preview-drawer .file-preview-panel-header .file-preview-panel-header-left .name.ellipsis {
59
+ color: var(--bs-body-color);
60
+ font-size: 1rem;
61
+ line-height: 1.5rem;
62
+ margin: 0 .5rem 0 6px;
63
+ vertical-align: middle;
64
+ white-space: nowrap;
65
+ overflow: hidden;
66
+ text-overflow: ellipsis;
67
+ }
68
+
69
+ .sdoc-file-preview-drawer .file-preview-panel-header .file-preview-panel-header-left .sdoc-file-preview-drawer .file-preview-panel-header .file-preview-panel-header-left .title {
70
+ color: #212529;
71
+ font-size: 16px;
72
+ font-weight: 500;
73
+ }
74
+
75
+ .sdoc-file-preview-drawer .file-preview-panel-header .file-preview-panel-header-right {
76
+ display: flex;
77
+ }
78
+
79
+ .sdoc-file-preview-drawer .file-preview-panel-body {
80
+ display: flex;
81
+ flex: 1 1;
82
+ flex-direction: column;
83
+ overflow-x: hidden;
84
+ overflow-y: auto;
85
+ }
86
+
87
+ .file-preview-panel-body .file-preview-container {
88
+ overflow: auto;
89
+ }
90
+
91
+ .sdoc-file-preview-drawer .file-preview-panel-body .sdoc-article-container {
92
+ width: 100% !important;
93
+ padding: 0px;
94
+ pointer-events: none;
95
+ user-select: auto;
96
+ }
97
+
98
+ .file-preview-panel-body .sdoc-article-container .article.sdoc-editor__article {
99
+ border: none;
100
+ box-shadow: none;
101
+ padding: 8px;
102
+ }
103
+
104
+ .file-preview-panel-body .file-preview-container:fullscreen .sdoc-editor__article {
105
+ padding: calc(100vw / 794 * 40) calc(100vw / 794 * 60) !important;
106
+ font-size: calc(100vw / 794 * 14.7) !important;
107
+ }
108
+
109
+ .file-preview-panel-body .file-preview-container:fullscreen .sdoc-checkbox-input {
110
+ width: calc(100vw / 794 * 13) !important;
111
+ }
112
+
113
+ .file-preview-panel-body .file-preview-container:fullscreen .sdoc-code-block-pre {
114
+ font-size: calc(100vw / 794 * 13.3) !important;
115
+ }
116
+
117
+ .file-preview-panel-body .file-preview-container:fullscreen .sdoc-header-title {
118
+ font-size: calc(100vw / 794 * 33.7) !important;
119
+ }
120
+
121
+ .file-preview-panel-body .file-preview-container:fullscreen .sdoc-header-subtitle {
122
+ font-size: calc(100vw / 794 * 20) !important;
123
+ }
124
+
125
+ .file-preview-panel-body .file-preview-container:fullscreen .sdoc-header-1 {
126
+ font-size: calc(100vw / 794 * 26.7) !important;
127
+ }
128
+
129
+ .file-preview-panel-body .file-preview-container:fullscreen .sdoc-header-2 {
130
+ font-size: calc(100vw / 794 * 21.3) !important;
131
+ }
132
+
133
+ .file-preview-panel-body .file-preview-container:fullscreen .sdoc-header-3 {
134
+ font-size: calc(100vw / 794 * 18.7) !important;
135
+ }
136
+
137
+ .file-preview-panel-body .file-preview-container:fullscreen .sdoc-header-4 {
138
+ font-size: calc(100vw / 794 * 16) !important;
139
+ }
140
+
141
+ .file-preview-panel-body .file-preview-container:fullscreen .sdoc-header-5,
142
+ .file-preview-panel-body .file-preview-container:fullscreen .sdoc-header-6 {
143
+ font-size: calc(100vw / 794 * 14.7) !important;
144
+ }
145
+
146
+ .file-preview-panel-body .sdoc-article-container .sdoc-table-wrapper {
147
+ max-width: none !important;
148
+ }
@@ -0,0 +1,159 @@
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 _regenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/regenerator"));
10
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/asyncToGenerator"));
11
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
12
+ var _react = _interopRequireWildcard(require("react"));
13
+ var _slate = require("@seafile/slate");
14
+ var _slateReact = require("@seafile/slate-react");
15
+ var _fileLoading = _interopRequireDefault(require("../../../components/file-loading"));
16
+ var _context2 = _interopRequireDefault(require("../../../context"));
17
+ var _usePlugins2 = require("../../../hooks/use-plugins");
18
+ var _useScrollContext = require("../../../hooks/use-scroll-context");
19
+ var _readonlyArticle = _interopRequireDefault(require("../../../views/readonly-article"));
20
+ var _helpers = require("../select-file-dialog/helpers");
21
+ var _helper = require("./helper");
22
+ require("./index.css");
23
+ var FilePreviewWrapper = function FilePreviewWrapper(_ref) {
24
+ var docUuid = _ref.docUuid,
25
+ title = _ref.title;
26
+ var _useState = (0, _react.useState)(null),
27
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
28
+ fileContent = _useState2[0],
29
+ setFileContent = _useState2[1];
30
+ var _useState3 = (0, _react.useState)(null),
31
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
32
+ Component = _useState4[0],
33
+ setComponent = _useState4[1];
34
+ var _useState5 = (0, _react.useState)(true),
35
+ _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
36
+ isReloading = _useState6[0],
37
+ setIsReloading = _useState6[1];
38
+ var readonlyEditor = (0, _react.useMemo)(function () {
39
+ return (0, _slateReact.withReact)((0, _slate.createEditor)());
40
+ }, [docUuid]);
41
+ var _usePlugins = (0, _usePlugins2.usePlugins)(),
42
+ closePlugin = _usePlugins.closePlugin;
43
+ var filePreviewRef = (0, _react.useRef)();
44
+ var fileTypeIcon = (0, _helpers.parcelFileTypeIcon)(title);
45
+ var openFullscreen = function openFullscreen() {
46
+ if (filePreviewRef.current.requestFullscreen) {
47
+ // Chrome
48
+ filePreviewRef.current.requestFullscreen();
49
+ } else if (filePreviewRef.current.webkitRequestFullscreen) {
50
+ // Safari
51
+ filePreviewRef.current.webkitRequestFullscreen();
52
+ } else if (filePreviewRef.current.msRequestFullscreen) {
53
+ // IE11
54
+ filePreviewRef.current.msRequestFullscreen();
55
+ }
56
+ };
57
+ (0, _react.useEffect)(function () {
58
+ var fetchFileContent = /*#__PURE__*/function () {
59
+ var _ref2 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/(0, _regenerator2["default"])().m(function _callee() {
60
+ var token, tokenRes, result, _t;
61
+ return (0, _regenerator2["default"])().w(function (_context) {
62
+ while (1) switch (_context.p = _context.n) {
63
+ case 0:
64
+ _context.p = 0;
65
+ token = (0, _helper.getSdocToken)(docUuid);
66
+ if (token) {
67
+ _context.n = 2;
68
+ break;
69
+ }
70
+ _context.n = 1;
71
+ return _context2["default"].getTokenByDocUuid(docUuid);
72
+ case 1:
73
+ tokenRes = _context.v;
74
+ (0, _helper.saveSdocToken)(docUuid, tokenRes.data.access_token);
75
+ token = tokenRes.data.access_token;
76
+ case 2:
77
+ _context.n = 3;
78
+ return _context2["default"].getFileContentByDocUuidAndAccessToken(docUuid, token);
79
+ case 3:
80
+ result = _context.v;
81
+ setIsReloading(false);
82
+ setFileContent(result.data.elements);
83
+ setComponent(function () {
84
+ return _readonlyArticle["default"];
85
+ });
86
+ _context.n = 5;
87
+ break;
88
+ case 4:
89
+ _context.p = 4;
90
+ _t = _context.v;
91
+ console.log(_t);
92
+ setFileContent(null);
93
+ setIsReloading(false);
94
+ case 5:
95
+ return _context.a(2);
96
+ }
97
+ }, _callee, null, [[0, 4]]);
98
+ }));
99
+ return function fetchFileContent() {
100
+ return _ref2.apply(this, arguments);
101
+ };
102
+ }();
103
+ if (docUuid) {
104
+ setIsReloading(true);
105
+ fetchFileContent();
106
+ }
107
+ }, [docUuid]);
108
+ return /*#__PURE__*/_react["default"].createElement("div", {
109
+ className: "sdoc-file-preview-drawer"
110
+ }, /*#__PURE__*/_react["default"].createElement("div", {
111
+ className: "file-preview-panel-wrapper"
112
+ }, /*#__PURE__*/_react["default"].createElement("div", {
113
+ className: "file-preview-panel-header"
114
+ }, /*#__PURE__*/_react["default"].createElement("div", {
115
+ className: "file-preview-panel-header-left"
116
+ }, /*#__PURE__*/_react["default"].createElement("div", {
117
+ className: "detail-header-icon-container"
118
+ }, /*#__PURE__*/_react["default"].createElement("img", {
119
+ src: fileTypeIcon,
120
+ width: "32px",
121
+ height: "32px",
122
+ alt: ""
123
+ })), /*#__PURE__*/_react["default"].createElement("span", {
124
+ className: "name ellipsis",
125
+ title: title
126
+ }, title)), /*#__PURE__*/_react["default"].createElement("div", {
127
+ className: "file-preview-panel-header-right"
128
+ }, /*#__PURE__*/_react["default"].createElement("div", {
129
+ id: "file-preview_full_screen_mode",
130
+ role: "button",
131
+ className: "file-preview-full-screen",
132
+ onClick: openFullscreen
133
+ }, /*#__PURE__*/_react["default"].createElement("i", {
134
+ className: "sdocfont sdoc-fullscreen icon-font"
135
+ })), /*#__PURE__*/_react["default"].createElement("div", {
136
+ className: "sdoc-icon-btn",
137
+ onClick: closePlugin
138
+ }, /*#__PURE__*/_react["default"].createElement("i", {
139
+ className: "sdocfont sdoc-sm-close"
140
+ })))), /*#__PURE__*/_react["default"].createElement("div", {
141
+ className: "file-preview-panel-body"
142
+ }, isReloading && /*#__PURE__*/_react["default"].createElement("div", {
143
+ className: "h-100 w-100 d-flex align-items-center justify-content-center"
144
+ }, /*#__PURE__*/_react["default"].createElement(_fileLoading["default"], null)), Component && !isReloading && /*#__PURE__*/_react["default"].createElement(_useScrollContext.ScrollContext.Provider, {
145
+ value: {
146
+ scrollRef: {
147
+ current: null
148
+ }
149
+ }
150
+ }, /*#__PURE__*/_react["default"].createElement("div", {
151
+ className: "file-preview-container",
152
+ ref: filePreviewRef
153
+ }, /*#__PURE__*/_react["default"].createElement(Component, {
154
+ key: docUuid,
155
+ editor: readonlyEditor,
156
+ slateValue: fileContent
157
+ }))))));
158
+ };
159
+ var _default = exports["default"] = FilePreviewWrapper;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
4
3
  var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
@@ -43,8 +43,10 @@ var _plugins = _interopRequireWildcard(require("./plugins"));
43
43
  var _renderElement = _interopRequireDefault(require("./render/render-element"));
44
44
  var _renderLeaf = _interopRequireDefault(require("./render/render-leaf"));
45
45
  var _toolbar = require("./toolbar");
46
+ var _ref;
46
47
  var baseEditor = (0, _slateHistory.withHistory)((0, _slateReact.withReact)((0, _slate.createEditor)()));
47
- var defaultEditor = _plugins["default"] === null || _plugins["default"] === void 0 ? void 0 : _plugins["default"].reduce(function (editor, pluginItem) {
48
+ var defaultEditor = (_ref = _plugins["default"] || []) === null || _ref === void 0 ? void 0 : _ref.reduce(function (editor, pluginItem) {
49
+ if (!pluginItem) return editor;
48
50
  var withPlugin = pluginItem.editorPlugin;
49
51
  if (withPlugin) {
50
52
  return withPlugin(editor);
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports["default"] = void 0;
9
+ var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createForOfIteratorHelper"));
9
10
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
10
11
  var _react = _interopRequireWildcard(require("react"));
11
12
  var _reactI18next = require("react-i18next");
@@ -77,10 +78,8 @@ var renderCallout = function renderCallout(_ref, editor) {
77
78
  var handleScroll = (0, _react.useCallback)(function (e) {
78
79
  if (readOnly) return;
79
80
  if (!isShowColorSelector) return;
80
- if (e.currentTarget.scrollTop) {
81
- var menuPosition = (0, _utils.getMenuPosition)(calloutRef.current, editor);
82
- setPopoverPosition(menuPosition);
83
- }
81
+ var menuPosition = (0, _utils.getMenuPosition)(calloutRef.current, editor);
82
+ setPopoverPosition(menuPosition);
84
83
  }, [editor, isShowColorSelector, readOnly]);
85
84
  (0, _react.useEffect)(function () {
86
85
  var eventBus = _eventBus["default"].getInstance();
@@ -90,12 +89,33 @@ var renderCallout = function renderCallout(_ref, editor) {
90
89
  (0, _react.useEffect)(function () {
91
90
  if (readOnly) return;
92
91
  var observerRefValue = null;
92
+ var resizeObserver = null;
93
93
  if (scrollRef.current) {
94
94
  scrollRef.current.addEventListener('scroll', handleScroll);
95
95
  observerRefValue = scrollRef.current;
96
+ resizeObserver = new ResizeObserver(function (entries) {
97
+ var _iterator = (0, _createForOfIteratorHelper2["default"])(entries),
98
+ _step;
99
+ try {
100
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
101
+ var entry = _step.value;
102
+ if (resizeObserver) {
103
+ handleScroll();
104
+ }
105
+ }
106
+ } catch (err) {
107
+ _iterator.e(err);
108
+ } finally {
109
+ _iterator.f();
110
+ }
111
+ });
112
+ resizeObserver.observe(scrollRef.current);
96
113
  }
97
114
  return function () {
98
115
  observerRefValue.removeEventListener('scroll', handleScroll);
116
+ if (resizeObserver) {
117
+ resizeObserver.disconnect();
118
+ }
99
119
  };
100
120
  }, [handleScroll, readOnly, scrollRef]);
101
121
  (0, _react.useEffect)(function () {
@@ -99,17 +99,15 @@ var CodeBlock = function CodeBlock(_ref) {
99
99
  var onScroll = (0, _react.useCallback)(function (e) {
100
100
  if (readOnly) return;
101
101
  if (!showHoverMenu) return;
102
- if (e.currentTarget.scrollTop) {
103
- var _codeBlockRef$current2 = codeBlockRef.current.getBoundingClientRect(),
104
- top = _codeBlockRef$current2.top,
105
- left = _codeBlockRef$current2.left;
106
- var menuTop = top - 42; // top = top distance - menu height
107
- var newMenuPosition = {
108
- top: menuTop,
109
- left: left // left = code-block left distance
110
- };
111
- setMenuPosition(newMenuPosition);
112
- }
102
+ var _codeBlockRef$current2 = codeBlockRef.current.getBoundingClientRect(),
103
+ top = _codeBlockRef$current2.top,
104
+ left = _codeBlockRef$current2.left;
105
+ var menuTop = top - 42; // top = top distance - menu height
106
+ var newMenuPosition = {
107
+ top: menuTop,
108
+ left: left // left = code-block left distance
109
+ };
110
+ setMenuPosition(newMenuPosition);
113
111
  }, [readOnly, showHoverMenu]);
114
112
  (0, _react.useEffect)(function () {
115
113
  if (readOnly) return;
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports["default"] = void 0;
9
9
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
10
+ var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createForOfIteratorHelper"));
10
11
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
11
12
  var _react = _interopRequireWildcard(require("react"));
12
13
  var _slateReact = require("@seafile/slate-react");
@@ -73,9 +74,27 @@ var FileLink = function FileLink(_ref) {
73
74
  }, []);
74
75
  (0, _react.useEffect)(function () {
75
76
  var observerRefValue = null;
77
+ var resizeObserver = null;
76
78
  if (isShowInsertHoverMenu) {
77
79
  scrollRef.current && scrollRef.current.addEventListener('scroll', onScroll);
78
80
  observerRefValue = scrollRef.current;
81
+ resizeObserver = new ResizeObserver(function (entries) {
82
+ var _iterator = (0, _createForOfIteratorHelper2["default"])(entries),
83
+ _step;
84
+ try {
85
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
86
+ var entry = _step.value;
87
+ if (resizeObserver) {
88
+ onScroll();
89
+ }
90
+ }
91
+ } catch (err) {
92
+ _iterator.e(err);
93
+ } finally {
94
+ _iterator.f();
95
+ }
96
+ });
97
+ resizeObserver.observe(scrollRef.current);
79
98
  } else {
80
99
  scrollRef.current && scrollRef.current.removeEventListener('scroll', onScroll);
81
100
  }
@@ -83,6 +102,9 @@ var FileLink = function FileLink(_ref) {
83
102
  if (observerRefValue) {
84
103
  observerRefValue.removeEventListener('scroll', onScroll);
85
104
  }
105
+ if (resizeObserver) {
106
+ resizeObserver.disconnect();
107
+ }
86
108
  };
87
109
  // eslint-disable-next-line react-hooks/exhaustive-deps
88
110
  }, [isShowInsertHoverMenu]);
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.renderImage = renderImage;
9
9
  exports.renderImageBlock = renderImageBlock;
10
+ var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createForOfIteratorHelper"));
10
11
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
11
12
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
12
13
  var _react = _interopRequireWildcard(require("react"));
@@ -169,6 +170,7 @@ var Image = function Image(_ref) {
169
170
  }, [isResizing]);
170
171
  (0, _react.useEffect)(function () {
171
172
  var observerRefValue = null;
173
+ var resizeObserver = null;
172
174
  if (isShowImageHoverMenu) {
173
175
  registerEvent([{
174
176
  'eventName': 'click',
@@ -176,6 +178,23 @@ var Image = function Image(_ref) {
176
178
  }]);
177
179
  scrollRef.current && scrollRef.current.addEventListener('scroll', onScroll);
178
180
  observerRefValue = scrollRef.current;
181
+ resizeObserver = new ResizeObserver(function (entries) {
182
+ var _iterator = (0, _createForOfIteratorHelper2["default"])(entries),
183
+ _step;
184
+ try {
185
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
186
+ var entry = _step.value;
187
+ if (resizeObserver) {
188
+ onScroll();
189
+ }
190
+ }
191
+ } catch (err) {
192
+ _iterator.e(err);
193
+ } finally {
194
+ _iterator.f();
195
+ }
196
+ });
197
+ resizeObserver.observe(scrollRef.current);
179
198
  } else {
180
199
  unregisterEvent([{
181
200
  'eventName': 'click',
@@ -191,6 +210,9 @@ var Image = function Image(_ref) {
191
210
  if (observerRefValue) {
192
211
  observerRefValue.removeEventListener('scroll', onScroll);
193
212
  }
213
+ if (resizeObserver) {
214
+ resizeObserver.disconnect();
215
+ }
194
216
  };
195
217
  // eslint-disable-next-line react-hooks/exhaustive-deps
196
218
  }, [isShowImageHoverMenu, onHideImageHoverMenu]);
@@ -271,8 +293,8 @@ var Image = function Image(_ref) {
271
293
  onMouseOver: function onMouseOver(e) {
272
294
  return (0, _helpers.selectImageWhenSelectPartial)(e, editor, element, isSelected);
273
295
  },
274
- contentEditable: "false",
275
296
  "data-src": (0, _helpers.getImageURL)(data, editor),
297
+ contentEditable: "false",
276
298
  suppressContentEditableWarning: true
277
299
  }), /*#__PURE__*/_react["default"].createElement("img", {
278
300
  ref: imageRef,
@@ -287,8 +309,8 @@ var Image = function Image(_ref) {
287
309
  onMouseOver: function onMouseOver(e) {
288
310
  return (0, _helpers.selectImageWhenSelectPartial)(e, editor, element, isSelected);
289
311
  },
290
- contentEditable: "false",
291
312
  "data-src": data.src,
313
+ contentEditable: "false",
292
314
  suppressContentEditableWarning: true
293
315
  }), /*#__PURE__*/_react["default"].createElement(_copyImageErrorSvg["default"], {
294
316
  t: t,
@@ -298,12 +320,12 @@ var Image = function Image(_ref) {
298
320
  "data-id": element.id,
299
321
  className: (0, _classnames["default"])('sdoc-image-wrapper', className)
300
322
  }, attributes, {
323
+ contentEditable: "true",
324
+ suppressContentEditableWarning: true,
301
325
  style: (0, _objectSpread2["default"])({}, style),
302
326
  onMouseOver: function onMouseOver(e) {
303
327
  return (0, _helpers.selectImageWhenSelectPartial)(e, editor, element, isSelected);
304
- },
305
- contentEditable: "false",
306
- suppressContentEditableWarning: true
328
+ }
307
329
  }), /*#__PURE__*/_react["default"].createElement("span", {
308
330
  className: "sdoc-image-inner"
309
331
  }, /*#__PURE__*/_react["default"].createElement("span", {
@@ -410,7 +432,7 @@ function renderImageBlock(props, editor) {
410
432
  onMouseOver: function onMouseOver(e) {
411
433
  return (0, _helpers.selectImageWhenSelectPartial)(e, editor, element, isSelected);
412
434
  },
413
- contentEditable: "false",
435
+ contentEditable: "true",
414
436
  suppressContentEditableWarning: true
415
437
  }), children);
416
438
  }
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports["default"] = void 0;
8
+ var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createForOfIteratorHelper"));
8
9
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/classCallCheck"));
9
10
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createClass"));
10
11
  var _callSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/callSuper"));
@@ -24,11 +25,27 @@ var Link = /*#__PURE__*/function (_React$Component) {
24
25
  var _this;
25
26
  (0, _classCallCheck2["default"])(this, Link);
26
27
  _this = (0, _callSuper2["default"])(this, Link, [props]);
28
+ (0, _defineProperty2["default"])(_this, "resizeObserver", null);
27
29
  (0, _defineProperty2["default"])(_this, "registerEventHandle", function () {
28
30
  document.addEventListener('click', _this.onHideLinkMenu);
29
31
  var scrollRef = _this.context.scrollRef;
30
32
  if (scrollRef.current) {
31
33
  scrollRef.current.addEventListener('scroll', _this.onScroll);
34
+ _this.resizeObserver = new ResizeObserver(function (entries) {
35
+ var _iterator = (0, _createForOfIteratorHelper2["default"])(entries),
36
+ _step;
37
+ try {
38
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
39
+ var entry = _step.value;
40
+ _this.onScroll();
41
+ }
42
+ } catch (err) {
43
+ _iterator.e(err);
44
+ } finally {
45
+ _iterator.f();
46
+ }
47
+ });
48
+ _this.resizeObserver.observe(scrollRef.current);
32
49
  }
33
50
  });
34
51
  (0, _defineProperty2["default"])(_this, "unregisterEventHandle", function () {
@@ -37,6 +54,10 @@ var Link = /*#__PURE__*/function (_React$Component) {
37
54
  if (scrollRef.current) {
38
55
  scrollRef.current.addEventListener('scroll', _this.onScroll);
39
56
  }
57
+ if (_this.resizeObserver) {
58
+ _this.resizeObserver.disconnect();
59
+ _this.resizeObserver = null;
60
+ }
40
61
  });
41
62
  (0, _defineProperty2["default"])(_this, "onHideLinkMenu", function () {
42
63
  _this.setState({
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports["default"] = void 0;
9
+ var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createForOfIteratorHelper"));
9
10
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
10
11
  var _react = _interopRequireWildcard(require("react"));
11
12
  var _slate = require("@seafile/slate");
@@ -69,13 +70,34 @@ var RenderQuickInsert = function RenderQuickInsert(_ref, editor, readonly) {
69
70
  (0, _react.useEffect)(function () {
70
71
  if (readonly) return;
71
72
  if (!sideMenuRef.current) return;
73
+ var resizeObserver = null;
72
74
  var scrollDom = scrollRef.current;
73
75
  handleInsertMenuStyle();
74
76
  document.addEventListener('click', handleClick);
75
77
  scrollDom.addEventListener('scroll', handleScroll);
78
+ resizeObserver = new ResizeObserver(function (entries) {
79
+ var _iterator = (0, _createForOfIteratorHelper2["default"])(entries),
80
+ _step;
81
+ try {
82
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
83
+ var entry = _step.value;
84
+ if (resizeObserver) {
85
+ handleScroll();
86
+ }
87
+ }
88
+ } catch (err) {
89
+ _iterator.e(err);
90
+ } finally {
91
+ _iterator.f();
92
+ }
93
+ });
94
+ resizeObserver.observe(scrollDom);
76
95
  return function () {
77
96
  document.removeEventListener('click', handleClick);
78
97
  scrollDom.removeEventListener('scroll', handleScroll);
98
+ if (resizeObserver) {
99
+ resizeObserver.disconnect();
100
+ }
79
101
  };
80
102
  }, [editor, element, handleClick, handleInsertMenuStyle, handleScroll, readonly, scrollRef]);
81
103
  var handleInsertBlock = function handleInsertBlock(node) {
@@ -13,8 +13,12 @@ var _slate = require("@seafile/slate");
13
13
  var _slateReact = require("@seafile/slate-react");
14
14
  var _classnames = _interopRequireDefault(require("classnames"));
15
15
  var _toast = _interopRequireDefault(require("../../../../components/toast"));
16
+ var _constants = require("../../../../constants");
17
+ var _usePlugins2 = require("../../../../hooks/use-plugins");
18
+ var _outline = require("../../../../outline");
19
+ var _eventBus = _interopRequireDefault(require("../../../../utils/event-bus"));
16
20
  var _commons = require("../../../commons");
17
- var _constants = require("../constants");
21
+ var _constants2 = require("../constants");
18
22
  var _helpers = require("../helpers");
19
23
  require("./index.css");
20
24
  var SdocLinkHoverMenu = function SdocLinkHoverMenu(_ref) {
@@ -25,6 +29,8 @@ var SdocLinkHoverMenu = function SdocLinkHoverMenu(_ref) {
25
29
  onHideInsertHoverMenu = _ref.onHideInsertHoverMenu,
26
30
  t = _ref.t,
27
31
  url = _ref.url;
32
+ var _usePlugins = (0, _usePlugins2.usePlugins)(),
33
+ updateDisplayPlugin = _usePlugins.updateDisplayPlugin;
28
34
  var readOnly = (0, _slateReact.useReadOnly)();
29
35
  var _useState = (0, _react.useState)(false),
30
36
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
@@ -56,10 +62,25 @@ var SdocLinkHoverMenu = function SdocLinkHoverMenu(_ref) {
56
62
  onHideInsertHoverMenu();
57
63
  // eslint-disable-next-line react-hooks/exhaustive-deps
58
64
  }, []);
59
- var selectedType = element.display_type || _constants.SDOC_LINK_TYPE.TEXT_LINK;
65
+ var handleOpenLinkPreview = (0, _react.useCallback)(function (pluginName) {
66
+ updateDisplayPlugin(pluginName, true);
67
+ var doc_uuid = element.doc_uuid,
68
+ title = element.title,
69
+ type = element.type;
70
+ var eventBus = _eventBus["default"].getInstance();
71
+ eventBus.dispatch(_constants.INTERNAL_EVENT.TRANSFER_PREVIEW_FILE_ID, {
72
+ doc_uuid: doc_uuid,
73
+ title: title,
74
+ type: type
75
+ });
76
+ setTimeout(function () {
77
+ onHideInsertHoverMenu();
78
+ }, 0);
79
+ }, [updateDisplayPlugin]);
80
+ var selectedType = element.display_type || _constants2.SDOC_LINK_TYPE.TEXT_LINK;
60
81
  var id = "sdoc-link-display-type-".concat(element.id);
61
- var newSdocFileTypes = _constants.SDOC_LINK_TYPES.filter(function (sdocLinkType) {
62
- return (0, _helpers.isInTable)(editor, element) ? sdocLinkType !== _constants.SDOC_LINK_TYPE.CARD_LINK : true;
82
+ var newSdocFileTypes = _constants2.SDOC_LINK_TYPES.filter(function (sdocLinkType) {
83
+ return (0, _helpers.isInTable)(editor, element) ? sdocLinkType !== _constants2.SDOC_LINK_TYPE.CARD_LINK : true;
63
84
  });
64
85
  return /*#__PURE__*/_react["default"].createElement(_commons.ElementPopover, null, /*#__PURE__*/_react["default"].createElement("div", {
65
86
  className: "sdoc-link-hover-menu-container",
@@ -78,7 +99,7 @@ var SdocLinkHoverMenu = function SdocLinkHoverMenu(_ref) {
78
99
  target: "_blank",
79
100
  rel: "noopener noreferrer",
80
101
  className: "link-op-menu-link"
81
- }, t('Open_link')))), !readOnly && /*#__PURE__*/_react["default"].createElement("span", {
102
+ }, t('Open_link')))), !readOnly && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("span", {
82
103
  className: "op-group-item"
83
104
  }, /*#__PURE__*/_react["default"].createElement("span", {
84
105
  role: "button",
@@ -92,16 +113,26 @@ var SdocLinkHoverMenu = function SdocLinkHoverMenu(_ref) {
92
113
  onClick: onShowProver,
93
114
  id: id
94
115
  }, /*#__PURE__*/_react["default"].createElement("i", {
95
- className: (0, _classnames["default"])('icon-font mr-1', _constants.SDOC_LINK_TYPE_CONFIG[selectedType].icon)
116
+ className: (0, _classnames["default"])('icon-font mr-1', _constants2.SDOC_LINK_TYPE_CONFIG[selectedType].icon)
96
117
  }), /*#__PURE__*/_react["default"].createElement("i", {
97
118
  className: "sdocfont sdoc-drop-down icon-font"
98
- })), /*#__PURE__*/_react["default"].createElement("span", {
119
+ }))), /*#__PURE__*/_react["default"].createElement("span", {
120
+ className: "op-group-item"
121
+ }, /*#__PURE__*/_react["default"].createElement("span", {
99
122
  role: "button",
100
123
  className: 'op-item',
101
124
  onClick: onUnwrapFileLinkNode
102
125
  }, /*#__PURE__*/_react["default"].createElement("i", {
103
126
  className: "sdocfont sdoc-unlink icon-font"
104
- })))), isShowDisplayStylePopover && /*#__PURE__*/_react["default"].createElement("div", {
127
+ })), /*#__PURE__*/_react["default"].createElement("span", {
128
+ role: "button",
129
+ className: "op-item",
130
+ onClick: function onClick() {
131
+ return handleOpenLinkPreview('sdoc-file-preview');
132
+ }
133
+ }, /*#__PURE__*/_react["default"].createElement("i", {
134
+ className: "sdocfont eye icon-font"
135
+ }))))), isShowDisplayStylePopover && /*#__PURE__*/_react["default"].createElement("div", {
105
136
  className: "sdoc-file-display-style-popover sdoc-dropdown-menu"
106
137
  }, newSdocFileTypes.map(function (sdocLinkType) {
107
138
  return /*#__PURE__*/_react["default"].createElement("div", {
@@ -114,8 +145,8 @@ var SdocLinkHoverMenu = function SdocLinkHoverMenu(_ref) {
114
145
  }, /*#__PURE__*/_react["default"].createElement("div", {
115
146
  className: "sdoc-dropdown-item-content"
116
147
  }, /*#__PURE__*/_react["default"].createElement("i", {
117
- className: (0, _classnames["default"])('sdoc-dropdown-item-content-icon', _constants.SDOC_LINK_TYPE_CONFIG[sdocLinkType].icon)
118
- }), /*#__PURE__*/_react["default"].createElement("span", null, t(_constants.SDOC_LINK_TYPE_CONFIG[sdocLinkType].text))), selectedType === sdocLinkType && /*#__PURE__*/_react["default"].createElement("i", {
148
+ className: (0, _classnames["default"])('sdoc-dropdown-item-content-icon', _constants2.SDOC_LINK_TYPE_CONFIG[sdocLinkType].icon)
149
+ }), /*#__PURE__*/_react["default"].createElement("span", null, t(_constants2.SDOC_LINK_TYPE_CONFIG[sdocLinkType].text))), selectedType === sdocLinkType && /*#__PURE__*/_react["default"].createElement("i", {
119
150
  className: "sdocfont sdoc-check-mark sdoc-dropdown-item-right-icon"
120
151
  }));
121
152
  }))));
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports["default"] = void 0;
9
9
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
10
+ var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createForOfIteratorHelper"));
10
11
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
11
12
  var _react = _interopRequireWildcard(require("react"));
12
13
  var _slate = require("@seafile/slate");
@@ -75,9 +76,27 @@ var SdocFileLink = function SdocFileLink(_ref) {
75
76
  }, []);
76
77
  (0, _react.useEffect)(function () {
77
78
  var observerRefValue = null;
79
+ var resizeObserver = null;
78
80
  if (isShowInsertHoverMenu) {
79
81
  scrollRef.current && scrollRef.current.addEventListener('scroll', onScroll);
80
82
  observerRefValue = scrollRef.current;
83
+ resizeObserver = new ResizeObserver(function (entries) {
84
+ var _iterator = (0, _createForOfIteratorHelper2["default"])(entries),
85
+ _step;
86
+ try {
87
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
88
+ var entry = _step.value;
89
+ if (resizeObserver) {
90
+ onScroll();
91
+ }
92
+ }
93
+ } catch (err) {
94
+ _iterator.e(err);
95
+ } finally {
96
+ _iterator.f();
97
+ }
98
+ });
99
+ resizeObserver.observe(scrollRef.current);
81
100
  } else {
82
101
  scrollRef.current && scrollRef.current.removeEventListener('scroll', onScroll);
83
102
  }
@@ -85,6 +104,9 @@ var SdocFileLink = function SdocFileLink(_ref) {
85
104
  if (observerRefValue) {
86
105
  observerRefValue.removeEventListener('scroll', onScroll);
87
106
  }
107
+ if (resizeObserver) {
108
+ resizeObserver.disconnect();
109
+ }
88
110
  };
89
111
  // eslint-disable-next-line react-hooks/exhaustive-deps
90
112
  }, [isShowInsertHoverMenu]);
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports.renderWhiteboard = renderWhiteboard;
9
+ var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createForOfIteratorHelper"));
9
10
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
10
11
  var _react = _interopRequireWildcard(require("react"));
11
12
  var _slate = require("@seafile/slate");
@@ -80,27 +81,46 @@ var Whiteboard = function Whiteboard(_ref) {
80
81
  var handleScroll = (0, _react.useCallback)(function (e) {
81
82
  if (readOnly) return;
82
83
  if (!isSelected) return;
83
- if (e.currentTarget.scrollTop) {
84
- var _menuPosition = (0, _utils.getMenuPosition)(whiteboardRef.current, editor);
85
- setMenuPosition(_menuPosition);
86
- }
84
+ var menuPosition = (0, _utils.getMenuPosition)(whiteboardRef.current, editor);
85
+ setMenuPosition(menuPosition);
87
86
  }, [editor, isSelected, readOnly]);
88
87
  (0, _react.useEffect)(function () {
89
88
  if (readOnly) return;
90
89
  var observerRefValue = null;
90
+ var resizeObserver = null;
91
91
  if (scrollRef.current) {
92
92
  scrollRef.current.addEventListener('scroll', handleScroll);
93
93
  observerRefValue = scrollRef.current;
94
+ resizeObserver = new ResizeObserver(function (entries) {
95
+ var _iterator = (0, _createForOfIteratorHelper2["default"])(entries),
96
+ _step;
97
+ try {
98
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
99
+ var entry = _step.value;
100
+ if (resizeObserver) {
101
+ handleScroll();
102
+ }
103
+ }
104
+ } catch (err) {
105
+ _iterator.e(err);
106
+ } finally {
107
+ _iterator.f();
108
+ }
109
+ });
110
+ resizeObserver.observe(scrollRef.current);
94
111
  }
95
112
  return function () {
96
113
  observerRefValue.removeEventListener('scroll', handleScroll);
114
+ if (resizeObserver) {
115
+ resizeObserver.disconnect();
116
+ }
97
117
  };
98
118
  }, [handleScroll, readOnly, scrollRef]);
99
119
  var handleOnClick = (0, _react.useCallback)(function () {
100
120
  if (readOnly) return;
101
121
  if (isSelected) {
102
- var _menuPosition2 = (0, _utils.getMenuPosition)(whiteboardRef.current, editor);
103
- setMenuPosition(_menuPosition2);
122
+ var _menuPosition = (0, _utils.getMenuPosition)(whiteboardRef.current, editor);
123
+ setMenuPosition(_menuPosition);
104
124
  }
105
125
  }, [editor, isSelected, readOnly]);
106
126
  var openFullscreen = function openFullscreen() {
@@ -11,6 +11,7 @@ var _react = _interopRequireWildcard(require("react"));
11
11
  var _comment = _interopRequireDefault(require("../comment"));
12
12
  var _commentOperation = _interopRequireDefault(require("../comment/components/comment-operation"));
13
13
  var _constants = require("../constants");
14
+ var _fileLinkPreview = _interopRequireDefault(require("../extension/commons/file-link-preview"));
14
15
  var PluginsContext = /*#__PURE__*/_react["default"].createContext(null);
15
16
  var PluginsProvider = exports.PluginsProvider = function PluginsProvider(_ref) {
16
17
  var showComment = _ref.showComment,
@@ -29,6 +30,12 @@ var PluginsProvider = exports.PluginsProvider = function PluginsProvider(_ref) {
29
30
  }, []);
30
31
  var plugins = (0, _react.useMemo)(function () {
31
32
  var allPlugins = propsPlugins;
33
+ allPlugins.push({
34
+ name: 'sdoc-file-preview',
35
+ resizable_width: true,
36
+ display_type: _constants.PLUGIN_DISPLAY_TYPE.RIGHT_PANEL,
37
+ component: _fileLinkPreview["default"]
38
+ });
32
39
  if (showComment) {
33
40
  allPlugins.push({
34
41
  name: 'sdoc-comment',
@@ -41,7 +48,8 @@ var PluginsProvider = exports.PluginsProvider = function PluginsProvider(_ref) {
41
48
  return allPlugins;
42
49
  }, [showComment, propsPlugins]);
43
50
  var updateDisplayPlugin = (0, _react.useCallback)(function (name) {
44
- if (!name || displayName === name) {
51
+ var isFilePreview = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
52
+ if ((!name || displayName === name) && !isFilePreview) {
45
53
  setDisplayName('');
46
54
  return;
47
55
  }
@@ -25,10 +25,18 @@ var RightPanel = function RightPanel(_ref) {
25
25
  plugins = _usePlugins.plugins,
26
26
  displayPluginName = _usePlugins.displayPluginName,
27
27
  closePlugin = _usePlugins.closePlugin;
28
- var _useState = (0, _react.useState)(MIN_PANEL_WIDTH),
28
+ var _useState = (0, _react.useState)(''),
29
29
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
30
- width = _useState2[0],
31
- setWidth = _useState2[1];
30
+ title = _useState2[0],
31
+ setTitle = _useState2[1];
32
+ var _useState3 = (0, _react.useState)(''),
33
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
34
+ docUuid = _useState4[0],
35
+ setDocUuid = _useState4[1];
36
+ var _useState5 = (0, _react.useState)(MIN_PANEL_WIDTH),
37
+ _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
38
+ width = _useState6[0],
39
+ setWidth = _useState6[1];
32
40
  if (editor.editorType === _constants.WIKI_EDITOR) {
33
41
  plugins = [{
34
42
  name: 'sdoc-comment',
@@ -88,6 +96,22 @@ var RightPanel = function RightPanel(_ref) {
88
96
  var eventBus = _eventBus["default"].getInstance();
89
97
  eventBus.dispatch(_constants.INTERNAL_EVENT.RESIZE_ARTICLE);
90
98
  }, [displayPluginName]);
99
+ var updateFilePreviewPlugin = (0, _react.useCallback)(function (_ref2) {
100
+ var doc_uuid = _ref2.doc_uuid,
101
+ title = _ref2.title,
102
+ type = _ref2.type;
103
+ if (type && type === 'sdoc_link') {
104
+ setTitle(title + '.sdoc');
105
+ }
106
+ setDocUuid(doc_uuid);
107
+ }, []);
108
+ (0, _react.useEffect)(function () {
109
+ var eventBus = _eventBus["default"].getInstance();
110
+ var unsubscribeTransferFileId = eventBus.subscribe(_constants.INTERNAL_EVENT.TRANSFER_PREVIEW_FILE_ID, updateFilePreviewPlugin);
111
+ return function () {
112
+ unsubscribeTransferFileId();
113
+ };
114
+ }, []);
91
115
  if (!displayPluginName) return null;
92
116
  var plugin = plugins.find(function (p) {
93
117
  return p.name === displayPluginName;
@@ -111,7 +135,9 @@ var RightPanel = function RightPanel(_ref) {
111
135
  editor: editor,
112
136
  type: "global",
113
137
  onClose: closePlugin,
114
- width: width
138
+ width: width,
139
+ title: title,
140
+ docUuid: docUuid
115
141
  })));
116
142
  };
117
143
  var _default = exports["default"] = RightPanel;
@@ -15,7 +15,7 @@ var getStyleByDefaultMode = exports.getStyleByDefaultMode = function getStyleByD
15
15
  } : {};
16
16
 
17
17
  // Has outline
18
- if (isShowOutline && editor.editorType !== _constants.WIKI_EDITOR) {
18
+ if (isShowOutline && scrollRef.current && editor.editorType !== _constants.WIKI_EDITOR) {
19
19
  var rect = scrollRef.current.getBoundingClientRect();
20
20
  if ((rect.width - Number(_constants.ARTICLE_DEFAULT_WIDTH.slice(0, 3))) / 2 < 280) {
21
21
  containerStyle['marginLeft'] = "".concat(_constants.LEFT_OUTLINE_WIDTH, "px");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "2.0.146",
3
+ "version": "2.0.147",
4
4
  "main": "dist/index.js",
5
5
  "scripts": {
6
6
  "test": "jest",
@@ -71,5 +71,5 @@
71
71
  "publishConfig": {
72
72
  "access": "public"
73
73
  },
74
- "gitHead": "36d479c2ff2fe3a49631050db892d01e74e67b7c"
74
+ "gitHead": "c3c26480c7f0959a1425e0f6f7048154f5aa87f4"
75
75
  }