@seafile/sdoc-editor 1.0.175 → 1.0.176

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.
@@ -91,7 +91,7 @@ const WikiFileLinkInsertDialog = _ref => {
91
91
  getPosition();
92
92
  }, 100);
93
93
  const getHistoryFiles = (0, _react.useCallback)(isCalculatedByFiles => {
94
- let files = _utils.LocalStorage.getItem('wiki-recent-files') || [];
94
+ let files = (0, _utils.getLocalStorageFiles)(_utils.LocalStorage.getItem('wiki-recent-files') || []);
95
95
  if (isCalculatedByFiles) {
96
96
  const newFiles = (0, _utils.getMaximumCapacity)(files);
97
97
  // Can accommodate all without showing more operations
@@ -202,7 +202,7 @@ const WikiFileLinkInsertDialog = _ref => {
202
202
  }, [closeDialog, editor, element]);
203
203
  const onShowMoreWiki = (0, _react.useCallback)(e => {
204
204
  e.stopPropagation();
205
- const recentFiles = _utils.LocalStorage.getItem('wiki-recent-files') || [];
205
+ const recentFiles = (0, _utils.getLocalStorageFiles)(_utils.LocalStorage.getItem('wiki-recent-files') || []);
206
206
  setFiles(recentFiles);
207
207
  setHiddenMoreMenu(true);
208
208
  }, []);
@@ -367,6 +367,12 @@ Object.defineProperty(exports, "SIDE_OTHER_OPERATIONS_MENUS_SEARCH_MAP", {
367
367
  return _menusConfig.SIDE_OTHER_OPERATIONS_MENUS_SEARCH_MAP;
368
368
  }
369
369
  });
370
+ Object.defineProperty(exports, "SIDE_QUICK_INSERT_MENUS_SEARCH_MAP", {
371
+ enumerable: true,
372
+ get: function () {
373
+ return _menusConfig.SIDE_QUICK_INSERT_MENUS_SEARCH_MAP;
374
+ }
375
+ });
370
376
  Object.defineProperty(exports, "SIDE_TRANSFORM_MENUS_CONFIG", {
371
377
  enumerable: true,
372
378
  get: function () {
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.UNDO = exports.TEXT_STYLE_MORE = exports.TEXT_STYLE_MAP = exports.TEXT_STYLE = exports.TEXT_ALIGN = exports.SIDE_TRANSFORM_MENUS_SEARCH_MAP = exports.SIDE_TRANSFORM_MENUS_CONFIG = exports.SIDE_OTHER_OPERATIONS_MENUS_SEARCH_MAP = exports.SIDE_INSERT_MENUS_SEARCH_MAP = exports.SIDE_INSERT_MENUS_CONFIG = exports.SEARCH_REPLACE = exports.REMOVE_TABLE = exports.REDO = exports.MENUS_CONFIG_MAP = exports.ITALIC = exports.COMBINE_CELL = exports.CLEAR_FORMAT = exports.BOLD = void 0;
6
+ exports.UNDO = exports.TEXT_STYLE_MORE = exports.TEXT_STYLE_MAP = exports.TEXT_STYLE = exports.TEXT_ALIGN = exports.SIDE_TRANSFORM_MENUS_SEARCH_MAP = exports.SIDE_TRANSFORM_MENUS_CONFIG = exports.SIDE_QUICK_INSERT_MENUS_SEARCH_MAP = exports.SIDE_OTHER_OPERATIONS_MENUS_SEARCH_MAP = exports.SIDE_INSERT_MENUS_SEARCH_MAP = exports.SIDE_INSERT_MENUS_CONFIG = exports.SEARCH_REPLACE = exports.REMOVE_TABLE = exports.REDO = exports.MENUS_CONFIG_MAP = exports.ITALIC = exports.COMBINE_CELL = exports.CLEAR_FORMAT = exports.BOLD = void 0;
7
7
  var _color = require("./color");
8
8
  var _elementType = require("./element-type");
9
9
  const UNDO = exports.UNDO = 'undo';
@@ -432,6 +432,28 @@ const SIDE_INSERT_MENUS_SEARCH_MAP = exports.SIDE_INSERT_MENUS_SEARCH_MAP = {
432
432
  [_elementType.SEATABLE_COLUMN]: 'SeaTable_column',
433
433
  [_elementType.SEATABLE_TABLE]: 'SeaTable_table'
434
434
  };
435
+ const SIDE_QUICK_INSERT_MENUS_SEARCH_MAP = exports.SIDE_QUICK_INSERT_MENUS_SEARCH_MAP = {
436
+ [_elementType.IMAGE]: 'Image',
437
+ [_elementType.VIDEO]: 'Video',
438
+ [_elementType.TABLE]: 'Table',
439
+ [_elementType.COLUMN]: 'Column',
440
+ [_elementType.TWO_COLUMN]: 'Two_column',
441
+ [_elementType.THREE_COLUMN]: 'Three_column',
442
+ [_elementType.FOUR_COLUMN]: 'Four_column',
443
+ [_elementType.LINK]: 'Link',
444
+ [_elementType.CODE_BLOCK]: 'Code_block',
445
+ [_elementType.CALL_OUT]: 'Callout',
446
+ [_elementType.UNORDERED_LIST]: 'Unordered_list',
447
+ [_elementType.ORDERED_LIST]: 'Ordered_list',
448
+ [_elementType.CHECK_LIST_ITEM]: 'Check_list',
449
+ [_elementType.PARAGRAPH]: 'Paragraph',
450
+ [_elementType.HEADER1]: 'Header_one',
451
+ [_elementType.HEADER2]: 'Header_two',
452
+ [_elementType.HEADER3]: 'Header_three',
453
+ [_elementType.HEADER4]: 'Header_four',
454
+ [_elementType.SEATABLE_COLUMN]: 'SeaTable_column',
455
+ [_elementType.SEATABLE_TABLE]: 'SeaTable_table'
456
+ };
435
457
 
436
458
  // Other operations menu config
437
459
  const SIDE_OTHER_OPERATIONS_MENUS_SEARCH_MAP = exports.SIDE_OTHER_OPERATIONS_MENUS_SEARCH_MAP = {
@@ -32,7 +32,7 @@ const RenderQuickInsert = (_ref, editor, readonly) => {
32
32
  const insertElmRef = (0, _react.useRef)(null);
33
33
  const aboveBlockNode = (0, _core.getAboveBlockNode)(editor);
34
34
  const isEmptyNode = (0, _helpers.isVoidNode)(aboveBlockNode === null || aboveBlockNode === void 0 ? void 0 : aboveBlockNode[0]);
35
- const [isShowPopover] = (0, _react.useState)((0, _helper.isSelectionSameWithInsert)(editor, element));
35
+ const [isShowPopover, setIsShowPopover] = (0, _react.useState)((0, _helper.isSelectionSameWithInsert)(editor, element));
36
36
  const handleClick = (0, _react.useCallback)(e => {
37
37
  // Click the search input
38
38
  if (sideMenuRef.current.contains(e.target) && e.target.tagName === 'INPUT') return;
@@ -80,6 +80,9 @@ const RenderQuickInsert = (_ref, editor, readonly) => {
80
80
  at: _slateReact.ReactEditor.findPath(editor, element)
81
81
  });
82
82
  };
83
+ const handleClosePopover = (0, _react.useCallback)(() => {
84
+ setIsShowPopover(false);
85
+ }, []);
83
86
  return /*#__PURE__*/_react.default.createElement("span", {
84
87
  ref: insertElmRef
85
88
  }, /*#__PURE__*/_react.default.createElement("span", Object.assign({}, attributes, {
@@ -94,7 +97,8 @@ const RenderQuickInsert = (_ref, editor, readonly) => {
94
97
  isEmptyNode: isEmptyNode,
95
98
  insertPosition: isEmptyNode ? _constants.INSERT_POSITION.CURRENT : _constants.INSERT_POSITION.AFTER,
96
99
  slateNode: aboveBlockNode === null || aboveBlockNode === void 0 ? void 0 : aboveBlockNode[0],
97
- callback: handleInsertBlock
100
+ callback: handleInsertBlock,
101
+ handleClosePopover: handleClosePopover
98
102
  })))));
99
103
  };
100
104
  var _default = exports.default = RenderQuickInsert;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.TABLE_ROW_STYLE = exports.TABLE_ROW_MIN_HEIGHT = exports.TABLE_MAX_ROWS = exports.TABLE_MAX_COLUMNS = exports.TABLE_ELEMENT_SPAN = exports.TABLE_ELEMENT_POSITION = exports.TABLE_ELEMENT = exports.TABLE_CELL_STYLE = exports.TABLE_CELL_MIN_WIDTH = exports.TABLE_ALTERNATE_HIGHLIGHT_CLASS_MAP = exports.SELECTED_TABLE_CELL_BACKGROUND_COLOR = exports.RESIZE_MASK_TOP = exports.RESIZE_MASK_RIGHT = exports.RESIZE_MASK_LEFT = exports.RESIZE_MASK_BOTTOM = exports.RESIZE_HANDLER_ROW = exports.RESIZE_HANDLER_FIRST_COLUMN = exports.RESIZE_HANDLER_COLUMN = exports.INHERIT_CELL_STYLE_WHEN_SELECT_SINGLE = exports.INHERIT_CELL_STYLE_WHEN_SELECT_MULTIPLE = exports.EMPTY_SELECTED_RANGE = exports.DRAG_HANDLER_ROW = exports.DRAG_HANDLER_COLUMN = exports.CELL_SELECTED = void 0;
6
+ exports.TABLE_TEMPLATE_POSITION_MAP = exports.TABLE_ROW_STYLE = exports.TABLE_ROW_MIN_HEIGHT = exports.TABLE_MAX_ROWS = exports.TABLE_MAX_COLUMNS = exports.TABLE_ELEMENT_SPAN = exports.TABLE_ELEMENT_POSITION = exports.TABLE_ELEMENT = exports.TABLE_CELL_STYLE = exports.TABLE_CELL_MIN_WIDTH = exports.TABLE_ALTERNATE_HIGHLIGHT_CLASS_MAP = exports.SELECTED_TABLE_CELL_BACKGROUND_COLOR = exports.RESIZE_MASK_TOP = exports.RESIZE_MASK_RIGHT = exports.RESIZE_MASK_LEFT = exports.RESIZE_MASK_BOTTOM = exports.RESIZE_HANDLER_ROW = exports.RESIZE_HANDLER_FIRST_COLUMN = exports.RESIZE_HANDLER_COLUMN = exports.INHERIT_CELL_STYLE_WHEN_SELECT_SINGLE = exports.INHERIT_CELL_STYLE_WHEN_SELECT_MULTIPLE = exports.EMPTY_SELECTED_RANGE = exports.DRAG_HANDLER_ROW = exports.DRAG_HANDLER_COLUMN = exports.CELL_SELECTED = void 0;
7
7
  const TABLE_MAX_ROWS = exports.TABLE_MAX_ROWS = 500;
8
8
  const TABLE_MAX_COLUMNS = exports.TABLE_MAX_COLUMNS = 50;
9
9
  const EMPTY_SELECTED_RANGE = exports.EMPTY_SELECTED_RANGE = {
@@ -44,6 +44,12 @@ const TABLE_ALTERNATE_HIGHLIGHT_CLASS_MAP = exports.TABLE_ALTERNATE_HIGHLIGHT_CL
44
44
  'sdoc-table-header-f77d21': 'sdoc-table-body-f77d21',
45
45
  'sdoc-table-header-0099f4': 'sdoc-table-body-0099f4'
46
46
  };
47
+ const TABLE_TEMPLATE_POSITION_MAP = exports.TABLE_TEMPLATE_POSITION_MAP = {
48
+ '[0,0]': 'sdoc-table-header-3f495d',
49
+ '[1,0]': 'sdoc-table-header-2367f2',
50
+ '[0,1]': 'sdoc-table-header-f77d21',
51
+ '[1,1]': 'sdoc-table-header-0099f4'
52
+ };
47
53
  const INHERIT_CELL_STYLE_WHEN_SELECT_SINGLE = exports.INHERIT_CELL_STYLE_WHEN_SELECT_SINGLE = ['background_color'];
48
54
  const INHERIT_CELL_STYLE_WHEN_SELECT_MULTIPLE = exports.INHERIT_CELL_STYLE_WHEN_SELECT_MULTIPLE = ['background_color', 'text_align'];
49
55
  const RESIZE_MASK_TOP = exports.RESIZE_MASK_TOP = 'top';
@@ -11,6 +11,7 @@ var _classnames = _interopRequireDefault(require("classnames"));
11
11
  var _reactI18next = require("react-i18next");
12
12
  var _reactstrap = require("reactstrap");
13
13
  var _tableTemplate = _interopRequireDefault(require("../table-template"));
14
+ var _keyCodes = _interopRequireDefault(require("../../../../../../constants/key-codes"));
14
15
  require("./index.css");
15
16
  const TableSizePopover = _ref => {
16
17
  let {
@@ -19,15 +20,22 @@ const TableSizePopover = _ref => {
19
20
  trigger = 'legacy',
20
21
  placement = 'bottom-start',
21
22
  popperClassName,
22
- createTable
23
+ createTable,
24
+ tableSizeRef,
25
+ handleClosePopover,
26
+ callback
23
27
  } = _ref;
24
28
  const minSize = [5, 10];
25
29
  const maxSize = [10, 10];
26
30
  const [displaySize, setDisplaySize] = (0, _react.useState)([5, 10]);
27
31
  const [selectedSize, setSelectedSize] = (0, _react.useState)([1, 1]);
28
32
  const ref = (0, _react.useRef)(null);
29
- const onMouseEnter = (0, _react.useCallback)(function (event) {
30
- let cellPosition = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [1, 1];
33
+ const templateRef = (0, _react.useRef)(null);
34
+ (0, _react.useEffect)(() => {
35
+ ref.current['firstRender'] = true;
36
+ }, []);
37
+ const onHandleTableSize = (0, _react.useCallback)(function () {
38
+ let cellPosition = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [1, 1];
31
39
  let newDisplaySize = displaySize.slice(0);
32
40
  const cellPositionX = cellPosition[0];
33
41
  const cellPositionY = cellPosition[1];
@@ -50,6 +58,137 @@ const TableSizePopover = _ref => {
50
58
 
51
59
  // eslint-disable-next-line react-hooks/exhaustive-deps
52
60
  }, [selectedSize, ref]);
61
+ const onTemplateItemSelectedStyle = (0, _react.useCallback)(color => {
62
+ const templateEl = document.getElementById('sdoc-table-template-review-btn');
63
+ templateEl.style['backgroundColor'] = color;
64
+ }, []);
65
+ const handleSizeDown = (0, _react.useCallback)(e => {
66
+ const {
67
+ keyCode
68
+ } = e;
69
+ const {
70
+ UpArrow,
71
+ DownArrow,
72
+ Enter,
73
+ RightArrow,
74
+ LeftArrow
75
+ } = _keyCodes.default;
76
+ const newSelectedSize = selectedSize.slice(0);
77
+ if (keyCode === Enter) {
78
+ e.preventDefault();
79
+ onCreateTable();
80
+ }
81
+ if (keyCode === UpArrow) {
82
+ e.preventDefault();
83
+ if (newSelectedSize[0] > 1) {
84
+ newSelectedSize[0] = newSelectedSize[0] - 1;
85
+ }
86
+ }
87
+ if (keyCode === DownArrow) {
88
+ e.preventDefault();
89
+ newSelectedSize[0] = newSelectedSize[0] + 1;
90
+ }
91
+ if (keyCode === LeftArrow) {
92
+ e.preventDefault();
93
+ if (newSelectedSize[1] > 1) {
94
+ newSelectedSize[1] = newSelectedSize[1] - 1;
95
+ }
96
+ }
97
+ if (keyCode === RightArrow) {
98
+ e.preventDefault();
99
+ newSelectedSize[1] = newSelectedSize[1] + 1;
100
+ }
101
+ onHandleTableSize(newSelectedSize);
102
+ }, [onCreateTable, onHandleTableSize, selectedSize]);
103
+ const handleTableSizeKeyDown = (0, _react.useCallback)(e => {
104
+ if (document.getElementsByClassName('sdoc-table-template-popover')[0]) {
105
+ templateRef.current.handleTableTemplateKeyDown(e);
106
+ return;
107
+ }
108
+ const {
109
+ keyCode
110
+ } = e;
111
+ const {
112
+ UpArrow,
113
+ DownArrow,
114
+ Enter,
115
+ RightArrow,
116
+ LeftArrow,
117
+ Esc
118
+ } = _keyCodes.default;
119
+ const isInitSize = selectedSize[0] === 1 && selectedSize[1] === 1;
120
+ const templateEl = document.getElementById('sdoc-table-template-review-btn');
121
+ // Currently focusing on the template menu item
122
+ if (templateEl.style['background-color']) {
123
+ if (keyCode === DownArrow) {
124
+ e.preventDefault();
125
+ onTemplateItemSelectedStyle('');
126
+ }
127
+ // exit table size popover
128
+ if (keyCode === LeftArrow) {
129
+ e.preventDefault();
130
+ onTemplateItemSelectedStyle('');
131
+ ref.current['firstRender'] = true;
132
+ ref.current.toggle();
133
+ }
134
+ if (keyCode === Enter) {
135
+ e.preventDefault();
136
+ onTemplateItemSelectedStyle('');
137
+ templateRef.current.uncontrolledTemplatePopoverRef.current.toggle();
138
+ }
139
+ if (keyCode === Esc) {
140
+ e.preventDefault();
141
+ handleClosePopover();
142
+ }
143
+ return;
144
+ }
145
+
146
+ // left and right
147
+ if (keyCode === LeftArrow) {
148
+ e.preventDefault();
149
+ handleSizeDown(e);
150
+ }
151
+ if (keyCode === RightArrow) {
152
+ e.preventDefault();
153
+ if (ref.current['firstRender']) {
154
+ ref.current['firstRender'] = false;
155
+ onTemplateItemSelectedStyle('#e3e3e3');
156
+ return;
157
+ }
158
+ handleSizeDown(e);
159
+ }
160
+
161
+ // up and down
162
+ if (keyCode === UpArrow) {
163
+ e.preventDefault();
164
+ if (isInitSize) {
165
+ onTemplateItemSelectedStyle('#e3e3e3');
166
+ } else {
167
+ handleSizeDown(e);
168
+ }
169
+ }
170
+ if (keyCode === DownArrow) {
171
+ e.preventDefault();
172
+ onTemplateItemSelectedStyle('');
173
+ handleSizeDown(e);
174
+ }
175
+
176
+ // enter
177
+ if (keyCode === Enter) {
178
+ e.preventDefault();
179
+ handleSizeDown(e);
180
+ }
181
+ if (keyCode === Esc) {
182
+ e.preventDefault();
183
+ handleClosePopover();
184
+ }
185
+ }, [handleClosePopover, handleSizeDown, onTemplateItemSelectedStyle, selectedSize]);
186
+ (0, _react.useImperativeHandle)(tableSizeRef, () => {
187
+ return {
188
+ handleTableSizeKeyDown: handleTableSizeKeyDown,
189
+ uncontrolledPopoverRef: ref
190
+ };
191
+ });
53
192
  const renderTableSize = (0, _react.useCallback)(() => {
54
193
  let tableSize = [];
55
194
  for (let i = 1; i <= displaySize[0]; i++) {
@@ -62,7 +201,7 @@ const TableSizePopover = _ref => {
62
201
  'active': isSelectedChild
63
202
  }),
64
203
  onClick: onCreateTable,
65
- onMouseEnter: event => onMouseEnter(event, [i, j])
204
+ onMouseEnter: () => onHandleTableSize([i, j])
66
205
  });
67
206
  children.push(child);
68
207
  }
@@ -97,8 +236,11 @@ const TableSizePopover = _ref => {
97
236
  }, renderTableSize()), /*#__PURE__*/_react.default.createElement("div", {
98
237
  className: "sdoc-selected-table-size-tip w-100 "
99
238
  }, `${selectedSize[0]} x ${selectedSize[1]}`), /*#__PURE__*/_react.default.createElement(_tableTemplate.default, {
239
+ templateRef: templateRef,
100
240
  editor: editor,
101
- targetId: "sdoc-table-template-review-btn"
241
+ targetId: "sdoc-table-template-review-btn",
242
+ handleClosePopover: handleClosePopover,
243
+ callback: callback
102
244
  })));
103
245
  };
104
246
  var _default = exports.default = TableSizePopover;
@@ -18,6 +18,10 @@
18
18
  box-shadow: 0 0 3px 2px #e2e3e6;
19
19
  }
20
20
 
21
+ .sdoc-table-template-view-table.active {
22
+ box-shadow: 0 0 3px 2px #e2e3e6;
23
+ }
24
+
21
25
  .sdoc-table-template-view-table .sdoc-table-template-row .sdoc-table-template-cell {
22
26
  width: 28px;
23
27
  height: 15px;
@@ -11,17 +11,105 @@ var _reactstrap = require("reactstrap");
11
11
  var _constants = require("../../constants");
12
12
  var _sampleTable = _interopRequireDefault(require("./sample-table"));
13
13
  var _helpers = require("../../helpers");
14
+ var _keyCodes = _interopRequireDefault(require("../../../../../../constants/key-codes"));
14
15
  require("./index.css");
15
16
  require("../../render/alternate-color.css");
16
17
  const TableTemplate = _ref => {
17
18
  let {
18
19
  editor,
19
- targetId
20
+ targetId,
21
+ templateRef,
22
+ handleClosePopover,
23
+ callback
20
24
  } = _ref;
25
+ const ref = (0, _react.useRef)(null);
26
+ const [position, setPosition] = (0, _react.useState)([-1, -1]);
21
27
  const tableTemplatePreviewList = (0, _react.useMemo)(() => Reflect.ownKeys(_constants.TABLE_ALTERNATE_HIGHLIGHT_CLASS_MAP), []);
22
- const handleClickTemplate = (0, _react.useCallback)((e, alternateColor) => {
28
+ const handleClickTemplate = (0, _react.useCallback)(alternateColor => {
29
+ callback && callback();
23
30
  (0, _helpers.insertTableByTemplate)(editor, alternateColor);
24
- }, [editor]);
31
+ }, [callback, editor]);
32
+ const handleTableTemplateKeyDown = (0, _react.useCallback)(e => {
33
+ const {
34
+ keyCode
35
+ } = e;
36
+ const {
37
+ UpArrow,
38
+ DownArrow,
39
+ Enter,
40
+ RightArrow,
41
+ LeftArrow,
42
+ Esc
43
+ } = _keyCodes.default;
44
+ const position = ref.current.position;
45
+ const isInitPostion = position[0] === -1 && position[1] === -1;
46
+
47
+ // left and right
48
+ if (keyCode === LeftArrow) {
49
+ e.preventDefault();
50
+ if (position[0] > 0) {
51
+ const newPosition = [position[0] - 1, position[1]];
52
+ ref.current.position = newPosition;
53
+ setPosition(newPosition);
54
+ }
55
+ }
56
+ if (keyCode === RightArrow) {
57
+ e.preventDefault();
58
+ // Enter
59
+ if (isInitPostion) {
60
+ ref.current.position = [0, 0];
61
+ setPosition([0, 0]);
62
+ return;
63
+ }
64
+ if (position[0] < 1) {
65
+ const newPosition = [position[0] + 1, position[1]];
66
+ ref.current.position = newPosition;
67
+ setPosition(newPosition);
68
+ }
69
+ }
70
+
71
+ // up and down
72
+ if (keyCode === UpArrow) {
73
+ e.preventDefault();
74
+ if (isInitPostion) return;
75
+ if (position[1] > 0) {
76
+ const newPosition = [position[0], position[1] - 1];
77
+ ref.current.position = newPosition;
78
+ setPosition(newPosition);
79
+ }
80
+ }
81
+ if (keyCode === DownArrow) {
82
+ e.preventDefault();
83
+ if (isInitPostion) return;
84
+ if (position[1] < 1) {
85
+ const newPosition = [position[0], position[1] + 1];
86
+ ref.current.position = newPosition;
87
+ setPosition(newPosition);
88
+ }
89
+ }
90
+
91
+ // enter
92
+ if (keyCode === Enter) {
93
+ e.preventDefault();
94
+ if (isInitPostion) return;
95
+ const key = JSON.stringify(position);
96
+ handleClickTemplate(_constants.TABLE_TEMPLATE_POSITION_MAP[key]);
97
+ handleClosePopover();
98
+ }
99
+ if (keyCode === Esc) {
100
+ e.preventDefault();
101
+ handleClosePopover();
102
+ }
103
+ }, [handleClickTemplate, handleClosePopover]);
104
+ (0, _react.useImperativeHandle)(templateRef, () => {
105
+ return {
106
+ handleTableTemplateKeyDown: handleTableTemplateKeyDown,
107
+ uncontrolledTemplatePopoverRef: ref
108
+ };
109
+ });
110
+ (0, _react.useEffect)(() => {
111
+ ref.current.position = [-1, -1];
112
+ }, []);
25
113
  return /*#__PURE__*/_react.default.createElement(_reactstrap.UncontrolledPopover, {
26
114
  target: targetId,
27
115
  trigger: "hover",
@@ -29,9 +117,11 @@ const TableTemplate = _ref => {
29
117
  hideArrow: true,
30
118
  fade: false,
31
119
  className: "sdoc-sub-dropdown-menu sdoc-table-template-popover",
32
- innerClassName: "sdoc-table-template-inner-popover"
120
+ innerClassName: "sdoc-table-template-inner-popover",
121
+ ref: ref
33
122
  }, tableTemplatePreviewList.map((alternateColor, index) => /*#__PURE__*/_react.default.createElement(_sampleTable.default, {
34
123
  key: alternateColor + index,
124
+ curPositon: position,
35
125
  alternateColor: alternateColor,
36
126
  onClickTemplate: handleClickTemplate
37
127
  })));
@@ -8,24 +8,33 @@ Object.defineProperty(exports, "__esModule", {
8
8
  exports.default = void 0;
9
9
  var _react = _interopRequireWildcard(require("react"));
10
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
11
+ var _classnames = _interopRequireDefault(require("classnames"));
11
12
  var _helpers = require("../../helpers");
13
+ var _constants = require("../../constants");
12
14
  require("./index.css");
13
15
  const SampleTable = _ref => {
14
16
  let {
15
17
  alternateColor,
16
- onClickTemplate
18
+ onClickTemplate,
19
+ curPositon
17
20
  } = _ref;
18
21
  // generate table
19
22
  const renderTableRow = (0, _react.useCallback)((row, column) => new Array(row).fill(null).map((_, index) => /*#__PURE__*/_react.default.createElement("div", {
20
23
  className: `sdoc-table-template-row table-row ${(0, _helpers.getCellHighlightClassName)(alternateColor, index)}`,
21
24
  key: `sdoc-template-table-row-${index}`,
22
- onClick: e => onClickTemplate(e, alternateColor)
25
+ onClick: () => {
26
+ onClickTemplate(alternateColor);
27
+ }
23
28
  }, new Array(column).fill(null).map((_, index) => /*#__PURE__*/_react.default.createElement("div", {
24
29
  className: "sdoc-table-template-cell",
25
30
  key: `sdoc-template-table-cell-${index}`
26
31
  })))), [onClickTemplate, alternateColor]);
32
+ const key = JSON.stringify(curPositon);
33
+ const isActive = _constants.TABLE_TEMPLATE_POSITION_MAP[key] === alternateColor;
27
34
  return /*#__PURE__*/_react.default.createElement("div", {
28
- className: "sdoc-table-template-view-table"
35
+ className: (0, _classnames.default)('sdoc-table-template-view-table', {
36
+ 'active': isActive
37
+ })
29
38
  }, renderTableRow(4, 4));
30
39
  };
31
40
  SampleTable.protoTypes = {
@@ -25,8 +25,8 @@ var _helper = require("../../plugins/callout/helper");
25
25
  var _keyCodes = _interopRequireDefault(require("../../../../constants/key-codes"));
26
26
  var _const = require("./const");
27
27
  var _core = require("../../core");
28
- var _helpers5 = require("../../plugins/blockquote/helpers");
29
28
  var _helper2 = require("../../plugins/multi-column/helper");
29
+ var _utils = require("../../utils");
30
30
  require("./style.css");
31
31
  const QuickInsertBlockMenu = _ref => {
32
32
  let {
@@ -34,12 +34,15 @@ const QuickInsertBlockMenu = _ref => {
34
34
  slateNode,
35
35
  callback,
36
36
  isEmptyNode,
37
+ handleClosePopover,
37
38
  t
38
39
  } = _ref;
39
40
  const editor = (0, _slateReact.useSlateStatic)();
41
+ const tableSizeRef = (0, _react.useRef)(null);
42
+ const inputWrapperRef = (0, _react.useRef)(null);
40
43
  const downDownWrapperRef = (0, _react.useRef)(null);
41
- const [currentSelectIndex, setCurrentSelectIndex] = (0, _react.useState)(0);
42
- const [quickInsertMenuSearchMap, setQuickInsertMenuSearchMap] = (0, _react.useState)(_constants.SIDE_INSERT_MENUS_SEARCH_MAP);
44
+ const [currentSelectIndex, setCurrentSelectIndex] = (0, _react.useState)(-1); // -1 is input focus position
45
+ const [quickInsertMenuSearchMap, setQuickInsertMenuSearchMap] = (0, _react.useState)(_constants.SIDE_QUICK_INSERT_MENUS_SEARCH_MAP);
43
46
  const onInsertImageToggle = (0, _react.useCallback)(() => {
44
47
  callback && callback();
45
48
  const eventBus = _eventBus.default.getInstance();
@@ -135,10 +138,6 @@ const QuickInsertBlockMenu = _ref => {
135
138
  });
136
139
  return !!callout;
137
140
  }, [editor]);
138
- const onInsertBlockQuote = (0, _react.useCallback)(() => {
139
- callback && callback();
140
- (0, _helpers5.insertBlockQuote)(editor, false);
141
- }, [callback, editor]);
142
141
  const createMultiColumn = (0, _react.useCallback)(type => {
143
142
  callback && callback();
144
143
  const newInsertPosition = slateNode.type === _constants.ELEMENT_TYPE.LIST_ITEM ? _constants.INSERT_POSITION.AFTER : insertPosition;
@@ -146,49 +145,6 @@ const QuickInsertBlockMenu = _ref => {
146
145
  }, [callback, editor, insertPosition, slateNode]);
147
146
  const dropDownItems = (0, _react.useMemo)(() => {
148
147
  let items = {
149
- [_constants.PARAGRAPH]: /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
150
- isHidden: !quickInsertMenuSearchMap[_constants.PARAGRAPH],
151
- disabled: isEmptyNode,
152
- key: "sdoc-insert-menu-paragraph",
153
- menuConfig: {
154
- ..._constants.SIDE_INSERT_MENUS_CONFIG[_constants.ELEMENT_TYPE.PARAGRAPH]
155
- },
156
- onClick: () => onInsert(_constants.ELEMENT_TYPE.PARAGRAPH)
157
- }),
158
- [_constants.ELEMENT_TYPE.HEADER]: _constants.SIDE_INSERT_MENUS_CONFIG[_constants.ELEMENT_TYPE.HEADER].map(item => /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
159
- isHidden: !quickInsertMenuSearchMap[item.type],
160
- key: item.id,
161
- menuConfig: item,
162
- onClick: () => onInsert(item.type)
163
- })),
164
- [_constants.UNORDERED_LIST]: /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
165
- isHidden: !quickInsertMenuSearchMap[_constants.UNORDERED_LIST],
166
- key: "sdoc-insert-menu-unorder-list",
167
- menuConfig: {
168
- ..._constants.SIDE_INSERT_MENUS_CONFIG[_constants.ELEMENT_TYPE.UNORDERED_LIST]
169
- },
170
- onClick: () => {
171
- onInsertList(_constants.ELEMENT_TYPE.UNORDERED_LIST);
172
- }
173
- }),
174
- [_constants.ORDERED_LIST]: /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
175
- isHidden: !quickInsertMenuSearchMap[_constants.ORDERED_LIST],
176
- key: "sdoc-insert-menu-order-list",
177
- menuConfig: {
178
- ..._constants.SIDE_INSERT_MENUS_CONFIG[_constants.ELEMENT_TYPE.ORDERED_LIST]
179
- },
180
- onClick: () => {
181
- onInsertList(_constants.ELEMENT_TYPE.ORDERED_LIST);
182
- }
183
- }),
184
- [_constants.CHECK_LIST_ITEM]: /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
185
- isHidden: !quickInsertMenuSearchMap[_constants.CHECK_LIST_ITEM],
186
- key: "sdoc-insert-menu-check-list",
187
- menuConfig: {
188
- ..._constants.SIDE_INSERT_MENUS_CONFIG[_constants.ELEMENT_TYPE.CHECK_LIST_ITEM]
189
- },
190
- onClick: onInsertCheckList
191
- }),
192
148
  [_constants.IMAGE]: /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
193
149
  isHidden: !quickInsertMenuSearchMap[_constants.IMAGE],
194
150
  disabled: isDisableImage,
@@ -220,12 +176,15 @@ const QuickInsertBlockMenu = _ref => {
220
176
  }, /*#__PURE__*/_react.default.createElement("i", {
221
177
  className: "sdocfont sdoc-right-slide sdoc-dropdown-item-right-icon"
222
178
  }), /*#__PURE__*/_react.default.createElement(_tableSizePopover.default, {
179
+ tableSizeRef: tableSizeRef,
223
180
  editor: editor,
224
181
  target: "sdoc-side-menu-item-table",
225
182
  trigger: "hover",
226
183
  placement: "left-start",
227
184
  popperClassName: "sdoc-side-menu-table-size sdoc-insert-element-table-size-wrapper",
228
- createTable: createTable
185
+ createTable: createTable,
186
+ callback: callback,
187
+ handleClosePopover: handleClosePopover
229
188
  })),
230
189
  [_constants.LINK]: /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
231
190
  isHidden: !quickInsertMenuSearchMap[_constants.LINK],
@@ -235,14 +194,6 @@ const QuickInsertBlockMenu = _ref => {
235
194
  },
236
195
  onClick: openLinkDialog
237
196
  }),
238
- [_constants.BLOCKQUOTE]: /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
239
- isHidden: !quickInsertMenuSearchMap[_constants.BLOCKQUOTE],
240
- key: "sdoc-insert-menu-blockquote",
241
- menuConfig: {
242
- ..._constants.SIDE_INSERT_MENUS_CONFIG[_constants.ELEMENT_TYPE.BLOCKQUOTE]
243
- },
244
- onClick: onInsertBlockQuote
245
- }),
246
197
  [_constants.CODE_BLOCK]: /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
