@seafile/sdoc-editor 1.0.220 → 1.0.222

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 (42) hide show
  1. package/dist/basic-sdk/assets/css/dropdown-menu.css +14 -1
  2. package/dist/basic-sdk/assets/css/sdoc-editor-plugins.css +0 -23
  3. package/dist/basic-sdk/extension/commons/search-list/index.css +28 -0
  4. package/dist/basic-sdk/extension/commons/search-list/index.js +150 -0
  5. package/dist/basic-sdk/extension/constants/index.js +2 -6
  6. package/dist/basic-sdk/extension/constants/menus-config.js +15 -0
  7. package/dist/basic-sdk/extension/plugins/font/helpers.js +7 -0
  8. package/dist/basic-sdk/extension/plugins/header/render-elem.js +2 -1
  9. package/dist/basic-sdk/extension/plugins/image/helpers.js +9 -21
  10. package/dist/basic-sdk/extension/plugins/image/image-loader/index.css +37 -0
  11. package/dist/basic-sdk/extension/plugins/image/image-loader/index.js +23 -0
  12. package/dist/basic-sdk/extension/plugins/image/render-elem.js +24 -76
  13. package/dist/basic-sdk/extension/plugins/image/use-upload-image.js +80 -0
  14. package/dist/basic-sdk/extension/plugins/multi-column/constants/index.js +1 -1
  15. package/dist/basic-sdk/extension/plugins/multi-column/helper.js +24 -7
  16. package/dist/basic-sdk/extension/plugins/multi-column/plugin.js +1 -1
  17. package/dist/basic-sdk/extension/plugins/multi-column/render/index.css +1 -3
  18. package/dist/basic-sdk/extension/plugins/multi-column/render/index.js +7 -2
  19. package/dist/basic-sdk/extension/plugins/multi-column/resize-handlers/index.js +2 -2
  20. package/dist/basic-sdk/extension/plugins/seatable-column/menu/column-list-item.js +36 -0
  21. package/dist/basic-sdk/extension/plugins/seatable-column/menu/column-list-menu.css +4 -2
  22. package/dist/basic-sdk/extension/plugins/seatable-column/menu/column-list-menu.js +8 -13
  23. package/dist/basic-sdk/extension/plugins/seatable-column/menu/index.js +5 -9
  24. package/dist/basic-sdk/extension/plugins/seatable-column/plugin.js +9 -1
  25. package/dist/basic-sdk/extension/plugins/seatable-column/render-elem.js +71 -7
  26. package/dist/basic-sdk/extension/plugins/seatable-tables/menu/index.js +3 -6
  27. package/dist/basic-sdk/extension/plugins/seatable-tables/menu/seatable-list.js +35 -2
  28. package/dist/basic-sdk/extension/plugins/seatable-tables/op-menu/index.css +19 -4
  29. package/dist/basic-sdk/extension/plugins/seatable-tables/op-menu/index.js +39 -9
  30. package/dist/basic-sdk/extension/plugins/seatable-tables/render-element/seatable-table.js +2 -1
  31. package/dist/basic-sdk/extension/plugins/seatable-tables/seatable-settings/hide-column-setter/hide-column-popover.js +2 -4
  32. package/dist/basic-sdk/extension/plugins/table/helpers.js +1 -0
  33. package/dist/basic-sdk/extension/plugins/text-style/helpers.js +1 -1
  34. package/dist/basic-sdk/extension/plugins/text-style/menu/index.js +10 -1
  35. package/dist/basic-sdk/extension/toolbar/header-toolbar/insert-toolbar/index.js +4 -0
  36. package/dist/basic-sdk/extension/toolbar/insert-element-toolbar/index.js +7 -0
  37. package/dist/basic-sdk/extension/toolbar/side-toolbar/helpers.js +53 -2
  38. package/dist/basic-sdk/extension/toolbar/side-toolbar/index.js +116 -20
  39. package/dist/basic-sdk/utils/full-width-mode.js +1 -1
  40. package/package.json +1 -1
  41. package/public/locales/en/sdoc-editor.json +2 -1
  42. package/public/locales/zh_CN/sdoc-editor.json +2 -1
