@seafile/sdoc-editor 1.0.31 → 1.0.32
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/extension/plugins/seatable-column/helpers.js +11 -1
- package/dist/basic-sdk/extension/plugins/seatable-column/menu/column-list-menu.js +9 -4
- package/dist/basic-sdk/extension/plugins/seatable-column/menu/index.js +8 -6
- package/dist/basic-sdk/extension/plugins/seatable-tables/helpers.js +10 -2
- package/dist/basic-sdk/extension/plugins/seatable-tables/menu/index.js +11 -6
- package/dist/basic-sdk/extension/plugins/seatable-tables/op-menu/index.css +171 -6
- package/dist/basic-sdk/extension/plugins/seatable-tables/op-menu/index.js +313 -18
- package/dist/basic-sdk/extension/plugins/seatable-tables/render-element/index.css +1 -1
- package/dist/basic-sdk/extension/plugins/seatable-tables/render-element/seatable-table.js +4 -3
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/filters-list.css +1 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover.js +5 -12
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/index.js +7 -30
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/hide-column-setter/hide-column-popover.js +5 -12
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/hide-column-setter/index.js +8 -52
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/sort-setter/index.js +10 -34
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/sort-setter/sort-popover.js +6 -12
- package/dist/basic-sdk/extension/toolbar/side-toolbar/insert-block-menu.js +11 -1
- package/package.json +1 -1
- package/public/media/sdoc-editor-font/iconfont.eot +0 -0
- package/public/media/sdoc-editor-font/iconfont.svg +8 -0
- 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 +24 -10
|
@@ -2,6 +2,7 @@ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
|
2
2
|
import { Editor, Transforms, Range } from '@seafile/slate';
|
|
3
3
|
import slugid from 'slugid';
|
|
4
4
|
import { BLOCKQUOTE, CHECK_LIST_ITEM, COLUMN, IMAGE, ORDERED_LIST, PARAGRAPH, TABLE_CELL, UNORDERED_LIST } from '../../constants/element-type';
|
|
5
|
+
import { INSERT_POSITION } from '../../constants';
|
|
5
6
|
import { focusEditor, getNodeType } from '../../core';
|
|
6
7
|
import Column from './model';
|
|
7
8
|
import * as CellType from './constants/cell-types';
|
|
@@ -46,10 +47,19 @@ export const getColumnType = editor => {
|
|
|
46
47
|
const [n] = match;
|
|
47
48
|
return getNodeType(n);
|
|
48
49
|
};
|
|
49
|
-
export const insertSeaTableColumn = (editor, active, option)
|
|
50
|
+
export const insertSeaTableColumn = function (editor, active, option) {
|
|
51
|
+
let insertPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : INSERT_POSITION.CURRENT;
|
|
50
52
|
if (!active) {
|
|
51
53
|
const column = new Column(option);
|
|
52
54
|
column.id = slugid.nice();
|
|
55
|
+
if (insertPosition === INSERT_POSITION.AFTER) {
|
|
56
|
+
const path = Editor.path(editor, editor.selection);
|
|
57
|
+
path && Transforms.insertNodes(editor, _objectSpread({}, column), {
|
|
58
|
+
at: [path[0] + 1]
|
|
59
|
+
});
|
|
60
|
+
focusEditor(editor);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
53
63
|
Transforms.insertNodes(editor, _objectSpread({}, column));
|
|
54
64
|
}
|
|
55
65
|
focusEditor(editor);
|
|
@@ -6,8 +6,10 @@ import './column-list-menu.css';
|
|
|
6
6
|
const NOT_SUPPORT_COLUMN_TYPES = ['button', 'file'];
|
|
7
7
|
export default function ColumnListMenu(_ref) {
|
|
8
8
|
let {
|
|
9
|
-
editor
|
|
9
|
+
editor,
|
|
10
|
+
insertPosition
|
|
10
11
|
} = _ref;
|
|
12
|
+
const computedBottom = insertPosition ? '0px' : '';
|
|
11
13
|
const columns = useMemo(() => {
|
|
12
14
|
if (!editor.columns) return [];
|
|
13
15
|
return editor.columns.filter(column => !NOT_SUPPORT_COLUMN_TYPES.includes(column.type));
|
|
@@ -27,10 +29,13 @@ export default function ColumnListMenu(_ref) {
|
|
|
27
29
|
};
|
|
28
30
|
const onMousedown = useCallback(option => {
|
|
29
31
|
const active = isActive(editor);
|
|
30
|
-
insertSeaTableColumn(editor, active, option);
|
|
31
|
-
}, [editor]);
|
|
32
|
+
insertSeaTableColumn(editor, active, option, insertPosition);
|
|
33
|
+
}, [editor, insertPosition]);
|
|
32
34
|
return /*#__PURE__*/React.createElement("div", {
|
|
33
|
-
className: "column-list-menu"
|
|
35
|
+
className: "column-list-menu",
|
|
36
|
+
style: {
|
|
37
|
+
bottom: computedBottom
|
|
38
|
+
}
|
|
34
39
|
}, options.map(option => {
|
|
35
40
|
return /*#__PURE__*/React.createElement("div", {
|
|
36
41
|
key: option.value,
|
|
@@ -7,7 +7,8 @@ import { isMenuDisabled } from '../helpers';
|
|
|
7
7
|
const SeaTableColumnMenu = _ref => {
|
|
8
8
|
let {
|
|
9
9
|
editor,
|
|
10
|
-
readonly
|
|
10
|
+
readonly,
|
|
11
|
+
insertPosition
|
|
11
12
|
} = _ref;
|
|
12
13
|
const disabled = isMenuDisabled(editor, readonly);
|
|
13
14
|
const menuConfig = MENUS_CONFIG_MAP[ELEMENT_TYPE.COLUMN];
|
|
@@ -17,16 +18,17 @@ const SeaTableColumnMenu = _ref => {
|
|
|
17
18
|
className: "pr-2"
|
|
18
19
|
}, !disabled && /*#__PURE__*/React.createElement("i", {
|
|
19
20
|
className: "sdocfont sdoc-right-slide sdoc-dropdown-item-right-icon"
|
|
20
|
-
})
|
|
21
|
+
}), !disabled && /*#__PURE__*/React.createElement(UncontrolledPopover, {
|
|
21
22
|
target: menuConfig.id,
|
|
22
|
-
className: "sdoc-menu-popover sdoc-dropdown-menu sdoc-sub-dropdown-menu",
|
|
23
23
|
trigger: "hover",
|
|
24
24
|
placement: "right-start",
|
|
25
25
|
hideArrow: true,
|
|
26
|
-
fade: false
|
|
26
|
+
fade: false,
|
|
27
|
+
popperClassName: "seatable-column-popover"
|
|
27
28
|
}, /*#__PURE__*/React.createElement(ColumnListMenu, {
|
|
28
29
|
editor: editor,
|
|
29
|
-
readonly: readonly
|
|
30
|
-
|
|
30
|
+
readonly: readonly,
|
|
31
|
+
insertPosition: insertPosition
|
|
32
|
+
}))));
|
|
31
33
|
};
|
|
32
34
|
export default SeaTableColumnMenu;
|
|
@@ -2,7 +2,7 @@ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
|
2
2
|
import { Editor, Transforms } from '@seafile/slate';
|
|
3
3
|
import slugId from 'slugid';
|
|
4
4
|
import { getNodeType, isTextNode, getParentNode, generateDefaultText } from '../../core';
|
|
5
|
-
import { ELEMENT_TYPE, SEATABLE_TABLE } from '../../constants';
|
|
5
|
+
import { ELEMENT_TYPE, SEATABLE_TABLE, INSERT_POSITION } from '../../constants';
|
|
6
6
|
export const isInsertSeaTableTableDisabled = (editor, readonly) => {
|
|
7
7
|
if (readonly) return true;
|
|
8
8
|
const {
|
|
@@ -51,8 +51,16 @@ export const generateSeaTableTable = (table_id, editor) => {
|
|
|
51
51
|
children: [generateDefaultText()]
|
|
52
52
|
};
|
|
53
53
|
};
|
|
54
|
-
export const insertSeaTableTable = (editor, item)
|
|
54
|
+
export const insertSeaTableTable = function (editor, item) {
|
|
55
|
+
let insertPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : INSERT_POSITION.CURRENT;
|
|
55
56
|
const node = generateSeaTableTable(item._id, editor);
|
|
57
|
+
if (insertPosition === INSERT_POSITION.AFTER) {
|
|
58
|
+
const path = Editor.path(editor, editor.selection);
|
|
59
|
+
path && Transforms.insertNodes(editor, node, {
|
|
60
|
+
at: [path[0] + 1]
|
|
61
|
+
});
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
56
64
|
Transforms.setNodes(editor, node);
|
|
57
65
|
};
|
|
58
66
|
export const updateSeaTableTable = (editor, props) => {
|
|
@@ -7,21 +7,23 @@ import './index.css';
|
|
|
7
7
|
const SeaTableTableMenu = _ref => {
|
|
8
8
|
let {
|
|
9
9
|
editor,
|
|
10
|
-
readonly
|
|
10
|
+
readonly,
|
|
11
|
+
insertPosition
|
|
11
12
|
} = _ref;
|
|
12
13
|
const disabled = isInsertSeaTableTableDisabled(editor, readonly);
|
|
13
14
|
const menuConfig = MENUS_CONFIG_MAP[SEATABLE_TABLE];
|
|
15
|
+
const computedBottom = insertPosition ? '0px' : '';
|
|
14
16
|
const tables = editor.tables;
|
|
15
17
|
const onViewClick = useCallback(item => {
|
|
16
|
-
insertSeaTableTable(editor, item);
|
|
17
|
-
}, [editor]);
|
|
18
|
+
insertSeaTableTable(editor, item, insertPosition);
|
|
19
|
+
}, [editor, insertPosition]);
|
|
18
20
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DropdownMenuItem, {
|
|
19
21
|
disabled: disabled,
|
|
20
22
|
menuConfig: menuConfig,
|
|
21
23
|
className: "pr-2"
|
|
22
24
|
}, !disabled && /*#__PURE__*/React.createElement("i", {
|
|
23
25
|
className: "sdocfont sdoc-right-slide sdoc-dropdown-item-right-icon"
|
|
24
|
-
})
|
|
26
|
+
}), !disabled && /*#__PURE__*/React.createElement(UncontrolledPopover, {
|
|
25
27
|
target: menuConfig.id,
|
|
26
28
|
trigger: "hover",
|
|
27
29
|
className: "sdoc-menu-popover sdoc-dropdown-menu sdoc-sub-dropdown-menu",
|
|
@@ -29,13 +31,16 @@ const SeaTableTableMenu = _ref => {
|
|
|
29
31
|
hideArrow: true,
|
|
30
32
|
fade: false
|
|
31
33
|
}, /*#__PURE__*/React.createElement("div", {
|
|
32
|
-
className: "sdoc-dropdown-menu-container
|
|
34
|
+
className: "sdoc-dropdown-menu-container",
|
|
35
|
+
style: {
|
|
36
|
+
bottom: computedBottom
|
|
37
|
+
}
|
|
33
38
|
}, tables.map(item => {
|
|
34
39
|
return /*#__PURE__*/React.createElement("div", {
|
|
35
40
|
key: item._id,
|
|
36
41
|
className: "sdoc-dropdown-menu-item",
|
|
37
42
|
onClick: () => onViewClick(item)
|
|
38
43
|
}, item.name);
|
|
39
|
-
}))));
|
|
44
|
+
})))));
|
|
40
45
|
};
|
|
41
46
|
export default SeaTableTableMenu;
|
|
@@ -1,16 +1,181 @@
|
|
|
1
|
-
.seatable-
|
|
1
|
+
.sdoc-seatable-hover-menu-container {
|
|
2
2
|
position: absolute;
|
|
3
|
-
|
|
3
|
+
height: 42px;
|
|
4
|
+
z-index: 101;
|
|
5
|
+
width: fit-content;
|
|
6
|
+
max-width: 250px;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.sdoc-seatable-hover-menu-container .hover-menu-container {
|
|
4
10
|
height: 36px;
|
|
11
|
+
width: 100%;
|
|
12
|
+
padding: 7px 8px;
|
|
5
13
|
background-color: #fff;
|
|
6
|
-
border: 1px solid #eee;
|
|
7
|
-
border-radius: 3px;
|
|
8
|
-
z-index: 100;
|
|
9
14
|
display: flex;
|
|
15
|
+
justify-content: space-around;
|
|
16
|
+
align-items: center;
|
|
17
|
+
border-radius: 3px;
|
|
18
|
+
box-shadow: 0 1px 0 rgba(0, 0, 0, 0.08);
|
|
19
|
+
border: 1px solid #e8e8e8;
|
|
10
20
|
}
|
|
11
21
|
|
|
12
|
-
.seatable-
|
|
22
|
+
.sdoc-seatable-hover-menu-container .hover-menu-container .active {
|
|
23
|
+
color: #212529;
|
|
24
|
+
text-decoration: none;
|
|
25
|
+
background: #f2f2f2;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.sdoc-seatable-hover-menu-container .hover-menu-container .op-item {
|
|
29
|
+
position: relative;
|
|
30
|
+
height: 100%;
|
|
31
|
+
width: 100%;
|
|
32
|
+
font-size: 12px;
|
|
33
|
+
color: #212529;
|
|
34
|
+
border-radius: 2px;
|
|
35
|
+
text-align: center;
|
|
36
|
+
line-height: 20px;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.sdoc-seatable-hover-menu-container .sdoc-seatable-hover-operation-item.sdoc-seatable-hover-operation-lang .op-item {
|
|
40
|
+
padding: 0 5px;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-hover-operation-lang .icon-font {
|
|
44
|
+
display: inline-flex;
|
|
45
|
+
align-items: center;
|
|
46
|
+
justify-content: center;
|
|
47
|
+
margin-left: 8px;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.sdoc-seatable-hover-menu-container .sdoc-seatable-hover-operation-item {
|
|
51
|
+
height: 20px;
|
|
52
|
+
width: 20px;
|
|
53
|
+
text-align: center;
|
|
54
|
+
justify-content: center;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.sdoc-seatable-hover-menu-container .sdoc-seatable-hover-operation-item.sdoc-seatable-hover-operation-lang {
|
|
58
|
+
width: fit-content;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.sdoc-seatable-hover-menu-container .sdoc-seatable-hover-operation-lang .icon-font {
|
|
62
|
+
color: #999;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.sdoc-seatable-hover-menu-container .sdoc-seatable-hover-operation-divider {
|
|
66
|
+
height: 20px;
|
|
67
|
+
width: 1px;
|
|
68
|
+
background-color: #e5e5e5;
|
|
69
|
+
margin: 0 8px;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.sdoc-seatable-hover-menu-container .hover-menu-container .op-item:hover {
|
|
73
|
+
color: #212529;
|
|
74
|
+
text-decoration: none;
|
|
75
|
+
background: #f2f2f2;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.sdoc-seatable-hover-menu-container .icon-font {
|
|
13
79
|
font-size: 12px;
|
|
14
80
|
color: #444;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-popver {
|
|
84
|
+
position: absolute;
|
|
85
|
+
top: 38px;
|
|
86
|
+
left: 0px;
|
|
87
|
+
width: 200px;
|
|
88
|
+
overflow-y: hidden;
|
|
89
|
+
background-color: #fff;
|
|
90
|
+
border-radius: 4px;
|
|
91
|
+
box-shadow: 0 0 5px #ccc;
|
|
92
|
+
border: 1px solid #dedede;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-right-popver {
|
|
96
|
+
left: 200px;
|
|
97
|
+
width: 300px;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-popver .tables-list-empty {
|
|
101
|
+
padding: 10px;
|
|
102
|
+
width: 100%;
|
|
103
|
+
font-size: 13px;
|
|
104
|
+
text-align: center;
|
|
105
|
+
line-height: 30px;
|
|
106
|
+
vertical-align: middle;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-popver .seatable-setting-container {
|
|
110
|
+
list-style: none;
|
|
111
|
+
overflow-y: auto;
|
|
112
|
+
max-height: 280px;
|
|
113
|
+
min-height: 80px;
|
|
114
|
+
padding: 8px 0px;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-popver .seatable-setting-container .seatable-setting-item {
|
|
118
|
+
position: relative;
|
|
119
|
+
white-space: nowrap;
|
|
120
|
+
cursor: pointer;
|
|
121
|
+
line-height: 32px;
|
|
122
|
+
height: 32px;
|
|
123
|
+
font-size: 14px;
|
|
124
|
+
padding: 0px 16px;
|
|
125
|
+
display: flex;
|
|
126
|
+
justify-content: space-between;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
.sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-popver .seatable-setting-container .seatable-custom-switch-item .custom-switch-description {
|
|
130
|
+
margin-left: 0px;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-popver .seatable-setting-container .seatable-custom-switch-item .custom-switch {
|
|
134
|
+
padding-left: 0px;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-popver .seatable-setting-container .seatable-custom-switch-item .custom-switch-indicator {
|
|
138
|
+
position: absolute;
|
|
139
|
+
right: 0px;
|
|
15
140
|
cursor: pointer;
|
|
16
141
|
}
|
|
142
|
+
|
|
143
|
+
.sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-popver .seatable-setting-container .seatable-setting-item:hover {
|
|
144
|
+
background-color: #f5f5f5;;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-popver .seatable-setting-container .seatable-setting-item .active {
|
|
148
|
+
background-color: #f5f5f5;;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
.sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-popver .seatable-setting-container .seatable-setting-item .check-mark {
|
|
152
|
+
opacity: 0;
|
|
153
|
+
padding: 0 10px;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-popver .seatable-setting-container .seatable-setting-item .checked {
|
|
157
|
+
opacity: 1;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
.sdoc-seatable-setting-filter-popver-wrapper {
|
|
161
|
+
top: 38px !important;
|
|
162
|
+
left: 83px !important;
|
|
163
|
+
transform: unset !important;
|
|
164
|
+
margin-top: 0px !important;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
.sdoc-seatable-setting-sort-popver-wrapper {
|
|
168
|
+
top: 38px !important;
|
|
169
|
+
left: 122px !important;
|
|
170
|
+
transform: unset !important;
|
|
171
|
+
margin-top: 0px !important;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
.sdoc-seatable-setting-hide-column-popver-wrapper {
|
|
175
|
+
top: 38px !important;
|
|
176
|
+
left: 158px !important;
|
|
177
|
+
transform: unset !important;
|
|
178
|
+
max-height: 350px;
|
|
179
|
+
overflow: auto;
|
|
180
|
+
margin-top: 0px !important;
|
|
181
|
+
}
|
|
@@ -1,29 +1,324 @@
|
|
|
1
|
-
import React, { useCallback, useState } from 'react';
|
|
1
|
+
import React, { useCallback, useState, useEffect, useRef } from 'react';
|
|
2
|
+
import { useTranslation } from 'react-i18next';
|
|
2
3
|
import { ElementPopover } from '../../../commons';
|
|
3
|
-
import
|
|
4
|
+
import Tooltip from '../../../../../components/tooltip';
|
|
5
|
+
import CustomSwitch from '../seatable-settings/custom-switch';
|
|
6
|
+
import FilterSetter from '../seatable-settings/filter-setter';
|
|
7
|
+
import SortSetter from '../seatable-settings/sort-setter';
|
|
8
|
+
import HideColumnSetter from '../seatable-settings/hide-column-setter';
|
|
9
|
+
import { useScrollContext } from '../../../../hooks/use-scroll-context';
|
|
10
|
+
import { updateSeaTableTable } from '../helpers';
|
|
4
11
|
import './index.css';
|
|
5
|
-
|
|
12
|
+
const TablesList = _ref => {
|
|
13
|
+
let {
|
|
14
|
+
tablesData,
|
|
15
|
+
onSelectTable,
|
|
16
|
+
selectedTableText
|
|
17
|
+
} = _ref;
|
|
18
|
+
const {
|
|
19
|
+
t
|
|
20
|
+
} = useTranslation();
|
|
21
|
+
if (!tablesData.length) {
|
|
22
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
23
|
+
className: "tables-list-empty"
|
|
24
|
+
}, /*#__PURE__*/React.createElement("span", null, t('Search_not_found')));
|
|
25
|
+
}
|
|
26
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
27
|
+
className: "seatable-setting-container"
|
|
28
|
+
}, tablesData.map(item => {
|
|
29
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
30
|
+
className: "seatable-setting-item ".concat(selectedTableText === item.name ? 'active' : ''),
|
|
31
|
+
id: item._id,
|
|
32
|
+
key: item._id,
|
|
33
|
+
onClick: () => {
|
|
34
|
+
onSelectTable(item);
|
|
35
|
+
}
|
|
36
|
+
}, item.name, /*#__PURE__*/React.createElement("span", {
|
|
37
|
+
className: "check-mark ".concat(selectedTableText === item.name ? 'checked' : '')
|
|
38
|
+
}, /*#__PURE__*/React.createElement("i", {
|
|
39
|
+
className: "sdocfont sdoc-check-mark icon-font"
|
|
40
|
+
})));
|
|
41
|
+
}));
|
|
42
|
+
};
|
|
43
|
+
const TablesSettings = _ref2 => {
|
|
44
|
+
let {
|
|
45
|
+
settings,
|
|
46
|
+
updatePageSettings
|
|
47
|
+
} = _ref2;
|
|
48
|
+
const {
|
|
49
|
+
t
|
|
50
|
+
} = useTranslation();
|
|
51
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
52
|
+
className: "seatable-setting-container"
|
|
53
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
54
|
+
className: "seatable-setting-item seatable-custom-switch-item"
|
|
55
|
+
}, /*#__PURE__*/React.createElement(CustomSwitch, {
|
|
56
|
+
checked: settings['show_record_numbers'] === true ? true : false,
|
|
57
|
+
isLocked: false,
|
|
58
|
+
title: t('Show_record_numbers'),
|
|
59
|
+
onPropertiesChanged: value => {
|
|
60
|
+
updatePageSettings({
|
|
61
|
+
show_record_numbers: value
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
})), /*#__PURE__*/React.createElement("div", {
|
|
65
|
+
className: "seatable-setting-item seatable-custom-switch-item"
|
|
66
|
+
}, /*#__PURE__*/React.createElement(CustomSwitch, {
|
|
67
|
+
checked: settings['alternate_color'] === false ? false : true,
|
|
68
|
+
isLocked: false,
|
|
69
|
+
title: t('Alternate_color'),
|
|
70
|
+
onPropertiesChanged: value => {
|
|
71
|
+
updatePageSettings({
|
|
72
|
+
alternate_color: value
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
})));
|
|
76
|
+
};
|
|
77
|
+
export default function OpMenu(_ref3) {
|
|
6
78
|
let {
|
|
7
79
|
editor,
|
|
8
80
|
element,
|
|
9
|
-
menuPosition
|
|
10
|
-
|
|
81
|
+
menuPosition,
|
|
82
|
+
seaTableRef
|
|
83
|
+
} = _ref3;
|
|
84
|
+
const {
|
|
85
|
+
t
|
|
86
|
+
} = useTranslation();
|
|
87
|
+
const scrollRef = useScrollContext();
|
|
88
|
+
const timer = useRef(null);
|
|
89
|
+
const tablesData = editor.tables;
|
|
90
|
+
const [isShowTooltip, setIsShowTooltip] = useState(false);
|
|
91
|
+
const [selectedTable, setSelectedTable] = useState({});
|
|
92
|
+
const [selectedTableText, setSelectedTableText] = useState('');
|
|
93
|
+
const [isShowTableList, setIsShowTablesList] = useState(false);
|
|
94
|
+
const [isShowFilter, setIsShowFilter] = useState(false);
|
|
95
|
+
const [isShowSort, setIsShowSort] = useState(false);
|
|
96
|
+
const [isShowHideColumn, setIsShowHideColumn] = useState(false);
|
|
11
97
|
const [isShowSeaTableSetting, setIsShowSeaTableSetting] = useState(false);
|
|
12
|
-
const
|
|
13
|
-
|
|
98
|
+
const onCloseOther = useCallback(closeList => {
|
|
99
|
+
closeList.forEach(item => {
|
|
100
|
+
item === 'tableList' && setIsShowTablesList(false);
|
|
101
|
+
item === 'tableFilter' && setIsShowFilter(false);
|
|
102
|
+
item === 'tableSort' && setIsShowSort(false);
|
|
103
|
+
item === 'tableColumnHidden' && setIsShowHideColumn(false);
|
|
104
|
+
item === 'tableSetting' && setIsShowSeaTableSetting(false);
|
|
105
|
+
});
|
|
14
106
|
}, []);
|
|
15
|
-
const
|
|
16
|
-
|
|
107
|
+
const onClickOutside = useCallback(e => {
|
|
108
|
+
if (seaTableRef === null || seaTableRef === void 0 ? void 0 : seaTableRef.current.contains(e.target)) {
|
|
109
|
+
onCloseOther(['tableList', 'tableFilter', 'tableSort', 'tableColumnHidden', 'tableSetting']);
|
|
110
|
+
}
|
|
111
|
+
}, [onCloseOther, seaTableRef]);
|
|
112
|
+
const handleScroll = useCallback(e => {
|
|
113
|
+
onCloseOther(['tableList', 'tableFilter', 'tableSort', 'tableColumnHidden', 'tableSetting']);
|
|
114
|
+
}, [onCloseOther]);
|
|
115
|
+
useEffect(() => {
|
|
116
|
+
setIsShowTooltip(true);
|
|
117
|
+
document.addEventListener('click', onClickOutside);
|
|
118
|
+
let observerRefValue = null;
|
|
119
|
+
if (scrollRef.current) {
|
|
120
|
+
scrollRef.current.addEventListener('scroll', handleScroll);
|
|
121
|
+
observerRefValue = scrollRef.current;
|
|
122
|
+
}
|
|
123
|
+
return () => {
|
|
124
|
+
document.removeEventListener('click', onClickOutside);
|
|
125
|
+
observerRefValue.removeEventListener('scroll', handleScroll);
|
|
126
|
+
};
|
|
127
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
17
128
|
}, []);
|
|
129
|
+
useEffect(() => {
|
|
130
|
+
const {
|
|
131
|
+
table_id
|
|
132
|
+
} = element;
|
|
133
|
+
const table = editor.tables.find(item => item._id === table_id);
|
|
134
|
+
if (table) {
|
|
135
|
+
setSelectedTable(table);
|
|
136
|
+
setSelectedTableText(table.name);
|
|
137
|
+
}
|
|
138
|
+
}, [editor.tables, element]);
|
|
139
|
+
const updatePageSettings = useCallback(updateProperties => {
|
|
140
|
+
if (timer.current) {
|
|
141
|
+
clearTimeout(timer.current);
|
|
142
|
+
}
|
|
143
|
+
timer.current = setTimeout(() => {
|
|
144
|
+
updateSeaTableTable(editor, updateProperties);
|
|
145
|
+
}, 300);
|
|
146
|
+
}, [editor]);
|
|
147
|
+
const onShowTables = useCallback(() => {
|
|
148
|
+
setIsShowTablesList(!isShowTableList);
|
|
149
|
+
onCloseOther(['tableFilter', 'tableSort', 'tableColumnHidden', 'tableSetting']);
|
|
150
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
151
|
+
}, [isShowTableList]);
|
|
152
|
+
const onSelectTable = useCallback(item => {
|
|
153
|
+
const {
|
|
154
|
+
name,
|
|
155
|
+
_id
|
|
156
|
+
} = item;
|
|
157
|
+
setSelectedTableText(name);
|
|
158
|
+
const table = editor.tables.find(item => item._id === _id);
|
|
159
|
+
updatePageSettings({
|
|
160
|
+
table_id: _id,
|
|
161
|
+
filters: [],
|
|
162
|
+
filter_conjunction: 'And',
|
|
163
|
+
sorts: [],
|
|
164
|
+
shown_column_keys: table.columns.map(item => item.key),
|
|
165
|
+
show_record_numbers: false,
|
|
166
|
+
alternate_color: true,
|
|
167
|
+
select_column_display_option_color: true
|
|
168
|
+
});
|
|
169
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
170
|
+
}, [editor]);
|
|
171
|
+
const onFilter = useCallback(() => {
|
|
172
|
+
setIsShowFilter(!isShowFilter);
|
|
173
|
+
onCloseOther(['tableList', 'tableSort', 'tableColumnHidden', 'tableSetting']);
|
|
174
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
175
|
+
}, [isShowFilter]);
|
|
176
|
+
const onFiltersChange = useCallback((filters, filter_conjunction) => {
|
|
177
|
+
updatePageSettings({
|
|
178
|
+
filters,
|
|
179
|
+
filter_conjunction
|
|
180
|
+
});
|
|
181
|
+
}, [updatePageSettings]);
|
|
182
|
+
const onSort = useCallback(() => {
|
|
183
|
+
setIsShowSort(!isShowSort);
|
|
184
|
+
onCloseOther(['tableList', 'tableFilter', 'tableColumnHidden', 'tableSetting']);
|
|
185
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
186
|
+
}, [isShowSort]);
|
|
187
|
+
const onSortsChange = useCallback(sorts => {
|
|
188
|
+
updatePageSettings({
|
|
189
|
+
sorts
|
|
190
|
+
});
|
|
191
|
+
}, [updatePageSettings]);
|
|
192
|
+
const onHiddenColumn = useCallback(() => {
|
|
193
|
+
setIsShowHideColumn(!isShowHideColumn);
|
|
194
|
+
onCloseOther(['tableList', 'tableSort', 'tableFilter', 'tableSetting']);
|
|
195
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
196
|
+
}, [isShowHideColumn]);
|
|
197
|
+
const onHideColumnChange = useCallback(shownColumnKeys => {
|
|
198
|
+
updatePageSettings({
|
|
199
|
+
shown_column_keys: shownColumnKeys
|
|
200
|
+
});
|
|
201
|
+
}, [updatePageSettings]);
|
|
202
|
+
const onSettings = useCallback(() => {
|
|
203
|
+
setIsShowSeaTableSetting(!isShowSeaTableSetting);
|
|
204
|
+
onCloseOther(['tableList', 'tableSort', 'tableColumnHidden', 'tableFilter']);
|
|
205
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
206
|
+
}, [isShowSeaTableSetting]);
|
|
18
207
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ElementPopover, null, /*#__PURE__*/React.createElement("div", {
|
|
19
|
-
|
|
208
|
+
id: "sdoc-seatable-hover-menu-container",
|
|
209
|
+
className: "sdoc-seatable-hover-menu-container",
|
|
20
210
|
style: menuPosition
|
|
21
|
-
}, /*#__PURE__*/React.createElement("
|
|
22
|
-
className: "
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
211
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
212
|
+
className: "hover-menu-container"
|
|
213
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
214
|
+
className: "sdoc-seatable-hover-operation-item sdoc-seatable-hover-operation-lang"
|
|
215
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
216
|
+
role: "button",
|
|
217
|
+
className: "op-item ".concat(isShowTableList ? 'active' : ''),
|
|
218
|
+
onClick: onShowTables
|
|
219
|
+
}, /*#__PURE__*/React.createElement("span", null, selectedTableText), /*#__PURE__*/React.createElement("i", {
|
|
220
|
+
className: "sdocfont sdoc-drop-down icon-font"
|
|
221
|
+
}))), /*#__PURE__*/React.createElement("div", {
|
|
222
|
+
className: "sdoc-seatable-hover-operation-divider"
|
|
223
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
224
|
+
id: "sdoc_seatable_filter",
|
|
225
|
+
className: "sdoc-seatable-hover-operation-item"
|
|
226
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
227
|
+
role: "button",
|
|
228
|
+
className: "op-item",
|
|
229
|
+
onClick: onFilter
|
|
230
|
+
}, /*#__PURE__*/React.createElement("i", {
|
|
231
|
+
className: "sdocfont sdoc-filter1 icon-font"
|
|
232
|
+
})), isShowTooltip && /*#__PURE__*/React.createElement(Tooltip, {
|
|
233
|
+
target: "sdoc_seatable_filter",
|
|
234
|
+
placement: "top",
|
|
235
|
+
fade: true
|
|
236
|
+
}, t('Filter'))), /*#__PURE__*/React.createElement("div", {
|
|
237
|
+
className: "sdoc-seatable-hover-operation-divider"
|
|
238
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
239
|
+
id: "sdoc_seatable_sort",
|
|
240
|
+
className: "sdoc-seatable-hover-operation-item"
|
|
241
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
242
|
+
role: "button",
|
|
243
|
+
className: "op-item",
|
|
244
|
+
onClick: onSort
|
|
245
|
+
}, /*#__PURE__*/React.createElement("i", {
|
|
246
|
+
className: "sdocfont sdoc-sort icon-font"
|
|
247
|
+
})), isShowTooltip && /*#__PURE__*/React.createElement(Tooltip, {
|
|
248
|
+
target: "sdoc_seatable_sort",
|
|
249
|
+
placement: "top",
|
|
250
|
+
fade: true
|
|
251
|
+
}, t('Sort'))), /*#__PURE__*/React.createElement("div", {
|
|
252
|
+
className: "sdoc-seatable-hover-operation-divider"
|
|
253
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
254
|
+
id: "sdoc_seatable_hidden_column",
|
|
255
|
+
className: "sdoc-seatable-hover-operation-item"
|
|
256
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
257
|
+
role: "button",
|
|
258
|
+
className: "op-item",
|
|
259
|
+
onClick: onHiddenColumn
|
|
260
|
+
}, /*#__PURE__*/React.createElement("i", {
|
|
261
|
+
className: "sdocfont sdoc-eye-slash icon-font"
|
|
262
|
+
})), isShowTooltip && /*#__PURE__*/React.createElement(Tooltip, {
|
|
263
|
+
target: "sdoc_seatable_hidden_column",
|
|
264
|
+
placement: "top",
|
|
265
|
+
fade: true
|
|
266
|
+
}, t('Hide_columns'))), /*#__PURE__*/React.createElement("div", {
|
|
267
|
+
className: "sdoc-seatable-hover-operation-divider"
|
|
268
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
269
|
+
id: "sdoc_seatable_settings",
|
|
270
|
+
className: "sdoc-seatable-hover-operation-item"
|
|
271
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
272
|
+
role: "button",
|
|
273
|
+
className: "op-item",
|
|
274
|
+
onClick: onSettings
|
|
275
|
+
}, /*#__PURE__*/React.createElement("i", {
|
|
276
|
+
className: "sdocfont sdoc-set-up icon-font"
|
|
277
|
+
})), isShowTooltip && /*#__PURE__*/React.createElement(Tooltip, {
|
|
278
|
+
target: "sdoc_seatable_settings",
|
|
279
|
+
placement: "top",
|
|
280
|
+
fade: true
|
|
281
|
+
}, t('Style_settings'))), isShowTableList && /*#__PURE__*/React.createElement("div", {
|
|
282
|
+
className: "sdoc-seatable-setting-popver"
|
|
283
|
+
}, /*#__PURE__*/React.createElement(TablesList, {
|
|
284
|
+
tablesData: tablesData,
|
|
285
|
+
onSelectTable: onSelectTable,
|
|
286
|
+
selectedTableText: selectedTableText
|
|
287
|
+
})), /*#__PURE__*/React.createElement(FilterSetter, {
|
|
288
|
+
target: "sdoc_seatable_filter",
|
|
289
|
+
container: document.getElementById('sdoc-seatable-hover-menu-container'),
|
|
290
|
+
popperClassName: "sdoc-seatable-setting-filter-popver-wrapper",
|
|
291
|
+
columns: selectedTable.columns,
|
|
292
|
+
filterConjunction: element.filter_conjunction || 'And',
|
|
293
|
+
filters: element.filters || [],
|
|
294
|
+
collaborators: [],
|
|
295
|
+
isNeedSubmit: true,
|
|
296
|
+
isShowFilterPopover: isShowFilter,
|
|
297
|
+
onFiltersChange: onFiltersChange,
|
|
298
|
+
hidePopover: onFilter
|
|
299
|
+
}), /*#__PURE__*/React.createElement(SortSetter, {
|
|
300
|
+
target: "sdoc_seatable_sort",
|
|
301
|
+
container: document.getElementById('sdoc-seatable-hover-menu-container'),
|
|
302
|
+
popperClassName: "sdoc-seatable-setting-sort-popver-wrapper",
|
|
303
|
+
columns: selectedTable.columns,
|
|
304
|
+
sorts: element.sorts || [],
|
|
305
|
+
isShowSortPopover: isShowSort,
|
|
306
|
+
isNeedSubmit: true,
|
|
307
|
+
onSortsChange: onSortsChange,
|
|
308
|
+
onSortToggle: onSort
|
|
309
|
+
}), /*#__PURE__*/React.createElement(HideColumnSetter, {
|
|
310
|
+
target: "sdoc_seatable_hidden_column",
|
|
311
|
+
container: document.getElementById('sdoc-seatable-hover-menu-container'),
|
|
312
|
+
popperClassName: "sdoc-seatable-setting-hide-column-popver-wrapper",
|
|
313
|
+
columns: selectedTable.columns,
|
|
314
|
+
shownColumnKeys: element.shown_column_keys || [],
|
|
315
|
+
isShowHideColumnSetter: isShowHideColumn,
|
|
316
|
+
onSettingUpdate: onHideColumnChange,
|
|
317
|
+
onPopoverToggle: onHiddenColumn
|
|
318
|
+
}), isShowSeaTableSetting && /*#__PURE__*/React.createElement("div", {
|
|
319
|
+
className: "sdoc-seatable-setting-popver sdoc-seatable-setting-right-popver"
|
|
320
|
+
}, /*#__PURE__*/React.createElement(TablesSettings, {
|
|
321
|
+
settings: element,
|
|
322
|
+
updatePageSettings: updatePageSettings
|
|
323
|
+
}))))));
|
|
29
324
|
}
|
|
@@ -130,7 +130,7 @@ function SeaTableTable(_ref) {
|
|
|
130
130
|
top,
|
|
131
131
|
left
|
|
132
132
|
} = seaTableRef.current.getBoundingClientRect();
|
|
133
|
-
const menuTop = top -
|
|
133
|
+
const menuTop = top - 42; // top = top distance - menu height
|
|
134
134
|
const newMenuPosition = {
|
|
135
135
|
top: menuTop,
|
|
136
136
|
left: left // left = code-block left distance
|
|
@@ -164,7 +164,7 @@ function SeaTableTable(_ref) {
|
|
|
164
164
|
top,
|
|
165
165
|
left
|
|
166
166
|
} = seaTableRef.current.getBoundingClientRect();
|
|
167
|
-
const menuTop = top -
|
|
167
|
+
const menuTop = top - 42; // top = top distance - menu height
|
|
168
168
|
const newMenuPosition = {
|
|
169
169
|
top: menuTop,
|
|
170
170
|
left: left // left = callout left distance
|
|
@@ -189,7 +189,8 @@ function SeaTableTable(_ref) {
|
|
|
189
189
|
}, isShowMenu && /*#__PURE__*/React.createElement(OpMenu, {
|
|
190
190
|
editor: editor,
|
|
191
191
|
element: element,
|
|
192
|
-
menuPosition: menuPosition
|
|
192
|
+
menuPosition: menuPosition,
|
|
193
|
+
seaTableRef: seaTableRef
|
|
193
194
|
}), isLoading && /*#__PURE__*/React.createElement(Loading, null), !isLoading && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("table", {
|
|
194
195
|
className: classNames('seatable-view-records', {
|
|
195
196
|
'no_alternate_color': !element.alternate_color
|
|
@@ -5,7 +5,6 @@ import { Button, UncontrolledPopover } from 'reactstrap';
|
|
|
5
5
|
import { withTranslation } from 'react-i18next';
|
|
6
6
|
import { FILTER_COLUMN_OPTIONS, getValidFilters } from 'dtable-utils';
|
|
7
7
|
import CommonAddTool from '../common-add-tool';
|
|
8
|
-
import { getEventClassName } from '../utils/utils';
|
|
9
8
|
import FiltersList from './filter-popover-widgets/filters-list';
|
|
10
9
|
import { getFilterByColumn } from './filters-utils';
|
|
11
10
|
import './filter-popover.css';
|
|
@@ -27,14 +26,6 @@ class FilterPopover extends Component {
|
|
|
27
26
|
this.props.hidePopover();
|
|
28
27
|
}
|
|
29
28
|
});
|
|
30
|
-
_defineProperty(this, "hideDTablePopover", e => {
|
|
31
|
-
if (this.dtablePopoverRef && !getEventClassName(e).includes('popover') && !this.dtablePopoverRef.contains(e.target)) {
|
|
32
|
-
this.props.hidePopover(e);
|
|
33
|
-
e.preventDefault();
|
|
34
|
-
e.stopPropagation();
|
|
35
|
-
return false;
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
29
|
_defineProperty(this, "isNeedSubmit", () => {
|
|
39
30
|
return this.props.isNeedSubmit;
|
|
40
31
|
});
|
|
@@ -130,17 +121,17 @@ class FilterPopover extends Component {
|
|
|
130
121
|
};
|
|
131
122
|
}
|
|
132
123
|
componentDidMount() {
|
|
133
|
-
document.addEventListener('mousedown', this.hideDTablePopover, true);
|
|
134
124
|
document.addEventListener('keydown', this.onHotKey);
|
|
135
125
|
}
|
|
136
126
|
componentWillUnmount() {
|
|
137
|
-
document.removeEventListener('mousedown', this.hideDTablePopover, true);
|
|
138
127
|
document.removeEventListener('keydown', this.onHotKey);
|
|
139
128
|
}
|
|
140
129
|
render() {
|
|
141
130
|
const {
|
|
142
131
|
target,
|
|
143
132
|
columns,
|
|
133
|
+
container,
|
|
134
|
+
popperClassName,
|
|
144
135
|
t
|
|
145
136
|
} = this.props;
|
|
146
137
|
const {
|
|
@@ -149,7 +140,9 @@ class FilterPopover extends Component {
|
|
|
149
140
|
} = this.state;
|
|
150
141
|
const canAddFilter = columns.length > 0;
|
|
151
142
|
return /*#__PURE__*/React.createElement(UncontrolledPopover, {
|
|
152
|
-
|
|
143
|
+
container: container,
|
|
144
|
+
popperClassName: popperClassName,
|
|
145
|
+
placement: "bottom-start",
|
|
153
146
|
isOpen: true,
|
|
154
147
|
target: target,
|
|
155
148
|
fade: false,
|
package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/index.js
CHANGED
|
@@ -7,11 +7,6 @@ import FilterPopover from './filter-popover';
|
|
|
7
7
|
class FilterSetter extends React.Component {
|
|
8
8
|
constructor(props) {
|
|
9
9
|
super(props);
|
|
10
|
-
_defineProperty(this, "onFilterSetterToggle", () => {
|
|
11
|
-
this.setState({
|
|
12
|
-
isShowFilterPopover: !this.state.isShowFilterPopover
|
|
13
|
-
});
|
|
14
|
-
});
|
|
15
10
|
_defineProperty(this, "update", update => {
|
|
16
11
|
const {
|
|
17
12
|
filters,
|
|
@@ -29,47 +24,29 @@ class FilterSetter extends React.Component {
|
|
|
29
24
|
}
|
|
30
25
|
render() {
|
|
31
26
|
const {
|
|
32
|
-
wrapperClass,
|
|
33
27
|
filtersClassName,
|
|
28
|
+
popperClassName,
|
|
34
29
|
filterConjunction,
|
|
35
30
|
filters,
|
|
36
31
|
columns,
|
|
37
32
|
collaborators,
|
|
38
33
|
isNeedSubmit,
|
|
39
|
-
|
|
34
|
+
isShowFilterPopover,
|
|
35
|
+
container
|
|
40
36
|
} = this.props;
|
|
41
37
|
if (!columns) return null;
|
|
42
|
-
const {
|
|
43
|
-
isShowFilterPopover
|
|
44
|
-
} = this.state;
|
|
45
38
|
const validFilters = deepCopy(getValidFilters(filters || [], columns));
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
if (filtersLength === 1) {
|
|
49
|
-
filterMessage = t('1 Filter');
|
|
50
|
-
} else if (filtersLength > 1) {
|
|
51
|
-
filterMessage = t('Filters');
|
|
52
|
-
filterMessage = filtersLength + ' ' + filterMessage;
|
|
53
|
-
}
|
|
54
|
-
let labelClass = wrapperClass || '';
|
|
55
|
-
labelClass = labelClass && filtersLength > 0 ? labelClass + ' active' : labelClass;
|
|
56
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
57
|
-
className: "setting-item ".concat(labelClass ? 'mr-2' : 'mb-1')
|
|
58
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
59
|
-
className: "setting-item-btn filters-setting-btn ".concat(labelClass),
|
|
60
|
-
onClick: this.onFilterSetterToggle
|
|
61
|
-
}, /*#__PURE__*/React.createElement("i", {
|
|
62
|
-
className: "dtable-font dtable-icon-filter mr-2",
|
|
63
|
-
id: this.props.target
|
|
64
|
-
}), /*#__PURE__*/React.createElement("span", null, filterMessage))), isShowFilterPopover && /*#__PURE__*/React.createElement(FilterPopover, {
|
|
39
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, isShowFilterPopover && /*#__PURE__*/React.createElement(FilterPopover, {
|
|
40
|
+
container: container,
|
|
65
41
|
filtersClassName: filtersClassName,
|
|
42
|
+
popperClassName: popperClassName,
|
|
66
43
|
target: this.props.target,
|
|
67
44
|
isNeedSubmit: isNeedSubmit,
|
|
68
45
|
columns: columns,
|
|
69
46
|
collaborators: collaborators,
|
|
70
47
|
filterConjunction: filterConjunction,
|
|
71
48
|
filters: validFilters,
|
|
72
|
-
hidePopover: this.
|
|
49
|
+
hidePopover: this.props.hidePopover,
|
|
73
50
|
update: this.update,
|
|
74
51
|
isPre: this.props.isPre
|
|
75
52
|
}));
|
|
@@ -4,19 +4,10 @@ import { UncontrolledPopover } from 'reactstrap';
|
|
|
4
4
|
import { withTranslation } from 'react-i18next';
|
|
5
5
|
import isHotkey from 'is-hotkey';
|
|
6
6
|
import { COLUMNS_ICON_CONFIG } from 'dtable-utils';
|
|
7
|
-
import { getEventClassName } from '../utils/utils';
|
|
8
7
|
import HideColumnItem from './hide-column-item';
|
|
9
8
|
class HideColumnPopover extends React.Component {
|
|
10
9
|
constructor(props) {
|
|
11
10
|
super(props);
|
|
12
|
-
_defineProperty(this, "hidePopover", e => {
|
|
13
|
-
if (this.popoverRef && !getEventClassName(e).includes('popover') && !this.popoverRef.contains(e.target)) {
|
|
14
|
-
this.props.onPopoverToggle(e);
|
|
15
|
-
e.preventDefault();
|
|
16
|
-
e.stopPropagation();
|
|
17
|
-
return false;
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
11
|
_defineProperty(this, "onHotKey", e => {
|
|
21
12
|
if (isHotkey('esc', e)) {
|
|
22
13
|
e.preventDefault();
|
|
@@ -120,11 +111,9 @@ class HideColumnPopover extends React.Component {
|
|
|
120
111
|
};
|
|
121
112
|
}
|
|
122
113
|
componentDidMount() {
|
|
123
|
-
document.addEventListener('click', this.hidePopover, true);
|
|
124
114
|
document.addEventListener('keydown', this.onHotKey);
|
|
125
115
|
}
|
|
126
116
|
componentWillUnmount() {
|
|
127
|
-
document.removeEventListener('click', this.hidePopover, true);
|
|
128
117
|
document.removeEventListener('keydown', this.onHotKey);
|
|
129
118
|
}
|
|
130
119
|
static getDerivedStateFromProps(nextProps, preState) {
|
|
@@ -149,12 +138,16 @@ class HideColumnPopover extends React.Component {
|
|
|
149
138
|
render() {
|
|
150
139
|
const {
|
|
151
140
|
target,
|
|
141
|
+
container,
|
|
142
|
+
popperClassName,
|
|
152
143
|
t
|
|
153
144
|
} = this.props;
|
|
154
145
|
const fieldSettings = this.getFilteredColumns();
|
|
155
146
|
const isEmpty = fieldSettings.length === 0 ? true : false;
|
|
156
147
|
return /*#__PURE__*/React.createElement(UncontrolledPopover, {
|
|
157
|
-
placement: "
|
|
148
|
+
placement: "bottom-start",
|
|
149
|
+
container: container,
|
|
150
|
+
popperClassName: popperClassName,
|
|
158
151
|
isOpen: true,
|
|
159
152
|
target: target,
|
|
160
153
|
fade: false,
|
|
@@ -1,85 +1,41 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
2
|
import React, { Component } from 'react';
|
|
3
3
|
import { withTranslation } from 'react-i18next';
|
|
4
|
-
import isEqual from 'lodash.isequal';
|
|
5
4
|
import HideColumnPopover from './hide-column-popover';
|
|
6
5
|
import './index.css';
|
|
7
6
|
class HideColumnSetter extends Component {
|
|
8
7
|
constructor(props) {
|
|
9
8
|
super(props);
|
|
10
|
-
_defineProperty(this, "onHideColumnToggle", () => {
|
|
11
|
-
const {
|
|
12
|
-
isShowHideColumnSetter
|
|
13
|
-
} = this.state;
|
|
14
|
-
if (isShowHideColumnSetter) {
|
|
15
|
-
const {
|
|
16
|
-
shownColumnKeys
|
|
17
|
-
} = this.state;
|
|
18
|
-
this.props.onSettingUpdate(shownColumnKeys);
|
|
19
|
-
}
|
|
20
|
-
this.setState({
|
|
21
|
-
isShowHideColumnSetter: !isShowHideColumnSetter
|
|
22
|
-
});
|
|
23
|
-
});
|
|
24
9
|
_defineProperty(this, "modifyHiddenColumns", shownColumnKeys => {
|
|
25
10
|
this.setState({
|
|
26
11
|
shownColumnKeys
|
|
27
12
|
});
|
|
13
|
+
this.props.onSettingUpdate(shownColumnKeys);
|
|
28
14
|
});
|
|
29
15
|
this.state = {
|
|
30
|
-
isShowHideColumnSetter: false,
|
|
31
16
|
shownColumnKeys: props.shownColumnKeys || []
|
|
32
17
|
};
|
|
33
18
|
}
|
|
34
|
-
UNSAFE_componentWillReceiveProps(nextProps) {
|
|
35
|
-
const {
|
|
36
|
-
shownColumnKeys: oldShownColumnKeys
|
|
37
|
-
} = this.props;
|
|
38
|
-
const {
|
|
39
|
-
shownColumnKeys: newShownColumnKeys
|
|
40
|
-
} = nextProps;
|
|
41
|
-
if (!isEqual(oldShownColumnKeys, newShownColumnKeys)) {
|
|
42
|
-
this.setState({
|
|
43
|
-
isShowHideColumnSetter: false,
|
|
44
|
-
shownColumnKeys: newShownColumnKeys
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
19
|
render() {
|
|
49
20
|
const {
|
|
50
21
|
target,
|
|
51
22
|
columns,
|
|
52
|
-
|
|
53
|
-
|
|
23
|
+
isShowHideColumnSetter,
|
|
24
|
+
container,
|
|
25
|
+
popperClassName
|
|
54
26
|
} = this.props;
|
|
55
27
|
const {
|
|
56
28
|
shownColumnKeys
|
|
57
29
|
} = this.state;
|
|
58
30
|
if (!columns) return null;
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
const hiddenColumnsLength = hiddenColumns.length;
|
|
62
|
-
if (hiddenColumnsLength === 1) {
|
|
63
|
-
message = t('1_hidden_column');
|
|
64
|
-
} else if (hiddenColumnsLength > 1) {
|
|
65
|
-
message = hiddenColumnsLength + ' ' + t('hidden_columns');
|
|
66
|
-
}
|
|
67
|
-
let labelClass = wrapperClass || '';
|
|
68
|
-
labelClass = labelClass && hiddenColumnsLength > 0 ? labelClass + ' active' : labelClass;
|
|
69
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
70
|
-
className: "setting-item ".concat(labelClass ? '' : 'mb-1')
|
|
71
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
72
|
-
className: "mr-2 setting-item-btn filters-setting-btn ".concat(labelClass),
|
|
73
|
-
onClick: this.onHideColumnToggle
|
|
74
|
-
}, /*#__PURE__*/React.createElement("i", {
|
|
75
|
-
className: "dtable-font dtable-icon-hide mr-2",
|
|
76
|
-
id: target
|
|
77
|
-
}), /*#__PURE__*/React.createElement("span", null, message))), this.state.isShowHideColumnSetter && /*#__PURE__*/React.createElement(HideColumnPopover, {
|
|
31
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, isShowHideColumnSetter && /*#__PURE__*/React.createElement(HideColumnPopover, {
|
|
32
|
+
container: container,
|
|
78
33
|
target: target,
|
|
34
|
+
popperClassName: popperClassName,
|
|
79
35
|
columns: columns,
|
|
80
36
|
shownColumnKeys: shownColumnKeys,
|
|
81
37
|
modifyHiddenColumns: this.modifyHiddenColumns,
|
|
82
|
-
onPopoverToggle: this.
|
|
38
|
+
onPopoverToggle: this.props.onPopoverToggle
|
|
83
39
|
}));
|
|
84
40
|
}
|
|
85
41
|
}
|
package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/sort-setter/index.js
CHANGED
|
@@ -1,60 +1,36 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
2
|
import React, { Component } from 'react';
|
|
3
3
|
import { withTranslation } from 'react-i18next';
|
|
4
|
-
import { getValidSorts } from 'dtable-utils';
|
|
5
4
|
import SortPopover from './sort-popover';
|
|
6
5
|
import './index.css';
|
|
7
6
|
class SortSetter extends Component {
|
|
8
|
-
constructor(
|
|
9
|
-
super(
|
|
10
|
-
_defineProperty(this, "onSortToggle", () => {
|
|
11
|
-
this.setState({
|
|
12
|
-
isShowSortPopover: !this.state.isShowSortPopover
|
|
13
|
-
});
|
|
14
|
-
});
|
|
7
|
+
constructor() {
|
|
8
|
+
super(...arguments);
|
|
15
9
|
_defineProperty(this, "update", update => {
|
|
16
10
|
const {
|
|
17
11
|
sorts
|
|
18
12
|
} = update || {};
|
|
19
13
|
this.props.onSortsChange(sorts);
|
|
20
14
|
});
|
|
21
|
-
this.state = {
|
|
22
|
-
isShowSortPopover: false
|
|
23
|
-
};
|
|
24
15
|
}
|
|
25
16
|
render() {
|
|
26
17
|
const {
|
|
27
18
|
sorts,
|
|
28
19
|
columns,
|
|
29
20
|
isNeedSubmit,
|
|
30
|
-
|
|
31
|
-
|
|
21
|
+
isShowSortPopover,
|
|
22
|
+
container,
|
|
23
|
+
popperClassName,
|
|
24
|
+
onSortToggle
|
|
32
25
|
} = this.props;
|
|
33
26
|
if (!columns) return null;
|
|
34
|
-
|
|
35
|
-
const sortsLength = validSorts ? validSorts.length : 0;
|
|
36
|
-
let sortMessage = t('Sort');
|
|
37
|
-
if (sortsLength === 1) {
|
|
38
|
-
sortMessage = t('1 Sort');
|
|
39
|
-
} else if (sortsLength > 1) {
|
|
40
|
-
sortMessage = t('Sorts');
|
|
41
|
-
sortMessage = sortsLength + ' ' + sortMessage;
|
|
42
|
-
}
|
|
43
|
-
let labelClass = wrapperClass || '';
|
|
44
|
-
labelClass = labelClass && sortsLength > 0 ? labelClass + ' active' : labelClass;
|
|
45
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
46
|
-
className: "setting-item ".concat(labelClass ? '' : 'mb-1')
|
|
47
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
48
|
-
className: "mr-2 setting-item-btn filters-setting-btn ".concat(labelClass),
|
|
49
|
-
onClick: this.onSortToggle
|
|
50
|
-
}, /*#__PURE__*/React.createElement("i", {
|
|
51
|
-
className: "dtable-font dtable-icon-sort mr-2",
|
|
52
|
-
id: this.props.target
|
|
53
|
-
}), /*#__PURE__*/React.createElement("span", null, sortMessage))), this.state.isShowSortPopover && /*#__PURE__*/React.createElement(SortPopover, {
|
|
27
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, isShowSortPopover && /*#__PURE__*/React.createElement(SortPopover, {
|
|
54
28
|
target: this.props.target,
|
|
29
|
+
popperClassName: popperClassName,
|
|
30
|
+
container: container,
|
|
55
31
|
isNeedSubmit: isNeedSubmit,
|
|
56
32
|
columns: columns,
|
|
57
|
-
onSortComponentToggle:
|
|
33
|
+
onSortComponentToggle: onSortToggle,
|
|
58
34
|
update: this.update,
|
|
59
35
|
sorts: sorts
|
|
60
36
|
}));
|
|
@@ -4,7 +4,7 @@ import React, { Component, Fragment } from 'react';
|
|
|
4
4
|
import isHotkey from 'is-hotkey';
|
|
5
5
|
import { Button, UncontrolledPopover } from 'reactstrap';
|
|
6
6
|
import { COLUMNS_ICON_CONFIG, SORT_COLUMN_OPTIONS, SORT_TYPE } from 'dtable-utils';
|
|
7
|
-
import {
|
|
7
|
+
import { getColumnByKey } from '../utils/utils';
|
|
8
8
|
import CommonAddTool from '../common-add-tool';
|
|
9
9
|
import { execSortsOperation, getDisplaySorts, isSortsEmpty, SORT_OPERATION } from './sort-utils';
|
|
10
10
|
import { withTranslation } from 'react-i18next';
|
|
@@ -12,14 +12,6 @@ const SORT_TYPES = [SORT_TYPE.UP, SORT_TYPE.DOWN];
|
|
|
12
12
|
class SortPopover extends Component {
|
|
13
13
|
constructor(props) {
|
|
14
14
|
super(props);
|
|
15
|
-
_defineProperty(this, "hideDTablePopover", e => {
|
|
16
|
-
if (this.sortPopoverRef && !getEventClassName(e).includes('popover') && !this.sortPopoverRef.contains(e.target)) {
|
|
17
|
-
this.props.onSortComponentToggle(e);
|
|
18
|
-
e.preventDefault();
|
|
19
|
-
e.stopPropagation();
|
|
20
|
-
return false;
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
15
|
_defineProperty(this, "isNeedSubmit", () => {
|
|
24
16
|
return this.props.isNeedSubmit;
|
|
25
17
|
});
|
|
@@ -222,11 +214,9 @@ class SortPopover extends Component {
|
|
|
222
214
|
};
|
|
223
215
|
}
|
|
224
216
|
componentDidMount() {
|
|
225
|
-
document.addEventListener('click', this.hideDTablePopover, true);
|
|
226
217
|
document.addEventListener('keydown', this.onHotKey);
|
|
227
218
|
}
|
|
228
219
|
componentWillUnmount() {
|
|
229
|
-
document.removeEventListener('click', this.hideDTablePopover, true);
|
|
230
220
|
document.removeEventListener('keydown', this.onHotKey);
|
|
231
221
|
}
|
|
232
222
|
UNSAFE_componentWillReceiveProps(nextProps) {
|
|
@@ -238,6 +228,8 @@ class SortPopover extends Component {
|
|
|
238
228
|
render() {
|
|
239
229
|
const {
|
|
240
230
|
target,
|
|
231
|
+
container,
|
|
232
|
+
popperClassName,
|
|
241
233
|
t
|
|
242
234
|
} = this.props;
|
|
243
235
|
const {
|
|
@@ -245,12 +237,14 @@ class SortPopover extends Component {
|
|
|
245
237
|
} = this.state;
|
|
246
238
|
const isEmpty = isSortsEmpty(sorts);
|
|
247
239
|
return /*#__PURE__*/React.createElement(UncontrolledPopover, {
|
|
248
|
-
placement: "
|
|
240
|
+
placement: "bottom-start",
|
|
249
241
|
isOpen: true,
|
|
250
242
|
target: target,
|
|
251
243
|
fade: false,
|
|
252
244
|
hideArrow: true,
|
|
253
245
|
className: "sort-popover",
|
|
246
|
+
popperClassName: popperClassName,
|
|
247
|
+
container: container,
|
|
254
248
|
boundariesElement: document.body
|
|
255
249
|
}, /*#__PURE__*/React.createElement("div", {
|
|
256
250
|
ref: ref => this.sortPopoverRef = ref,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
2
|
-
import React, { useCallback } from 'react';
|
|
2
|
+
import React, { useCallback, useMemo } from 'react';
|
|
3
3
|
import { useSlateStatic } from '@seafile/slate-react';
|
|
4
4
|
import { Transforms } from '@seafile/slate';
|
|
5
5
|
import { insertElement } from './helpers';
|
|
@@ -12,6 +12,8 @@ import { ELEMENT_TYPE, INSERT_POSITION, LOCAL_IMAGE, PARAGRAPH, SIDE_INSERT_MENU
|
|
|
12
12
|
import EventBus from '../../../utils/event-bus';
|
|
13
13
|
import { INTERNAL_EVENT } from '../../../constants';
|
|
14
14
|
import DropdownMenuItem from '../../commons/dropdown-menu-item';
|
|
15
|
+
import SeaTableColumnMenu from '../../plugins/seatable-column/menu';
|
|
16
|
+
import SeaTableTableMenu from '../../plugins/seatable-tables/menu';
|
|
15
17
|
import { wrapCallout } from '../../plugins/callout/helper';
|
|
16
18
|
const InsertBlockMenu = _ref => {
|
|
17
19
|
let {
|
|
@@ -119,6 +121,14 @@ const InsertBlockMenu = _ref => {
|
|
|
119
121
|
menuConfig: item,
|
|
120
122
|
onClick: () => onInsert(item.type)
|
|
121
123
|
});
|
|
124
|
+
}), editor.columns && /*#__PURE__*/React.createElement(SeaTableColumnMenu, {
|
|
125
|
+
editor: editor,
|
|
126
|
+
readonly: editor.readonly,
|
|
127
|
+
insertPosition: insertPosition
|
|
128
|
+
}), editor.tables && /*#__PURE__*/React.createElement(SeaTableTableMenu, {
|
|
129
|
+
editor: editor,
|
|
130
|
+
readonly: editor.readonly,
|
|
131
|
+
insertPosition: insertPosition
|
|
122
132
|
}));
|
|
123
133
|
};
|
|
124
134
|
InsertBlockMenu.defaultProps = {
|
package/package.json
CHANGED
|
Binary file
|
|
@@ -14,6 +14,14 @@
|
|
|
14
14
|
/>
|
|
15
15
|
<missing-glyph />
|
|
16
16
|
|
|
17
|
+
<glyph glyph-name="sdoc-sort" unicode="" d="M294.4 790.4l201.6-204.8c19.2-19.2 19.2-51.2 0-73.6-19.2-19.2-51.2-19.2-70.4 0L320 620.8v-604.8c0-25.6-22.4-48-48-48S224-9.6 224 16V620.8L118.4 512c-19.2-19.2-48-19.2-67.2-3.2l-3.2 3.2c-19.2 19.2-19.2 51.2 0 73.6l201.6 204.8c12.8 12.8 32 12.8 44.8 0zM752 800c25.6 0 48-22.4 48-48v-604.8l105.6 108.8c19.2 19.2 51.2 19.2 70.4 0 19.2-19.2 19.2-51.2 0-73.6l-201.6-204.8c-12.8-12.8-32-12.8-44.8 0l-201.6 204.8c-19.2 19.2-19.2 51.2 0 73.6l3.2 3.2c19.2 16 48 16 67.2-3.2l105.6-108.8V752c0 25.6 22.4 48 48 48z" horiz-adv-x="1024" />
|
|
18
|
+
|
|
19
|
+
<glyph glyph-name="sdoc-set-up" unicode="" d="M598.52384 809.6l12.8-92.8 6.4-38.4 35.2-16c12.8-6.4 28.8-16 41.6-25.6l32-19.2 35.2 12.8 92.8 35.2 86.4-140.8-76.8-54.4-32-25.6 3.2-38.4v-44.8l-3.2-38.4 32-25.6 76.8-57.6-83.2-140.8-92.8 35.2-35.2 12.8-32-19.2c-12.8-9.6-28.8-19.2-41.6-25.6l-35.2-16-6.4-38.4-12.8-92.8h-172.8l-12.8 92.8-6.4 38.4-35.2 16c-12.8 6.4-28.8 16-41.6 25.6l-32 19.2-35.2-12.8-92.8-35.2-86.4 140.8L160.12384 297.6l32 25.6-3.2 38.4V384v22.4l3.2 38.4-32 25.6-76.8 57.6 83.2 140.8 92.8-35.2 35.2-12.8 32 19.2c12.8 9.6 28.8 19.2 41.6 25.6l35.2 16 6.4 38.4 12.8 92.8h176m12.8 83.2H416.12384c-32 0-57.6-22.4-60.8-51.2l-16-105.6c-19.2-9.6-35.2-19.2-54.4-32L182.52384 748.8c-9.6 3.2-16 3.2-22.4 3.2-22.4 0-41.6-9.6-54.4-28.8L6.52384 560c-12.8-28.8-6.4-60.8 16-80l86.4-67.2c0-9.6-3.2-22.4-3.2-28.8 0-9.6 0-19.2 3.2-28.8L22.52384 288c-22.4-19.2-28.8-51.2-16-76.8l96-163.2c9.6-19.2 32-32 54.4-32 6.4 0 12.8 0 22.4 3.2l102.4 41.6c16-12.8 35.2-22.4 54.4-28.8l16-105.6c3.2-28.8 28.8-51.2 60.8-51.2H608.12384c32 0 57.6 22.4 60.8 51.2l16 105.6c19.2 9.6 35.2 19.2 54.4 28.8l102.4-41.6c6.4-3.2 16-3.2 22.4-3.2 22.4 0 41.6 9.6 54.4 28.8l99.2 166.4c16 25.6 9.6 57.6-16 76.8l-86.4 67.2c0 9.6 3.2 19.2 3.2 28.8s0 22.4-3.2 28.8l86.4 67.2c22.4 19.2 28.8 51.2 16 76.8l-96 163.2c-9.6 19.2-32 32-54.4 32-6.4 0-12.8 0-22.4-3.2l-102.4-41.6c-16 12.8-35.2 22.4-54.4 28.8L672.12384 844.8C665.72384 873.6 640.12384 896 611.32384 896zM512.12384 512c70.4 0 128-57.6 128-128s-57.6-128-128-128-128 57.6-128 128 57.6 128 128 128m0 86.4a214.4 214.4 0 1 1 0-428.8 214.4 214.4 0 0 1 0 428.8z" horiz-adv-x="1026" />
|
|
20
|
+
|
|
21
|
+
<glyph glyph-name="sdoc-filter1" unicode="" d="M617.6 160c28.8 0 54.4-22.4 54.4-48s-22.4-48-54.4-48h-214.4c-28.8 0-54.4 22.4-54.4 48s22.4 48 54.4 48h214.4z m169.6 272c25.6 0 44.8-22.4 44.8-48s-19.2-48-44.8-48H236.8c-25.6 0-44.8 22.4-44.8 48s19.2 48 44.8 48h550.4z m236.8 224c0-25.6-22.4-48-48-48h-928C22.4 608 0 630.4 0 656S22.4 704 48 704h931.2c22.4 0 44.8-22.4 44.8-48z" horiz-adv-x="1024" />
|
|
22
|
+
|
|
23
|
+
<glyph glyph-name="sdoc-eye-slash" unicode="" d="M83.84448 790.4l156.8-124.8c73.6 57.6 166.4 99.2 275.2 99.2 134.4 0 243.2-64 320-137.6 76.8-73.6 131.2-163.2 153.6-224 6.4-12.8 6.4-28.8 0-41.6-22.4-51.2-64-124.8-124.8-192l140.8-112c19.2-16 22.4-44.8 6.4-67.2-16-19.2-48-22.4-67.2-6.4l-928 736C-2.55552 736-5.75552 764.8 10.24448 787.2s51.2 19.2 73.6 3.2z m32-256l73.6-60.8c-25.6-35.2-44.8-70.4-57.6-96 22.4-51.2 64-121.6 128-179.2 67.2-64 153.6-112 256-112 44.8 0 86.4 9.6 124.8 22.4l76.8-64c-57.6-32-124.8-51.2-201.6-51.2-134.4 0-243.2 64-320 137.6-76.8 73.6-131.2 163.2-153.6 224-6.4 12.8-6.4 28.8 0 41.6 12.8 41.6 38.4 89.6 73.6 137.6z m185.6-153.6l112-89.6c12.8-16 25.6-25.6 44.8-35.2l112-89.6c-19.2-3.2-35.2-6.4-54.4-6.4-118.4 0-214.4 99.2-214.4 220.8z m214.4 288c-76.8 0-144-25.6-198.4-64l67.2-51.2c35.2 28.8 80 44.8 131.2 44.8 118.4 0 214.4-99.2 214.4-220.8 0-32-6.4-60.8-19.2-89.6l86.4-70.4c48 54.4 83.2 112 102.4 153.6-22.4 51.2-64 121.6-128 179.2-64 67.2-150.4 118.4-256 118.4z m0-153.6h-3.2c3.2-9.6 3.2-19.2 3.2-28.8 0-12.8-3.2-25.6-6.4-38.4l134.4-108.8c3.2 12.8 3.2 22.4 3.2 35.2 3.2 80-57.6 140.8-131.2 140.8z" horiz-adv-x="1027" />
|
|
24
|
+
|
|
17
25
|
<glyph glyph-name="sdoc-settings" unicode="" d="M976 467.2c3.2-3.2 3.2-3.2 3.2-9.6L976 326.4c0-3.2-3.2-12.8-9.6-12.8l-108.8-38.4c-3.2-12.8-12.8-28.8-19.2-41.6l51.2-102.4c0-3.2 0-12.8-3.2-19.2l-96-96c-3.2-3.2-12.8-9.6-19.2-3.2L668.8 64c-12.8-9.6-28.8-12.8-41.6-19.2L588.8-64c0-3.2-3.2-9.6-12.8-9.6H444.8c-3.2 0-12.8 3.2-12.8 9.6l-38.4 108.8c-12.8 3.2-28.8 12.8-41.6 19.2l-102.4-51.2c-3.2 0-12.8 0-19.2 3.2l-96 96c-6.4 0-12.8 9.6-6.4 16l51.2 102.4c-9.6 12.8-12.8 28.8-19.2 41.6L51.2 310.4c-3.2 0-9.6 3.2-9.6 12.8V454.4c0 3.2 3.2 12.8 9.6 12.8L160 508.8c3.2 12.8 9.6 28.8 19.2 41.6L128 656c-6.4 6.4-6.4 12.8 0 12.8l96 96c3.2 9.6 9.6 9.6 16 3.2l102.4-51.2c12.8 9.6 28.8 12.8 41.6 19.2l38.4 112c0 3.2 3.2 9.6 12.8 9.6h128c3.2 0 12.8-3.2 12.8-9.6l38.4-108.8c12.8-3.2 28.8-12.8 41.6-19.2l102.4 51.2c3.2 0 12.8 0 19.2-3.2l96-96c3.2-3.2 9.6-12.8 3.2-19.2l-51.2-102.4c9.6-12.8 12.8-28.8 19.2-41.6L976 467.2zM566.4 614.4c-176 48-329.6-108.8-288-288 19.2-76.8 86.4-140.8 160-160 176-48 329.6 108.8 288 288-19.2 80-80 140.8-160 160z" horiz-adv-x="1024" />
|
|
18
26
|
|
|
19
27
|
<glyph glyph-name="sdoc-seatable-table" unicode="" d="M384 896c35.2 0 64-28.8 64-64v-320c0-35.2-28.8-64-64-64H64c-35.2 0-64 28.8-64 64V832C0 867.2 28.8 896 64 896h320z m-32-96H96v-256h256V800z m608 96c35.2 0 64-28.8 64-64v-320c0-35.2-28.8-64-64-64H640c-35.2 0-64 28.8-64 64V832c0 35.2 28.8 64 64 64h320z m-32-96h-256v-256h256V800zM384 320c35.2 0 64-28.8 64-64v-320c0-35.2-28.8-64-64-64H64c-35.2 0-64 28.8-64 64V256c0 35.2 28.8 64 64 64h320z m-32-96H96v-256h256v256z m608 96c35.2 0 64-28.8 64-64v-320c0-35.2-28.8-64-64-64H640c-35.2 0-64 28.8-64 64V256c0 35.2 28.8 64 64 64h320z m-32-96h-256v-256h256v256z" horiz-adv-x="1024" />
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
@font-face {
|
|
2
|
-
font-family: "sdocfont";
|
|
3
|
-
|
|
4
|
-
src: url('./sdoc-editor-font/iconfont.eot?t=
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
url('./sdoc-editor-font/iconfont.woff?t=1719382079268') format('woff'),
|
|
10
|
-
url('./sdoc-editor-font/iconfont.ttf?t=1719382079268') format('truetype'),
|
|
11
|
-
url('./sdoc-editor-font/iconfont.svg?t=1719382079268#sdocfont') format('svg');
|
|
2
|
+
font-family: "sdocfont"; /* Project id 4097705 */
|
|
3
|
+
src: url('./sdoc-editor-font/iconfont.eot?t=1721201136436'); /* IE9 */
|
|
4
|
+
src: url('./sdoc-editor-font/iconfont.eot?t=1721201136436#iefix') format('embedded-opentype'), /* IE6-IE8 */
|
|
5
|
+
url('./sdoc-editor-font/iconfont.woff2?t=1721201136436') format('woff2'),
|
|
6
|
+
url('./sdoc-editor-font/iconfont.woff?t=1721201136436') format('woff'),
|
|
7
|
+
url('./sdoc-editor-font/iconfont.ttf?t=1721201136436') format('truetype'),
|
|
8
|
+
url('./sdoc-editor-font/iconfont.svg?t=1721201136436#sdocfont') format('svg');
|
|
12
9
|
}
|
|
13
10
|
|
|
14
11
|
.sdocfont {
|
|
@@ -19,6 +16,22 @@
|
|
|
19
16
|
-moz-osx-font-smoothing: grayscale;
|
|
20
17
|
}
|
|
21
18
|
|
|
19
|
+
.sdoc-sort:before {
|
|
20
|
+
content: "\e674";
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.sdoc-set-up:before {
|
|
24
|
+
content: "\e675";
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.sdoc-filter1:before {
|
|
28
|
+
content: "\e672";
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.sdoc-eye-slash:before {
|
|
32
|
+
content: "\e673";
|
|
33
|
+
}
|
|
34
|
+
|
|
22
35
|
.sdoc-settings:before {
|
|
23
36
|
content: "\e671";
|
|
24
37
|
}
|
|
@@ -466,3 +479,4 @@
|
|
|
466
479
|
.sdoc-user:before {
|
|
467
480
|
content: "\e629";
|
|
468
481
|
}
|
|
482
|
+
|