247
198
  isHidden: !quickInsertMenuSearchMap[_constants.CODE_BLOCK],
248
199
  key: "sdoc-insert-menu-code-block",
@@ -259,8 +210,53 @@ const QuickInsertBlockMenu = _ref => {
259
210
  ..._constants.SIDE_INSERT_MENUS_CONFIG[_constants.ELEMENT_TYPE.CALL_OUT]
260
211
  },
261
212
  onClick: () => onInsertCallout(_constants.PARAGRAPH)
213
+ }),
214
+ [_constants.UNORDERED_LIST]: /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
215
+ isHidden: !quickInsertMenuSearchMap[_constants.UNORDERED_LIST],
216
+ key: "sdoc-insert-menu-unorder-list",
217
+ menuConfig: {
218
+ ..._constants.SIDE_INSERT_MENUS_CONFIG[_constants.ELEMENT_TYPE.UNORDERED_LIST]
219
+ },
220
+ onClick: () => {
221
+ onInsertList(_constants.ELEMENT_TYPE.UNORDERED_LIST);
222
+ }
223
+ }),
224
+ [_constants.ORDERED_LIST]: /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
225
+ isHidden: !quickInsertMenuSearchMap[_constants.ORDERED_LIST],
226
+ key: "sdoc-insert-menu-order-list",
227
+ menuConfig: {
228
+ ..._constants.SIDE_INSERT_MENUS_CONFIG[_constants.ELEMENT_TYPE.ORDERED_LIST]
229
+ },
230
+ onClick: () => {
231
+ onInsertList(_constants.ELEMENT_TYPE.ORDERED_LIST);
232
+ }
233
+ }),
234
+ [_constants.CHECK_LIST_ITEM]: /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
235
+ isHidden: !quickInsertMenuSearchMap[_constants.CHECK_LIST_ITEM],
236
+ key: "sdoc-insert-menu-check-list",
237
+ menuConfig: {
238
+ ..._constants.SIDE_INSERT_MENUS_CONFIG[_constants.ELEMENT_TYPE.CHECK_LIST_ITEM]
239
+ },
240
+ onClick: onInsertCheckList
241
+ }),
242
+ [_constants.PARAGRAPH]: /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
243
+ isHidden: !quickInsertMenuSearchMap[_constants.PARAGRAPH],
244
+ disabled: isEmptyNode,
245
+ key: "sdoc-insert-menu-paragraph",
246
+ menuConfig: {
247
+ ..._constants.SIDE_INSERT_MENUS_CONFIG[_constants.ELEMENT_TYPE.PARAGRAPH]
248
+ },
249
+ onClick: () => onInsert(_constants.ELEMENT_TYPE.PARAGRAPH)
262
250
  })