@@ -0,0 +1,80 @@
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 = void 0;
8
+ var _react = require("react");
9
+ var _slate = require("@seafile/slate");
10
+ var _slateReact = require("@seafile/slate-react");
11
+ var _context = _interopRequireDefault(require("../../../../context"));
12
+ var _helpers = require("./helpers");
13
+ const updateImageNode = async function (editor, element, newUrl) {
14
+ let isError = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
15
+ const nodePath = _slateReact.ReactEditor.findPath(editor, element);
16
+ const newData = {
17
+ ...element.data,
18
+ src: newUrl,
19
+ is_copy_error: isError
20
+ };
21
+ _slate.Transforms.setNodes(editor, {
22
+ data: newData
23
+ }, {
24
+ at: nodePath
25
+ });
26
+ };
27
+ const useImageUpload = _ref => {
28
+ let {
29
+ editor,
30
+ element
31
+ } = _ref;
32
+ const {
33
+ data
34
+ } = element;
35
+ const {
36
+ is_copy_error = false
37
+ } = data;
38
+ const [isLoading, setIsLoading] = (0, _react.useState)(false);
39
+ const [isCopyError, setIsCopyError] = (0, _react.useState)(is_copy_error);
40
+ (0, _react.useEffect)(() => {
41
+ const {
42
+ src: url
43
+ } = data;
44
+ if (isCopyError) return;
45
+ if (!(0, _helpers.isImagUrlIsFromCopy)(url)) return;
46
+ const downloadAndUploadImages = async url => {
47
+ try {
48
+ const response = await fetch(url);
49
+ if (response.ok) {
50
+ const blob = await response.blob();
51
+ const file = new File([blob], 'downloaded_image.png', {
52
+ type: blob.type
53
+ });
54
+ const imageUrl = await _context.default.uploadLocalImage([file]);
55
+ if (imageUrl && imageUrl[0]) {
56
+ updateImageNode(editor, element, imageUrl[0]);
57
+ }
58
+ } else {
59
+ throw new Error(`HTTP error status: ${response.status}`);
60
+ }
61
+ } catch (error) {
62
+ console.error(error);
63
+ updateImageNode(editor, element, url, true);
64
+ setIsCopyError(true);
65
+ } finally {
66
+ setTimeout(() => {
67
+ setIsLoading(false);
68
+ }, 500);
69
+ }
70
+ };
71
+ downloadAndUploadImages(url);
72
+ // eslint-disable-next-line react-hooks/exhaustive-deps
73
+ }, []);
74
+ return {
75
+ isCopyImageLoading: isLoading,
76
+ setCopyImageLoading: setIsLoading,
77
+ isCopyImageError: isCopyError
78
+ };
79
+ };
80
+ var _default = exports.default = useImageUpload;
@@ -4,4 +4,4 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.COLUMN_MIN_WIDTH = void 0;
7
- const COLUMN_MIN_WIDTH = exports.COLUMN_MIN_WIDTH = 35;
7
+ const COLUMN_MIN_WIDTH = exports.COLUMN_MIN_WIDTH = 80;
@@ -11,6 +11,9 @@ var _slateReact = require("@seafile/slate-react");
11
11
  var _constants = require("../../constants");
12
12
  var _constants2 = require("./constants");
13
13
  var _core = require("../../core");
