@atlaskit/editor-plugin-table 5.3.22 → 5.3.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/cjs/plugins/table/ui/FloatingDragMenu/DragMenu.js +24 -6
- package/dist/es2019/plugins/table/ui/FloatingDragMenu/DragMenu.js +18 -6
- package/dist/esm/plugins/table/ui/FloatingDragMenu/DragMenu.js +23 -6
- package/package.json +1 -1
- package/src/__tests__/unit/ui/FloatingDragMenu.tsx +194 -0
- package/src/plugins/table/ui/FloatingDragMenu/DragMenu.tsx +33 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @atlaskit/editor-plugin-table
|
|
2
2
|
|
|
3
|
+
## 5.3.23
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#42746](https://bitbucket.org/atlassian/atlassian-frontend/pull-requests/42746) [`ea352517252`](https://bitbucket.org/atlassian/atlassian-frontend/commits/ea352517252) - Update editor dropdown menu component to support section behind platform.editor.menu.group-items FF
|
|
8
|
+
|
|
3
9
|
## 5.3.22
|
|
4
10
|
|
|
5
11
|
### Patch Changes
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
6
7
|
exports.DragMenu = void 0;
|
|
8
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
7
9
|
var _react = require("@emotion/react");
|
|
8
10
|
var _uiMenu = require("@atlaskit/editor-common/ui-menu");
|
|
9
11
|
var _shortcut = require("@atlaskit/editor-shared-styles/shortcut");
|
|
@@ -16,11 +18,20 @@ var _dragMenu = require("../../utils/drag-menu");
|
|
|
16
18
|
var _consts = require("../consts");
|
|
17
19
|
/** @jsx jsx */
|
|
18
20
|
|
|
21
|
+
var groupedDragMenuConfig = [['add_row_above', 'add_row_below', 'add_column_left', 'add_column_right', 'distribute_columns', 'clear_cells', 'delete_row', 'delete_column'], ['move_column_left', 'move_column_right', 'move_row_up', 'move_row_down'], ['sort_column_asc', 'sort_column_desc']];
|
|
19
22
|
var convertToDropdownItems = function convertToDropdownItems(dragMenuConfig) {
|
|
20
|
-
var
|
|
23
|
+
var menuItemsArr = (0, _toConsumableArray2.default)(Array(groupedDragMenuConfig.length)).map(function () {
|
|
24
|
+
return [];
|
|
25
|
+
});
|
|
21
26
|
var menuCallback = {};
|
|
22
27
|
dragMenuConfig.forEach(function (item) {
|
|
23
|
-
|
|
28
|
+
var menuGroupIndex = groupedDragMenuConfig.findIndex(function (group) {
|
|
29
|
+
return group.includes(item.id);
|
|
30
|
+
});
|
|
31
|
+
if (menuGroupIndex === -1) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
menuItemsArr[menuGroupIndex].push({
|
|
24
35
|
key: item.id,
|
|
25
36
|
content: item.title,
|
|
26
37
|
value: {
|
|
@@ -41,6 +52,12 @@ var convertToDropdownItems = function convertToDropdownItems(dragMenuConfig) {
|
|
|
41
52
|
});
|
|
42
53
|
item.onClick && (menuCallback[item.id] = item.onClick);
|
|
43
54
|
});
|
|
55
|
+
var menuItems = menuItemsArr.reduce(function (acc, curr) {
|
|
56
|
+
(curr === null || curr === void 0 ? void 0 : curr.length) > 0 && acc.push({
|
|
57
|
+
items: curr
|
|
58
|
+
});
|
|
59
|
+
return acc;
|
|
60
|
+
}, []);
|
|
44
61
|
return {
|
|
45
62
|
menuItems: menuItems,
|
|
46
63
|
menuCallback: menuCallback
|
|
@@ -104,15 +121,16 @@ var DragMenu = exports.DragMenu = function DragMenu(_ref) {
|
|
|
104
121
|
type: _uiMenu.ArrowKeyNavigationType.MENU,
|
|
105
122
|
disableArrowKeyNavigation: true
|
|
106
123
|
},
|
|
107
|
-
items:
|
|
108
|
-
items: menuItems
|
|
109
|
-
}],
|
|
124
|
+
items: menuItems,
|
|
110
125
|
isOpen: isOpen,
|
|
111
126
|
onOpenChange: closeMenu,
|
|
112
127
|
onItemActivated: handleMenuItemActivated,
|
|
113
128
|
onMouseEnter: handleItemMouseEnter,
|
|
114
129
|
onMouseLeave: handleItemMouseLeave,
|
|
115
130
|
fitWidth: _consts.dragMenuDropdownWidth,
|
|
116
|
-
boundariesElement: boundariesElement
|
|
131
|
+
boundariesElement: boundariesElement,
|
|
132
|
+
section: {
|
|
133
|
+
hasSeparator: true
|
|
134
|
+
}
|
|
117
135
|
});
|
|
118
136
|
};
|
|
@@ -9,11 +9,16 @@ import { toggleDragMenu } from '../../pm-plugins/drag-and-drop/commands';
|
|
|
9
9
|
import { getSelectedColumnIndexes, getSelectedRowIndexes } from '../../utils';
|
|
10
10
|
import { getDragMenuConfig } from '../../utils/drag-menu';
|
|
11
11
|
import { dragMenuDropdownWidth } from '../consts';
|
|
12
|
+
const groupedDragMenuConfig = [['add_row_above', 'add_row_below', 'add_column_left', 'add_column_right', 'distribute_columns', 'clear_cells', 'delete_row', 'delete_column'], ['move_column_left', 'move_column_right', 'move_row_up', 'move_row_down'], ['sort_column_asc', 'sort_column_desc']];
|
|
12
13
|
const convertToDropdownItems = dragMenuConfig => {
|
|
13
|
-
let
|
|
14
|
+
let menuItemsArr = [...Array(groupedDragMenuConfig.length)].map(() => []);
|
|
14
15
|
let menuCallback = {};
|
|
15
16
|
dragMenuConfig.forEach(item => {
|
|
16
|
-
|
|
17
|
+
const menuGroupIndex = groupedDragMenuConfig.findIndex(group => group.includes(item.id));
|
|
18
|
+
if (menuGroupIndex === -1) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
menuItemsArr[menuGroupIndex].push({
|
|
17
22
|
key: item.id,
|
|
18
23
|
content: item.title,
|
|
19
24
|
value: {
|
|
@@ -34,6 +39,12 @@ const convertToDropdownItems = dragMenuConfig => {
|
|
|
34
39
|
});
|
|
35
40
|
item.onClick && (menuCallback[item.id] = item.onClick);
|
|
36
41
|
});
|
|
42
|
+
const menuItems = menuItemsArr.reduce((acc, curr) => {
|
|
43
|
+
(curr === null || curr === void 0 ? void 0 : curr.length) > 0 && acc.push({
|
|
44
|
+
items: curr
|
|
45
|
+
});
|
|
46
|
+
return acc;
|
|
47
|
+
}, []);
|
|
37
48
|
return {
|
|
38
49
|
menuItems,
|
|
39
50
|
menuCallback
|
|
@@ -107,15 +118,16 @@ export const DragMenu = ({
|
|
|
107
118
|
type: ArrowKeyNavigationType.MENU,
|
|
108
119
|
disableArrowKeyNavigation: true
|
|
109
120
|
},
|
|
110
|
-
items:
|
|
111
|
-
items: menuItems
|
|
112
|
-
}],
|
|
121
|
+
items: menuItems,
|
|
113
122
|
isOpen: isOpen,
|
|
114
123
|
onOpenChange: closeMenu,
|
|
115
124
|
onItemActivated: handleMenuItemActivated,
|
|
116
125
|
onMouseEnter: handleItemMouseEnter,
|
|
117
126
|
onMouseLeave: handleItemMouseLeave,
|
|
118
127
|
fitWidth: dragMenuDropdownWidth,
|
|
119
|
-
boundariesElement: boundariesElement
|
|
128
|
+
boundariesElement: boundariesElement,
|
|
129
|
+
section: {
|
|
130
|
+
hasSeparator: true
|
|
131
|
+
}
|
|
120
132
|
});
|
|
121
133
|
};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
1
2
|
/** @jsx jsx */
|
|
2
3
|
import { jsx } from '@emotion/react';
|
|
3
4
|
import { ArrowKeyNavigationType, DropdownMenu } from '@atlaskit/editor-common/ui-menu';
|
|
@@ -9,11 +10,20 @@ import { toggleDragMenu } from '../../pm-plugins/drag-and-drop/commands';
|
|
|
9
10
|
import { getSelectedColumnIndexes, getSelectedRowIndexes } from '../../utils';
|
|
10
11
|
import { getDragMenuConfig } from '../../utils/drag-menu';
|
|
11
12
|
import { dragMenuDropdownWidth } from '../consts';
|
|
13
|
+
var groupedDragMenuConfig = [['add_row_above', 'add_row_below', 'add_column_left', 'add_column_right', 'distribute_columns', 'clear_cells', 'delete_row', 'delete_column'], ['move_column_left', 'move_column_right', 'move_row_up', 'move_row_down'], ['sort_column_asc', 'sort_column_desc']];
|
|
12
14
|
var convertToDropdownItems = function convertToDropdownItems(dragMenuConfig) {
|
|
13
|
-
var
|
|
15
|
+
var menuItemsArr = _toConsumableArray(Array(groupedDragMenuConfig.length)).map(function () {
|
|
16
|
+
return [];
|
|
17
|
+
});
|
|
14
18
|
var menuCallback = {};
|
|
15
19
|
dragMenuConfig.forEach(function (item) {
|
|
16
|
-
|
|
20
|
+
var menuGroupIndex = groupedDragMenuConfig.findIndex(function (group) {
|
|
21
|
+
return group.includes(item.id);
|
|
22
|
+
});
|
|
23
|
+
if (menuGroupIndex === -1) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
menuItemsArr[menuGroupIndex].push({
|
|
17
27
|
key: item.id,
|
|
18
28
|
content: item.title,
|
|
19
29
|
value: {
|
|
@@ -34,6 +44,12 @@ var convertToDropdownItems = function convertToDropdownItems(dragMenuConfig) {
|
|
|
34
44
|
});
|
|
35
45
|
item.onClick && (menuCallback[item.id] = item.onClick);
|
|
36
46
|
});
|
|
47
|
+
var menuItems = menuItemsArr.reduce(function (acc, curr) {
|
|
48
|
+
(curr === null || curr === void 0 ? void 0 : curr.length) > 0 && acc.push({
|
|
49
|
+
items: curr
|
|
50
|
+
});
|
|
51
|
+
return acc;
|
|
52
|
+
}, []);
|
|
37
53
|
return {
|
|
38
54
|
menuItems: menuItems,
|
|
39
55
|
menuCallback: menuCallback
|
|
@@ -97,15 +113,16 @@ export var DragMenu = function DragMenu(_ref) {
|
|
|
97
113
|
type: ArrowKeyNavigationType.MENU,
|
|
98
114
|
disableArrowKeyNavigation: true
|
|
99
115
|
},
|
|
100
|
-
items:
|
|
101
|
-
items: menuItems
|
|
102
|
-
}],
|
|
116
|
+
items: menuItems,
|
|
103
117
|
isOpen: isOpen,
|
|
104
118
|
onOpenChange: closeMenu,
|
|
105
119
|
onItemActivated: handleMenuItemActivated,
|
|
106
120
|
onMouseEnter: handleItemMouseEnter,
|
|
107
121
|
onMouseLeave: handleItemMouseLeave,
|
|
108
122
|
fitWidth: dragMenuDropdownWidth,
|
|
109
|
-
boundariesElement: boundariesElement
|
|
123
|
+
boundariesElement: boundariesElement,
|
|
124
|
+
section: {
|
|
125
|
+
hasSeparator: true
|
|
126
|
+
}
|
|
110
127
|
});
|
|
111
128
|
};
|
package/package.json
CHANGED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
import { render, screen } from '@testing-library/react';
|
|
4
|
+
|
|
5
|
+
import { ReactEditorViewContext } from '@atlaskit/editor-common/ui-react';
|
|
6
|
+
// eslint-disable-next-line import/no-extraneous-dependencies -- Removed import for fixing circular dependencies
|
|
7
|
+
import { analyticsPlugin } from '@atlaskit/editor-plugin-analytics';
|
|
8
|
+
import { contentInsertionPlugin } from '@atlaskit/editor-plugin-content-insertion';
|
|
9
|
+
import { featureFlagsPlugin } from '@atlaskit/editor-plugin-feature-flags';
|
|
10
|
+
import { guidelinePlugin } from '@atlaskit/editor-plugin-guideline';
|
|
11
|
+
import { selectionPlugin } from '@atlaskit/editor-plugin-selection';
|
|
12
|
+
import { widthPlugin } from '@atlaskit/editor-plugin-width';
|
|
13
|
+
import * as prosemirrorUtils from '@atlaskit/editor-prosemirror/utils';
|
|
14
|
+
import type { ContentNodeWithPos } from '@atlaskit/editor-prosemirror/utils';
|
|
15
|
+
import type { EditorView } from '@atlaskit/editor-prosemirror/view';
|
|
16
|
+
import type { LightEditorPlugin } from '@atlaskit/editor-test-helpers/create-prosemirror-editor';
|
|
17
|
+
// eslint-disable-next-line import/no-extraneous-dependencies -- Removed import for fixing circular dependencies
|
|
18
|
+
import {
|
|
19
|
+
createProsemirrorEditorFactory,
|
|
20
|
+
Preset,
|
|
21
|
+
} from '@atlaskit/editor-test-helpers/create-prosemirror-editor';
|
|
22
|
+
// eslint-disable-next-line import/no-extraneous-dependencies -- Removed import for fixing circular dependencies
|
|
23
|
+
import {
|
|
24
|
+
doc,
|
|
25
|
+
p,
|
|
26
|
+
table,
|
|
27
|
+
tdCursor,
|
|
28
|
+
tdEmpty,
|
|
29
|
+
th,
|
|
30
|
+
tr,
|
|
31
|
+
} from '@atlaskit/editor-test-helpers/doc-builder';
|
|
32
|
+
import { ffTest } from '@atlassian/feature-flags-test-utils';
|
|
33
|
+
|
|
34
|
+
import tablePlugin from '../../../plugins/table-plugin';
|
|
35
|
+
import FloatingDragMenu from '../../../plugins/table/ui/FloatingDragMenu';
|
|
36
|
+
|
|
37
|
+
describe('FloatingDragMenu', () => {
|
|
38
|
+
const createEditor = createProsemirrorEditorFactory();
|
|
39
|
+
let editorView: EditorView;
|
|
40
|
+
let tableNode: ContentNodeWithPos | undefined;
|
|
41
|
+
beforeEach(() => {
|
|
42
|
+
({ editorView } = createEditor({
|
|
43
|
+
doc: doc(table()(tr(th()(p('')), th()(p(''))), tr(tdCursor, tdEmpty))),
|
|
44
|
+
preset: new Preset<LightEditorPlugin>()
|
|
45
|
+
.add([featureFlagsPlugin, {}])
|
|
46
|
+
.add([analyticsPlugin, {}])
|
|
47
|
+
.add(contentInsertionPlugin)
|
|
48
|
+
.add(widthPlugin)
|
|
49
|
+
.add(guidelinePlugin)
|
|
50
|
+
.add(selectionPlugin)
|
|
51
|
+
.add(tablePlugin),
|
|
52
|
+
}));
|
|
53
|
+
|
|
54
|
+
tableNode = prosemirrorUtils.findParentNodeOfTypeClosestToPos(
|
|
55
|
+
editorView.state.selection.$from,
|
|
56
|
+
editorView.state.schema.nodes.table,
|
|
57
|
+
);
|
|
58
|
+
});
|
|
59
|
+
describe('should group the menu items correctly', () => {
|
|
60
|
+
ffTest(
|
|
61
|
+
'platform.editor.menu.group-items',
|
|
62
|
+
() => {
|
|
63
|
+
// Run test case when FF platform.editor..menu.group-items is true
|
|
64
|
+
const tableRef = editorView.dom.querySelector('table');
|
|
65
|
+
const editorRef = {
|
|
66
|
+
current: document.createElement('div'),
|
|
67
|
+
};
|
|
68
|
+
render(
|
|
69
|
+
<ReactEditorViewContext.Provider
|
|
70
|
+
value={{
|
|
71
|
+
editorRef,
|
|
72
|
+
}}
|
|
73
|
+
>
|
|
74
|
+
<FloatingDragMenu
|
|
75
|
+
editorView={editorView}
|
|
76
|
+
isOpen
|
|
77
|
+
getEditorContainerWidth={jest.fn()}
|
|
78
|
+
tableRef={tableRef as HTMLTableElement}
|
|
79
|
+
tableNode={tableNode?.node}
|
|
80
|
+
direction="row"
|
|
81
|
+
targetCellPosition={1}
|
|
82
|
+
/>
|
|
83
|
+
</ReactEditorViewContext.Provider>,
|
|
84
|
+
);
|
|
85
|
+
expect(screen.getAllByRole('menu')).toHaveLength(1);
|
|
86
|
+
expect(screen.getAllByRole('group')).toHaveLength(2);
|
|
87
|
+
},
|
|
88
|
+
() => {
|
|
89
|
+
// Run test case when FF platform.editor..menu.group-items is false
|
|
90
|
+
const tableRef = editorView.dom.querySelector('table');
|
|
91
|
+
const editorRef = {
|
|
92
|
+
current: document.createElement('div'),
|
|
93
|
+
};
|
|
94
|
+
render(
|
|
95
|
+
<ReactEditorViewContext.Provider
|
|
96
|
+
value={{
|
|
97
|
+
editorRef,
|
|
98
|
+
}}
|
|
99
|
+
>
|
|
100
|
+
<FloatingDragMenu
|
|
101
|
+
editorView={editorView}
|
|
102
|
+
isOpen
|
|
103
|
+
getEditorContainerWidth={jest.fn()}
|
|
104
|
+
tableRef={tableRef as HTMLTableElement}
|
|
105
|
+
tableNode={tableNode?.node}
|
|
106
|
+
direction="row"
|
|
107
|
+
targetCellPosition={1}
|
|
108
|
+
/>
|
|
109
|
+
</ReactEditorViewContext.Provider>,
|
|
110
|
+
);
|
|
111
|
+
expect(screen.getAllByRole('menu')).toHaveLength(2);
|
|
112
|
+
expect(screen.queryByRole('group')).toBeNull();
|
|
113
|
+
},
|
|
114
|
+
);
|
|
115
|
+
});
|
|
116
|
+
describe('menu items', () => {
|
|
117
|
+
it('should render the right menu items for row', () => {
|
|
118
|
+
// Run test case when FF platform.editor..menu.group-items is true
|
|
119
|
+
const tableRef = editorView.dom.querySelector('table');
|
|
120
|
+
const editorRef = {
|
|
121
|
+
current: document.createElement('div'),
|
|
122
|
+
};
|
|
123
|
+
render(
|
|
124
|
+
<ReactEditorViewContext.Provider
|
|
125
|
+
value={{
|
|
126
|
+
editorRef,
|
|
127
|
+
}}
|
|
128
|
+
>
|
|
129
|
+
<FloatingDragMenu
|
|
130
|
+
editorView={editorView}
|
|
131
|
+
isOpen
|
|
132
|
+
getEditorContainerWidth={jest.fn()}
|
|
133
|
+
tableRef={tableRef as HTMLTableElement}
|
|
134
|
+
tableNode={tableNode?.node}
|
|
135
|
+
direction="row"
|
|
136
|
+
targetCellPosition={1}
|
|
137
|
+
/>
|
|
138
|
+
</ReactEditorViewContext.Provider>,
|
|
139
|
+
);
|
|
140
|
+
|
|
141
|
+
const items = screen.getAllByRole('menuitem');
|
|
142
|
+
const menuitemTextArray = items.map((item) => item.textContent);
|
|
143
|
+
expect(menuitemTextArray).toMatchInlineSnapshot(`
|
|
144
|
+
Array [
|
|
145
|
+
"Add row aboveCtrl+Alt+↑",
|
|
146
|
+
"Add row belowCtrl+Alt+↓",
|
|
147
|
+
"Clear cells⌫",
|
|
148
|
+
"Delete row",
|
|
149
|
+
"Move row up",
|
|
150
|
+
"Move row down",
|
|
151
|
+
]
|
|
152
|
+
`);
|
|
153
|
+
});
|
|
154
|
+
it('should render the right menu items for column', () => {
|
|
155
|
+
const tableRef = editorView.dom.querySelector('table');
|
|
156
|
+
const editorRef = {
|
|
157
|
+
current: document.createElement('div'),
|
|
158
|
+
};
|
|
159
|
+
render(
|
|
160
|
+
<ReactEditorViewContext.Provider
|
|
161
|
+
value={{
|
|
162
|
+
editorRef,
|
|
163
|
+
}}
|
|
164
|
+
>
|
|
165
|
+
<FloatingDragMenu
|
|
166
|
+
editorView={editorView}
|
|
167
|
+
isOpen
|
|
168
|
+
getEditorContainerWidth={jest.fn()}
|
|
169
|
+
tableRef={tableRef as HTMLTableElement}
|
|
170
|
+
tableNode={tableNode?.node}
|
|
171
|
+
direction="column"
|
|
172
|
+
targetCellPosition={1}
|
|
173
|
+
/>
|
|
174
|
+
</ReactEditorViewContext.Provider>,
|
|
175
|
+
);
|
|
176
|
+
|
|
177
|
+
const items = screen.getAllByRole('menuitem');
|
|
178
|
+
const menuitemTextArray = items.map((item) => item.textContent);
|
|
179
|
+
expect(menuitemTextArray).toMatchInlineSnapshot(`
|
|
180
|
+
Array [
|
|
181
|
+
"Add column leftCtrl+Alt+←",
|
|
182
|
+
"Add column rightCtrl+Alt+→",
|
|
183
|
+
"Distribute columns",
|
|
184
|
+
"Clear cells⌫",
|
|
185
|
+
"Delete column",
|
|
186
|
+
"Move column left",
|
|
187
|
+
"Move column right",
|
|
188
|
+
"Sort increasing",
|
|
189
|
+
"Sort decreasing",
|
|
190
|
+
]
|
|
191
|
+
`);
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
});
|
|
@@ -44,11 +44,35 @@ type DragMenuProps = {
|
|
|
44
44
|
getEditorContainerWidth: GetEditorContainerWidth;
|
|
45
45
|
};
|
|
46
46
|
|
|
47
|
+
const groupedDragMenuConfig = [
|
|
48
|
+
[
|
|
49
|
+
'add_row_above',
|
|
50
|
+
'add_row_below',
|
|
51
|
+
'add_column_left',
|
|
52
|
+
'add_column_right',
|
|
53
|
+
'distribute_columns',
|
|
54
|
+
'clear_cells',
|
|
55
|
+
'delete_row',
|
|
56
|
+
'delete_column',
|
|
57
|
+
],
|
|
58
|
+
['move_column_left', 'move_column_right', 'move_row_up', 'move_row_down'],
|
|
59
|
+
['sort_column_asc', 'sort_column_desc'],
|
|
60
|
+
];
|
|
61
|
+
|
|
47
62
|
const convertToDropdownItems = (dragMenuConfig: DragMenuConfig[]) => {
|
|
48
|
-
let
|
|
63
|
+
let menuItemsArr: MenuItem[][] = [...Array(groupedDragMenuConfig.length)].map(
|
|
64
|
+
() => [],
|
|
65
|
+
);
|
|
49
66
|
let menuCallback: { [key: string]: Command } = {};
|
|
50
67
|
dragMenuConfig.forEach((item) => {
|
|
51
|
-
|
|
68
|
+
const menuGroupIndex = groupedDragMenuConfig.findIndex((group) =>
|
|
69
|
+
group.includes(item.id),
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
if (menuGroupIndex === -1) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
menuItemsArr[menuGroupIndex].push({
|
|
52
76
|
key: item.id,
|
|
53
77
|
content: item.title,
|
|
54
78
|
value: { name: item.id },
|
|
@@ -69,6 +93,11 @@ const convertToDropdownItems = (dragMenuConfig: DragMenuConfig[]) => {
|
|
|
69
93
|
});
|
|
70
94
|
item.onClick && (menuCallback[item.id] = item.onClick);
|
|
71
95
|
});
|
|
96
|
+
|
|
97
|
+
const menuItems = menuItemsArr.reduce((acc, curr) => {
|
|
98
|
+
curr?.length > 0 && acc.push({ items: curr });
|
|
99
|
+
return acc;
|
|
100
|
+
}, [] as { items: MenuItem[] }[]);
|
|
72
101
|
return { menuItems, menuCallback };
|
|
73
102
|
};
|
|
74
103
|
|
|
@@ -149,11 +178,7 @@ export const DragMenu = ({
|
|
|
149
178
|
type: ArrowKeyNavigationType.MENU,
|
|
150
179
|
disableArrowKeyNavigation: true,
|
|
151
180
|
}}
|
|
152
|
-
items={
|
|
153
|
-
{
|
|
154
|
-
items: menuItems,
|
|
155
|
-
},
|
|
156
|
-
]}
|
|
181
|
+
items={menuItems}
|
|
157
182
|
isOpen={isOpen}
|
|
158
183
|
onOpenChange={closeMenu}
|
|
159
184
|
onItemActivated={handleMenuItemActivated}
|
|
@@ -161,6 +186,7 @@ export const DragMenu = ({
|
|
|
161
186
|
onMouseLeave={handleItemMouseLeave}
|
|
162
187
|
fitWidth={dragMenuDropdownWidth}
|
|
163
188
|
boundariesElement={boundariesElement}
|
|
189
|
+
section={{ hasSeparator: true }}
|
|
164
190
|
/>
|
|
165
191
|
);
|
|
166
192
|
};
|