263
251
  };
252
+ _constants.SIDE_INSERT_MENUS_CONFIG[_constants.ELEMENT_TYPE.HEADER].forEach(item => {
253
+ items[item.id.toLowerCase()] = /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
254
+ isHidden: !quickInsertMenuSearchMap[item.type],
255
+ key: item.id,
256
+ menuConfig: item,
257
+ onClick: () => onInsert(item.type)
258
+ });
259
+ });
264
260
  _constants.SIDE_INSERT_MENUS_CONFIG[_constants.ELEMENT_TYPE.MULTI_COLUMN].forEach(item => {
265
261
  items[item.id.toLowerCase()] = /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
266
262
  isHidden: !quickInsertMenuSearchMap[item.type],
@@ -274,19 +270,33 @@ const QuickInsertBlockMenu = _ref => {
274
270
  delete items[_constants.VIDEO];
275
271
  }
276
272
  return items;
277
- }, [isDisableImage, onInsertImageToggle, isDisableVideo, onInsertVideoToggle, editor, createTable, openLinkDialog, onInsertBlockQuote, onInsertCodeBlock, isDisableCallout, onInsertCheckList, isEmptyNode, onInsertCallout, onInsertList, onInsert, createMultiColumn, quickInsertMenuSearchMap]);
273
+ }, [quickInsertMenuSearchMap, isDisableImage, onInsertImageToggle, isDisableVideo, onInsertVideoToggle, editor, createTable, callback, handleClosePopover, openLinkDialog, onInsertCodeBlock, isDisableCallout, onInsertCheckList, isEmptyNode, onInsertCallout, onInsertList, onInsert, createMultiColumn]);
278
274
  const getSelectItemDom = selectIndex => {
279
275
  const dropDownItemWrapper = downDownWrapperRef.current;
280
- const currentSelectItem = dropDownItemWrapper.children[selectIndex];
276
+ const searchedDropDownItemWrapper = [];
277
+ Array.from(dropDownItemWrapper.children).forEach(item => {
278
+ if (!Array.from(item.classList).includes('sdoc-dropdown-menu-item-hidden')) {
279
+ searchedDropDownItemWrapper.push(item);
280
+ }
281
+ });
282
+ const currentSelectItem = searchedDropDownItemWrapper[selectIndex];
281
283
  return currentSelectItem;
282
284
  };
