@seafile/sdoc-editor 1.0.220 → 1.0.221-alph-0.0.1
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/sdoc-editor-plugins.css +0 -23
- package/dist/basic-sdk/extension/commons/insert-element-dialog/index.js +12 -2
- 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/element-type.js +2 -1
- package/dist/basic-sdk/extension/constants/index.js +8 -2
- package/dist/basic-sdk/extension/constants/menus-config.js +5 -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/index.js +7 -0
- package/dist/basic-sdk/extension/plugins/multi-column/plugin.js +1 -1
- 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-row/dialog/add-seatable-row-dialog/helpers.js +35 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/dialog/add-seatable-row-dialog/index.css +106 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/dialog/add-seatable-row-dialog/index.js +81 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/dialog/add-seatable-row-dialog/record-content.js +201 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/dialog/add-seatable-row-dialog/record-item.js +41 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/dialog/add-seatable-row-dialog/row-card-header-cell.js +108 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/dialog/add-seatable-row-dialog/row-card-header.js +143 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/dialog/add-seatable-row-dialog/row-card-item.js +240 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/dialog/add-seatable-row-dialog/seatable-table-record.js +37 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/dialog/add-seatable-row-dialog/seatable-table.js +134 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/helpers.js +90 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/index.js +17 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/menu/index.js +44 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/menu/seatable-list.js +61 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/model.js +19 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/plugin.js +60 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/render-elem/index.css +123 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/render-elem/index.js +161 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/render-elem/record-header.js +78 -0
- package/dist/basic-sdk/extension/plugins/seatable-row/render-elem/record-item.js +41 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/menu/index.js +3 -6
- 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/render/custom-element.js +5 -0
- package/dist/basic-sdk/extension/toolbar/header-toolbar/insert-toolbar/index.js +7 -2
- package/dist/basic-sdk/extension/toolbar/side-toolbar/helpers.js +3 -1
- package/dist/pages/document-plugin-editor.js +3 -1
- package/package.json +1 -1
- package/public/locales/cs/sdoc-editor.json +7 -1
- package/public/locales/de/sdoc-editor.json +66 -60
- package/public/locales/en/sdoc-editor.json +8 -1
- package/public/locales/es/sdoc-editor.json +7 -1
- package/public/locales/es_AR/sdoc-editor.json +7 -1
- package/public/locales/es_MX/sdoc-editor.json +7 -1
- package/public/locales/fr/sdoc-editor.json +240 -234
- package/public/locales/it/sdoc-editor.json +7 -1
- package/public/locales/ru/sdoc-editor.json +8 -2
- package/public/locales/zh_CN/sdoc-editor.json +7 -1
- package/public/media/sdoc-editor-font/iconfont.css +15 -14
- package/public/media/sdoc-editor-font/iconfont.eot +0 -0
- package/public/media/sdoc-editor-font/iconfont.svg +3 -1
- package/public/media/sdoc-editor-font/iconfont.ttf +0 -0
- package/public/media/sdoc-editor-font/iconfont.woff +0 -0
- package/public/media/sdoc-editor-font/iconfont.woff2 +0 -0
- package/public/media/sdoc-editor-font.css +11 -7
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _slate = require("@seafile/slate");
|
|
8
|
+
var _constants = require("../../constants");
|
|
9
|
+
var _core = require("../../core");
|
|
10
|
+
const withRow = editor => {
|
|
11
|
+
const {
|
|
12
|
+
isVoid,
|
|
13
|
+
deleteBackward,
|
|
14
|
+
normalizeNode
|
|
15
|
+
} = editor;
|
|
16
|
+
const newEditor = editor;
|
|
17
|
+
newEditor.isVoid = element => {
|
|
18
|
+
const {
|
|
19
|
+
type
|
|
20
|
+
} = element;
|
|
21
|
+
if (type === _constants.ELEMENT_TYPE.SEATABLE_ROW) return true;
|
|
22
|
+
return isVoid(element);
|
|
23
|
+
};
|
|
24
|
+
newEditor.deleteBackward = unit => {
|
|
25
|
+
const {
|
|
26
|
+
selection
|
|
27
|
+
} = editor;
|
|
28
|
+
const focusPoint = _slate.Editor.before(editor, selection);
|
|
29
|
+
const point = _slate.Editor.before(editor, selection, {
|
|
30
|
+
distance: 1
|
|
31
|
+
});
|
|
32
|
+
if (!point) return deleteBackward(unit);
|
|
33
|
+
const [node, path] = _slate.Editor.node(editor, [point.path[0], point.path[1]]);
|
|
34
|
+
const isPerviousSeaTableRow = node.type === _constants.SEATABLE_ROW;
|
|
35
|
+
if (isPerviousSeaTableRow && Range.isCollapsed(selection) && (0, _core.isBlockAboveEmpty)(editor) && !_slate.Path.isCommon(path, selection.anchor.path)) {
|
|
36
|
+
deleteBackward(unit);
|
|
37
|
+
(0, _core.focusEditor)(newEditor, _slate.Editor.end(newEditor, focusPoint));
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
deleteBackward(unit);
|
|
41
|
+
};
|
|
42
|
+
newEditor.normalizeNode = _ref => {
|
|
43
|
+
let [node, path] = _ref;
|
|
44
|
+
const type = (0, _core.getNodeType)(node);
|
|
45
|
+
if (type !== _constants.SEATABLE_ROW) {
|
|
46
|
+
return normalizeNode([node, path]);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// insert empty node,continue editor
|
|
50
|
+
const isLast = (0, _core.isLastNode)(newEditor, node);
|
|
51
|
+
if (isLast) {
|
|
52
|
+
const p = (0, _core.generateEmptyElement)(_constants.PARAGRAPH);
|
|
53
|
+
_slate.Transforms.insertNodes(newEditor, p, {
|
|
54
|
+
at: [path[0] + 1]
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
return newEditor;
|
|
59
|
+
};
|
|
60
|
+
var _default = exports.default = withRow;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
.seatable-rows-record-wrapper {
|
|
2
|
+
outline: none;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.seatable-rows-record-container {
|
|
6
|
+
margin-top: 5px;
|
|
7
|
+
border: 1.5px solid #ddd;
|
|
8
|
+
border-radius: 5px;
|
|
9
|
+
width: 100%;
|
|
10
|
+
overflow: auto;
|
|
11
|
+
position: relative;
|
|
12
|
+
user-select: none;
|
|
13
|
+
outline: none;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.seatable-rows-record-container .seatable-rows-record-table-name {
|
|
17
|
+
margin-left: 10px;
|
|
18
|
+
margin-top: 10px;
|
|
19
|
+
margin-bottom: 3px;
|
|
20
|
+
font-size: 15px;
|
|
21
|
+
font-weight: 500;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
.seatable-rows-record-wrapper .seatable-rows-record-container table tr {
|
|
26
|
+
background-color: unset !important;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.seatable-rows-record-wrapper .seatable-rows-record-container table {
|
|
30
|
+
margin-top: unset !important;
|
|
31
|
+
margin-bottom: 3px !important;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.seatable-rows-record-wrapper .seatable-rows-record-container table th {
|
|
35
|
+
font-size: 12px;
|
|
36
|
+
color: #666;
|
|
37
|
+
font-weight: 400;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.seatable-rows-record-wrapper .seatable-rows-record-container table td {
|
|
41
|
+
font-size: 14px;
|
|
42
|
+
font-weight: 400;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.seatable-rows-record-wrapper .seatable-rows-record-container table,
|
|
46
|
+
.seatable-rows-record-wrapper .seatable-rows-record-container table td,
|
|
47
|
+
.seatable-rows-record-wrapper .seatable-rows-record-container table th {
|
|
48
|
+
border: unset !important;
|
|
49
|
+
padding-bottom: 5px !important;
|
|
50
|
+
padding-top: 5px !important;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.seatable-rows-record-container .seatable-view-records .seatable-rows-record-header,
|
|
54
|
+
.seatable-rows-record-wrapper .seatable-rows-record-container table td,
|
|
55
|
+
.seatable-rows-record-wrapper .seatable-rows-record-container table th {
|
|
56
|
+
height: 32px;
|
|
57
|
+
padding: 0 10px;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.seatable-rows-record-container.selected {
|
|
61
|
+
box-shadow: 0 0 0 2px #0aba45;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.seatable-rows-record-container .seatable-view-records {
|
|
65
|
+
margin: 0;
|
|
66
|
+
width: fit-content;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.seatable-rows-record-container .seatable-column-editor-wrapper {
|
|
70
|
+
display: flex;
|
|
71
|
+
align-items: center;
|
|
72
|
+
justify-content: center;
|
|
73
|
+
position: absolute;
|
|
74
|
+
left: 0;
|
|
75
|
+
bottom: 0;
|
|
76
|
+
width: 100%;
|
|
77
|
+
height: 30px;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.seatable-rows-record-container .seatable-column-editor-wrapper .seatable-column-width-tip {
|
|
81
|
+
background-color: #0009;
|
|
82
|
+
border-radius: 3px;
|
|
83
|
+
color: #fff;
|
|
84
|
+
font-size: 13px;
|
|
85
|
+
line-height: 20px;
|
|
86
|
+
padding: 2px 8px;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.seatable-rows-record-header th {
|
|
90
|
+
display: inline-flex;
|
|
91
|
+
align-items: center;
|
|
92
|
+
justify-content: flex-start;
|
|
93
|
+
flex: unset !important;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.seatable-rows-record-header .seatable-rows-record-header-cell {
|
|
97
|
+
position: relative;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.seatable-rows-record-header .seatable-rows-record-header-cell span:first-child {
|
|
101
|
+
white-space: nowrap;
|
|
102
|
+
overflow: hidden;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.seatable-rows-record-body-cell {
|
|
106
|
+
display: inline-flex;
|
|
107
|
+
align-items: center;
|
|
108
|
+
justify-content: flex-start;
|
|
109
|
+
white-space: nowrap;
|
|
110
|
+
text-overflow: ellipsis;
|
|
111
|
+
overflow: hidden;
|
|
112
|
+
word-break: break-all;
|
|
113
|
+
flex: unset !important
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.seatable-rows-record-body-cell .document-number-formatter {
|
|
117
|
+
text-align: right;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.seatable-rows-record-body-cell .collaborator-item .collaborator-avatar img {
|
|
121
|
+
min-width: 16px;
|
|
122
|
+
min-height: 16px;
|
|
123
|
+
}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
11
|
+
var _reactI18next = require("react-i18next");
|
|
12
|
+
var _slateReact = require("@seafile/slate-react");
|
|
13
|
+
var _dtableUtils = require("dtable-utils");
|
|
14
|
+
var _recordItem = _interopRequireDefault(require("./record-item"));
|
|
15
|
+
var _recordHeader = _interopRequireDefault(require("./record-header"));
|
|
16
|
+
require("./index.css");
|
|
17
|
+
const RowRecord = _ref => {
|
|
18
|
+
var _tableInfoRef$current, _tableInfoRef$current2;
|
|
19
|
+
let {
|
|
20
|
+
element,
|
|
21
|
+
attributes,
|
|
22
|
+
children,
|
|
23
|
+
editor
|
|
24
|
+
} = _ref;
|
|
25
|
+
const {
|
|
26
|
+
table_id,
|
|
27
|
+
selected_rows_id,
|
|
28
|
+
column_width = {}
|
|
29
|
+
} = element;
|
|
30
|
+
const [columns, setColumns] = (0, _react.useState)([]);
|
|
31
|
+
const [tableName, setTableName] = (0, _react.useState)(null);
|
|
32
|
+
const [shownRecords, setShownRecords] = (0, _react.useState)([]);
|
|
33
|
+
const [columnWidthMap, setColumnWidthMap] = (0, _react.useState)(column_width);
|
|
34
|
+
const [isShowColumnWidth, setIsShowColumnWidth] = (0, _react.useState)(false);
|
|
35
|
+
const [isCanModifyColumnWidth, setIsCanModifyColumnWidth] = (0, _react.useState)(false);
|
|
36
|
+
const isSelected = (0, _slateReact.useSelected)();
|
|
37
|
+
const {
|
|
38
|
+
t
|
|
39
|
+
} = (0, _reactI18next.useTranslation)('sdoc-editor');
|
|
40
|
+
const readOnly = (0, _slateReact.useReadOnly)();
|
|
41
|
+
const tableInfoRef = (0, _react.useRef)(null);
|
|
42
|
+
(0, _react.useEffect)(() => {
|
|
43
|
+
async function initTableData() {
|
|
44
|
+
const table = await editor.getTableById(table_id);
|
|
45
|
+
setTableName(table.name);
|
|
46
|
+
if (!tableInfoRef.current) {
|
|
47
|
+
tableInfoRef.current = {};
|
|
48
|
+
}
|
|
49
|
+
if (!tableInfoRef.current[table_id]) {
|
|
50
|
+
tableInfoRef.current[table_id] = {
|
|
51
|
+
formulaRows: editor.getTableFormulaResults(table, table.rows),
|
|
52
|
+
idRowMap: table.rows.reduce((result, item) => {
|
|
53
|
+
result[item._id] = item;
|
|
54
|
+
return result;
|
|
55
|
+
}, {})
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
const validRecords = table.rows;
|
|
59
|
+
const shownRecords = validRecords.filter(item => selected_rows_id.includes(item._id));
|
|
60
|
+
setShownRecords(shownRecords);
|
|
61
|
+
const updatedColumnWidthMap = Object.fromEntries(Object.entries(columnWidthMap).map(_ref2 => {
|
|
62
|
+
let [key, value] = _ref2;
|
|
63
|
+
return [key, value * 1.2];
|
|
64
|
+
}));
|
|
65
|
+
setColumnWidthMap(updatedColumnWidthMap);
|
|
66
|
+
let validColumns = table.columns;
|
|
67
|
+
validColumns = validColumns.map(column => {
|
|
68
|
+
const {
|
|
69
|
+
type
|
|
70
|
+
} = column;
|
|
71
|
+
if (type === _dtableUtils.CellType.LINK) {
|
|
72
|
+
const {
|
|
73
|
+
data
|
|
74
|
+
} = column;
|
|
75
|
+
const {
|
|
76
|
+
display_column_key,
|
|
77
|
+
array_type,
|
|
78
|
+
array_data
|
|
79
|
+
} = data;
|
|
80
|
+
const display_column = {
|
|
81
|
+
key: display_column_key || '0000',
|
|
82
|
+
type: array_type || _dtableUtils.CellType.TEXT,
|
|
83
|
+
data: array_data || null
|
|
84
|
+
};
|
|
85
|
+
return {
|
|
86
|
+
...column,
|
|
87
|
+
data: {
|
|
88
|
+
...data,
|
|
89
|
+
display_column
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
return column;
|
|
94
|
+
});
|
|
95
|
+
setColumns(validColumns);
|
|
96
|
+
}
|
|
97
|
+
initTableData();
|
|
98
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
99
|
+
}, [table_id]);
|
|
100
|
+
(0, _react.useEffect)(() => {
|
|
101
|
+
if (!isSelected) {
|
|
102
|
+
queueMicrotask(() => {
|
|
103
|
+
setIsShowColumnWidth(false);
|
|
104
|
+
setIsCanModifyColumnWidth(false);
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
}, [editor, element, isSelected]);
|
|
108
|
+
const onTableClick = (0, _react.useCallback)(event => {
|
|
109
|
+
if (readOnly) return;
|
|
110
|
+
setIsShowColumnWidth(true);
|
|
111
|
+
}, [readOnly]);
|
|
112
|
+
const onTableDoubleClick = (0, _react.useCallback)(event => {
|
|
113
|
+
if (readOnly) return;
|
|
114
|
+
setIsShowColumnWidth(false);
|
|
115
|
+
setIsCanModifyColumnWidth(true);
|
|
116
|
+
}, [readOnly]);
|
|
117
|
+
const formulaRows = (tableInfoRef === null || tableInfoRef === void 0 ? void 0 : (_tableInfoRef$current = tableInfoRef.current) === null || _tableInfoRef$current === void 0 ? void 0 : (_tableInfoRef$current2 = _tableInfoRef$current[table_id]) === null || _tableInfoRef$current2 === void 0 ? void 0 : _tableInfoRef$current2.formulaRows) || {};
|
|
118
|
+
return /*#__PURE__*/_react.default.createElement("div", Object.assign({}, attributes, {
|
|
119
|
+
className: "seatable-rows-record-wrapper"
|
|
120
|
+
}), /*#__PURE__*/_react.default.createElement("div", {
|
|
121
|
+
className: (0, _classnames.default)('seatable-rows-record-container', {
|
|
122
|
+
'selected': isSelected
|
|
123
|
+
}),
|
|
124
|
+
onClick: onTableClick,
|
|
125
|
+
onDoubleClick: onTableDoubleClick
|
|
126
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
127
|
+
className: "seatable-rows-record-table-name"
|
|
128
|
+
}, tableName), /*#__PURE__*/_react.default.createElement("table", {
|
|
129
|
+
className: "seatable-rows-record-table"
|
|
130
|
+
}, /*#__PURE__*/_react.default.createElement("thead", null, /*#__PURE__*/_react.default.createElement(_recordHeader.default, {
|
|
131
|
+
editor: editor,
|
|
132
|
+
element: element,
|
|
133
|
+
columns: columns,
|
|
134
|
+
isCanModifyColumnWidth: isCanModifyColumnWidth,
|
|
135
|
+
columnWidthMap: columnWidthMap,
|
|
136
|
+
setColumnWidthMap: setColumnWidthMap
|
|
137
|
+
})), /*#__PURE__*/_react.default.createElement("tbody", {
|
|
138
|
+
className: "seatable-rows-record-body-container"
|
|
139
|
+
}, shownRecords.map((record, index) => {
|
|
140
|
+
const formulaRow = formulaRows[record._id] || {};
|
|
141
|
+
return /*#__PURE__*/_react.default.createElement(_recordItem.default, {
|
|
142
|
+
key: record._id,
|
|
143
|
+
index: index,
|
|
144
|
+
editor: editor,
|
|
145
|
+
record: record,
|
|
146
|
+
formulaRow: formulaRow,
|
|
147
|
+
columns: columns,
|
|
148
|
+
columnWidthMap: columnWidthMap
|
|
149
|
+
});
|
|
150
|
+
}))), !readOnly && isShowColumnWidth && !isCanModifyColumnWidth && /*#__PURE__*/_react.default.createElement("div", {
|
|
151
|
+
className: "seatable-column-editor-wrapper"
|
|
152
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
153
|
+
className: "seatable-column-width-tip"
|
|
154
|
+
}, t('Double_click_then_adjust_field_width'))), children));
|
|
155
|
+
};
|
|
156
|
+
const renderRow = (props, editor) => {
|
|
157
|
+
return /*#__PURE__*/_react.default.createElement(RowRecord, Object.assign({}, props, {
|
|
158
|
+
editor: editor
|
|
159
|
+
}));
|
|
160
|
+
};
|
|
161
|
+
var _default = exports.default = renderRow;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = RecordHeader;
|
|
9
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _slateReact = require("@seafile/slate-react");
|
|
11
|
+
var _slate = require("@seafile/slate");
|
|
12
|
+
var _draggable = _interopRequireDefault(require("../../seatable-tables/draggable"));
|
|
13
|
+
const dragAbleStyle = {
|
|
14
|
+
position: 'absolute',
|
|
15
|
+
top: 0,
|
|
16
|
+
right: -3,
|
|
17
|
+
width: 5,
|
|
18
|
+
borderRadius: '3px',
|
|
19
|
+
zIndex: 2,
|
|
20
|
+
margin: '3px 0',
|
|
21
|
+
height: 'calc(100% - 6px)'
|
|
22
|
+
};
|
|
23
|
+
function RecordHeader(_ref) {
|
|
24
|
+
let {
|
|
25
|
+
editor,
|
|
26
|
+
element,
|
|
27
|
+
columns,
|
|
28
|
+
columnWidthMap,
|
|
29
|
+
setColumnWidthMap,
|
|
30
|
+
isCanModifyColumnWidth
|
|
31
|
+
} = _ref;
|
|
32
|
+
const headerCellRef = (0, _react.useRef)({});
|
|
33
|
+
const getWidthFromMouseEvent = (e, currentCell) => {
|
|
34
|
+
const right = e.pageX || e.touches && e.touches[0] && e.touches[0].pageX || e.changedTouches && e.changedTouches[e.changedTouches.length - 1].pageX;
|
|
35
|
+
const left = currentCell.getBoundingClientRect().left;
|
|
36
|
+
return right - left;
|
|
37
|
+
};
|
|
38
|
+
const onDrag = (e, currentCell, currentColumnKey) => {
|
|
39
|
+
const width = getWidthFromMouseEvent(e, currentCell);
|
|
40
|
+
if (width >= 80) {
|
|
41
|
+
const newColumnWidthMap = {
|
|
42
|
+
...columnWidthMap,
|
|
43
|
+
[currentColumnKey]: width
|
|
44
|
+
};
|
|
45
|
+
setColumnWidthMap(newColumnWidthMap);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
const onDragEnd = () => {
|
|
49
|
+
const path = _slateReact.ReactEditor.findPath(editor, element);
|
|
50
|
+
_slate.Transforms.setNodes(editor, {
|
|
51
|
+
column_width: columnWidthMap
|
|
52
|
+
}, {
|
|
53
|
+
at: [path[0]]
|
|
54
|
+
});
|
|
55
|
+
};
|
|
56
|
+
return /*#__PURE__*/_react.default.createElement("tr", {
|
|
57
|
+
className: "seatable-rows-record-header"
|
|
58
|
+
}, columns.map(column => {
|
|
59
|
+
const width = columnWidthMap[column.key];
|
|
60
|
+
return /*#__PURE__*/_react.default.createElement("th", {
|
|
61
|
+
ref: ref => {
|
|
62
|
+
headerCellRef.current[column.key] = ref;
|
|
63
|
+
},
|
|
64
|
+
className: "seatable-rows-record-header-cell",
|
|
65
|
+
key: column.key,
|
|
66
|
+
style: {
|
|
67
|
+
width,
|
|
68
|
+
minWidth: width
|
|
69
|
+
}
|
|
70
|
+
}, /*#__PURE__*/_react.default.createElement("span", null, column.name), isCanModifyColumnWidth && /*#__PURE__*/_react.default.createElement(_draggable.default, {
|
|
71
|
+
style: dragAbleStyle,
|
|
72
|
+
onDrag: e => {
|
|
73
|
+
onDrag(e, headerCellRef.current[column.key], column.key);
|
|
74
|
+
},
|
|
75
|
+
onDragEnd: onDragEnd
|
|
76
|
+
}));
|
|
77
|
+
}));
|
|
78
|
+
}
|
|
@@ -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 = RecordItem;
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var _dtableUtils = require("dtable-utils");
|
|
10
|
+
var _formatter = _interopRequireDefault(require("../../seatable-tables/formatter"));
|
|
11
|
+
function RecordItem(_ref) {
|
|
12
|
+
let {
|
|
13
|
+
record,
|
|
14
|
+
formulaRow,
|
|
15
|
+
columns,
|
|
16
|
+
editor,
|
|
17
|
+
columnWidthMap
|
|
18
|
+
} = _ref;
|
|
19
|
+
return /*#__PURE__*/_react.default.createElement("tr", {
|
|
20
|
+
className: "seatable-rows-record-body"
|
|
21
|
+
}, columns.map(column => {
|
|
22
|
+
const width = columnWidthMap[column.key];
|
|
23
|
+
let cellValue = record[column.key];
|
|
24
|
+
if ([_dtableUtils.CellType.LINK, _dtableUtils.CellType.LINK_FORMULA, _dtableUtils.CellType.FORMULA].includes(column.type)) {
|
|
25
|
+
cellValue = formulaRow[column.key];
|
|
26
|
+
}
|
|
27
|
+
return /*#__PURE__*/_react.default.createElement("td", {
|
|
28
|
+
className: "seatable-rows-record-body-cell",
|
|
29
|
+
key: record._id + '_' + column.key,
|
|
30
|
+
style: {
|
|
31
|
+
width,
|
|
32
|
+
minWidth: width
|
|
33
|
+
}
|
|
34
|
+
}, /*#__PURE__*/_react.default.createElement(_formatter.default, {
|
|
35
|
+
isSample: true,
|
|
36
|
+
column: column,
|
|
37
|
+
cellValue: cellValue,
|
|
38
|
+
collaborators: editor.collaborators
|
|
39
|
+
}));
|
|
40
|
+
}));
|
|
41
|
+
}
|
|
@@ -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,
|
|
@@ -16,7 +16,7 @@ const isMenuDisabled = (editor, readonly) => {
|
|
|
16
16
|
match: n => {
|
|
17
17
|
const type = (0, _core.getNodeType)(n);
|
|
18
18
|
if (type === _elementType.CODE_BLOCK) return true; // Code block
|
|
19
|
-
if (_slate.Editor.isVoid(editor, n)) return true; // void node
|
|
19
|
+
if (_slate.Editor.isVoid(editor, n) && (n === null || n === void 0 ? void 0 : n.type) !== _elementType.SEATABLE_COLUMN) return true; // void node
|
|
20
20
|
|
|
21
21
|
return false;
|
|
22
22
|
},
|
|
@@ -49,6 +49,10 @@ const TextStyleMenuList = _ref => {
|
|
|
49
49
|
return (0, _helpers2.isMenuDisabled)(editor, readonly);
|
|
50
50
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
51
51
|
}, [editor, readonly]);
|
|
52
|
+
const isSelectedSeaTableColumn = (0, _react.useCallback)(() => {
|
|
53
|
+
const entery = (0, _core.getSelectedNodeByType)(editor, _constants.SEATABLE_COLUMN);
|
|
54
|
+
return !!entery;
|
|
55
|
+
}, [editor]);
|
|
52
56
|
const openLinkDialog = (0, _react.useCallback)(() => {
|
|
53
57
|
const eventBus = _eventBus.default.getInstance();
|
|
54
58
|
eventBus.dispatch(_constants2.INTERNAL_EVENT.INSERT_ELEMENT, {
|
|
@@ -99,11 +103,16 @@ const TextStyleMenuList = _ref => {
|
|
|
99
103
|
}, [editor, selectedFontSize, selectedFontSizeValue]);
|
|
100
104
|
const getTextStyleList = (0, _react.useCallback)(key => {
|
|
101
105
|
return _constants.MENUS_CONFIG_MAP[key].map(item => {
|
|
106
|
+
let disable = isDisabled();
|
|
107
|
+
const disableTypes = [_constants.TEXT_STYLE_MAP.CODE, _constants.TEXT_STYLE_MAP.LINK, _constants.TEXT_STYLE_MAP.SUPERSCRIPT, _constants.TEXT_STYLE_MAP.SUBSCRIPT];
|
|
108
|
+
if (disableTypes.includes(item.type)) {
|
|
109
|
+
disable = isSelectedSeaTableColumn() ? true : disable;
|
|
110
|
+
}
|
|
102
111
|
let itemProps = {
|
|
103
112
|
isRichEditor,
|
|
104
113
|
className,
|
|
105
114
|
ariaLabel: item === null || item === void 0 ? void 0 : item.ariaLabel,
|
|
106
|
-
disabled:
|
|
115
|
+
disabled: disable,
|
|
107
116
|
isActive: isActive(item.type),
|
|
108
117
|
onMouseDown: item.isColor ? () => {} : onMouseDown
|
|
109
118
|
};
|
|
@@ -205,6 +205,11 @@ const CustomRenderElement = props => {
|
|
|
205
205
|
const [renderColumn] = _plugins.SeaTableColumnPlugin.renderElements;
|
|
206
206
|
return renderColumn(props, editor);
|
|
207
207
|
}
|
|
208
|
+
case _elementType.SEATABLE_ROW:
|
|
209
|
+
{
|
|
210
|
+
const [renderRow] = _plugins.SeaTableRowPlugin.renderElements;
|
|
211
|
+
return renderRow(props, editor);
|
|
212
|
+
}
|
|
208
213
|
case _elementType.SEATABLE_TABLE:
|
|
209
214
|
{
|
|
210
215
|
const [renderSeaTableTable] = _plugins.SeaTableViewsPlugin.renderElements;
|
|
@@ -18,7 +18,8 @@ var _menu4 = _interopRequireDefault(require("../../../plugins/code-block/menu"))
|
|
|
18
18
|
var _menu5 = _interopRequireDefault(require("../../../plugins/sdoc-link/menu"));
|
|
19
19
|
var _menu6 = _interopRequireDefault(require("../../../plugins/file-link/menu"));
|
|
20
20
|
var _menu7 = _interopRequireDefault(require("../../../plugins/seatable-column/menu"));
|
|
21
|
-
var _menu8 = _interopRequireDefault(require("../../../plugins/seatable-
|
|
21
|
+
var _menu8 = _interopRequireDefault(require("../../../plugins/seatable-row/menu"));
|
|
22
|
+
var _menu9 = _interopRequireDefault(require("../../../plugins/seatable-tables/menu"));
|
|
22
23
|
var _eventBus = _interopRequireDefault(require("../../../../utils/event-bus"));
|
|
23
24
|
var _constants = require("../../../../constants");
|
|
24
25
|
require("./index.css");
|
|
@@ -41,6 +42,10 @@ const InsertToolbar = _ref => {
|
|
|
41
42
|
return _eventBus.default.getInstance();
|
|
42
43
|
}, []);
|
|
43
44
|
const toggle = (0, _react.useCallback)(event => {
|
|
45
|
+
var _event$target;
|
|
46
|
+
if (event !== null && event !== void 0 && event.target && (event === null || event === void 0 ? void 0 : (_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target.tagName) === 'INPUT') {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
44
49
|
popoverRef.current && popoverRef.current.toggle();
|
|
45
50
|
setMenuShow(!isShowMenu);
|
|
46
51
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
@@ -97,7 +102,7 @@ const InsertToolbar = _ref => {
|
|
|
97
102
|
}
|
|
98
103
|
}, /*#__PURE__*/_react.default.createElement(_menu.default, props), /*#__PURE__*/_react.default.createElement(_tableMenu.default, props), (editor === null || editor === void 0 ? void 0 : editor.editorType) !== _constants.DOCUMENT_PLUGIN_EDITOR && /*#__PURE__*/_react.default.createElement(_menu2.default, props), /*#__PURE__*/_react.default.createElement(_menu3.default, props), /*#__PURE__*/_react.default.createElement(_menu4.default, props), /*#__PURE__*/_react.default.createElement("div", {
|
|
99
104
|
className: "sdoc-dropdown-menu-divider"
|
|
100
|
-
}), editor.columns && /*#__PURE__*/_react.default.createElement(_menu7.default, props), editor.tables && /*#__PURE__*/_react.default.createElement(
|
|
105
|
+
}), editor.tables && /*#__PURE__*/_react.default.createElement(_menu8.default, props), editor.columns && /*#__PURE__*/_react.default.createElement(_menu7.default, props), editor.tables && /*#__PURE__*/_react.default.createElement(_menu9.default, props), !editor.tables && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_menu5.default, props), /*#__PURE__*/_react.default.createElement(_menu6.default, props)))));
|
|
101
106
|
};
|
|
102
107
|
InsertToolbar.defaultProps = {
|
|
103
108
|
isRichEditor: true,
|
|
@@ -134,7 +134,9 @@ const isVoidNode = node => {
|
|
|
134
134
|
const isCodeBlock = node.type === _constants.CODE_BLOCK;
|
|
135
135
|
const isCallout = node.type === _constants.CALL_OUT;
|
|
136
136
|
const isSeaTableTable = node.type === _constants.SEATABLE_TABLE;
|
|
137
|
-
|
|
137
|
+
const isSeaTableColumn = node.type === _constants.SEATABLE_COLUMN;
|
|
138
|
+
const isSeaTableRow = node.type === _constants.SEATABLE_ROW;
|
|
139
|
+
return _slate.Node.string(node) === '' && !hasImage && !isVideo && !isTable && !isCodeBlock && !isCallout && !isSeaTableTable && !isSeaTableColumn && !isSeaTableRow;
|
|
138
140
|
};
|
|
139
141
|
exports.isVoidNode = isVoidNode;
|
|
140
142
|
const isNotSupportTransform = node => {
|
|
@@ -28,6 +28,7 @@ const DocumentPluginEditor = _ref => {
|
|
|
28
28
|
showOutline,
|
|
29
29
|
tableId,
|
|
30
30
|
columns,
|
|
31
|
+
rows,
|
|
31
32
|
getColumnCellValue,
|
|
32
33
|
tables,
|
|
33
34
|
getTableById,
|
|
@@ -40,8 +41,9 @@ const DocumentPluginEditor = _ref => {
|
|
|
40
41
|
const forceUpdate = (0, _useForceUpdate.default)();
|
|
41
42
|
const validEditor = (0, _react.useMemo)(() => {
|
|
42
43
|
const withColumnPlugin = _plugins.SeaTableColumnPlugin.editorPlugin;
|
|
44
|
+
const withRowPlugin = _plugins.SeaTableRowPlugin.editorPlugin;
|
|
43
45
|
const withViewsPlugin = _plugins.SeaTableViewsPlugin.editorPlugin;
|
|
44
|
-
const defaultEditor = withViewsPlugin(withColumnPlugin((0, _extension.createDefaultEditor)()));
|
|
46
|
+
const defaultEditor = withViewsPlugin(withRowPlugin(withColumnPlugin((0, _extension.createDefaultEditor)())));
|
|
45
47
|
|
|
46
48
|
// getEditorConfig cache the config, so we need to update the uuid,for plugin editor
|
|
47
49
|
docUuid && _context.default.updateConfigUuid(docUuid);
|
package/package.json
CHANGED
|
@@ -613,5 +613,11 @@
|
|
|
613
613
|
"Support_Youtube_Tencent_Bilibili_and_more": "Support Youtube, Tencent, Bilibili and more",
|
|
614
614
|
"Image_cannot_be_copied_Please_download_the_source_image": "Image cannot be copied. Please download the source image,",
|
|
615
615
|
"And_select_insert_-_image_to_upload": "and select 「insert」 - 「image」 to upload.",
|
|
616
|
-
"Image_copy_error": "Image copy error"
|
|
616
|
+
"Image_copy_error": "Image copy error",
|
|
617
|
+
"Image_is_uploading": "Image is uploading...",
|
|
618
|
+
"Select_at_least_one_row_record": "Select at least one row record",
|
|
619
|
+
"Selected_row_records_cannot_exceed_10_rows": "Selected row records cannot exceed 10 rows",
|
|
620
|
+
"Select_seatable_rows": "Select seatable rows",
|
|
621
|
+
"Add_rows_record": "Add rows record",
|
|
622
|
+
"Double_click_then_adjust_field_width": "Double click, then adjust field width"
|
|
617
623
|
}
|