@seafile/sdoc-editor 2.0.16 → 2.0.18-alph-0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/basic-sdk/assets/css/dropdown-menu.css +3 -2
  2. package/dist/basic-sdk/extension/commons/insert-element-dialog/index.js +12 -2
  3. package/dist/basic-sdk/extension/constants/element-type.js +2 -1
  4. package/dist/basic-sdk/extension/constants/index.js +8 -2
  5. package/dist/basic-sdk/extension/constants/menus-config.js +5 -0
  6. package/dist/basic-sdk/extension/plugins/index.js +7 -0
  7. package/dist/basic-sdk/extension/plugins/seatable-column/menu/index.js +6 -4
  8. package/dist/basic-sdk/extension/plugins/seatable-row/dialog/add-seatable-row-dialog/helpers.js +35 -0
  9. package/dist/basic-sdk/extension/plugins/seatable-row/dialog/add-seatable-row-dialog/index.css +106 -0
  10. package/dist/basic-sdk/extension/plugins/seatable-row/dialog/add-seatable-row-dialog/index.js +82 -0
  11. package/dist/basic-sdk/extension/plugins/seatable-row/dialog/add-seatable-row-dialog/record-content.js +201 -0
  12. package/dist/basic-sdk/extension/plugins/seatable-row/dialog/add-seatable-row-dialog/record-item.js +41 -0
  13. package/dist/basic-sdk/extension/plugins/seatable-row/dialog/add-seatable-row-dialog/row-card-header-cell.js +108 -0
  14. package/dist/basic-sdk/extension/plugins/seatable-row/dialog/add-seatable-row-dialog/row-card-header.js +143 -0
  15. package/dist/basic-sdk/extension/plugins/seatable-row/dialog/add-seatable-row-dialog/row-card-item.js +240 -0
  16. package/dist/basic-sdk/extension/plugins/seatable-row/dialog/add-seatable-row-dialog/seatable-table-record.js +37 -0
  17. package/dist/basic-sdk/extension/plugins/seatable-row/dialog/add-seatable-row-dialog/seatable-table.js +134 -0
  18. package/dist/basic-sdk/extension/plugins/seatable-row/helpers.js +90 -0
  19. package/dist/basic-sdk/extension/plugins/seatable-row/index.js +17 -0
  20. package/dist/basic-sdk/extension/plugins/seatable-row/menu/index.js +44 -0
  21. package/dist/basic-sdk/extension/plugins/seatable-row/menu/seatable-list.js +61 -0
  22. package/dist/basic-sdk/extension/plugins/seatable-row/model.js +19 -0
  23. package/dist/basic-sdk/extension/plugins/seatable-row/plugin.js +60 -0
  24. package/dist/basic-sdk/extension/plugins/seatable-row/render-elem/index.css +123 -0
  25. package/dist/basic-sdk/extension/plugins/seatable-row/render-elem/index.js +161 -0
  26. package/dist/basic-sdk/extension/plugins/seatable-row/render-elem/record-header.js +78 -0
  27. package/dist/basic-sdk/extension/plugins/seatable-row/render-elem/record-item.js +41 -0
  28. package/dist/basic-sdk/extension/plugins/seatable-tables/menu/index.js +4 -3
  29. package/dist/basic-sdk/extension/render/custom-element.js +5 -0
  30. package/dist/basic-sdk/extension/toolbar/header-toolbar/insert-toolbar/index.js +3 -2
  31. package/dist/basic-sdk/extension/toolbar/side-toolbar/helpers.js +2 -1
  32. package/dist/basic-sdk/extension/toolbar/side-toolbar/insert-block-menu.js +4 -2
  33. package/dist/basic-sdk/extension/toolbar/side-toolbar/side-menu.js +1 -0
  34. package/dist/pages/document-plugin-editor.js +3 -1
  35. package/package.json +1 -1
  36. package/public/locales/cs/sdoc-editor.json +7 -1
  37. package/public/locales/de/sdoc-editor.json +66 -60
  38. package/public/locales/en/sdoc-editor.json +7 -1
  39. package/public/locales/es/sdoc-editor.json +7 -1
  40. package/public/locales/es_AR/sdoc-editor.json +7 -1
  41. package/public/locales/es_MX/sdoc-editor.json +7 -1
  42. package/public/locales/fr/sdoc-editor.json +240 -234
  43. package/public/locales/it/sdoc-editor.json +7 -1
  44. package/public/locales/ru/sdoc-editor.json +8 -2
  45. package/public/locales/zh_CN/sdoc-editor.json +6 -1
  46. package/public/media/sdoc-editor-font/iconfont.css +15 -14
  47. package/public/media/sdoc-editor-font/iconfont.eot +0 -0
  48. package/public/media/sdoc-editor-font/iconfont.svg +3 -1
  49. package/public/media/sdoc-editor-font/iconfont.ttf +0 -0
  50. package/public/media/sdoc-editor-font/iconfont.woff +0 -0
  51. package/public/media/sdoc-editor-font/iconfont.woff2 +0 -0
  52. package/public/media/sdoc-editor-font.css +11 -7