283
285
  const handleKeyDown = (0, _react.useCallback)(e => {
286
+ if (document.getElementsByClassName('sdoc-selected-table-size-popover')[0]) {
287
+ tableSizeRef.current.handleTableSizeKeyDown(e);
288
+ return;
289
+ }
284
290
  const {
285
291
  UpArrow,
286
292
  DownArrow,
287
- Enter
293
+ Enter,
294
+ Esc
288
295
  } = _keyCodes.default;
289
- const renderItems = Reflect.ownKeys(dropDownItems);
296
+ const renderItems = [];
297
+ Reflect.ownKeys(dropDownItems).forEach(key => {
298
+ if (quickInsertMenuSearchMap[key]) renderItems.push(key);
299
+ });
290
300
  const {
291
301
  keyCode
292
302
  } = e;
@@ -294,52 +304,71 @@ const QuickInsertBlockMenu = _ref => {
294
304
  e.preventDefault();
295
305
  const currentSelectItem = getSelectItemDom(currentSelectIndex);
296
306
  if (currentSelectItem) currentSelectItem.classList.remove(_const.SELECTED_ITEM_CLASS_NAME);
297
- if (currentSelectIndex > 0) {
307
+ if (currentSelectIndex > -1) {
298
308
  setCurrentSelectIndex(currentSelectIndex - 1);
299
- } else {
300
- setCurrentSelectIndex(renderItems.length - 1);
301
309
  }
302
310
  }
303
311
  if (keyCode === DownArrow) {
304
312
  e.preventDefault();
313
+ if (currentSelectIndex === renderItems.length - 1) return;
305
314
  const currentSelectItem = getSelectItemDom(currentSelectIndex);
306
315
  if (currentSelectItem) currentSelectItem.classList.remove(_const.SELECTED_ITEM_CLASS_NAME);
307
316
  if (currentSelectIndex < renderItems.length - 1) {
308
317
  setCurrentSelectIndex(currentSelectIndex + 1);
309
- } else {
310
- setCurrentSelectIndex(0);
311
318
  }
312
319
  }
313
320
  if (keyCode === Enter) {
314
321
  e.preventDefault();
315
322
  const item = renderItems[currentSelectIndex];
323
+ if (item === _constants.TABLE) {
324
+ tableSizeRef.current.uncontrolledPopoverRef.current.toggle();
325
+ return;
326
+ }
316
327
  const {
317
328
  disabled,
318
329
  onClick
319
330
  } = dropDownItems[item].props;
320
331
  !disabled && onClick();
321
332
  }
322
- }, [currentSelectIndex, dropDownItems]);
333
+ if (keyCode === Esc) {
334
+ e.preventDefault();
335
+ handleClosePopover();
336
+ }
337
+ }, [currentSelectIndex, dropDownItems, handleClosePopover, quickInsertMenuSearchMap]);
323
338
  (0, _react.useEffect)(() => {
324
339
  document.addEventListener('keydown', handleKeyDown);
325
340
  return () => {
326
341
  document.removeEventListener('keydown', handleKeyDown);
327
342
  };
343
+ // eslint-disable-next-line react-hooks/exhaustive-deps
328
344
  }, [handleKeyDown]);