14
+ var _localStorageUtils = _interopRequireDefault(require("../../../../utils/local-storage-utils"));
15
+ var _constants3 = require("../../../constants");
16
+ var _fullWidthMode = require("../../../utils/full-width-mode");
14
17
  const insertMultiColumn = function (editor, selection) {
15
18
  let position = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _constants.INSERT_POSITION.CURRENT;
16
19
  let type = arguments.length > 3 ? arguments[3] : undefined;
@@ -40,7 +43,7 @@ const generateEmptyMultiColumn = (editor, MultiColumnType) => {
40
43
  default:
41
44
  break;
42
45
  }
43
- const currentPageWidth = getCurrentPageWidth();
46
+ const currentPageWidth = getCurrentPageWidth(editor);
44
47
  const initialColumnWidth = Math.max(_constants2.COLUMN_MIN_WIDTH, parseInt(currentPageWidth / multiColumnNumber));
45
48
  for (let i = 0; i < multiColumnNumber; i++) {
46
49
  const columnWidthKey = _slugid.default.nice();
@@ -139,12 +142,13 @@ const handleInsertMultiColumn = (editor, insertPosition, path, multiColumnNode)
139
142
  _slateReact.ReactEditor.focus(editor);
140
143
  };
141
144
  exports.handleInsertMultiColumn = handleInsertMultiColumn;
142
- const updateColumnWidthOnDeletion = (editor, selection, column, deletionDirection) => {
143
- const multiColumnPath = [selection.anchor.path[0]];
145
+ const updateColumnWidthOnDeletion = function (editor, selection, column, deletionDirection) {
146
+ let isDragged = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
147
+ const multiColumnPath = !isDragged ? [selection.anchor.path[0]] : [selection[0]];
144
148
  const newMultiColumnNode = _slate.Node.get(editor, multiColumnPath);
145
- const targetColumnIndex = selection.anchor.path[1] + (deletionDirection === 'deleteForward' ? 1 : 0);
149
+ const targetColumnIndex = !isDragged ? selection.anchor.path[1] + (deletionDirection === 'deleteForward' ? 1 : 0) : selection[1] + (deletionDirection === 'deleteForward' ? 1 : 0);
146
150
  const remainingColumn = column.filter((_, index) => index !== targetColumnIndex);
147
- const currentPageWidth = getCurrentPageWidth();
151
+ const currentPageWidth = getCurrentPageWidth(editor);
148
152
  const columnWidth = Math.max(_constants2.COLUMN_MIN_WIDTH, parseInt(currentPageWidth / remainingColumn.length));
149
153
 
150
154
  // Recalculate width of every left column
@@ -156,9 +160,22 @@ const updateColumnWidthOnDeletion = (editor, selection, column, deletionDirectio
156
160
  updateColumnWidth(editor, newMultiColumnNode, newColumn, multiColumnPath);
157
161
  };
158
162
  exports.updateColumnWidthOnDeletion = updateColumnWidthOnDeletion;
159
- const getCurrentPageWidth = () => {
163
+ const getCurrentPageWidth = editor => {
160
164
  const sdocEditorPage = document.getElementById('sdoc-editor');
161
- const pageWidth = sdocEditorPage === null || sdocEditorPage === void 0 ? void 0 : sdocEditorPage.getBoundingClientRect().width;
165
+ let pageWidth;
166
+ pageWidth = sdocEditorPage === null || sdocEditorPage === void 0 ? void 0 : sdocEditorPage.getBoundingClientRect().width;
167
+
168
+ // Get pageWidth if on is_full_width mode
169
+ if (_localStorageUtils.default.getItem(_constants3.FULL_WIDTH_MODE)) {
170
+ var _getStyleByFullWidthM;
171
+ const sdocEditorPageContent = document.getElementsByClassName('sdoc-editor-page-content')[0];
172
+ const pageContentWidth = sdocEditorPageContent === null || sdocEditorPageContent === void 0 ? void 0 : sdocEditorPageContent.getBoundingClientRect().width;
173
+ const pageWidthString = (_getStyleByFullWidthM = (0, _fullWidthMode.getStyleByFullWidthMode)(undefined, editor)) === null || _getStyleByFullWidthM === void 0 ? void 0 : _getStyleByFullWidthM.width;
174
+ const numbers = pageWidthString.match(/\d+/g).map(Number);
175
+
176
+ // 120 is padding and 2 is border width of 'sdoc-editor' dom;
177
+ pageWidth = pageContentWidth - numbers.slice(1).reduce((sum, num) => sum + num, 0) - 120 - 2;
178
+ }
162
179
  return pageWidth;
163
180
  };
164
181
  exports.getCurrentPageWidth = getCurrentPageWidth;
@@ -82,7 +82,7 @@ const withMultiColumn = editor => {
82
82
  const nextNode = _slate.Editor.next(newEditor);
83
83
  const nextColumnIndex = nextNode[1][1];
84
84
  const currentMultiColumnEntry = (0, _core.getSelectedNodeEntryByType)(editor, _constants.ELEMENT_TYPE.MULTI_COLUMN);
85
- if (!currentMultiColumnEntry) return deleteBackward(unit);
85
+ if (!currentMultiColumnEntry) return deleteForward(unit);
86
86
  const {
87
87
  column,
88
88
  children: childColumn
@@ -16,16 +16,14 @@
16
16
  .sdoc-multicolumn-wrapper .column {
17
17
  display: flex;
18
18
  left: 3px;
19
- line-height: 1.5;
20
19
  align-items: flex-start;
21
20
  }
22
21
 
23
22
  .sdoc-column-container {
24
- width: calc(100% - 15px);
23
+ width: calc(100% - 50px);
25
24
  max-width: 100%;
26
25
  position: relative;
27
26
  padding: 5px 5px 5px 0px;
28
- margin-left: 15px;
29
27
  box-sizing: border-box;
30
28
  word-wrap: break-word;
31
29
  white-space: pre-wrap;
@@ -26,10 +26,15 @@ const MultiColumn = _ref => {
26
26
  ...element.style
27
27
  } : {});
28
28
  const multiColumnContainerClassName = (0, _classnames.default)('sdoc-multicolumn-container', className);
29
- const [pageWidth, setPageWidth] = (0, _react.useState)((0, _helper.getCurrentPageWidth)());
29
+ const [pageWidth, setPageWidth] = (0, _react.useState)((0, _helper.getCurrentPageWidth)(editor));
30
30
  const handleResizeColumn = newColumn => {
31
31
  (0, _helper.updateColumnWidth)(editor, element, newColumn);
32
32
  };
33
+ (0, _react.useEffect)(() => {
34
+ setPageWidth((0, _helper.getCurrentPageWidth)(editor));
35
+ }
36
+ // eslint-disable-next-line react-hooks/exhaustive-deps
37
+ , []);
33
38
  (0, _react.useEffect)(() => {
34
39
  const sdocEditorPage = document.getElementById('sdoc-editor');
35
40
  if (!sdocEditorPage) return;
@@ -37,7 +42,7 @@ const MultiColumn = _ref => {
37
42
  var _entries$;
38
43
  const newPageWidth = (_entries$ = entries[0]) === null || _entries$ === void 0 ? void 0 : _entries$.contentRect.width;
39
44
  // Check if sdocPageWidth changes
40
- if (newPageWidth !== pageWidth) {
45
+ if (pageWidth && newPageWidth !== pageWidth) {
41
46
  const scaleFactor = newPageWidth / pageWidth;
42
47
  const updatedColumns = element.column.map(item => ({
43
48
  ...item,
@@ -129,14 +129,14 @@ const ResizeHandlers = _ref => {
129
129
  }, index === 0 && /*#__PURE__*/_react.default.createElement("div", {
130
130
  className: "column-width-just",
131
131
  style: {
132
- left: '0'
132
+ left: '-15px'
133
133
  }
134
134
  }), /*#__PURE__*/_react.default.createElement(_columnResizeHandler.default, {
135
135
  key: index,
136
136
  index: index,
137
137
  handleMouseDown: handleMouseDown,
138
138
  style: {
139
- left: `${left}px`
139
+ left: `${left - 15}px`
140
140
  },
141
141
  adjustingCell: adjustingCell,
142
142
  isDraggingResizeHandler: isDraggingResizeHandler,
@@ -0,0 +1,36 @@
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 = ColumnListItem;
9
+ var _classnames = _interopRequireDefault(require("classnames"));
10
+ var _react = _interopRequireWildcard(require("react"));
11
+ function ColumnListItem(_ref) {
12
+ let {
13
+ innerRef,
14
+ item,
15
+ onItemClick,
16
+ isSelected
17
+ } = _ref;
18
+ const onMouseDown = (0, _react.useCallback)(() => {
19
+ onItemClick(item);
20
+ }, [onItemClick, item]);
21
+ const clazzNames = (0, _classnames.default)('column-list-menu-item-container', {
22
+ 'selected': isSelected
23
+ });
24
+ return /*#__PURE__*/_react.default.createElement("div", {
25
+ ref: innerRef,
26
+ key: item.value,
27
+ className: clazzNames,
28
+ onClick: onMouseDown
29
+ }, /*#__PURE__*/_react.default.createElement("div", {
30
+ className: "column-list-menu-item"
31
+ }, /*#__PURE__*/_react.default.createElement("span", {
32
+ className: `control-icon ${item.iconClass}`
33
+ }), /*#__PURE__*/_react.default.createElement("span", {
34
+ className: "control-label"
35
+ }, item.label)));
36
+ }
@@ -8,8 +8,6 @@
8
8
  background-color: #fff;
9
9
  min-width: 12rem;
10
10
  width: 200px;
11
- max-height: 300px;
12
- overflow: auto;
13
11
  padding: 8px 0;
14
12
  }
15
13
 
@@ -46,3 +44,7 @@
46
44
  background-color: #f5f5f5;
47
45
  cursor: pointer;
48
46
  }
47
+
48
+ .column-list-menu .column-list-menu-item-container.selected {
49
+ background-color: #e3e3e3;
50
+ }
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
3
4
  var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
@@ -10,6 +11,8 @@ var _column = require("../constants/column");
10
11
  var _helpers = require("../helpers");
11
12
  var _elementType = require("../../../constants/element-type");
12
13
  var _utils = require("../../../utils");
14
+ var _searchList = _interopRequireDefault(require("../../../commons/search-list"));
15
+ var _columnListItem = _interopRequireDefault(require("./column-list-item"));
13
16
  require("./column-list-menu.css");
14
17
  const NOT_SUPPORT_COLUMN_TYPES = ['button', 'file'];
15
18
  function ColumnListMenu(_ref) {
@@ -51,7 +54,7 @@ function ColumnListMenu(_ref) {
51
54
  const isActive = editor => {
52
55
  return (0, _helpers.getColumnType)(editor) === _elementType.SEATABLE_COLUMN;
53
56
  };
54
- const onMousedown = (0, _react.useCallback)(option => {
57
+ const onListItemClick = (0, _react.useCallback)(option => {
55
58
  const active = isActive(editor);
56
59
  (0, _helpers.insertSeaTableColumn)(editor, active, option, insertPosition);
57
60
  toggle && toggle();
@@ -60,17 +63,9 @@ function ColumnListMenu(_ref) {
60
63
  ref: columnRef,
61
64
  className: "column-list-menu",
62
65
  style: computedStyle
63
- }, options.map(option => {
64
- return /*#__PURE__*/_react.default.createElement("div", {
65
- key: option.value,
66
- className: "column-list-menu-item-container",
67
- onClick: () => onMousedown(option)
68
- }, /*#__PURE__*/_react.default.createElement("div", {
69
- className: "column-list-menu-item"
70
- }, /*#__PURE__*/_react.default.createElement("span", {
71
- className: `control-icon ${option.iconClass}`
72
- }), /*#__PURE__*/_react.default.createElement("span", {
73
- className: "control-label"
74
- }, option.label)));
66
+ }, /*#__PURE__*/_react.default.createElement(_searchList.default, {
67
+ list: options,
68
+ listItem: _columnListItem.default,
69
+ onListItemClick: onListItemClick
75
70
  }));
76
71
  }
@@ -1,12 +1,11 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
- var _react = _interopRequireWildcard(require("react"));
8
+ var _react = _interopRequireDefault(require("react"));
10
9
  var _classnames = _interopRequireDefault(require("classnames"));
11
10
  var _constants = require("../../../constants");
12
11
  var _dropdownMenuItem = _interopRequireDefault(require("../../../commons/dropdown-menu-item"));
@@ -21,7 +20,6 @@ const SeaTableColumnMenu = _ref => {
21
20
  toggle,
22
21
  isHidden = false
23
22
  } = _ref;
24
- const dropDownMenuRef = (0, _react.useRef)(null);
25
23
  const disabled = (0, _helpers.isMenuDisabled)(editor, readonly);
26
24
  const menuConfig = _constants.MENUS_CONFIG_MAP[_constants.ELEMENT_TYPE.SEATABLE_COLUMN];
27
25
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
@@ -29,22 +27,20 @@ const SeaTableColumnMenu = _ref => {
29
27
  menuConfig: menuConfig,
30
28
  className: (0, _classnames.default)('pr-2 sdoc-dropdown-menu-item-relative', {
31
29
  'sdoc-dropdown-menu-item-hidden': isHidden
32
- }),
33
- ref: dropDownMenuRef
30
+ })
34
31
  }, !disabled && /*#__PURE__*/_react.default.createElement("i", {
35
32
  className: "sdocfont sdoc-right-slide sdoc-dropdown-item-right-icon"
36
- }), !disabled && /*#__PURE__*/_react.default.createElement(_reactstrap.UncontrolledPopover, {
33
+ })), !disabled && /*#__PURE__*/_react.default.createElement(_reactstrap.UncontrolledPopover, {
37
34
  target: menuConfig.id,
38
35
  hideArrow: true,
39
36
  trigger: "hover",
40
37
  fade: false,
41
- popperClassName: "seatable-column-popover",
42
- container: dropDownMenuRef === null || dropDownMenuRef === void 0 ? void 0 : dropDownMenuRef.current
38
+ popperClassName: "seatable-column-popover"
43
39
  }, /*#__PURE__*/_react.default.createElement(_columnListMenu.default, {
44
40
  editor: editor,
45
41
  readonly: readonly,
46
42
  insertPosition: insertPosition,
47
43
  toggle: toggle
48
- }))));
44
+ })));
49
45
  };
50
46
  var _default = exports.default = SeaTableColumnMenu;
@@ -8,7 +8,8 @@ var _constants = require("../../constants");
8
8
  const withColumn = editor => {
9
9
  const {
10
10
  isInline,
11
- isVoid
11
+ isVoid,
12
+ markableVoid
12
13
  } = editor;
13
14
  const newEditor = editor;
14
15
  newEditor.isInline = element => {
@@ -25,6 +26,13 @@ const withColumn = editor => {
25
26
  if (type === _constants.ELEMENT_TYPE.SEATABLE_COLUMN) return true;
26
27
  return isVoid(element);
27
28
  };
29
+ newEditor.markableVoid = element => {
30
+ const {
31
+ type
32
+ } = element;
33
+ if (type === _constants.ELEMENT_TYPE.SEATABLE_COLUMN) return true;
34
+ return markableVoid(element);
35
+ };
28
36
  return newEditor;
29
37
  };
30
38
  var _default = exports.default = withColumn;
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
3
4
  var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
@@ -7,6 +8,7 @@ Object.defineProperty(exports, "__esModule", {
7
8
  exports.default = void 0;
8
9
  var _react = _interopRequireWildcard(require("react"));
9
10
  var _slateReact = require("@seafile/slate-react");
11
+ var _mdToHtml = _interopRequireDefault(require("../../../../slate-convert/md-to-html"));
10
12
  const Column = _ref => {
11
13
  let {
12
14
  props,
@@ -19,15 +21,34 @@ const Column = _ref => {
19
21
  } = props;
20
22
  const isReadOnly = (0, _slateReact.useReadOnly)();
21
23
  const isSelected = (0, _slateReact.useSelected)();
24
+ const [columnValue, setColumnValue] = (0, _react.useState)('');
22
25
  const data = element.data || {};
23
26
  const {
24
- key: columnKey,
25
- name: columnName
27
+ key: columnKey
26
28
  } = data;
27
- let displayValue = columnName ? `{${columnName}}` : '';
28
- if (editor.getColumnCellValue) {
29
- displayValue = editor.getColumnCellValue(columnKey) || 'null';
30
- }
29
+ const column = editor.columns.find(item => item.key === columnKey);
30
+ const isLongTextColumn = (0, _react.useMemo)(() => {
31
+ return column && column.type === 'long-text';
32
+ }, [column]);
33
+ (0, _react.useEffect)(() => {
34
+ const data = element.data || {};
35
+ const {
36
+ key: columnKey,
37
+ name: columnName
38
+ } = data;
39
+ let displayValue = columnName ? `{${columnName}}` : '';
40
+ if (editor.getColumnCellValue) {
41
+ displayValue = editor.getColumnCellValue(columnKey) || 'null';
42
+ if (!isLongTextColumn) {
43
+ setColumnValue(displayValue);
44
+ return;
45
+ }
46
+ _mdToHtml.default.process(displayValue).then(res => {
47
+ displayValue = String(res);
48
+ setColumnValue(displayValue);
49
+ });
50
+ }
51
+ }, [editor, element.data, isLongTextColumn]);
31
52
  const [isClicked, setIsClicked] = (0, _react.useState)(false);
32
53
  (0, _react.useEffect)(() => {
33
54
  if (isSelected && !isReadOnly) {
@@ -36,16 +57,59 @@ const Column = _ref => {
36
57
  setIsClicked(false);
37
58
  }
38
59
  }, [isSelected, isReadOnly]);
60
+ const {
61
+ font_size = null,
62
+ font = null,
63
+ bold = null,
64
+ italic = null,
65
+ underline = null,
66
+ color = null,
67
+ highlight_color = null,
68
+ strikethrough = null
69
+ } = element.children[0];
39
70
  const style = {
40
71
  margin: '0 10px',
41
72
  border: '1px solid transparent',
73
+ userSelect: 'none',
74
+ display: 'inline-block',
42
75
  ...(isClicked && {
43
76
  border: '1px solid red'
77
+ }),
78
+ ...(font_size && {
79
+ fontSize: font_size
80
+ }),
81
+ ...(font && {
82
+ fontFamily: font
83
+ }),
84
+ ...(bold && {
85
+ fontWeight: 600
86
+ }),
87
+ ...(italic && {
88
+ fontStyle: 'italic'
89
+ }),
90
+ ...(underline && {
91
+ textDecoration: 'underline'
92
+ }),
93
+ ...(color && {
94
+ color: color
95
+ }),
96
+ ...(highlight_color && {
97
+ backgroundColor: highlight_color
98
+ }),
99
+ ...(strikethrough && {
100
+ textDecoration: 'line-through'
44
101
  })
45
102
  };
46
103
  return /*#__PURE__*/_react.default.createElement("span", Object.assign({}, attributes, {
47
104
  style: style
48
- }), displayValue, children);
105
+ }), !isLongTextColumn && columnValue, isLongTextColumn && /*#__PURE__*/_react.default.createElement("div", {
106
+ style: {
107
+ padding: '10px'
108
+ },
109
+ dangerouslySetInnerHTML: {
110
+ __html: columnValue
111
+ }
112
+ }), children);
49
113
  };
50
114
  const renderColumn = (props, editor) => {
51
115
  return /*#__PURE__*/_react.default.createElement(Column, {
@@ -22,7 +22,6 @@ const SeaTableTableMenu = _ref => {
22
22
  toggle,
23
23
  isHidden = false
24
24
  } = _ref;
25
- const dropDownMenuRef = (0, _react.useRef)(null);
26
25
  const menuConfig = _constants.MENUS_CONFIG_MAP[_constants.SEATABLE_TABLE];
27
26
  let disabled = (0, _helpers.isInsertSeaTableTableDisabled)(editor, readonly);
28
27
  if (insertPosition === _constants.INSERT_POSITION.AFTER) {
@@ -37,17 +36,15 @@ const SeaTableTableMenu = _ref => {
37
36
  menuConfig: menuConfig,
38
37
  className: (0, _classnames.default)('pr-2 sdoc-dropdown-menu-item-relative', {
39
38
  'sdoc-dropdown-menu-item-hidden': isHidden
40
- }),
41
- ref: dropDownMenuRef
39
+ })
42
40
  }, !disabled && /*#__PURE__*/_react.default.createElement("i", {
43
41
  className: "sdocfont sdoc-right-slide sdoc-dropdown-item-right-icon"
44
42
  }), !disabled && /*#__PURE__*/_react.default.createElement(_reactstrap.UncontrolledPopover, {
45
43
  target: menuConfig.id,
46
44
  trigger: "hover",
47
- className: "sdoc-menu-popover sdoc-sub-dropdown-menu",
45
+ className: "sdoc-menu-popover sdoc-dropdown-menu sdoc-sub-dropdown-menu",
48
46
  hideArrow: true,
49
- fade: false,
50
- container: dropDownMenuRef === null || dropDownMenuRef === void 0 ? void 0 : dropDownMenuRef.current
47
+ fade: false
51
48
  }, /*#__PURE__*/_react.default.createElement(_seatableList.default, {
52
49
  editor: editor,
53
50
  readonly: readonly,
@@ -6,15 +6,21 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.default = void 0;
8
8
  var _react = _interopRequireWildcard(require("react"));
9
+ var _reactstrap = require("reactstrap");
10
+ var _reactI18next = require("react-i18next");
9
11
  var _utils = require("../../../utils");
10
12
  const SeaTableList = _ref => {
11
13
  let {
12
14
  editor,
13
15
  onViewClick
14
16
  } = _ref;
17
+ const {
18
+ t
19
+ } = (0, _reactI18next.useTranslation)('sdoc-editor');
15
20
  const seatableRef = (0, _react.useRef)(null);
21
+ const isComposingRef = (0, _react.useRef)(null);
16
22
  const [computedStyle, setComputedStyle] = (0, _react.useState)({});
17
- const tables = editor.tables;
23
+ const [tables, setTables] = (0, _react.useState)(editor.tables || []);
18
24
  (0, _react.useEffect)(() => {
19
25
  if (seatableRef.current) {
20
26
  // bottom overflow
@@ -29,16 +35,43 @@ const SeaTableList = _ref => {
29
35
  });
30
36
  }
31
37
  }, []);
38
+ const onChange = (0, _react.useCallback)(event => {
39
+ if (isComposingRef.current) return;
40
+ const value = event.target.value.trim().toUpperCase();
41
+ if (value) {
42
+ const list = editor.tables.filter(item => item.name.toUpperCase().includes(value));
43
+ setTables(list);
44
+ } else {
45
+ setTables(editor.tables);
46
+ }
47
+ }, [editor.tables]);
48
+ const onCompositionStart = (0, _react.useCallback)(() => {
49
+ isComposingRef.current = true;
50
+ }, []);
51
+ const onCompositionEnd = (0, _react.useCallback)(e => {
52
+ isComposingRef.current = false;
53
+ onChange(e);
54
+ }, [onChange]);
32
55
  return /*#__PURE__*/_react.default.createElement("div", {
33
56
  ref: seatableRef,
34
57
  className: "sdoc-dropdown-menu-container sdoc-seatable-selected-table-list-wrapper",
35
58
  style: computedStyle
59
+ }, /*#__PURE__*/_react.default.createElement("div", {
60
+ className: "sdoc-seatable-list-search-wrapper"
61
+ }, /*#__PURE__*/_react.default.createElement(_reactstrap.Input, {
62
+ placeholder: t('Search_action'),
63
+ onChange: onChange,
64
+ autoFocus: true,
65
+ onCompositionStart: onCompositionStart,
66
+ onCompositionEnd: onCompositionEnd
67
+ })), /*#__PURE__*/_react.default.createElement("div", {
68
+ className: "sdoc-seatable-list-wrapper"
36
69
  }, tables.map(item => {
37
70
  return /*#__PURE__*/_react.default.createElement("div", {
38
71
  key: item._id,
39
72
  className: "sdoc-dropdown-menu-item text-truncate d-block",
40
73
  onClick: () => onViewClick(item)
41
74
  }, item.name);
42
- }));
75
+ })));
43
76
  };
44
77
  var _default = exports.default = SeaTableList;
@@ -113,22 +113,34 @@
113
113
  }
114
114
 
115
115
  .sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-popover .tables-list-empty {
116
- padding: 10px;
116
+ padding: 0px 16px;
117
117
  width: 100%;
118
118
  font-size: 13px;
119
- text-align: center;
120
119
  line-height: 30px;
121
120
  vertical-align: middle;
122
121
  }
123
122
 
124
123
  .sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-popover .seatable-setting-container {
125
124
  list-style: none;
126
- overflow-y: auto;
127
125
  max-height: 280px;
128
126
  min-height: 80px;
129
127
  padding: 8px 0px;
130
128
  }
131
129
 
130
+ .sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-popover .seatable-setting-container .seatable-setting-input-wrapper {
131
+ padding: 0px 10px 8px 10px;
132
+ }
133
+
134
+ .sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-popover .seatable-setting-container .seatable-setting-input-wrapper input {
135
+ max-height: 28px;
136
+ font-size: 14px;
137
+ }
138
+
139
+ .sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-popover .seatable-setting-container .seatable-setting-list-wrapper {
140
+ max-height: 228px;
141
+ overflow-y: auto;
142
+ }
143
+
132
144
  .sdoc-seatable-hover-menu-container .hover-menu-container .sdoc-seatable-setting-popover .seatable-setting-container .seatable-setting-item {
133
145
  position: relative;
134
146
  white-space: nowrap;
@@ -191,6 +203,9 @@
191
203
  left: 158px !important;
192
204
  transform: unset !important;
193
205
  max-height: 350px;
194
- overflow: auto;
195
206
  margin-top: 0px !important;
196
207
  }
208
+
209
+ .sdoc-seatable-setting-hide-column-popover-wrapper .field-settings .field-settings-body {
210
+ max-height: 278px;
211
+ }