@@ -6,9 +6,10 @@
6
6
  .sdoc-dropdown-menu .sdoc-seatable-selected-table-list-wrapper {
7
7
  position: absolute;
8
8
  background-color: #ffff;
9
- max-height: 300px;
9
+ max-height: 370px;
10
10
  max-width: 200px;
11
11
  padding: 8px 0px;
12
+ left: -8px;
12
13
  }
13
14
 
14
15
  .sdoc-dropdown-menu .sdoc-seatable-selected-table-list-wrapper .sdoc-seatable-list-search-wrapper {
@@ -21,7 +22,7 @@
21
22
  }
22
23
 
23
24
  .sdoc-dropdown-menu .sdoc-seatable-selected-table-list-wrapper .sdoc-seatable-list-wrapper {
24
- max-height: 230px;
25
+ max-height: 300px;
25
26
  overflow-y: auto;
26
27
  }
27
28
 
@@ -24,6 +24,7 @@ var _index5 = require("../../plugins/video/constants/index.js");
24
24
  var _constants3 = require("../../../../basic-sdk/constants");
25
25
  var _index6 = _interopRequireDefault(require("../../plugins/ai/ai-module/index.js"));
26
26
  var _index7 = _interopRequireDefault(require("../../plugins/video/dialog/add-video-link-dialog/index.js"));
