@seafile/sdoc-editor 1.0.17 → 1.0.18
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/comment/components/global-comment/index.js +0 -1
- package/dist/basic-sdk/extension/plugins/seatable-tables/formatter/index.js +17 -1
- package/dist/basic-sdk/extension/plugins/seatable-tables/helpers.js +15 -2
- package/dist/basic-sdk/extension/plugins/seatable-tables/model.js +7 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/op-menu/index.js +0 -1
- package/dist/basic-sdk/extension/plugins/seatable-tables/render-element/index.css +23 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/render-element/record-header.js +6 -3
- package/dist/basic-sdk/extension/plugins/seatable-tables/render-element/record-item.js +5 -1
- package/dist/basic-sdk/extension/plugins/seatable-tables/render-element/record-list.js +6 -3
- package/dist/basic-sdk/extension/plugins/seatable-tables/render-element/seatable-table.js +86 -10
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/common-add-tool/index.css +18 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/common-add-tool/index.js +24 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/dtable-search-input/index.js +131 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/calendar-filter/date-translate.js +56 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/calendar-filter/dayjs.js +4 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/calendar-filter/index.js +175 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/collaborator-filter/index.js +107 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/_department-select.css +209 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/_department-utils.js +39 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/department-multiple-select-filter.js +89 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/department-multiple-select.js +148 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/department-single-select-filter.js +90 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/department-single-select.js +275 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/index.js +3 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/selected-departments.js +84 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/use-click-outside.js +22 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/filter-item-utils.js +144 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/filter-item.js +696 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/filters-list.css +321 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/filters-list.js +121 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/number-editor/index.js +161 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/rate-item/index.js +73 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover.css +30 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover.js +200 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filters-utils.js +456 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/index.css +0 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/index.js +81 -7
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/hide-column-setter/hide-column-item.js +54 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/hide-column-setter/hide-column-popover.js +203 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/hide-column-setter/index.css +105 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/hide-column-setter/index.js +89 -8
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/index.css +4 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/index.js +98 -26
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/sort-setter/index.css +83 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/sort-setter/index.js +67 -8
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/sort-setter/sort-popover.js +279 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/sort-setter/sort-utils.js +71 -0
- package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/utils/utils.js +33 -0
- package/dist/basic-sdk/extension/plugins/table/menu/horizontal-align-popover/index.js +1 -1
- package/dist/basic-sdk/extension/plugins/table/menu/table-context-menu/index.js +1 -2
- package/dist/basic-sdk/socket/socket-client.js +1 -1
- package/dist/pages/document-plugin-editor.js +3 -1
- package/package.json +2 -1
- package/public/locales/cs/sdoc-editor.json +40 -1
- package/public/locales/de/sdoc-editor.json +40 -1
- package/public/locales/en/sdoc-editor.json +40 -1
- package/public/locales/es/sdoc-editor.json +40 -1
- package/public/locales/es_AR/sdoc-editor.json +40 -1
- package/public/locales/es_MX/sdoc-editor.json +40 -1
- package/public/locales/fr/sdoc-editor.json +40 -1
- package/public/locales/it/sdoc-editor.json +40 -1
- package/public/locales/ru/sdoc-editor.json +40 -1
- package/public/locales/zh_CN/sdoc-editor.json +41 -2
- package/dist/basic-sdk/extension/plugins/seatable-tables/setting/index.css +0 -1
- package/dist/basic-sdk/extension/plugins/seatable-tables/setting/index.js +0 -6
|
@@ -73,7 +73,6 @@ const GlobalComment = _ref => {
|
|
|
73
73
|
const handleResizing = useCallback(e => {
|
|
74
74
|
const commentDrawer = commentDrawerRef.current;
|
|
75
75
|
if (isResizingRef.current && commentDrawer) {
|
|
76
|
-
console.log('999', 999);
|
|
77
76
|
let width = commentDrawer.offsetWidth - e.movementX;
|
|
78
77
|
// Limit the width of the comment drawer
|
|
79
78
|
width = Math.min(width, 620);
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import _DepartmentSingleSelectFormatter from "dtable-ui-component/lib/DepartmentSingleSelectFormatter";
|
|
1
2
|
import _ButtonFormatter from "dtable-ui-component/lib/ButtonFormatter";
|
|
2
3
|
import _RateFormatter from "dtable-ui-component/lib/RateFormatter";
|
|
3
4
|
import _DurationFormatter from "dtable-ui-component/lib/DurationFormatter";
|
|
@@ -22,6 +23,7 @@ import _TextFormatter from "dtable-ui-component/lib/TextFormatter";
|
|
|
22
23
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
23
24
|
import React, { Fragment } from 'react';
|
|
24
25
|
import { CellType, SELECT_OPTION_COLORS } from 'dtable-utils';
|
|
26
|
+
import { withTranslation } from 'react-i18next';
|
|
25
27
|
class CellFormatter extends React.Component {
|
|
26
28
|
constructor() {
|
|
27
29
|
super(...arguments);
|
|
@@ -246,6 +248,20 @@ class CellFormatter extends React.Component {
|
|
|
246
248
|
optionColors: SELECT_OPTION_COLORS
|
|
247
249
|
});
|
|
248
250
|
}
|
|
251
|
+
case CellType.DEPARTMENT_SINGLE_SELECT:
|
|
252
|
+
{
|
|
253
|
+
const {
|
|
254
|
+
userId,
|
|
255
|
+
departments = []
|
|
256
|
+
} = window.seafile || window.seafileConfig;
|
|
257
|
+
if (!userId) return null;
|
|
258
|
+
return /*#__PURE__*/React.createElement(_DepartmentSingleSelectFormatter, {
|
|
259
|
+
tip: this.props.t('Deleted_department'),
|
|
260
|
+
value: cellValue,
|
|
261
|
+
departments: departments,
|
|
262
|
+
containerClassName: containerClassName
|
|
263
|
+
});
|
|
264
|
+
}
|
|
249
265
|
default:
|
|
250
266
|
return null;
|
|
251
267
|
}
|
|
@@ -258,4 +274,4 @@ class CellFormatter extends React.Component {
|
|
|
258
274
|
CellFormatter.defaultProps = {
|
|
259
275
|
isSample: true
|
|
260
276
|
};
|
|
261
|
-
export default CellFormatter;
|
|
277
|
+
export default withTranslation('sdoc-editor')(CellFormatter);
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
1
2
|
import { Editor, Transforms } from '@seafile/slate';
|
|
2
3
|
import slugId from 'slugid';
|
|
3
4
|
import { getNodeType, isTextNode, getParentNode, generateDefaultText } from '../../core';
|
|
@@ -33,15 +34,27 @@ export const isInsertSeaTableTableDisabled = (editor, readonly) => {
|
|
|
33
34
|
if (match) return true;
|
|
34
35
|
return false;
|
|
35
36
|
};
|
|
36
|
-
export const generateSeaTableTable = table_id => {
|
|
37
|
+
export const generateSeaTableTable = (table_id, editor) => {
|
|
38
|
+
const table = editor.getTableById(table_id);
|
|
39
|
+
const columnKeys = table.columns.map(item => item.key) || [];
|
|
37
40
|
return {
|
|
38
41
|
id: slugId.nice(),
|
|
39
42
|
type: SEATABLE_TABLE,
|
|
40
43
|
table_id,
|
|
44
|
+
filters: [],
|
|
45
|
+
filter_conjunction: 'And',
|
|
46
|
+
sorts: [],
|
|
47
|
+
shown_column_keys: columnKeys,
|
|
48
|
+
show_record_numbers: false,
|
|
49
|
+
alternate_color: true,
|
|
50
|
+
select_column_display_option_color: true,
|
|
41
51
|
children: [generateDefaultText()]
|
|
42
52
|
};
|
|
43
53
|
};
|
|
44
54
|
export const insertSeaTableTable = (editor, item) => {
|
|
45
|
-
const node = generateSeaTableTable(item._id);
|
|
55
|
+
const node = generateSeaTableTable(item._id, editor);
|
|
46
56
|
Transforms.setNodes(editor, node);
|
|
57
|
+
};
|
|
58
|
+
export const updateSeaTableTable = (editor, props) => {
|
|
59
|
+
Transforms.setNodes(editor, _objectSpread({}, props));
|
|
47
60
|
};
|
|
@@ -3,6 +3,13 @@ class SeaTableTable {
|
|
|
3
3
|
constructor(options) {
|
|
4
4
|
this.type = options.type || SEATABLE_TABLE;
|
|
5
5
|
this.table_id = options.table_id;
|
|
6
|
+
this.filter_conjunction = options.filter_conjunction || 'And';
|
|
7
|
+
this.filters = options.filters || [];
|
|
8
|
+
this.sorts = options.sorts || [];
|
|
9
|
+
this.shown_column_keys = options.shown_column_keys || [];
|
|
10
|
+
this.show_record_numbers = false;
|
|
11
|
+
this.alternate_color = true;
|
|
12
|
+
this.select_column_display_option_color = true;
|
|
6
13
|
this.children = options.children || [{
|
|
7
14
|
text: ''
|
|
8
15
|
}];
|
|
@@ -15,7 +15,6 @@ export default function OpMenu(_ref) {
|
|
|
15
15
|
const onHideSettings = useCallback(() => {
|
|
16
16
|
setIsShowSeaTableSetting(false);
|
|
17
17
|
}, []);
|
|
18
|
-
console.log(isShowSeaTableSetting);
|
|
19
18
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ElementPopover, null, /*#__PURE__*/React.createElement("div", {
|
|
20
19
|
className: "seatable-op-menu",
|
|
21
20
|
style: menuPosition
|
|
@@ -13,9 +13,32 @@
|
|
|
13
13
|
margin: 0;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
+
.seatable-view-column-header-row th {
|
|
17
|
+
display: inline-flex;
|
|
18
|
+
align-items: center;
|
|
19
|
+
justify-content: flex-start;
|
|
20
|
+
}
|
|
21
|
+
|
|
16
22
|
.seatable-view-body-column-cell {
|
|
23
|
+
display: inline-flex;
|
|
24
|
+
align-items: center;
|
|
25
|
+
justify-content: flex-start;
|
|
17
26
|
white-space: nowrap;
|
|
18
27
|
text-overflow: ellipsis;
|
|
19
28
|
overflow: hidden;
|
|
20
29
|
word-break: break-all;
|
|
21
30
|
}
|
|
31
|
+
|
|
32
|
+
.seatable-view-column-header-row .first-cell,
|
|
33
|
+
.seatable-view-body-column-row .first-cell {
|
|
34
|
+
flex: initial;
|
|
35
|
+
width: 60px;
|
|
36
|
+
padding: 0;
|
|
37
|
+
display: inline-flex;
|
|
38
|
+
align-items: center;
|
|
39
|
+
justify-content: center;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.seatable-view-records.no_alternate_color tr:nth-child(2n+1) {
|
|
43
|
+
background-color: #fff;
|
|
44
|
+
}
|
|
@@ -2,11 +2,14 @@ import React from 'react';
|
|
|
2
2
|
import { getColumnWidth } from '../../seatable-column/helpers';
|
|
3
3
|
export default function RecordHeader(_ref) {
|
|
4
4
|
let {
|
|
5
|
+
element,
|
|
5
6
|
columns
|
|
6
7
|
} = _ref;
|
|
7
|
-
return /*#__PURE__*/React.createElement("
|
|
8
|
+
return /*#__PURE__*/React.createElement("tr", {
|
|
8
9
|
className: "seatable-view-column-header-row"
|
|
9
|
-
},
|
|
10
|
+
}, element.show_record_numbers && /*#__PURE__*/React.createElement("th", {
|
|
11
|
+
className: "seatable-view-column-header-cell first-cell"
|
|
12
|
+
}), columns.map(column => {
|
|
10
13
|
const width = getColumnWidth(column);
|
|
11
14
|
return /*#__PURE__*/React.createElement("th", {
|
|
12
15
|
className: "seatable-view-column-header-cell",
|
|
@@ -15,5 +18,5 @@ export default function RecordHeader(_ref) {
|
|
|
15
18
|
width
|
|
16
19
|
}
|
|
17
20
|
}, column.name);
|
|
18
|
-
}))
|
|
21
|
+
}));
|
|
19
22
|
}
|
|
@@ -3,13 +3,17 @@ import { getColumnWidth } from '../../seatable-column/helpers';
|
|
|
3
3
|
import Formatter from '../formatter';
|
|
4
4
|
export default function RecordItem(_ref) {
|
|
5
5
|
let {
|
|
6
|
+
element,
|
|
7
|
+
index,
|
|
6
8
|
record,
|
|
7
9
|
columns,
|
|
8
10
|
editor
|
|
9
11
|
} = _ref;
|
|
10
12
|
return /*#__PURE__*/React.createElement("tr", {
|
|
11
13
|
className: "seatable-view-body-column-row"
|
|
12
|
-
},
|
|
14
|
+
}, element.show_record_numbers && /*#__PURE__*/React.createElement("th", {
|
|
15
|
+
className: "seatable-view-body-column-cell first-cell"
|
|
16
|
+
}, index), columns.map(column => {
|
|
13
17
|
const width = getColumnWidth(column);
|
|
14
18
|
return /*#__PURE__*/React.createElement("td", {
|
|
15
19
|
className: "seatable-view-body-column-cell",
|
|
@@ -4,14 +4,17 @@ export default function RecordList(_ref) {
|
|
|
4
4
|
let {
|
|
5
5
|
editor,
|
|
6
6
|
records,
|
|
7
|
-
columns
|
|
7
|
+
columns,
|
|
8
|
+
element
|
|
8
9
|
} = _ref;
|
|
9
|
-
return /*#__PURE__*/React.createElement(
|
|
10
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, records.map((record, index) => {
|
|
10
11
|
return /*#__PURE__*/React.createElement(RecordItem, {
|
|
11
12
|
key: record._id,
|
|
13
|
+
index: index,
|
|
12
14
|
editor: editor,
|
|
13
15
|
record: record,
|
|
14
|
-
columns: columns
|
|
16
|
+
columns: columns,
|
|
17
|
+
element: element
|
|
15
18
|
});
|
|
16
19
|
}));
|
|
17
20
|
}
|
|
@@ -2,12 +2,13 @@ import React, { useCallback, useEffect, useRef, useState } from 'react';
|
|
|
2
2
|
import classNames from 'classnames';
|
|
3
3
|
import { useTranslation } from 'react-i18next';
|
|
4
4
|
import { useReadOnly, useSelected } from '@seafile/slate-react';
|
|
5
|
+
import { getFilteredRowsWithoutFormulaCalculation, sortTableRows } from 'dtable-utils';
|
|
5
6
|
import Loading from '../../../../../components/loading';
|
|
6
7
|
import RecordHeader from './record-header';
|
|
7
8
|
import RecordList from './record-list';
|
|
8
|
-
import './index.css';
|
|
9
9
|
import OpMenu from '../op-menu';
|
|
10
10
|
import { useScrollContext } from '../../../../hooks/use-scroll-context';
|
|
11
|
+
import './index.css';
|
|
11
12
|
function SeaTableTable(_ref) {
|
|
12
13
|
let {
|
|
13
14
|
element,
|
|
@@ -24,6 +25,7 @@ function SeaTableTable(_ref) {
|
|
|
24
25
|
const [records, setRecords] = useState([]);
|
|
25
26
|
const [shownRecords, setShownRecords] = useState([]);
|
|
26
27
|
const [isShowTipMessage, setIsShowTipMessage] = useState(false);
|
|
28
|
+
const tableInfoRef = useRef(null);
|
|
27
29
|
const {
|
|
28
30
|
t
|
|
29
31
|
} = useTranslation();
|
|
@@ -40,15 +42,85 @@ function SeaTableTable(_ref) {
|
|
|
40
42
|
table_id
|
|
41
43
|
} = element;
|
|
42
44
|
const table = editor.getTableById(table_id);
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
if (!tableInfoRef.current) {
|
|
46
|
+
tableInfoRef.current = {};
|
|
47
|
+
}
|
|
48
|
+
if (!tableInfoRef.current[table_id]) {
|
|
49
|
+
tableInfoRef.current[table_id] = {
|
|
50
|
+
formulaRows: editor.getTableFormulaResults(table, table.rows),
|
|
51
|
+
idRowMap: table.rows.reduce((result, item) => {
|
|
52
|
+
result[item._id] = item;
|
|
53
|
+
return result;
|
|
54
|
+
}, {})
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// filter rows
|
|
59
|
+
let validRecords = table.rows;
|
|
60
|
+
const {
|
|
61
|
+
idRowMap,
|
|
62
|
+
formulaRows
|
|
63
|
+
} = tableInfoRef.current[table_id];
|
|
64
|
+
if (element.filters && Array.isArray(element.filters) && element.filters.length > 0) {
|
|
65
|
+
const {
|
|
66
|
+
filter_conjunction,
|
|
67
|
+
filters
|
|
68
|
+
} = element;
|
|
69
|
+
const {
|
|
70
|
+
username,
|
|
71
|
+
userId,
|
|
72
|
+
userDepartmentIdsMap
|
|
73
|
+
} = window.seafile || window.seafileConfig;
|
|
74
|
+
const optionalParams = {
|
|
75
|
+
formulaRows,
|
|
76
|
+
username,
|
|
77
|
+
userId,
|
|
78
|
+
userDepartmentIdsMap
|
|
79
|
+
};
|
|
80
|
+
console.log(filters);
|
|
81
|
+
console.log(userDepartmentIdsMap);
|
|
82
|
+
const {
|
|
83
|
+
row_ids
|
|
84
|
+
} = getFilteredRowsWithoutFormulaCalculation(filter_conjunction, filters, validRecords, table, optionalParams);
|
|
85
|
+
validRecords = row_ids.map(rowId => {
|
|
86
|
+
const row = idRowMap[rowId];
|
|
87
|
+
return row;
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// sort rows
|
|
92
|
+
if (element.sorts && Array.isArray(element.sorts) && element.sorts.length > 0) {
|
|
93
|
+
const {
|
|
94
|
+
sorts
|
|
95
|
+
} = element;
|
|
96
|
+
const value = {
|
|
97
|
+
collaborators: editor.collaborators
|
|
98
|
+
};
|
|
99
|
+
const row_ids = sortTableRows(sorts, validRecords, table.columns, {
|
|
100
|
+
formulaRows,
|
|
101
|
+
value
|
|
102
|
+
});
|
|
103
|
+
validRecords = row_ids.map(rowId => {
|
|
104
|
+
const row = idRowMap[rowId];
|
|
105
|
+
return row;
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
const isShowTipMessage = readOnly ? validRecords.length > 200 : validRecords.length > 10;
|
|
109
|
+
const shownRecords = readOnly ? validRecords.slice(0, 200) : validRecords.slice(0, 10);
|
|
47
110
|
setIsShowTipMessage(isShowTipMessage);
|
|
48
|
-
setRecords(
|
|
111
|
+
setRecords(validRecords);
|
|
49
112
|
setShownRecords(shownRecords);
|
|
50
|
-
setIsLoading(false);
|
|
51
113
|
|
|
114
|
+
// filter columns
|
|
115
|
+
let validColumns = table.columns;
|
|
116
|
+
if (element.shown_column_keys && Array.isArray(element.shown_column_keys) && element.shown_column_keys.length > 0) {
|
|
117
|
+
const {
|
|
118
|
+
shown_column_keys
|
|
119
|
+
} = element;
|
|
120
|
+
validColumns = table.columns.filter(item => shown_column_keys.includes(item.key));
|
|
121
|
+
}
|
|
122
|
+
setColumns(validColumns);
|
|
123
|
+
setIsLoading(false);
|
|
52
124
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
53
125
|
}, [element, readOnly]);
|
|
54
126
|
const handleScroll = useCallback(e => {
|
|
@@ -114,14 +186,18 @@ function SeaTableTable(_ref) {
|
|
|
114
186
|
element: element,
|
|
115
187
|
menuPosition: menuPosition
|
|
116
188
|
}), isLoading && /*#__PURE__*/React.createElement(Loading, null), !isLoading && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("table", {
|
|
117
|
-
className:
|
|
118
|
-
|
|
189
|
+
className: classNames('seatable-view-records', {
|
|
190
|
+
'no_alternate_color': !element.alternate_color
|
|
191
|
+
})
|
|
192
|
+
}, /*#__PURE__*/React.createElement("tbody", null, /*#__PURE__*/React.createElement(RecordHeader, {
|
|
193
|
+
element: element,
|
|
119
194
|
columns: columns
|
|
120
195
|
}), /*#__PURE__*/React.createElement(RecordList, {
|
|
196
|
+
element: element,
|
|
121
197
|
editor: editor,
|
|
122
198
|
records: shownRecords,
|
|
123
199
|
columns: columns
|
|
124
|
-
})), !readOnly && isShowTipMessage && /*#__PURE__*/React.createElement("div", {
|
|
200
|
+
}))), !readOnly && isShowTipMessage && /*#__PURE__*/React.createElement("div", {
|
|
125
201
|
className: "d-print-none ml-2 m-2"
|
|
126
202
|
}, t('And_x_more_records', {
|
|
127
203
|
count: records.length - 10
|
package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/common-add-tool/index.css
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
.add-item-btn {
|
|
2
|
+
align-items: center;
|
|
3
|
+
background: #fff;
|
|
4
|
+
border-bottom-left-radius: 3px;
|
|
5
|
+
border-bottom-right-radius: 3px;
|
|
6
|
+
border-top: 1px solid #dedede;
|
|
7
|
+
display: flex;
|
|
8
|
+
font-size: 14px;
|
|
9
|
+
font-weight: 500;
|
|
10
|
+
height: 40px;
|
|
11
|
+
padding: 0 1rem;
|
|
12
|
+
position: relative;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.add-item-btn:hover {
|
|
16
|
+
background: #f5f5f5;
|
|
17
|
+
cursor: pointer;
|
|
18
|
+
}
|
package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/common-add-tool/index.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import './index.css';
|
|
3
|
+
function CommonAddTool(_ref) {
|
|
4
|
+
let {
|
|
5
|
+
callBack,
|
|
6
|
+
footerName,
|
|
7
|
+
className,
|
|
8
|
+
addIconClassName,
|
|
9
|
+
hideIcon,
|
|
10
|
+
style
|
|
11
|
+
} = _ref;
|
|
12
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
13
|
+
className: "add-item-btn ".concat(className ? className : ''),
|
|
14
|
+
style: style,
|
|
15
|
+
onClick: e => {
|
|
16
|
+
callBack(e);
|
|
17
|
+
}
|
|
18
|
+
}, !hideIcon && /*#__PURE__*/React.createElement("span", {
|
|
19
|
+
className: "dtable-font dtable-icon-add-table ".concat(addIconClassName || '')
|
|
20
|
+
}), /*#__PURE__*/React.createElement("span", {
|
|
21
|
+
className: "text-truncate"
|
|
22
|
+
}, footerName));
|
|
23
|
+
}
|
|
24
|
+
export default CommonAddTool;
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
2
|
+
import React, { Component } from 'react';
|
|
3
|
+
import classnames from 'classnames';
|
|
4
|
+
const isFunction = functionToCheck => {
|
|
5
|
+
const getType = {};
|
|
6
|
+
return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
|
|
7
|
+
};
|
|
8
|
+
class DtableSearchInput extends Component {
|
|
9
|
+
constructor(props) {
|
|
10
|
+
super(props);
|
|
11
|
+
_defineProperty(this, "onCompositionStart", () => {
|
|
12
|
+
this.isInputtingChinese = true;
|
|
13
|
+
});
|
|
14
|
+
_defineProperty(this, "onChange", e => {
|
|
15
|
+
this.timer && clearTimeout(this.timer);
|
|
16
|
+
const {
|
|
17
|
+
onChange,
|
|
18
|
+
wait
|
|
19
|
+
} = this.props;
|
|
20
|
+
let text = e.target.value;
|
|
21
|
+
this.setState({
|
|
22
|
+
searchValue: text || ''
|
|
23
|
+
}, () => {
|
|
24
|
+
if (this.isInputtingChinese) return;
|
|
25
|
+
this.timer = setTimeout(() => {
|
|
26
|
+
onChange && onChange(this.state.searchValue.trim());
|
|
27
|
+
}, wait);
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
_defineProperty(this, "onCompositionEnd", e => {
|
|
31
|
+
this.isInputtingChinese = false;
|
|
32
|
+
this.onChange(e);
|
|
33
|
+
});
|
|
34
|
+
_defineProperty(this, "clearSearch", () => {
|
|
35
|
+
const {
|
|
36
|
+
clearValue
|
|
37
|
+
} = this.props;
|
|
38
|
+
this.setState({
|
|
39
|
+
searchValue: ''
|
|
40
|
+
}, () => {
|
|
41
|
+
clearValue && clearValue();
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
_defineProperty(this, "setFocus", isSelectAllText => {
|
|
45
|
+
if (this.inputRef === document.activeElement) return;
|
|
46
|
+
this.inputRef.focus();
|
|
47
|
+
if (isSelectAllText) {
|
|
48
|
+
const txtLength = this.state.searchValue.length;
|
|
49
|
+
this.inputRef.setSelectionRange(0, txtLength);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
_defineProperty(this, "renderClear", () => {
|
|
53
|
+
const {
|
|
54
|
+
isClearable,
|
|
55
|
+
clearClassName,
|
|
56
|
+
components = {}
|
|
57
|
+
} = this.props;
|
|
58
|
+
const {
|
|
59
|
+
searchValue
|
|
60
|
+
} = this.state;
|
|
61
|
+
if (!isClearable || !searchValue) return null;
|
|
62
|
+
const {
|
|
63
|
+
ClearIndicator
|
|
64
|
+
} = components;
|
|
65
|
+
if (React.isValidElement(ClearIndicator)) {
|
|
66
|
+
return React.cloneElement(ClearIndicator, {
|
|
67
|
+
clearValue: this.clearSearch
|
|
68
|
+
});
|
|
69
|
+
} else if (isFunction(ClearIndicator)) {
|
|
70
|
+
return /*#__PURE__*/React.createElement(ClearIndicator, {
|
|
71
|
+
clearValue: this.clearSearch
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
return /*#__PURE__*/React.createElement("i", {
|
|
75
|
+
className: classnames('search-text-clear input-icon-addon', clearClassName),
|
|
76
|
+
onClick: this.clearSearch
|
|
77
|
+
}, "\xD7");
|
|
78
|
+
});
|
|
79
|
+
this.state = {
|
|
80
|
+
searchValue: props.value
|
|
81
|
+
};
|
|
82
|
+
this.isInputtingChinese = false;
|
|
83
|
+
this.timer = null;
|
|
84
|
+
this.inputRef = null;
|
|
85
|
+
}
|
|
86
|
+
UNSAFE_componentWillReceiveProps(nextProps) {
|
|
87
|
+
if (nextProps.value !== this.props.value) {
|
|
88
|
+
this.setState({
|
|
89
|
+
searchValue: nextProps.value
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
componentWillUnmount() {
|
|
94
|
+
this.timer && clearTimeout(this.timer);
|
|
95
|
+
this.timer = null;
|
|
96
|
+
this.inputRef = null;
|
|
97
|
+
}
|
|
98
|
+
render() {
|
|
99
|
+
const {
|
|
100
|
+
placeholder,
|
|
101
|
+
autoFocus,
|
|
102
|
+
className,
|
|
103
|
+
onKeyDown,
|
|
104
|
+
disabled,
|
|
105
|
+
style
|
|
106
|
+
} = this.props;
|
|
107
|
+
const {
|
|
108
|
+
searchValue
|
|
109
|
+
} = this.state;
|
|
110
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("input", {
|
|
111
|
+
type: "text",
|
|
112
|
+
value: searchValue,
|
|
113
|
+
className: classnames('form-control', className),
|
|
114
|
+
onChange: this.onChange,
|
|
115
|
+
autoFocus: autoFocus,
|
|
116
|
+
placeholder: placeholder,
|
|
117
|
+
onCompositionStart: this.onCompositionStart,
|
|
118
|
+
onCompositionEnd: this.onCompositionEnd,
|
|
119
|
+
onKeyDown: onKeyDown,
|
|
120
|
+
disabled: disabled,
|
|
121
|
+
style: style,
|
|
122
|
+
ref: ref => this.inputRef = ref
|
|
123
|
+
}), this.renderClear());
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
DtableSearchInput.defaultProps = {
|
|
127
|
+
wait: 100,
|
|
128
|
+
disabled: false,
|
|
129
|
+
value: ''
|
|
130
|
+
};
|
|
131
|
+
export default DtableSearchInput;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
const zhCN = require('@seafile/seafile-calendar/lib/locale/zh_CN');
|
|
2
|
+
const zhTW = require('@seafile/seafile-calendar/lib/locale/zh_TW');
|
|
3
|
+
const enUS = require('@seafile/seafile-calendar/lib/locale/en_US');
|
|
4
|
+
const frFR = require('@seafile/seafile-calendar/lib/locale/fr_FR');
|
|
5
|
+
const deDE = require('@seafile/seafile-calendar/lib/locale/de_DE');
|
|
6
|
+
const esES = require('@seafile/seafile-calendar/lib/locale/es_ES');
|
|
7
|
+
const plPL = require('@seafile/seafile-calendar/lib/locale/pl_PL');
|
|
8
|
+
const csCZ = require('@seafile/seafile-calendar/lib/locale/cs_CZ');
|
|
9
|
+
const ruRU = require('@seafile/seafile-calendar/lib/locale/ru_RU');
|
|
10
|
+
function translateCalendar() {
|
|
11
|
+
// TODO: Cheating, non-compliant operations
|
|
12
|
+
const {
|
|
13
|
+
lang
|
|
14
|
+
} = window.seafile || window.seafileConfig;
|
|
15
|
+
const locale = lang ? lang : 'en';
|
|
16
|
+
let language;
|
|
17
|
+
switch (locale) {
|
|
18
|
+
case 'zh-cn':
|
|
19
|
+
language = zhCN;
|
|
20
|
+
break;
|
|
21
|
+
case 'zh-tw':
|
|
22
|
+
language = zhTW;
|
|
23
|
+
break;
|
|
24
|
+
case 'en':
|
|
25
|
+
language = enUS;
|
|
26
|
+
break;
|
|
27
|
+
case 'fr':
|
|
28
|
+
language = frFR;
|
|
29
|
+
break;
|
|
30
|
+
case 'de':
|
|
31
|
+
language = deDE;
|
|
32
|
+
break;
|
|
33
|
+
case 'es':
|
|
34
|
+
language = esES;
|
|
35
|
+
break;
|
|
36
|
+
case 'es-ar':
|
|
37
|
+
language = esES;
|
|
38
|
+
break;
|
|
39
|
+
case 'es-mx':
|
|
40
|
+
language = esES;
|
|
41
|
+
break;
|
|
42
|
+
case 'pl':
|
|
43
|
+
language = plPL;
|
|
44
|
+
break;
|
|
45
|
+
case 'cs':
|
|
46
|
+
language = csCZ;
|
|
47
|
+
break;
|
|
48
|
+
case 'ru':
|
|
49
|
+
language = ruRU;
|
|
50
|
+
break;
|
|
51
|
+
default:
|
|
52
|
+
language = enUS;
|
|
53
|
+
}
|
|
54
|
+
return language;
|
|
55
|
+
}
|
|
56
|
+
export { translateCalendar };
|