329
345
  const clearSelectStyle = (0, _react.useCallback)(() => {
330
346
  const domList = Array.from(downDownWrapperRef.current.children);
331
347
  domList.forEach(dom => dom.classList.remove(_const.SELECTED_ITEM_CLASS_NAME));
332
348
  }, []);
349
+ const onHandleInputFocus = (0, _react.useCallback)(isFocus => {
350
+ if (inputWrapperRef.current) {
351
+ queueMicrotask(() => {
352
+ isFocus ? inputWrapperRef.current.focus() : inputWrapperRef.current.blur();
353
+ });
354
+ }
355
+ }, []);
333
356
  (0, _react.useEffect)(() => {
334
- clearSelectStyle();
335
- const currentSelectItem = getSelectItemDom(currentSelectIndex);
336
- if (currentSelectItem) {
337
- currentSelectItem.classList.add(_const.SELECTED_ITEM_CLASS_NAME);
357
+ if (currentSelectIndex === -1) {
358
+ onHandleInputFocus(true);
359
+ } else {
360
+ onHandleInputFocus(false);
361
+ clearSelectStyle();
362
+ const currentSelectItem = getSelectItemDom(currentSelectIndex);
363
+ if (currentSelectItem) {
364
+ (0, _utils.onHandleOverflowScroll)(currentSelectItem, downDownWrapperRef);
365
+ currentSelectItem.classList.add(_const.SELECTED_ITEM_CLASS_NAME);
366
+ }
338
367
  }
339
- }, [clearSelectStyle, currentSelectIndex, dropDownItems]);
368
+ }, [clearSelectStyle, currentSelectIndex, downDownWrapperRef, onHandleInputFocus]);
340
369
  const onChange = (0, _react.useCallback)(e => {
341
370
  if (!downDownWrapperRef.current.isInputtingChinese) {
342
- const newMenuSearchMap = (0, _helpers.getSearchedOperations)(_constants.SIDE_INSERT_MENUS_SEARCH_MAP, true, e, t, editor);
371
+ const newMenuSearchMap = (0, _helpers.getSearchedOperations)(_constants.SIDE_QUICK_INSERT_MENUS_SEARCH_MAP, true, e, t, editor);
343
372
  setQuickInsertMenuSearchMap(newMenuSearchMap);
344
373
  }
345
374
  }, [editor, t]);
