@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.
Files changed (65) hide show
  1. package/dist/basic-sdk/comment/components/global-comment/index.js +0 -1
  2. package/dist/basic-sdk/extension/plugins/seatable-tables/formatter/index.js +17 -1
  3. package/dist/basic-sdk/extension/plugins/seatable-tables/helpers.js +15 -2
  4. package/dist/basic-sdk/extension/plugins/seatable-tables/model.js +7 -0
  5. package/dist/basic-sdk/extension/plugins/seatable-tables/op-menu/index.js +0 -1
  6. package/dist/basic-sdk/extension/plugins/seatable-tables/render-element/index.css +23 -0
  7. package/dist/basic-sdk/extension/plugins/seatable-tables/render-element/record-header.js +6 -3
  8. package/dist/basic-sdk/extension/plugins/seatable-tables/render-element/record-item.js +5 -1
  9. package/dist/basic-sdk/extension/plugins/seatable-tables/render-element/record-list.js +6 -3
  10. package/dist/basic-sdk/extension/plugins/seatable-tables/render-element/seatable-table.js +86 -10
  11. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/common-add-tool/index.css +18 -0
  12. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/common-add-tool/index.js +24 -0
  13. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/dtable-search-input/index.js +131 -0
  14. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/calendar-filter/date-translate.js +56 -0
  15. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/calendar-filter/dayjs.js +4 -0
  16. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/calendar-filter/index.js +175 -0
  17. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/collaborator-filter/index.js +107 -0
  18. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/_department-select.css +209 -0
  19. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/_department-utils.js +39 -0
  20. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/department-multiple-select-filter.js +89 -0
  21. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/department-multiple-select.js +148 -0
  22. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/department-single-select-filter.js +90 -0
  23. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/department-single-select.js +275 -0
  24. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/index.js +3 -0
  25. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/selected-departments.js +84 -0
  26. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/department-filter/use-click-outside.js +22 -0
  27. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/filter-item-utils.js +144 -0
  28. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/filter-item.js +696 -0
  29. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/filters-list.css +321 -0
  30. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/filters-list.js +121 -0
  31. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/number-editor/index.js +161 -0
  32. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover-widgets/rate-item/index.js +73 -0
  33. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover.css +30 -0
  34. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filter-popover.js +200 -0
  35. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/filters-utils.js +456 -0
  36. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/index.css +0 -0
  37. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/filter-setter/index.js +81 -7
  38. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/hide-column-setter/hide-column-item.js +54 -0
  39. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/hide-column-setter/hide-column-popover.js +203 -0
  40. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/hide-column-setter/index.css +105 -0
  41. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/hide-column-setter/index.js +89 -8
  42. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/index.css +4 -0
  43. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/index.js +98 -26
  44. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/sort-setter/index.css +83 -0
  45. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/sort-setter/index.js +67 -8
  46. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/sort-setter/sort-popover.js +279 -0
  47. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/sort-setter/sort-utils.js +71 -0
  48. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/utils/utils.js +33 -0
  49. package/dist/basic-sdk/extension/plugins/table/menu/horizontal-align-popover/index.js +1 -1
  50. package/dist/basic-sdk/extension/plugins/table/menu/table-context-menu/index.js +1 -2
  51. package/dist/basic-sdk/socket/socket-client.js +1 -1
  52. package/dist/pages/document-plugin-editor.js +3 -1
  53. package/package.json +2 -1
  54. package/public/locales/cs/sdoc-editor.json +40 -1
  55. package/public/locales/de/sdoc-editor.json +40 -1
  56. package/public/locales/en/sdoc-editor.json +40 -1
  57. package/public/locales/es/sdoc-editor.json +40 -1
  58. package/public/locales/es_AR/sdoc-editor.json +40 -1
  59. package/public/locales/es_MX/sdoc-editor.json +40 -1
  60. package/public/locales/fr/sdoc-editor.json +40 -1
  61. package/public/locales/it/sdoc-editor.json +40 -1
  62. package/public/locales/ru/sdoc-editor.json +40 -1
  63. package/public/locales/zh_CN/sdoc-editor.json +41 -2
  64. package/dist/basic-sdk/extension/plugins/seatable-tables/setting/index.css +0 -1
  65. 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("thead", null, /*#__PURE__*/React.createElement("tr", {
8
+ return /*#__PURE__*/React.createElement("tr", {
8
9
  className: "seatable-view-column-header-row"
9
- }, columns.map(column => {
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
- }, columns.map(column => {
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("tbody", null, records.map(record => {
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
- setColumns(table.columns);
44
- const records = table.rows;
45
- const isShowTipMessage = readOnly ? records.length > 200 : records.length > 10;
46
- const shownRecords = readOnly ? records.slice(0, 200) : records.slice(0, 10);
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(records);
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: "seatable-view-records"
118
- }, /*#__PURE__*/React.createElement(RecordHeader, {
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
@@ -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
+ }
@@ -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 };
@@ -0,0 +1,4 @@
1
+ import dayjs from 'dayjs';
2
+ import customParseFormat from 'dayjs/plugin/customParseFormat';
3
+ dayjs.extend(customParseFormat);
4
+ export default dayjs;