27
+ var _index8 = _interopRequireDefault(require("../../plugins/seatable-row/dialog/add-seatable-row-dialog/index.js"));
27
28
  const InsertElementDialog = _ref => {
28
29
  let {
29
30
  editor
@@ -37,6 +38,7 @@ const InsertElementDialog = _ref => {
37
38
  const [validEditor, setValidEditor] = (0, _react.useState)(editor);
38
39
  const [linkTitle, setLinkTitle] = (0, _react.useState)('');
39
40
  const [handleSubmit, setHandleSubmit] = (0, _react.useState)(() => void 0);
41
+ const [data, setData] = (0, _react.useState)({});
40
42
  const {
41
43
  t
42
44
  } = (0, _reactI18next.useTranslation)('sdoc-editor');
@@ -96,7 +98,8 @@ const InsertElementDialog = _ref => {
96
98
  editor: paramEditor,
97
99
  linkTitle,
98
100
  // link shortcut wrapping link
99
- handleSubmit
101
+ handleSubmit,
102
+ data
100
103
  } = _ref2;
101
104
  setInsertPosition(insertPosition);
102
105
  setSlateNode(slateNode);
@@ -113,6 +116,7 @@ const InsertElementDialog = _ref => {
113
116
  setHandleSubmit(handleSubmit);
114
117
  // Apply for comment editor, as it has a different editor instance
115
118
  setValidEditor(paramEditor || editor);
119
+ setData(data);
116
120
  if (type === _constants2.LOCAL_IMAGE) {
117
121
  setTimeout(() => {
118
122
  uploadLocalImageInputRef.current && uploadLocalImageInputRef.current.click();
@@ -133,6 +137,7 @@ const InsertElementDialog = _ref => {
133
137
  setInsertVideoCallback(null);
134
138
  setValidEditor(null);
135
139
  setLinkTitle('');
140
+ setData('');
136
141
  }, []);
137
142
  const props = {
138
143
  insertPosition,
@@ -141,7 +146,8 @@ const InsertElementDialog = _ref => {
141
146
  element,
142
147
  closeDialog,
143
148
  linkTitle,
144
- handleSubmit
149
+ handleSubmit,
150
+ data
145
151
  };
146
152
  switch (dialogType) {
147
153
  case _constants2.ELEMENT_TYPE.TABLE:
@@ -240,6 +246,10 @@ const InsertElementDialog = _ref => {
240
246
  closeModule: closeDialog
241
247
  });
242
248
  }
249
+ case _constants2.ELEMENT_TYPE.SEATABLE_ROW:
250
+ {
251
+ return /*#__PURE__*/_react.default.createElement(_index8.default, props);
252
+ }
243
253
  default:
244
254
  {
245
255
  return null;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.WIKI_LINK = exports.VIDEO_LINK = exports.VIDEO = exports.UNORDERED_LIST = exports.TWO_COLUMN = exports.TOP_LEVEL_TYPES = exports.TITLE = exports.THREE_COLUMN = exports.TABLE_ROW = exports.TABLE_CELL = exports.TABLE = exports.SUBTITLE = exports.SEATABLE_TABLE = exports.SEATABLE_COLUMN = exports.SDOC_LINK = exports.QUICK_INSERT = exports.PARAGRAPH = exports.ORDERED_LIST = exports.MULTI_COLUMN = exports.MENTION_TEMP = exports.MENTION = exports.LIST_ITEM = exports.LINK = exports.INLINE_LEVEL_TYPES = exports.IMAGE_BLOCK = exports.IMAGE = exports.HEADER6 = exports.HEADER5 = exports.HEADER4 = exports.HEADER3 = exports.HEADER2 = exports.HEADER1 = exports.HEADER = exports.GROUP = exports.FOUR_COLUMN = exports.FONT_SIZE_REDUCE = exports.FONT_SIZE_INCREASE = exports.FONT_SIZE = exports.FIVE_COLUMN = exports.FILE_LINK_INSET_INPUT_TEMP = exports.FILE_LINK = exports.COLUMN = exports.CODE_LINE = exports.CODE_BLOCK = exports.CHECK_LIST_ITEM = exports.CALL_OUT = exports.BLOCKQUOTE = exports.ASK_AI = void 0;
6
+ exports.WIKI_LINK = exports.VIDEO_LINK = exports.VIDEO = exports.UNORDERED_LIST = exports.TWO_COLUMN = exports.TOP_LEVEL_TYPES = exports.TITLE = exports.THREE_COLUMN = exports.TABLE_ROW = exports.TABLE_CELL = exports.TABLE = exports.SUBTITLE = exports.SEATABLE_TABLE = exports.SEATABLE_ROW = exports.SEATABLE_COLUMN = exports.SDOC_LINK = exports.QUICK_INSERT = exports.PARAGRAPH = exports.ORDERED_LIST = exports.MULTI_COLUMN = exports.MENTION_TEMP = exports.MENTION = exports.LIST_ITEM = exports.LINK = exports.INLINE_LEVEL_TYPES = exports.IMAGE_BLOCK = exports.IMAGE = exports.HEADER6 = exports.HEADER5 = exports.HEADER4 = exports.HEADER3 = exports.HEADER2 = exports.HEADER1 = exports.HEADER = exports.GROUP = exports.FOUR_COLUMN = exports.FONT_SIZE_REDUCE = exports.FONT_SIZE_INCREASE = exports.FONT_SIZE = exports.FIVE_COLUMN = exports.FILE_LINK_INSET_INPUT_TEMP = exports.FILE_LINK = exports.COLUMN = exports.CODE_LINE = exports.CODE_BLOCK = exports.CHECK_LIST_ITEM = exports.CALL_OUT = exports.BLOCKQUOTE = exports.ASK_AI = void 0;
7
7
  const BLOCKQUOTE = exports.BLOCKQUOTE = 'blockquote';
8
8
  const TITLE = exports.TITLE = 'title';
9
9
  const SUBTITLE = exports.SUBTITLE = 'subtitle';
@@ -44,6 +44,7 @@ const FILE_LINK_INSET_INPUT_TEMP = exports.FILE_LINK_INSET_INPUT_TEMP = 'file_li
44
44
  const QUICK_INSERT = exports.QUICK_INSERT = 'quick_insert';
45
45
  const VIDEO_LINK = exports.VIDEO_LINK = 'video_link';
46
46
  const SEATABLE_COLUMN = exports.SEATABLE_COLUMN = 'seatable_column';
47
+ const SEATABLE_ROW = exports.SEATABLE_ROW = 'seatable_row';
47
48
  const SEATABLE_TABLE = exports.SEATABLE_TABLE = 'seatable_table';
48
49
  const ASK_AI = exports.ASK_AI = 'ask_ai';
49
50
 
@@ -344,6 +344,12 @@ Object.defineProperty(exports, "SEATABLE_COLUMN", {
344
344
  return _elementType.SEATABLE_COLUMN;
345
345
  }
346
346
  });
347
+ Object.defineProperty(exports, "SEATABLE_ROW", {
348
+ enumerable: true,
349
+ get: function () {
350
+ return _elementType.SEATABLE_ROW;
351
+ }
352
+ });
347
353
  Object.defineProperty(exports, "SEATABLE_TABLE", {
348
354
  enumerable: true,
349
355
  get: function () {
@@ -537,7 +543,7 @@ const FILE_TYPE = exports.FILE_TYPE = {
537
543
  [_elementType.SDOC_LINK]: 'sdoc',
538
544
  [_elementType.VIDEO]: 'video'
539
545
  };
540
- const SUPPORTED_SIDE_OPERATION_TYPE = exports.SUPPORTED_SIDE_OPERATION_TYPE = [_elementType.PARAGRAPH, _elementType.SUBTITLE, _elementType.HEADER1, _elementType.HEADER2, _elementType.HEADER3, _elementType.HEADER4, _elementType.HEADER5, _elementType.HEADER6, _elementType.CHECK_LIST_ITEM, _elementType.CODE_BLOCK, _elementType.TABLE, _elementType.BLOCKQUOTE, _elementType.CALL_OUT, _elementType.IMAGE_BLOCK, _elementType.VIDEO, _elementType.SEATABLE_TABLE, _elementType.MULTI_COLUMN];
546
+ const SUPPORTED_SIDE_OPERATION_TYPE = exports.SUPPORTED_SIDE_OPERATION_TYPE = [_elementType.PARAGRAPH, _elementType.SUBTITLE, _elementType.HEADER1, _elementType.HEADER2, _elementType.HEADER3, _elementType.HEADER4, _elementType.HEADER5, _elementType.HEADER6, _elementType.CHECK_LIST_ITEM, _elementType.CODE_BLOCK, _elementType.TABLE, _elementType.BLOCKQUOTE, _elementType.CALL_OUT, _elementType.IMAGE_BLOCK, _elementType.VIDEO, _elementType.SEATABLE_TABLE, _elementType.MULTI_COLUMN, _elementType.SEATABLE_ROW];
541
547
  const MOUSE_ENTER_EVENT_DISABLED_MAP = exports.MOUSE_ENTER_EVENT_DISABLED_MAP = {
542
548
  [_elementType.PARAGRAPH]: [_elementType.CALL_OUT],
543
549
  [_elementType.TITLE]: [_elementType.CALL_OUT],
@@ -555,4 +561,4 @@ const MOUSE_ENTER_EVENT_DISABLED_MAP = exports.MOUSE_ENTER_EVENT_DISABLED_MAP =
555
561
  [_elementType.HEADER6]: [_elementType.CALL_OUT],
556
562
  [_elementType.CALL_OUT]: [_elementType.CALL_OUT]
557
563
  };
558
- const ROOT_ELEMENT_TYPES = exports.ROOT_ELEMENT_TYPES = [_elementType.PARAGRAPH, _elementType.TITLE, _elementType.SUBTITLE, _elementType.CHECK_LIST_ITEM, _elementType.ORDERED_LIST, _elementType.UNORDERED_LIST, _elementType.BLOCKQUOTE, _elementType.HEADER1, _elementType.HEADER2, _elementType.HEADER3, _elementType.HEADER4, _elementType.HEADER5, _elementType.HEADER6, _elementType.CALL_OUT, _elementType.TABLE, _elementType.CODE_BLOCK, _elementType.IMAGE_BLOCK, _elementType.VIDEO, _elementType.SEATABLE_TABLE];
564
+ const ROOT_ELEMENT_TYPES = exports.ROOT_ELEMENT_TYPES = [_elementType.PARAGRAPH, _elementType.TITLE, _elementType.SUBTITLE, _elementType.CHECK_LIST_ITEM, _elementType.ORDERED_LIST, _elementType.UNORDERED_LIST, _elementType.BLOCKQUOTE, _elementType.HEADER1, _elementType.HEADER2, _elementType.HEADER3, _elementType.HEADER4, _elementType.HEADER5, _elementType.HEADER6, _elementType.CALL_OUT, _elementType.TABLE, _elementType.CODE_BLOCK, _elementType.IMAGE_BLOCK, _elementType.VIDEO, _elementType.SEATABLE_TABLE, _elementType.SEATABLE_ROW];
@@ -223,6 +223,11 @@ const MENUS_CONFIG_MAP = exports.MENUS_CONFIG_MAP = {
223
223
  iconClass: 'sdocfont sdoc-find-replace',
224
224
  text: 'Search_and_replace'
225
225
  },
226
+ [_elementType.SEATABLE_ROW]: {
227
+ id: `sdoc_${_elementType.SEATABLE_ROW}`,
228
+ iconClass: 'sdocfont sdoc-seatable-row',
229
+ text: 'SeaTable_row'
230
+ },
226
231
  [_elementType.SEATABLE_COLUMN]: {
227
232
  id: `sdoc_${_elementType.SEATABLE_COLUMN}`,
228
233
  iconClass: 'sdocfont sdoc-choose-column',
@@ -119,6 +119,12 @@ Object.defineProperty(exports, "SeaTableColumnPlugin", {
119
119
  return _seatableColumn.default;
120
120
  }
121
121
  });
122
+ Object.defineProperty(exports, "SeaTableRowPlugin", {
123
+ enumerable: true,
124
+ get: function () {
125
+ return _seatableRow.default;
126
+ }
127
+ });
122
128
  Object.defineProperty(exports, "SeaTableViewsPlugin", {
123
129
  enumerable: true,
124
130
  get: function () {
@@ -186,6 +192,7 @@ var _mention = _interopRequireDefault(require("./mention"));
186
192
  var _quickInsert = _interopRequireDefault(require("./quick-insert"));
187
193
  var _wikiLink = _interopRequireDefault(require("./wiki-link"));
188
194
  var _seatableColumn = _interopRequireDefault(require("./seatable-column"));
195
+ var _seatableRow = _interopRequireDefault(require("./seatable-row"));
189
196
  var _seatableTables = _interopRequireDefault(require("./seatable-tables"));
190
197
  var _group = _interopRequireDefault(require("./group"));
191
198
  const Plugins = [_markdown.default, _html.default, _header.default, _link.default, _blockquote.default, _list.default, _checkList.default, _codeBlock.default, _image.default, _video.default, _table.default, _multiColumn.default, _textStyle.default, _textAlign.default, _font.default, _sdocLink.default, _paragraph.default, _fileLink.default, _callout.default, _searchReplace.default, _quickInsert.default, _group.default];
@@ -18,7 +18,8 @@ const SeaTableColumnMenu = _ref => {
18
18
  readonly,
19
19
  insertPosition,
20
20
  toggle,
21
- isHidden = false
21
+ isHidden = false,
22
+ container
22
23
  } = _ref;
23
24
  const disabled = (0, _helpers.isMenuDisabled)(editor, readonly);
24
25
  const menuConfig = _constants.MENUS_CONFIG_MAP[_constants.ELEMENT_TYPE.SEATABLE_COLUMN];
@@ -30,17 +31,18 @@ const SeaTableColumnMenu = _ref => {
30
31
  })
31
32
  }, !disabled && /*#__PURE__*/_react.default.createElement("i", {
32
33
  className: "sdocfont sdoc-right-slide sdoc-dropdown-item-right-icon"
33
- })), !disabled && /*#__PURE__*/_react.default.createElement(_reactstrap.UncontrolledPopover, {
34
+ }), !disabled && /*#__PURE__*/_react.default.createElement(_reactstrap.UncontrolledPopover, {
34
35
  target: menuConfig.id,
35
36
  hideArrow: true,
36
37
  trigger: "hover",
37
38
  fade: false,
38
- popperClassName: "seatable-column-popover"
39
+ popperClassName: "seatable-column-popover",
40
+ container: container || menuConfig.id
39
41
  }, /*#__PURE__*/_react.default.createElement(_columnListMenu.default, {
40
42
  editor: editor,
41
43
  readonly: readonly,
42
44
  insertPosition: insertPosition,
43
45
  toggle: toggle
44
- })));
46
+ }))));
45
47
  };
46
48
  var _default = exports.default = SeaTableColumnMenu;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getRowName = void 0;
7
+ var _dtableUtils = require("dtable-utils");
8
+ const getRowName = (columns, row, formula_rows) => {
9
+ if (!row) return '';
10
+ const displayColumn = columns.find(column => column.key === '0000');
11
+ if (!displayColumn) return '';
12
+ const {
13
+ type,
14
+ key,
15
+ data
16
+ } = displayColumn;
17
+ let formulaRows;
18
+ if (formula_rows) {
19
+ formulaRows = formula_rows;
20
+ } else {
21
+ const view = window.app.getSelectedView();
22
+ formulaRows = view.formula_rows || {};
23
+ }
24
+ const tables = window.app.state.value.tables;
25
+ const departments = window.app.state;
26
+ const collaborators = window.app.state.collaboratorsWithAppUsers;
27
+ return (0, _dtableUtils.getCellValueDisplayString)(row, type, key, {
28
+ formulaRows,
29
+ data,
30
+ tables,
31
+ collaborators,
32
+ departments
33
+ });
34
+ };
35
+ exports.getRowName = getRowName;
@@ -0,0 +1,106 @@
1
+ .seatable-rows-select-dialog {
2
+ max-width: 520px;
3
+ }
4
+
5
+ .seatable-rows-select-dialog .sdoc-seatable-rows-select-footer {
6
+ display: flex;
7
+ align-items: center;
8
+ justify-content: flex-end;
9
+ padding: 1rem;
10
+ border-top: 1px solid #e9ecef;
11
+ }
12
+
13
+ .seatable-rows-select-dialog .modal-header-container {
14
+ display: flex;
15
+ position: relative;
16
+ justify-content: space-between;
17
+ align-items: center;
18
+ width: 100%;
19
+ height: 57px;
20
+ padding: 16px;
21
+ border-bottom: 1px solid #e9ecef;
22
+ }
23
+
24
+ .seatable-rows-select-dialog .modal-title-container {
25
+ flex: 1;
26
+ white-space: nowrap;
27
+ position: relative;
28
+ display: flex;
29
+ align-items: center;
30
+ justify-content: flex-start;
31
+ margin: auto;
32
+ }
33
+
34
+ .seatable-rows-close-dialog {
35
+ display: flex;
36
+ align-items: center;
37
+ justify-content: center;
38
+ width: 28px;
39
+ }
40
+
41
+ .modal-header-container .sdoc-close1 {
42
+ font-size: 16px;
43
+ color: #666666;
44
+ }
45
+
46
+ .modal-header-container .sdoc-close1:hover {
47
+ background-color: #EFEFEF;
48
+ border-radius: 3px;
49
+ height: 28px;
50
+ width: 28px;
51
+ }
52
+
53
+ .seatable-rows-select-dialog .seatable-table-wrapper {
54
+ max-height: 207px;
55
+ overflow-x: auto;
56
+ overflow-y: hidden;
57
+ border: 2px solid transparent;
58
+ }
59
+
60
+ .seatable-rows-select-dialog .seatable-table-wrapper table td,
61
+ .seatable-rows-select-dialog .seatable-table-wrapper table th {
62
+ border-width: 0 1px 1px 0;
63
+ border-style: solid;
64
+ border-color: #ccc;
65
+ line-height: 1.5;
66
+ word-break: break-all;
67
+ }
68
+
69
+ .seatable-rows-select-dialog .seatable-view-records {
70
+ width: max-content;
71
+ border-top: 1px solid #ddd;
72
+ border-left: 1px solid #ddd;
73
+ border-collapse: collapse;
74
+ border-spacing: 2px;
75
+ }
76
+
77
+ .seatable-rows-select-dialog .seatable-view-column-header-row {
78
+ position: sticky;
79
+ top: 0;
80
+ z-index: 1;
81
+ }
82
+
83
+ .seatable-rows-select-dialog .seatable-view-column-header-row th {
84
+ display: inline-flex;
85
+ align-items: center;
86
+ justify-content: flex-start;
87
+ flex: unset !important;
88
+ }
89
+
90
+ .seatable-rows-select-dialog .seatable-view-body-row {
91
+ display: block;
92
+ height: calc(100% - 32px);
93
+ max-height: 170px;
94
+ box-sizing: border-box;
95
+ overflow-y: auto;
96
+ }
97
+
98
+ .seatable-rows-select-dialog tbody td,
99
+ .seatable-rows-select-dialog thead th {
100
+ height: 32px;
101
+ padding: 0 8px;
102
+ }
103
+
104
+ .seatable-rows-select-dialog .seatable-view-body-column-row.isSelected {
105
+ background-color: rgb(222, 232, 254);
106
+ }
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+ var _react = _interopRequireWildcard(require("react"));
10
+ var _reactI18next = require("react-i18next");
11
+ var _reactstrap = require("reactstrap");
12
+ var _helpers = require("../../helpers");
13
+ var _seatableTable = _interopRequireDefault(require("./seatable-table"));
14
+ require("./index.css");
15
+ const AddSeatableRowDialog = _ref => {
16
+ let {
17
+ editor,
18
+ closeDialog,
19
+ handleSubmit,
20
+ data
21
+ } = _ref;
22
+ const {
23
+ tableID,
24
+ tableName
25
+ } = data;
26
+ const [rowRecordsErrorMessage, setRowRecordsErrorMessage] = (0, _react.useState)('');
27
+ const {
28
+ t
29
+ } = (0, _reactI18next.useTranslation)('sdoc-editor');
30
+ const [selectedRowsID, setSelectedRowsID] = (0, _react.useState)([]);
31
+ const submit = (0, _react.useCallback)(() => {
32
+ setRowRecordsErrorMessage('');
33
+ if (selectedRowsID.length === 0) {
34
+ setRowRecordsErrorMessage(t('Select_at_least_one_row_record'));
35
+ return;
36
+ }
37
+ if (selectedRowsID.length > 10) {
38
+ setRowRecordsErrorMessage(t('Selected_row_records_cannot_exceed_10_rows'));
39
+ return;
40
+ }
41
+ if (selectedRowsID.length <= 10) {
42
+ (0, _helpers.insertSeaTableRow)(editor, tableID, selectedRowsID, 'after');
43
+ }
44
+ handleSubmit && handleSubmit();
45
+ closeDialog();
46
+ // eslint-disable-next-line react-hooks/exhaustive-deps
47
+ }, [editor, selectedRowsID]);
48
+ return /*#__PURE__*/_react.default.createElement(_reactstrap.Modal, {
49
+ isOpen: true,
50
+ autoFocus: false,
51
+ toggle: closeDialog,
52
+ className: "seatable-rows-select-dialog",
53
+ zIndex: 1071,
54
+ returnFocusAfterClose: false
55
+ }, /*#__PURE__*/_react.default.createElement("div", {
56
+ className: "modal-header-container"
57
+ }, /*#__PURE__*/_react.default.createElement("h5", {
58
+ className: "modal-title-container"
59
+ }, t('Select_seatable_rows')), /*#__PURE__*/_react.default.createElement("div", {
60
+ className: "sdocfont sdoc-close1 seatable-rows-close-dialog",
61
+ onClick: closeDialog
62
+ })), /*#__PURE__*/_react.default.createElement(_reactstrap.ModalBody, null, /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
63
+ className: "form-group"
64
+ }, /*#__PURE__*/_react.default.createElement(_reactstrap.Label, null, tableName), /*#__PURE__*/_react.default.createElement(_seatableTable.default, {
65
+ tableID: tableID,
66
+ setSelectedRowsID: setSelectedRowsID,
67
+ editor: editor
68
+ }), rowRecordsErrorMessage && /*#__PURE__*/_react.default.createElement(_reactstrap.Alert, {
69
+ color: "danger",
70
+ className: "mt-2"
71
+ }, t(rowRecordsErrorMessage))))), /*#__PURE__*/_react.default.createElement(_reactstrap.ModalFooter, {
72
+ className: "sdoc-seatable-rows-select-footer"
73
+ }, /*#__PURE__*/_react.default.createElement(_reactstrap.Button, {
74
+ color: "secondary",
75
+ onClick: closeDialog
76
+ }, t('Cancel')), /*#__PURE__*/_react.default.createElement(_reactstrap.Button, {
77
+ color: "primary",
78
+ disabled: false,
79
+ onClick: submit
80
+ }, t('Add_rows_record'))));
81
+ };
82
+ var _default = exports.default = AddSeatableRowDialog;
@@ -0,0 +1,201 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/defineProperty"));
10
+ var _react = _interopRequireWildcard(require("react"));
11
+ var _reactI18next = require("react-i18next");
12
+ var _rowCardHeader = _interopRequireDefault(require("./row-card-header"));
13
+ var _helpers = require("./helpers");
14
+ var _rowCardItem = _interopRequireDefault(require("./row-card-item"));
15
+ // 98: row-card-item height + margin top = 88 + 10 = 98
16
+ const CARD_RECORD_ITEM_HEIGHT = 98;
17
+ class RecordContent extends _react.Component {
18
+ constructor(_props) {
19
+ super(_props);
20
+ (0, _defineProperty2.default)(this, "initState", props => {
21
+ const {
22
+ rows
23
+ } = props;
24
+ this.recordItem = [];
25
+ this.currentDisplayRowMinIndex = 0;
26
+ this.currentDisplayRowMaxIndex = Math.floor((0 + this.recordsList.offsetHeight) / CARD_RECORD_ITEM_HEIGHT);
27
+ const displayRows = rows.slice(0, this.shownLength);
28
+ const isHasMore = rows.length === this.shownLength;
29
+ this.setState({
30
+ displayRows,
31
+ isHasMore
32
+ });
33
+ });
34
+ (0, _defineProperty2.default)(this, "scrollToMore", e => {
35
+ e.stopPropagation();
36
+ const {
37
+ clientHeight,
38
+ scrollTop,
39
+ scrollHeight
40
+ } = this.recordsList;
41
+ this.currentDisplayRowMinIndex = Math.floor(scrollTop / CARD_RECORD_ITEM_HEIGHT);
42
+ this.currentDisplayRowMaxIndex = Math.floor(scrollHeight / CARD_RECORD_ITEM_HEIGHT);
43
+ const {
44
+ scrollLeft,
45
+ isHasMore
46
+ } = this.state;
47
+ if (scrollLeft >= 0) {
48
+ this.setItemScrollLeft(scrollLeft, -1);
49
+ }
50
+ if (!isHasMore || this.isLoadingMore) return;
51
+ if (clientHeight + scrollTop >= scrollHeight) {
52
+ const offset = this.shownLength;
53
+ this.isLoadingMore = true;
54
+ this.shownLength = offset + 10;
55
+ this.props.onLoadMore(offset);
56
+ }
57
+ });
58
+ (0, _defineProperty2.default)(this, "onRef", (ref, rowIdx) => {
59
+ this.recordItem[rowIdx] = ref;
60
+ });
61
+ (0, _defineProperty2.default)(this, "getCurrentDisplayRowMaxIndex", () => {
62
+ if (this.recordsList) {
63
+ this.currentDisplayRowMaxIndex = Math.floor((0 + this.recordsList.offsetHeight) / CARD_RECORD_ITEM_HEIGHT);
64
+ }
65
+ });
66
+ (0, _defineProperty2.default)(this, "setScrollLeft", scrollLeft => {
67
+ this.setState({
68
+ scrollLeft
69
+ });
70
+ });
71
+ (0, _defineProperty2.default)(this, "setItemScrollLeft", (scrollLeft, currentRecordIdx) => {
72
+ const {
73
+ isShowRowCardHeader
74
+ } = this.props;
75
+ if (isShowRowCardHeader) this.rowCardHeaderRef.setHeaderScrollLeft(scrollLeft);
76
+ const start = window.isMobile ? 0 : this.currentDisplayRowMinIndex;
77
+ const end = window.isMobile ? this.recordItem.length : this.currentDisplayRowMaxIndex;
78
+ for (let i = start; i <= end; i++) {
79
+ if (i !== currentRecordIdx && this.recordItem[i]) {
80
+ let cardRecordScrollLeft = this.recordItem[i].getScrollLeft();
81
+ if (cardRecordScrollLeft !== scrollLeft) {
82
+ this.recordItem[i].setScrollLeft(scrollLeft);
83
+ }
84
+ }
85
+ }
86
+ });
87
+ (0, _defineProperty2.default)(this, "setRecordsListRef", ref => {
88
+ this.recordsList = ref;
89
+ });
90
+ this.state = {
91
+ isHasMore: false,
92
+ displayRows: [],
93
+ scrollLeft: 0
94
+ };
95
+ this.shownLength = 10;
96
+ this.recordsList = null;
97
+ this.recordsContainer = null;
98
+ this.recordItem = [];
99
+ this.currentDisplayRowMinIndex = 0;
100
+ this.currentDisplayRowMaxIndex = 0;
101
+ this.isLoadingMore = false;
102
+ }
103
+ componentDidMount() {
104
+ this.initState(this.props);
105
+ }
106
+ UNSAFE_componentWillReceiveProps(nextProps) {
107
+ const {
108
+ rows
109
+ } = nextProps;
110
+ if (this.shownLength === 10) {
111
+ this.isLoadingMore = false;
112
+ this.initState(nextProps);
113
+ return;
114
+ }
115
+ this.isLoadingMore = false;
116
+ const displayRows = rows.slice(0, this.shownLength);
117
+ const isHasMore = rows.length === this.shownLength;
118
+ this.setState({
119
+ displayRows,
120
+ isHasMore
121
+ });
122
+ if (this.props.isAdditionEditorView !== nextProps.isAdditionEditorView) {
123
+ this.recordsList.scrollTop = 0;
124
+ }
125
+ }
126
+ componentWillUnmount() {
127
+ this.recordsList = null;
128
+ this.recordsContainer = null;
129
+ this.recordItem = [];
130
+ this.currentDisplayRowMinIndex = 0;
131
+ this.currentDisplayRowMaxIndex = 0;
132
+ }
133
+ render() {
134
+ const {
135
+ table,
136
+ isAdditionEditorView,
137
+ highlightRowIndex,
138
+ noCardItemTip,
139
+ rowCardType,
140
+ columns,
141
+ renderedColumns,
142
+ unShowColumnKeyList,
143
+ showScrollBtn,
144
+ isShowRowCardHeader,
145
+ isShowRemoveCardItemBtn,
146
+ cardListClassName,
147
+ formulaRows,
148
+ createBtn,
149
+ cardHeaderClassName
150
+ } = this.props;
151
+ const {
152
+ displayRows,
153
+ scrollLeft
154
+ } = this.state;
155
+ const rowCardListClass = `row-card-list ${cardListClassName ? cardListClassName : ''}`;
156
+ return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", {
157
+ className: "row-card-container"
158
+ }, /*#__PURE__*/_react.default.createElement(_rowCardHeader.default, {
159
+ cardHeaderClassName: cardHeaderClassName,
160
+ setItemScrollLeft: this.setItemScrollLeft,
161
+ renderedColumns: renderedColumns,
162
+ getCurrentDisplayRowMaxIndex: this.getCurrentDisplayRowMaxIndex,
163
+ showScrollBtn: showScrollBtn,
164
+ scrollLeft: scrollLeft,
165
+ setScrollLeft: this.setScrollLeft,
166
+ ref: ref => this.rowCardHeaderRef = ref
167
+ }), /*#__PURE__*/_react.default.createElement("div", {
168
+ className: rowCardListClass,
169
+ ref: this.setRecordsListRef,
170
+ onScroll: this.scrollToMore
171
+ }, displayRows.length === 0 && /*#__PURE__*/_react.default.createElement("div", {
172
+ className: "no-records-tips"
173
+ }, noCardItemTip), displayRows.length > 0 && /*#__PURE__*/_react.default.createElement("div", {
174
+ className: "row-card-content",
175
+ ref: ref => this.recordsContent = ref
176
+ }, displayRows.map((row, rowIdx) => {
177
+ const formulaRow = formulaRows && formulaRows[row._id] || {};
178
+ const displayRowName = (0, _helpers.getRowName)(table.columns, row);
179
+ return /*#__PURE__*/_react.default.createElement(_rowCardItem.default, {
180
+ key: `row-card-${rowIdx}`,
181
+ displayRowName: displayRowName,
182
+ setItemScrollLeft: this.setItemScrollLeft,
183
+ onRef: this.onRef,
184
+ rowCardType: rowCardType,
185
+ table: table,
186
+ row: row,
187
+ isAdditionEditorView: isAdditionEditorView,
188
+ isHighlightRow: highlightRowIndex === rowIdx,
189
+ formulaRow: formulaRow,
190
+ rowIdx: rowIdx,
191
+ columns: columns,
192
+ unShowColumnKeyList: unShowColumnKeyList,
193
+ isShowRemoveCardItemBtn: isShowRemoveCardItemBtn,
194
+ onSelectRow: this.props.onSelectRow,
195
+ onExpandRow: this.props.onExpandRow,
196
+ removeCardItem: this.props.removeCardItem
197
+ });
198
+ })))));
199
+ }
200
+ }
201
+ var _default = exports.default = RecordContent;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = RecordItem;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _dtableUtils = require("dtable-utils");
10
+ var _formatter = _interopRequireDefault(require("../../../seatable-tables/formatter"));
11
+ function RecordItem(_ref) {
12
+ let {
13
+ record,
14
+ formulaRow,
15
+ columns,
16
+ editor
17
+ } = _ref;
18
+ return /*#__PURE__*/_react.default.createElement("tr", {
19
+ className: "seatable-view-body-column-row"
20
+ }, columns.map(column => {
21
+ const width = 100;
22
+ let cellValue = record[column.key];
23
+ if ([_dtableUtils.CellType.LINK, _dtableUtils.CellType.LINK_FORMULA, _dtableUtils.CellType.FORMULA].includes(column.type)) {
24
+ cellValue = formulaRow[column.key];
25
+ }
26
+ return /*#__PURE__*/_react.default.createElement("td", {
27
+ className: "seatable-view-body-column-cell",
28
+ key: record._id + '_' + column.key,
29
+ "data-record-id": record._id,
30
+ style: {
31
+ width,
32
+ minWidth: width
33
+ }
34
+ }, /*#__PURE__*/_react.default.createElement(_formatter.default, {
35
+ isSample: true,
36
+ column: column,
37
+ cellValue: cellValue,
38
+ collaborators: editor.collaborators
39
+ }));
40
+ }));
41
+ }