@@ -351,17 +380,18 @@ const QuickInsertBlockMenu = _ref => {
351
380
  onChange(e);
352
381
  }, [onChange]);
353
382
  return /*#__PURE__*/_react.default.createElement("div", {
354
- className: "sdoc-insert-element-toolbar",
355
- ref: downDownWrapperRef
383
+ className: "sdoc-insert-element-toolbar"
356
384
  }, /*#__PURE__*/_react.default.createElement("div", {
357
385
  className: "sdoc-side-menu-search-wrapper"
358
386
  }, /*#__PURE__*/_react.default.createElement(_reactstrap.Input, {
387
+ innerRef: inputWrapperRef,
359
388
  placeholder: t('Search_action'),
360
389
  onChange: onChange,
361
390
  onCompositionStart: onCompositionStart,
362
391
  onCompositionEnd: onCompositionEnd
363
392
  })), /*#__PURE__*/_react.default.createElement("div", {
364
- className: "sdoc-insert-element-content-wrapper"
393
+ className: "sdoc-insert-element-content-wrapper",
394
+ ref: downDownWrapperRef
365
395
  }, Object.keys(dropDownItems).map(key => {
366
396
  return dropDownItems[key];
367
397
  }), Object.keys(quickInsertMenuSearchMap).length === 0 && /*#__PURE__*/_react.default.createElement("div", {
@@ -106,7 +106,37 @@ const InsertBlockMenu = _ref => {
106
106
  const newInsertPosition = slateNode.type === _constants.ELEMENT_TYPE.LIST_ITEM ? _constants.INSERT_POSITION.AFTER : insertPosition;
107
107
  (0, _helper2.insertMultiColumn)(editor, editor.selection, newInsertPosition, type);
108
108
  }, [editor, insertPosition, slateNode]);
109
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
109
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, [_constants.SIDE_INSERT_MENUS_CONFIG[_constants.ELEMENT_TYPE.PARAGRAPH], ..._constants.SIDE_INSERT_MENUS_CONFIG[_constants.ELEMENT_TYPE.HEADER]].map(item => {
110
+ return /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
111
+ isHidden: !insertMenuSearchMap[item.type],
112
+ disabled: isNodeEmpty && item.type === _constants.PARAGRAPH,
113
+ key: item.id,
114
+ menuConfig: item,
115
+ onClick: () => onInsert(item.type)
116
+ });
117
+ }), /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
118
+ isHidden: !insertMenuSearchMap[_constants.ELEMENT_TYPE.UNORDERED_LIST],
119
+ menuConfig: {
120
+ ..._constants.SIDE_INSERT_MENUS_CONFIG[_constants.ELEMENT_TYPE.UNORDERED_LIST]
121
+ },
122
+ onClick: () => {
123
+ onInsertList(_constants.ELEMENT_TYPE.UNORDERED_LIST);
124
+ }
125
+ }), /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
126
+ isHidden: !insertMenuSearchMap[_constants.ELEMENT_TYPE.ORDERED_LIST],
127
+ menuConfig: {
128
+ ..._constants.SIDE_INSERT_MENUS_CONFIG[_constants.ELEMENT_TYPE.ORDERED_LIST]
129
+ },
130
+ onClick: () => {
131
+ onInsertList(_constants.ELEMENT_TYPE.ORDERED_LIST);
132
+ }
133
+ }), /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
134
+ isHidden: !insertMenuSearchMap[_constants.ELEMENT_TYPE.CHECK_LIST_ITEM],
135
+ menuConfig: {
136
+ ..._constants.SIDE_INSERT_MENUS_CONFIG[_constants.ELEMENT_TYPE.CHECK_LIST_ITEM]
137
+ },
138
+ onClick: onInsertCheckList
139
+ }), /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
110
140
  isHidden: !insertMenuSearchMap[_constants.ELEMENT_TYPE.IMAGE],
