@seafile/sdoc-editor 1.0.220 → 1.0.222
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/dist/basic-sdk/assets/css/dropdown-menu.css +14 -1
- package/dist/basic-sdk/assets/css/sdoc-editor-plugins.css +0 -23
- package/dist/basic-sdk/extension/commons/search-list/index.css +28 -0
- package/dist/basic-sdk/extension/commons/search-list/index.js +150 -0
- package/dist/basic-sdk/extension/constants/index.js +2 -6
- package/dist/basic-sdk/extension/constants/menus-config.js +15 -0
- package/dist/basic-sdk/extension/plugins/font/helpers.js +7 -0
- package/dist/basic-sdk/extension/plugins/header/render-elem.js +2 -1
- package/dist/basic-sdk/extension/plugins/image/helpers.js +9 -21
- package/dist/basic-sdk/extension/plugins/image/image-loader/index.css +37 -0
- package/dist/basic-sdk/extension/plugins/image/image-loader/index.js +23 -0
- package/dist/basic-sdk/extension/plugins/image/render-elem.js +24 -76
- package/dist/basic-sdk/extension/plugins/image/use-upload-image.js +80 -0
- package/dist/basic-sdk/extension/plugins/multi-column/constants/index.js +1 -1
- package/dist/basic-sdk/extension/plugins/multi-column/helper.js +24 -7
- package/dist/basic-sdk/extension/plugins/multi-column/plugin.js +1 -1
- package/dist/basic-sdk/extension/plugins/multi-column/render/index.css +1 -3
- package/dist/basic-sdk/extension/plugins/multi-column/render/index.js +7 -2
- package/dist/basic-sdk/extension/plugins/multi-column/resize-handlers/index.js +2 -2
- package/dist/basic-sdk/extension/plugins/seatable-column/menu/column-list-item.js +36 -0
- package/dist/basic-sdk/extension/plugins/seatable-column/menu/column-list-menu.css +4 -2
- package/dist/basic-sdk/extension/plugins/seatable-column/menu/column-list-menu.js +8 -13
- package/dist/basic-sdk/extension/plugins/seatable-column/menu/index.js +5 -9
- package/dist/basic-sdk/extension/plugins/seatable-column/plugin.js +9 -1
- package/dist/basic-sdk/extension/plugins/seatable-column/render-elem.js +71 -7
- package/dist/basic-sdk/extension/plugins/seatable-tables/menu/index.js +3 -6
- package/dist/basic-sdk/extension/plugins/seatable-tables/menu/seatable-list.js +35 -2
- package/dist/basic-sdk/extension/plugins/seatable-tables/op-menu/index.css +19 -4
- package/dist/basic-sdk/extension/plugins/seatable-tables/op-menu/index.js +39 -9
- package/dist/basic-sdk/extension/plugins/seatable-tables/render-element/seatable-table.js +2 -1
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/hide-column-setter/hide-column-popover.js +2 -4
- package/dist/basic-sdk/extension/plugins/table/helpers.js +1 -0
- package/dist/basic-sdk/extension/plugins/text-style/helpers.js +1 -1
- package/dist/basic-sdk/extension/plugins/text-style/menu/index.js +10 -1
- package/dist/basic-sdk/extension/toolbar/header-toolbar/insert-toolbar/index.js +4 -0
- package/dist/basic-sdk/extension/toolbar/insert-element-toolbar/index.js +7 -0
- package/dist/basic-sdk/extension/toolbar/side-toolbar/helpers.js +53 -2
- package/dist/basic-sdk/extension/toolbar/side-toolbar/index.js +116 -20
- package/dist/basic-sdk/utils/full-width-mode.js +1 -1
- package/package.json +1 -1
- package/public/locales/en/sdoc-editor.json +2 -1
- package/public/locales/zh_CN/sdoc-editor.json +2 -1
|
@@ -0,0 +1,80 @@
|
|
|
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 = require("react");
|
|
9
|
+
var _slate = require("@seafile/slate");
|
|
10
|
+
var _slateReact = require("@seafile/slate-react");
|
|
11
|
+
var _context = _interopRequireDefault(require("../../../../context"));
|
|
12
|
+
var _helpers = require("./helpers");
|
|
13
|
+
const updateImageNode = async function (editor, element, newUrl) {
|
|
14
|
+
let isError = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
15
|
+
const nodePath = _slateReact.ReactEditor.findPath(editor, element);
|
|
16
|
+
const newData = {
|
|
17
|
+
...element.data,
|
|
18
|
+
src: newUrl,
|
|
19
|
+
is_copy_error: isError
|
|
20
|
+
};
|
|
21
|
+
_slate.Transforms.setNodes(editor, {
|
|
22
|
+
data: newData
|
|
23
|
+
}, {
|
|
24
|
+
at: nodePath
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
const useImageUpload = _ref => {
|
|
28
|
+
let {
|
|
29
|
+
editor,
|
|
30
|
+
element
|
|
31
|
+
} = _ref;
|
|
32
|
+
const {
|
|
33
|
+
data
|
|
34
|
+
} = element;
|
|
35
|
+
const {
|
|
36
|
+
is_copy_error = false
|
|
37
|
+
} = data;
|
|
38
|
+
const [isLoading, setIsLoading] = (0, _react.useState)(false);
|
|
39
|
+
const [isCopyError, setIsCopyError] = (0, _react.useState)(is_copy_error);
|
|
40
|
+
(0, _react.useEffect)(() => {
|
|
41
|
+
const {
|
|
42
|
+
src: url
|
|
43
|
+
} = data;
|
|
44
|
+
if (isCopyError) return;
|
|
45
|
+
if (!(0, _helpers.isImagUrlIsFromCopy)(url)) return;
|
|
46
|
+
const downloadAndUploadImages = async url => {
|
|
47
|
+
try {
|
|
48
|
+
const response = await fetch(url);
|
|
49
|
+
if (response.ok) {
|
|
50
|
+
const blob = await response.blob();
|
|
51
|
+
const file = new File([blob], 'downloaded_image.png', {
|
|
52
|
+
type: blob.type
|
|
53
|
+
});
|
|
54
|
+
const imageUrl = await _context.default.uploadLocalImage([file]);
|
|
55
|
+
if (imageUrl && imageUrl[0]) {
|
|
56
|
+
updateImageNode(editor, element, imageUrl[0]);
|
|
57
|
+
}
|
|
58
|
+
} else {
|
|
59
|
+
throw new Error(`HTTP error status: ${response.status}`);
|
|
60
|
+
}
|
|
61
|
+
} catch (error) {
|
|
62
|
+
console.error(error);
|
|
63
|
+
updateImageNode(editor, element, url, true);
|
|
64
|
+
setIsCopyError(true);
|
|
65
|
+
} finally {
|
|
66
|
+
setTimeout(() => {
|
|
67
|
+
setIsLoading(false);
|
|
68
|
+
}, 500);
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
downloadAndUploadImages(url);
|
|
72
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
73
|
+
}, []);
|
|
74
|
+
return {
|
|
75
|
+
isCopyImageLoading: isLoading,
|
|
76
|
+
setCopyImageLoading: setIsLoading,
|
|
77
|
+
isCopyImageError: isCopyError
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
var _default = exports.default = useImageUpload;
|
|
@@ -11,6 +11,9 @@ var _slateReact = require("@seafile/slate-react");
|
|
|
11
11
|
var _constants = require("../../constants");
|
|
12
12
|
var _constants2 = require("./constants");
|
|
13
13
|
var _core = require("../../core");
|
|
14
|
+
var _localStorageUtils = _interopRequireDefault(require("../../../../utils/local-storage-utils"));
|
|
15
|
+
var _constants3 = require("../../../constants");
|
|
16
|
+
var _fullWidthMode = require("../../../utils/full-width-mode");
|
|
14
17
|
const insertMultiColumn = function (editor, selection) {
|
|
15
18
|
let position = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _constants.INSERT_POSITION.CURRENT;
|
|
16
19
|
let type = arguments.length > 3 ? arguments[3] : undefined;
|
|
@@ -40,7 +43,7 @@ const generateEmptyMultiColumn = (editor, MultiColumnType) => {
|
|
|
40
43
|
default:
|
|
41
44
|
break;
|
|
42
45
|
}
|
|
43
|
-
const currentPageWidth = getCurrentPageWidth();
|
|
46
|
+
const currentPageWidth = getCurrentPageWidth(editor);
|
|
44
47
|
const initialColumnWidth = Math.max(_constants2.COLUMN_MIN_WIDTH, parseInt(currentPageWidth / multiColumnNumber));
|
|
45
48
|
for (let i = 0; i < multiColumnNumber; i++) {
|
|
46
49
|
const columnWidthKey = _slugid.default.nice();
|
|
@@ -139,12 +142,13 @@ const handleInsertMultiColumn = (editor, insertPosition, path, multiColumnNode)
|
|
|
139
142
|
_slateReact.ReactEditor.focus(editor);
|
|
140
143
|
};
|
|
141
144
|
exports.handleInsertMultiColumn = handleInsertMultiColumn;
|
|
142
|
-
const updateColumnWidthOnDeletion = (editor, selection, column, deletionDirection)
|
|
143
|
-
|
|
145
|
+
const updateColumnWidthOnDeletion = function (editor, selection, column, deletionDirection) {
|
|
146
|
+
let isDragged = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
|
147
|
+
const multiColumnPath = !isDragged ? [selection.anchor.path[0]] : [selection[0]];
|
|
144
148
|
const newMultiColumnNode = _slate.Node.get(editor, multiColumnPath);
|
|
145
|
-
const targetColumnIndex = selection.anchor.path[1] + (deletionDirection === 'deleteForward' ? 1 : 0);
|
|
149
|
+
const targetColumnIndex = !isDragged ? selection.anchor.path[1] + (deletionDirection === 'deleteForward' ? 1 : 0) : selection[1] + (deletionDirection === 'deleteForward' ? 1 : 0);
|
|
146
150
|
const remainingColumn = column.filter((_, index) => index !== targetColumnIndex);
|
|
147
|
-
const currentPageWidth = getCurrentPageWidth();
|
|
151
|
+
const currentPageWidth = getCurrentPageWidth(editor);
|
|
148
152
|
const columnWidth = Math.max(_constants2.COLUMN_MIN_WIDTH, parseInt(currentPageWidth / remainingColumn.length));
|
|
149
153
|
|
|
150
154
|
// Recalculate width of every left column
|
|
@@ -156,9 +160,22 @@ const updateColumnWidthOnDeletion = (editor, selection, column, deletionDirectio
|
|
|
156
160
|
updateColumnWidth(editor, newMultiColumnNode, newColumn, multiColumnPath);
|
|
157
161
|
};
|
|
158
162
|
exports.updateColumnWidthOnDeletion = updateColumnWidthOnDeletion;
|
|
159
|
-
const getCurrentPageWidth =
|
|
163
|
+
const getCurrentPageWidth = editor => {
|
|
160
164
|
const sdocEditorPage = document.getElementById('sdoc-editor');
|
|
161
|
-
|
|
165
|
+
let pageWidth;
|
|
166
|
+
pageWidth = sdocEditorPage === null || sdocEditorPage === void 0 ? void 0 : sdocEditorPage.getBoundingClientRect().width;
|
|
167
|
+
|
|
168
|
+
// Get pageWidth if on is_full_width mode
|
|
169
|
+
if (_localStorageUtils.default.getItem(_constants3.FULL_WIDTH_MODE)) {
|
|
170
|
+
var _getStyleByFullWidthM;
|
|
171
|
+
const sdocEditorPageContent = document.getElementsByClassName('sdoc-editor-page-content')[0];
|
|
172
|
+
const pageContentWidth = sdocEditorPageContent === null || sdocEditorPageContent === void 0 ? void 0 : sdocEditorPageContent.getBoundingClientRect().width;
|
|
173
|
+
const pageWidthString = (_getStyleByFullWidthM = (0, _fullWidthMode.getStyleByFullWidthMode)(undefined, editor)) === null || _getStyleByFullWidthM === void 0 ? void 0 : _getStyleByFullWidthM.width;
|
|
174
|
+
const numbers = pageWidthString.match(/\d+/g).map(Number);
|
|
175
|
+
|
|
176
|
+
// 120 is padding and 2 is border width of 'sdoc-editor' dom;
|
|
177
|
+
pageWidth = pageContentWidth - numbers.slice(1).reduce((sum, num) => sum + num, 0) - 120 - 2;
|
|
178
|
+
}
|
|
162
179
|
return pageWidth;
|
|
163
180
|
};
|
|
164
181
|
exports.getCurrentPageWidth = getCurrentPageWidth;
|
|
@@ -82,7 +82,7 @@ const withMultiColumn = editor => {
|
|
|
82
82
|
const nextNode = _slate.Editor.next(newEditor);
|
|
83
83
|
const nextColumnIndex = nextNode[1][1];
|
|
84
84
|
const currentMultiColumnEntry = (0, _core.getSelectedNodeEntryByType)(editor, _constants.ELEMENT_TYPE.MULTI_COLUMN);
|
|
85
|
-
if (!currentMultiColumnEntry) return
|
|
85
|
+
if (!currentMultiColumnEntry) return deleteForward(unit);
|
|
86
86
|
const {
|
|
87
87
|
column,
|
|
88
88
|
children: childColumn
|
|
@@ -16,16 +16,14 @@
|
|
|
16
16
|
.sdoc-multicolumn-wrapper .column {
|
|
17
17
|
display: flex;
|
|
18
18
|
left: 3px;
|
|
19
|
-
line-height: 1.5;
|
|
20
19
|
align-items: flex-start;
|
|
21
20
|
}
|
|
22
21
|
|
|
23
22
|
.sdoc-column-container {
|
|
24
|
-
width: calc(100% -
|
|
23
|
+
width: calc(100% - 50px);
|
|
25
24
|
max-width: 100%;
|
|
26
25
|
position: relative;
|
|
27
26
|
padding: 5px 5px 5px 0px;
|
|
28
|
-
margin-left: 15px;
|
|
29
27
|
box-sizing: border-box;
|
|
30
28
|
word-wrap: break-word;
|
|
31
29
|
white-space: pre-wrap;
|
|
@@ -26,10 +26,15 @@ const MultiColumn = _ref => {
|
|
|
26
26
|
...element.style
|
|
27
27
|
} : {});
|
|
28
28
|
const multiColumnContainerClassName = (0, _classnames.default)('sdoc-multicolumn-container', className);
|
|
29
|
-
const [pageWidth, setPageWidth] = (0, _react.useState)((0, _helper.getCurrentPageWidth)());
|
|
29
|
+
const [pageWidth, setPageWidth] = (0, _react.useState)((0, _helper.getCurrentPageWidth)(editor));
|
|
30
30
|
const handleResizeColumn = newColumn => {
|
|
31
31
|
(0, _helper.updateColumnWidth)(editor, element, newColumn);
|
|
32
32
|
};
|
|
33
|
+
(0, _react.useEffect)(() => {
|
|
34
|
+
setPageWidth((0, _helper.getCurrentPageWidth)(editor));
|
|
35
|
+
}
|
|
36
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
37
|
+
, []);
|
|
33
38
|
(0, _react.useEffect)(() => {
|
|
34
39
|
const sdocEditorPage = document.getElementById('sdoc-editor');
|
|
35
40
|
if (!sdocEditorPage) return;
|
|
@@ -37,7 +42,7 @@ const MultiColumn = _ref => {
|
|
|
37
42
|
var _entries$;
|
|
38
43
|
const newPageWidth = (_entries$ = entries[0]) === null || _entries$ === void 0 ? void 0 : _entries$.contentRect.width;
|
|
39
44
|
// Check if sdocPageWidth changes
|
|
40
|
-
if (newPageWidth !== pageWidth) {
|
|
45
|
+
if (pageWidth && newPageWidth !== pageWidth) {
|
|
41
46
|
const scaleFactor = newPageWidth / pageWidth;
|
|
42
47
|
const updatedColumns = element.column.map(item => ({
|
|
43
48
|
...item,
|
|
@@ -129,14 +129,14 @@ const ResizeHandlers = _ref => {
|
|
|
129
129
|
}, index === 0 && /*#__PURE__*/_react.default.createElement("div", {
|
|
130
130
|
className: "column-width-just",
|
|
131
131
|
style: {
|
|
132
|
-
left: '
|
|
132
|
+
left: '-15px'
|
|
133
133
|
}
|
|
134
134
|
}), /*#__PURE__*/_react.default.createElement(_columnResizeHandler.default, {
|
|
135
135
|
key: index,
|
|
136
136
|
index: index,
|
|
137
137
|
handleMouseDown: handleMouseDown,
|
|
138
138
|
style: {
|
|
139
|
-
left: `${left}px`
|
|
139
|
+
left: `${left - 15}px`
|
|
140
140
|
},
|
|
141
141
|
adjustingCell: adjustingCell,
|
|
142
142
|
isDraggingResizeHandler: isDraggingResizeHandler,
|
|
@@ -0,0 +1,36 @@
|
|
|
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 = ColumnListItem;
|
|
9
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
10
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
function ColumnListItem(_ref) {
|
|
12
|
+
let {
|
|
13
|
+
innerRef,
|
|
14
|
+
item,
|
|
15
|
+
onItemClick,
|
|
16
|
+
isSelected
|
|
17
|
+
} = _ref;
|
|
18
|
+
const onMouseDown = (0, _react.useCallback)(() => {
|
|
19
|
+
onItemClick(item);
|
|
20
|
+
}, [onItemClick, item]);
|
|
21
|
+
const clazzNames = (0, _classnames.default)('column-list-menu-item-container', {
|
|
22
|
+
'selected': isSelected
|
|
23
|
+
});
|
|
24
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
25
|
+
ref: innerRef,
|
|
26
|
+
key: item.value,
|
|
27
|
+
className: clazzNames,
|
|
28
|
+
onClick: onMouseDown
|
|
29
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
30
|
+
className: "column-list-menu-item"
|
|
31
|
+
}, /*#__PURE__*/_react.default.createElement("span", {
|
|
32
|
+
className: `control-icon ${item.iconClass}`
|
|
33
|
+
}), /*#__PURE__*/_react.default.createElement("span", {
|
|
34
|
+
className: "control-label"
|
|
35
|
+
}, item.label)));
|
|
36
|
+
}
|
|
@@ -8,8 +8,6 @@
|
|
|
8
8
|
background-color: #fff;
|
|
9
9
|
min-width: 12rem;
|
|
10
10
|
width: 200px;
|
|
11
|
-
max-height: 300px;
|
|
12
|
-
overflow: auto;
|
|
13
11
|
padding: 8px 0;
|
|
14
12
|
}
|
|
15
13
|
|
|
@@ -46,3 +44,7 @@
|
|
|
46
44
|
background-color: #f5f5f5;
|
|
47
45
|
cursor: pointer;
|
|
48
46
|
}
|
|
47
|
+
|
|
48
|
+
.column-list-menu .column-list-menu-item-container.selected {
|
|
49
|
+
background-color: #e3e3e3;
|
|
50
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
3
4
|
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
@@ -10,6 +11,8 @@ var _column = require("../constants/column");
|
|
|
10
11
|
var _helpers = require("../helpers");
|
|
11
12
|
var _elementType = require("../../../constants/element-type");
|
|
12
13
|
var _utils = require("../../../utils");
|
|
14
|
+
var _searchList = _interopRequireDefault(require("../../../commons/search-list"));
|
|
15
|
+
var _columnListItem = _interopRequireDefault(require("./column-list-item"));
|
|
13
16
|
require("./column-list-menu.css");
|
|
14
17
|
const NOT_SUPPORT_COLUMN_TYPES = ['button', 'file'];
|
|
15
18
|
function ColumnListMenu(_ref) {
|
|
@@ -51,7 +54,7 @@ function ColumnListMenu(_ref) {
|
|
|
51
54
|
const isActive = editor => {
|
|
52
55
|
return (0, _helpers.getColumnType)(editor) === _elementType.SEATABLE_COLUMN;
|
|
53
56
|
};
|
|
54
|
-
const
|
|
57
|
+
const onListItemClick = (0, _react.useCallback)(option => {
|
|
55
58
|
const active = isActive(editor);
|
|
56
59
|
(0, _helpers.insertSeaTableColumn)(editor, active, option, insertPosition);
|
|
57
60
|
toggle && toggle();
|
|
@@ -60,17 +63,9 @@ function ColumnListMenu(_ref) {
|
|
|
60
63
|
ref: columnRef,
|
|
61
64
|
className: "column-list-menu",
|
|
62
65
|
style: computedStyle
|
|
63
|
-
},
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
onClick: () => onMousedown(option)
|
|
68
|
-
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
69
|
-
className: "column-list-menu-item"
|
|
70
|
-
}, /*#__PURE__*/_react.default.createElement("span", {
|
|
71
|
-
className: `control-icon ${option.iconClass}`
|
|
72
|
-
}), /*#__PURE__*/_react.default.createElement("span", {
|
|
73
|
-
className: "control-label"
|
|
74
|
-
}, option.label)));
|
|
66
|
+
}, /*#__PURE__*/_react.default.createElement(_searchList.default, {
|
|
67
|
+
list: options,
|
|
68
|
+
listItem: _columnListItem.default,
|
|
69
|
+
onListItemClick: onListItemClick
|
|
75
70
|
}));
|
|
76
71
|
}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
-
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.default = void 0;
|
|
9
|
-
var _react =
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
10
9
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
11
10
|
var _constants = require("../../../constants");
|
|
12
11
|
var _dropdownMenuItem = _interopRequireDefault(require("../../../commons/dropdown-menu-item"));
|
|
@@ -21,7 +20,6 @@ const SeaTableColumnMenu = _ref => {
|
|
|
21
20
|
toggle,
|
|
22
21
|
isHidden = false
|
|
23
22
|
} = _ref;
|
|
24
|
-
const dropDownMenuRef = (0, _react.useRef)(null);
|
|
25
23
|
const disabled = (0, _helpers.isMenuDisabled)(editor, readonly);
|
|
26
24
|
const menuConfig = _constants.MENUS_CONFIG_MAP[_constants.ELEMENT_TYPE.SEATABLE_COLUMN];
|
|
27
25
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
|
|
@@ -29,22 +27,20 @@ const SeaTableColumnMenu = _ref => {
|
|
|
29
27
|
menuConfig: menuConfig,
|
|
30
28
|
className: (0, _classnames.default)('pr-2 sdoc-dropdown-menu-item-relative', {
|
|
31
29
|
'sdoc-dropdown-menu-item-hidden': isHidden
|
|
32
|
-
})
|
|
33
|
-
ref: dropDownMenuRef
|
|
30
|
+
})
|
|
34
31
|
}, !disabled && /*#__PURE__*/_react.default.createElement("i", {
|
|
35
32
|
className: "sdocfont sdoc-right-slide sdoc-dropdown-item-right-icon"
|
|
36
|
-
}), !disabled && /*#__PURE__*/_react.default.createElement(_reactstrap.UncontrolledPopover, {
|
|
33
|
+
})), !disabled && /*#__PURE__*/_react.default.createElement(_reactstrap.UncontrolledPopover, {
|
|
37
34
|
target: menuConfig.id,
|
|
38
35
|
hideArrow: true,
|
|
39
36
|
trigger: "hover",
|
|
40
37
|
fade: false,
|
|
41
|
-
popperClassName: "seatable-column-popover"
|
|
42
|
-
container: dropDownMenuRef === null || dropDownMenuRef === void 0 ? void 0 : dropDownMenuRef.current
|
|
38
|
+
popperClassName: "seatable-column-popover"
|
|
43
39
|
}, /*#__PURE__*/_react.default.createElement(_columnListMenu.default, {
|
|
44
40
|
editor: editor,
|
|
45
41
|
readonly: readonly,
|
|
46
42
|
insertPosition: insertPosition,
|
|
47
43
|
toggle: toggle
|
|
48
|
-
})))
|
|
44
|
+
})));
|
|
49
45
|
};
|
|
50
46
|
var _default = exports.default = SeaTableColumnMenu;
|
|
@@ -8,7 +8,8 @@ var _constants = require("../../constants");
|
|
|
8
8
|
const withColumn = editor => {
|
|
9
9
|
const {
|
|
10
10
|
isInline,
|
|
11
|
-
isVoid
|
|
11
|
+
isVoid,
|
|
12
|
+
markableVoid
|
|
12
13
|
} = editor;
|
|
13
14
|
const newEditor = editor;
|
|
14
15
|
newEditor.isInline = element => {
|
|
@@ -25,6 +26,13 @@ const withColumn = editor => {
|
|
|
25
26
|
if (type === _constants.ELEMENT_TYPE.SEATABLE_COLUMN) return true;
|
|
26
27
|
return isVoid(element);
|
|
27
28
|
};
|
|
29
|
+
newEditor.markableVoid = element => {
|
|
30
|
+
const {
|
|
31
|
+
type
|
|
32
|
+
} = element;
|
|
33
|
+
if (type === _constants.ELEMENT_TYPE.SEATABLE_COLUMN) return true;
|
|
34
|
+
return markableVoid(element);
|
|
35
|
+
};
|
|
28
36
|
return newEditor;
|
|
29
37
|
};
|
|
30
38
|
var _default = exports.default = withColumn;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
3
4
|
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
@@ -7,6 +8,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
8
|
exports.default = void 0;
|
|
8
9
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
10
|
var _slateReact = require("@seafile/slate-react");
|
|
11
|
+
var _mdToHtml = _interopRequireDefault(require("../../../../slate-convert/md-to-html"));
|
|
10
12
|
const Column = _ref => {
|
|
11
13
|
let {
|
|
12
14
|
props,
|
|
@@ -19,15 +21,34 @@ const Column = _ref => {
|
|
|
19
21
|
} = props;
|
|
20
22
|
const isReadOnly = (0, _slateReact.useReadOnly)();
|
|
21
23
|
const isSelected = (0, _slateReact.useSelected)();
|
|
24
|
+
const [columnValue, setColumnValue] = (0, _react.useState)('');
|
|
22
25
|
const data = element.data || {};
|
|
23
26
|
const {
|
|
24
|
-
key: columnKey
|
|
25
|
-
name: columnName
|
|
27
|
+
key: columnKey
|
|
26
28
|
} = data;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
29
|
+
const column = editor.columns.find(item => item.key === columnKey);
|
|
30
|
+
const isLongTextColumn = (0, _react.useMemo)(() => {
|
|
31
|
+
return column && column.type === 'long-text';
|
|
32
|
+
}, [column]);
|
|
33
|
+
(0, _react.useEffect)(() => {
|
|
34
|
+
const data = element.data || {};
|
|
35
|
+
const {
|
|
36
|
+
key: columnKey,
|
|
37
|
+
name: columnName
|
|
38
|
+
} = data;
|
|
39
|
+
let displayValue = columnName ? `{${columnName}}` : '';
|
|
40
|
+
if (editor.getColumnCellValue) {
|
|
41
|
+
displayValue = editor.getColumnCellValue(columnKey) || 'null';
|
|
42
|
+
if (!isLongTextColumn) {
|
|
43
|
+
setColumnValue(displayValue);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
_mdToHtml.default.process(displayValue).then(res => {
|
|
47
|
+
displayValue = String(res);
|
|
48
|
+
setColumnValue(displayValue);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}, [editor, element.data, isLongTextColumn]);
|
|
31
52
|
const [isClicked, setIsClicked] = (0, _react.useState)(false);
|
|
32
53
|
(0, _react.useEffect)(() => {
|
|
33
54
|
if (isSelected && !isReadOnly) {
|
|
@@ -36,16 +57,59 @@ const Column = _ref => {
|
|
|
36
57
|
setIsClicked(false);
|
|
37
58
|
}
|
|
38
59
|
}, [isSelected, isReadOnly]);
|
|
60
|
+
const {
|
|
61
|
+
font_size = null,
|
|
62
|
+
font = null,
|
|
63
|
+
bold = null,
|
|
64
|
+
italic = null,
|
|
65
|
+
underline = null,
|
|
66
|
+
color = null,
|
|
67
|
+
highlight_color = null,
|
|
68
|
+
strikethrough = null
|
|
69
|
+
} = element.children[0];
|
|
39
70
|
const style = {
|
|
40
71
|
margin: '0 10px',
|
|
41
72
|
border: '1px solid transparent',
|
|
73
|
+
userSelect: 'none',
|
|
74
|
+
display: 'inline-block',
|
|
42
75
|
...(isClicked && {
|
|
43
76
|
border: '1px solid red'
|
|
77
|
+
}),
|
|
78
|
+
...(font_size && {
|
|
79
|
+
fontSize: font_size
|
|
80
|
+
}),
|
|
81
|
+
...(font && {
|
|
82
|
+
fontFamily: font
|
|
83
|
+
}),
|
|
84
|
+
...(bold && {
|
|
85
|
+
fontWeight: 600
|
|
86
|
+
}),
|
|
87
|
+
...(italic && {
|
|
88
|
+
fontStyle: 'italic'
|
|
89
|
+
}),
|
|
90
|
+
...(underline && {
|
|
91
|
+
textDecoration: 'underline'
|
|
92
|
+
}),
|
|
93
|
+
...(color && {
|
|
94
|
+
color: color
|
|
95
|
+
}),
|
|
96
|
+
...(highlight_color && {
|
|
97
|
+
backgroundColor: highlight_color
|
|
98
|
+
}),
|
|
99
|
+
...(strikethrough && {
|
|
100
|
+
textDecoration: 'line-through'
|
|
44
101
|
})
|
|
45
102
|
};
|
|
46
103
|
return /*#__PURE__*/_react.default.createElement("span", Object.assign({}, attributes, {
|
|
47
104
|
style: style
|
|
48
|
-
}),
|
|
105
|
+
}), !isLongTextColumn && columnValue, isLongTextColumn && /*#__PURE__*/_react.default.createElement("div", {
|
|
106
|
+
style: {
|
|
107
|
+
padding: '10px'
|
|
108
|
+
},
|
|
109
|
+
dangerouslySetInnerHTML: {
|
|
110
|
+
__html: columnValue
|
|
111
|
+
}
|
|
112
|
+
}), children);
|
|
49
113
|
};
|
|
50
114
|
const renderColumn = (props, editor) => {
|
|
51
115
|
return /*#__PURE__*/_react.default.createElement(Column, {
|
|
@@ -22,7 +22,6 @@ const SeaTableTableMenu = _ref => {
|
|
|
22
22
|
toggle,
|
|
23
23
|
isHidden = false
|
|
24
24
|
} = _ref;
|
|
25
|
-
const dropDownMenuRef = (0, _react.useRef)(null);
|
|
26
25
|
const menuConfig = _constants.MENUS_CONFIG_MAP[_constants.SEATABLE_TABLE];
|
|
27
26
|
let disabled = (0, _helpers.isInsertSeaTableTableDisabled)(editor, readonly);
|
|
28
27
|
if (insertPosition === _constants.INSERT_POSITION.AFTER) {
|
|
@@ -37,17 +36,15 @@ const SeaTableTableMenu = _ref => {
|
|
|
37
36
|
menuConfig: menuConfig,
|
|
38
37
|
className: (0, _classnames.default)('pr-2 sdoc-dropdown-menu-item-relative', {
|
|
39
38
|
'sdoc-dropdown-menu-item-hidden': isHidden
|
|
40
|
-
})
|
|
41
|
-
ref: dropDownMenuRef
|
|
39
|
+
})
|
|
42
40
|
}, !disabled && /*#__PURE__*/_react.default.createElement("i", {
|
|
43
41
|
className: "sdocfont sdoc-right-slide sdoc-dropdown-item-right-icon"
|
|
44
42
|
}), !disabled && /*#__PURE__*/_react.default.createElement(_reactstrap.UncontrolledPopover, {
|
|
45
43
|
target: menuConfig.id,
|
|
46
44
|
trigger: "hover",
|
|
47
|
-
className: "sdoc-menu-popover sdoc-sub-dropdown-menu",
|
|
45
|
+
className: "sdoc-menu-popover sdoc-dropdown-menu sdoc-sub-dropdown-menu",
|
|
48
46
|
hideArrow: true,
|
|
49
|
-
fade: false
|
|
50
|
-
container: dropDownMenuRef === null || dropDownMenuRef === void 0 ? void 0 : dropDownMenuRef.current
|
|
47
|
+
fade: false
|
|
51
48
|
}, /*#__PURE__*/_react.default.createElement(_seatableList.default, {
|
|
52
49
|
editor: editor,
|
|
53
50
|
readonly: readonly,
|
|
@@ -6,15 +6,21 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.default = void 0;
|
|
8
8
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
var _reactstrap = require("reactstrap");
|
|
10
|
+
var _reactI18next = require("react-i18next");
|
|
9
11
|
var _utils = require("../../../utils");
|
|
10
12
|
const SeaTableList = _ref => {
|
|
11
13
|
let {
|
|
12
14
|
editor,
|
|
13
15
|
onViewClick
|
|
14
16
|
} = _ref;
|
|
17
|
+
const {
|
|
18
|
+
t
|
|
19
|
+
} = (0, _reactI18next.useTranslation)('sdoc-editor');
|
|
15
20
|
const seatableRef = (0, _react.useRef)(null);
|
|
21
|
+
const isComposingRef = (0, _react.useRef)(null);
|
|
16
22
|
const [computedStyle, setComputedStyle] = (0, _react.useState)({});
|
|
17
|
-
const tables = editor.tables;
|
|
23
|
+
const [tables, setTables] = (0, _react.useState)(editor.tables || []);
|
|
18
24
|
(0, _react.useEffect)(() => {
|
|
19
25
|
if (seatableRef.current) {
|
|
20
26
|
// bottom overflow
|
|
@@ -29,16 +35,43 @@ const SeaTableList = _ref => {
|
|
|
29
35
|
});
|
|
30
36
|
}
|
|
31
37
|
}, []);
|
|
38
|
+
const onChange = (0, _react.useCallback)(event => {
|
|
39
|
+
if (isComposingRef.current) return;
|
|
40
|
+
const value = event.target.value.trim().toUpperCase();
|
|
41
|
+
if (value) {
|
|
42
|
+
const list = editor.tables.filter(item => item.name.toUpperCase().includes(value));
|
|
43
|
+
setTables(list);
|
|
44
|
+
} else {
|
|
45
|
+
setTables(editor.tables);
|
|
46
|
+
}
|
|
47
|
+
}, [editor.tables]);
|
|
48
|
+
const onCompositionStart = (0, _react.useCallback)(() => {
|
|
49
|
+
isComposingRef.current = true;
|
|
50
|
+
}, []);
|
|
51
|
+
const onCompositionEnd = (0, _react.useCallback)(e => {
|
|
52
|
+
isComposingRef.current = false;
|
|
53
|
+
onChange(e);
|
|
54
|
+
}, [onChange]);
|
|
32
55
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
33
56
|
ref: seatableRef,
|
|
34
57
|
className: "sdoc-dropdown-menu-container sdoc-seatable-selected-table-list-wrapper",
|
|
35
58
|
style: computedStyle
|
|
59
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
60
|
+
className: "sdoc-seatable-list-search-wrapper"
|
|
61
|
+
}, /*#__PURE__*/_react.default.createElement(_reactstrap.Input, {
|
|
62
|
+
placeholder: t('Search_action'),
|
|
63
|
+
onChange: onChange,
|
|
64
|
+
autoFocus: true,
|
|
65
|
+
onCompositionStart: onCompositionStart,
|
|
66
|
+
onCompositionEnd: onCompositionEnd
|
|
67
|
+
})), /*#__PURE__*/_react.default.createElement("div", {
|
|
68
|
+
className: "sdoc-seatable-list-wrapper"
|
|
36
69
|
}, tables.map(item => {
|
|
37
70
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
38
71
|
key: item._id,
|
|
39
72
|
className: "sdoc-dropdown-menu-item text-truncate d-block",
|
|
40
73
|
onClick: () => onViewClick(item)
|
|
41
74
|
}, item.name);
|
|
42
|
-
}));
|
|
75
|
+
})));
|
|
43
76
|
};
|
|
44
77
|
var _default = exports.default = SeaTableList;
|
|
@@ -113,22 +113,34 @@
|
|
|
113
113
|
}
|
|
114
114
|
|
|
115
115
|
.sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-popover .tables-list-empty {
|
|
116
|
-
padding:
|
|
116
|
+
padding: 0px 16px;
|
|
117
117
|
width: 100%;
|
|
118
118
|
font-size: 13px;
|
|
119
|
-
text-align: center;
|
|
120
119
|
line-height: 30px;
|
|
121
120
|
vertical-align: middle;
|
|
122
121
|
}
|
|
123
122
|
|
|
124
123
|
.sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-popover .seatable-setting-container {
|
|
125
124
|
list-style: none;
|
|
126
|
-
overflow-y: auto;
|
|
127
125
|
max-height: 280px;
|
|
128
126
|
min-height: 80px;
|
|
129
127
|
padding: 8px 0px;
|
|
130
128
|
}
|
|
131
129
|
|
|
130
|
+
.sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-popover .seatable-setting-container .seatable-setting-input-wrapper {
|
|
131
|
+
padding: 0px 10px 8px 10px;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-popover .seatable-setting-container .seatable-setting-input-wrapper input {
|
|
135
|
+
max-height: 28px;
|
|
136
|
+
font-size: 14px;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-popover .seatable-setting-container .seatable-setting-list-wrapper {
|
|
140
|
+
max-height: 228px;
|
|
141
|
+
overflow-y: auto;
|
|
142
|
+
}
|
|
143
|
+
|
|
132
144
|
.sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-popover .seatable-setting-container .seatable-setting-item {
|
|
133
145
|
position: relative;
|
|
134
146
|
white-space: nowrap;
|
|
@@ -191,6 +203,9 @@
|
|
|
191
203
|
left: 158px !important;
|
|
192
204
|
transform: unset !important;
|
|
193
205
|
max-height: 350px;
|
|
194
|
-
overflow: auto;
|
|
195
206
|
margin-top: 0px !important;
|
|
196
207
|
}
|
|
208
|
+
|
|
209
|
+
.sdoc-seatable-setting-hide-column-popover-wrapper .field-settings .field-settings-body {
|
|
210
|
+
max-height: 278px;
|
|
211
|
+
}
|