111
141
  menuConfig: {
112
142
  ..._constants.SIDE_INSERT_MENUS_CONFIG[_constants.ELEMENT_TYPE.IMAGE]
@@ -151,36 +181,6 @@ const InsertBlockMenu = _ref => {
151
181
  ..._constants.SIDE_INSERT_MENUS_CONFIG[_constants.ELEMENT_TYPE.CALL_OUT]
152
182
  },
153
183
  onClick: () => onInsertCallout(_constants.PARAGRAPH)
154
- }), /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
155
- isHidden: !insertMenuSearchMap[_constants.ELEMENT_TYPE.UNORDERED_LIST],
156
- menuConfig: {
157
- ..._constants.SIDE_INSERT_MENUS_CONFIG[_constants.ELEMENT_TYPE.UNORDERED_LIST]
158
- },
159
- onClick: () => {
160
- onInsertList(_constants.ELEMENT_TYPE.UNORDERED_LIST);
161
- }
162
- }), /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
163
- isHidden: !insertMenuSearchMap[_constants.ELEMENT_TYPE.ORDERED_LIST],
164
- menuConfig: {
165
- ..._constants.SIDE_INSERT_MENUS_CONFIG[_constants.ELEMENT_TYPE.ORDERED_LIST]
166
- },
167
- onClick: () => {
168
- onInsertList(_constants.ELEMENT_TYPE.ORDERED_LIST);
169
- }
170
- }), /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
171
- isHidden: !insertMenuSearchMap[_constants.ELEMENT_TYPE.CHECK_LIST_ITEM],
172
- menuConfig: {
173
- ..._constants.SIDE_INSERT_MENUS_CONFIG[_constants.ELEMENT_TYPE.CHECK_LIST_ITEM]
174
- },
175
- onClick: onInsertCheckList
176
- }), [_constants.SIDE_INSERT_MENUS_CONFIG[_constants.ELEMENT_TYPE.PARAGRAPH], ..._constants.SIDE_INSERT_MENUS_CONFIG[_constants.ELEMENT_TYPE.HEADER]].map(item => {
177
- return /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
178
- isHidden: !insertMenuSearchMap[item.type],
179
- disabled: isNodeEmpty && item.type === _constants.PARAGRAPH,
180
- key: item.id,
181
- menuConfig: item,
182
- onClick: () => onInsert(item.type)
183
- });
184
184
  }), _constants.SIDE_INSERT_MENUS_CONFIG[_constants.ELEMENT_TYPE.MULTI_COLUMN].map(item => {
185
185
  return /*#__PURE__*/_react.default.createElement(_dropdownMenuItem.default, {
186
186
  isHidden: !insertMenuSearchMap[item.type],
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.isSameDomain = exports.isOverflowPortByDirection = exports.isImage = exports.IMAGE_TYPES = void 0;
7
+ exports.onHandleOverflowScroll = exports.isSameDomain = exports.isOverflowPortByDirection = exports.isImage = exports.IMAGE_TYPES = void 0;
8
8
  var _isUrl = _interopRequireDefault(require("is-url"));
9
9
  const IMAGE_TYPES = exports.IMAGE_TYPES = ['png', 'jpg', 'gif'];
10
10
  const isImage = url => {
@@ -41,4 +41,31 @@ const isOverflowPortByDirection = (element, direction) => {
41
41
  return right >= viewWidth;
42
42
  }
43
43
  };
44
- exports.isOverflowPortByDirection = isOverflowPortByDirection;
44
+ exports.isOverflowPortByDirection = isOverflowPortByDirection;
45
+ const onHandleOverflowScroll = (currentSelectItem, downDownWrapperRef) => {
46
+ const {
47
+ bottom: curBottom,
48
+ top: curTop
49
+ } = currentSelectItem.getBoundingClientRect();
50
+ const {
51
+ bottom: containerBottom
52
+ } = downDownWrapperRef.current.parentNode.getBoundingClientRect();
53
+ const {
54
+ top: containerTop
55
+ } = downDownWrapperRef.current.getBoundingClientRect();
56
+ if (curBottom > containerBottom) {
57
+ const scrollTop = downDownWrapperRef.current.scrollTop + 100;
58
+ downDownWrapperRef.current.scrollTo({
59
+ top: scrollTop,
60
+ behavior: 'smooth'
61
+ });
62
+ }
63
+ if (curTop < containerTop) {
64
+ const scrollTop = downDownWrapperRef.current.scrollTop - 100;
65
+ downDownWrapperRef.current.scrollTo({
66
+ top: scrollTop,
67
+ behavior: 'smooth'
68
+ });
69
+ }
70
+ };
71
+ exports.onHandleOverflowScroll = onHandleOverflowScroll;
@@ -25,7 +25,7 @@ Object.defineProperty(exports, "getEventTransfer", {
25
25
  return _getEventTransfer.default;
26
26
  }
27
27
  });
28
- exports.resetWebTitle = exports.isMobile = exports.isMac = exports.isEnglish = exports.getSelectionCoords = exports.getMaximumCapacity = exports.getImageFileNameWithTimestamp = void 0;
28
+ exports.resetWebTitle = exports.isMobile = exports.isMac = exports.isEnglish = exports.getSelectionCoords = exports.getMaximumCapacity = exports.getLocalStorageFiles = exports.getImageFileNameWithTimestamp = void 0;
29
29
  var _dateUtils = _interopRequireDefault(require("./date-utils"));
30
30
  var _localStorageUtils = _interopRequireDefault(require("./local-storage-utils"));
31
31
  var _context = _interopRequireDefault(require("../context"));
@@ -170,4 +170,15 @@ const getMaximumCapacity = files => {
170
170
  });
171
171
  return newFiles;
172
172
  };
173
- exports.getMaximumCapacity = getMaximumCapacity;
173
+ exports.getMaximumCapacity = getMaximumCapacity;
174
+ const getLocalStorageFiles = files => {
175
+ const wikiRepoId = window.wiki.config.wikiId;
176
+ const newFiles = [];
177
+ files.forEach(item => {
178
+ if ((item === null || item === void 0 ? void 0 : item.wikiRepoId) === wikiRepoId) {
179
+ newFiles.push(item);
180
+ }
181
+ });
182
+ return newFiles;
183
+ };
184
+ exports.getLocalStorageFiles = getLocalStorageFiles;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "1.0.175",
3
+ "version": "1.0.176",
4
4
  "private": false,
5
5
  "description": "This is a sdoc editor",
6
6
  "main": "dist/index.js",