@atlaskit/editor-plugin-quick-insert 29.0.4 → 30.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/dist/cjs/quickInsertPlugin.js +10 -5
- package/dist/cjs/ui/QuickInsertRecommendedSlot.js +11 -8
- package/dist/cjs/ui/RegistryElementBrowser/RegistryElementBrowser.js +31 -7
- package/dist/cjs/ui/RegistryElementBrowser/RegistryElementBrowserSearchResults.js +13 -7
- package/dist/cjs/ui/RegistryElementBrowser/model.js +31 -18
- package/dist/cjs/ui/getQuickInsertComponents.js +28 -16
- package/dist/cjs/ui/getRecommendedComponents.js +2 -2
- package/dist/cjs/ui/registered-menu/QuickInsertEmptyState.compiled.css +11 -0
- package/dist/cjs/ui/registered-menu/QuickInsertEmptyState.js +61 -0
- package/dist/cjs/ui/registered-menu/QuickInsertMenuRoot.js +220 -0
- package/dist/cjs/ui/registered-menu/QuickInsertMenuSection.js +23 -0
- package/dist/cjs/ui/registered-menu/QuickInsertSearchResultsSection.js +19 -0
- package/dist/cjs/ui/registered-menu/RegisteredQuickInsertMenuItem.js +42 -0
- package/dist/cjs/ui/registered-menu/ToolbarQuickInsertMenu.compiled.css +11 -0
- package/dist/cjs/ui/registered-menu/ToolbarQuickInsertMenu.js +128 -0
- package/dist/cjs/ui/registered-menu/TypeAheadQuickInsertMenu.compiled.css +3 -0
- package/dist/cjs/ui/registered-menu/TypeAheadQuickInsertMenu.js +90 -0
- package/dist/cjs/ui/registered-menu/assets/no-results.js +36 -0
- package/dist/cjs/ui/registered-menu/get-quick-insert-menu-model.js +254 -0
- package/dist/cjs/ui/registered-menu/getQuickInsertMenuItemId.js +9 -0
- package/dist/cjs/ui/registered-menu/selectQuickInsertCategoryItems.js +27 -0
- package/dist/cjs/ui/registered-menu/useQuickInsertSearchAnalytics.js +100 -0
- package/dist/es2019/quickInsertPlugin.js +10 -5
- package/dist/es2019/ui/QuickInsertRecommendedSlot.js +10 -5
- package/dist/es2019/ui/RegistryElementBrowser/RegistryElementBrowser.js +19 -2
- package/dist/es2019/ui/RegistryElementBrowser/RegistryElementBrowserSearchResults.js +12 -7
- package/dist/es2019/ui/RegistryElementBrowser/model.js +27 -16
- package/dist/es2019/ui/getQuickInsertComponents.js +24 -10
- package/dist/es2019/ui/getRecommendedComponents.js +2 -2
- package/dist/es2019/ui/registered-menu/QuickInsertEmptyState.compiled.css +11 -0
- package/dist/es2019/ui/registered-menu/QuickInsertEmptyState.js +47 -0
- package/dist/es2019/ui/registered-menu/QuickInsertMenuRoot.js +191 -0
- package/dist/es2019/ui/registered-menu/QuickInsertMenuSection.js +15 -0
- package/dist/es2019/ui/registered-menu/QuickInsertSearchResultsSection.js +14 -0
- package/dist/es2019/ui/registered-menu/RegisteredQuickInsertMenuItem.js +34 -0
- package/dist/es2019/ui/registered-menu/ToolbarQuickInsertMenu.compiled.css +11 -0
- package/dist/es2019/ui/registered-menu/ToolbarQuickInsertMenu.js +116 -0
- package/dist/es2019/ui/registered-menu/TypeAheadQuickInsertMenu.compiled.css +3 -0
- package/dist/es2019/ui/registered-menu/TypeAheadQuickInsertMenu.js +78 -0
- package/dist/es2019/ui/registered-menu/assets/no-results.js +30 -0
- package/dist/es2019/ui/registered-menu/get-quick-insert-menu-model.js +191 -0
- package/dist/es2019/ui/registered-menu/getQuickInsertMenuItemId.js +1 -0
- package/dist/es2019/ui/registered-menu/selectQuickInsertCategoryItems.js +19 -0
- package/dist/es2019/ui/registered-menu/useQuickInsertSearchAnalytics.js +91 -0
- package/dist/esm/quickInsertPlugin.js +10 -5
- package/dist/esm/ui/QuickInsertRecommendedSlot.js +11 -8
- package/dist/esm/ui/RegistryElementBrowser/RegistryElementBrowser.js +30 -6
- package/dist/esm/ui/RegistryElementBrowser/RegistryElementBrowserSearchResults.js +12 -7
- package/dist/esm/ui/RegistryElementBrowser/model.js +31 -18
- package/dist/esm/ui/getQuickInsertComponents.js +27 -15
- package/dist/esm/ui/getRecommendedComponents.js +2 -2
- package/dist/esm/ui/registered-menu/QuickInsertEmptyState.compiled.css +11 -0
- package/dist/esm/ui/registered-menu/QuickInsertEmptyState.js +50 -0
- package/dist/esm/ui/registered-menu/QuickInsertMenuRoot.js +211 -0
- package/dist/esm/ui/registered-menu/QuickInsertMenuSection.js +16 -0
- package/dist/esm/ui/registered-menu/QuickInsertSearchResultsSection.js +12 -0
- package/dist/esm/ui/registered-menu/RegisteredQuickInsertMenuItem.js +34 -0
- package/dist/esm/ui/registered-menu/ToolbarQuickInsertMenu.compiled.css +11 -0
- package/dist/esm/ui/registered-menu/ToolbarQuickInsertMenu.js +120 -0
- package/dist/esm/ui/registered-menu/TypeAheadQuickInsertMenu.compiled.css +3 -0
- package/dist/esm/ui/registered-menu/TypeAheadQuickInsertMenu.js +82 -0
- package/dist/esm/ui/registered-menu/assets/no-results.js +29 -0
- package/dist/esm/ui/registered-menu/get-quick-insert-menu-model.js +247 -0
- package/dist/esm/ui/registered-menu/getQuickInsertMenuItemId.js +3 -0
- package/dist/esm/ui/registered-menu/selectQuickInsertCategoryItems.js +21 -0
- package/dist/esm/ui/registered-menu/useQuickInsertSearchAnalytics.js +93 -0
- package/dist/types/quickInsertPluginType.d.ts +1 -1
- package/dist/types/ui/QuickInsertRecommendedSlot.d.ts +3 -3
- package/dist/types/ui/RegistryElementBrowser/RegistryElementBrowserSearchResults.d.ts +5 -2
- package/dist/types/ui/RegistryElementBrowser/model.d.ts +3 -2
- package/dist/types/ui/getQuickInsertComponents.d.ts +8 -2
- package/dist/types/ui/registered-menu/QuickInsertEmptyState.d.ts +7 -0
- package/dist/types/ui/registered-menu/QuickInsertMenuRoot.d.ts +11 -0
- package/dist/types/ui/registered-menu/QuickInsertMenuSection.d.ts +4 -0
- package/dist/types/ui/registered-menu/QuickInsertSearchResultsSection.d.ts +2 -0
- package/dist/types/ui/registered-menu/RegisteredQuickInsertMenuItem.d.ts +3 -0
- package/dist/types/ui/registered-menu/ToolbarQuickInsertMenu.d.ts +28 -0
- package/dist/types/ui/registered-menu/TypeAheadQuickInsertMenu.d.ts +27 -0
- package/dist/types/ui/registered-menu/assets/no-results.d.ts +7 -0
- package/dist/types/ui/registered-menu/get-quick-insert-menu-model.d.ts +19 -0
- package/dist/types/ui/registered-menu/getQuickInsertMenuItemId.d.ts +1 -0
- package/dist/types/ui/registered-menu/selectQuickInsertCategoryItems.d.ts +7 -0
- package/dist/types/ui/registered-menu/useQuickInsertSearchAnalytics.d.ts +12 -0
- package/package.json +15 -12
- package/registered-menu/model/package.json +10 -0
- package/registered-menu/search-analytics/package.json +10 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/* ToolbarQuickInsertMenu.tsx generated by @compiled/babel-plugin v3.0.2 */
|
|
2
|
+
import "./ToolbarQuickInsertMenu.compiled.css";
|
|
3
|
+
import { ax, ix } from "@compiled/react/runtime";
|
|
4
|
+
import React, { useCallback } from 'react';
|
|
5
|
+
import { RegisteredMenuList } from '@atlaskit/editor-common/registered-menu/list';
|
|
6
|
+
import { Box } from '@atlaskit/primitives/compiled/box';
|
|
7
|
+
import { getQuickInsertMenuItemId } from './getQuickInsertMenuItemId';
|
|
8
|
+
import { QuickInsertEmptyState } from './QuickInsertEmptyState';
|
|
9
|
+
var MENU_FOOTER_HEIGHT = 45;
|
|
10
|
+
var LIST_WIDTH = 350;
|
|
11
|
+
var styles = {
|
|
12
|
+
content: "_1e0c1txw _2lx21bp4 _1tkeidpf",
|
|
13
|
+
scrollable: "_16jlkb7n _1tkeidpf _18m91wug",
|
|
14
|
+
footer: "_1o9zidpf",
|
|
15
|
+
externalControls: "_1i531l7x _15a5nqa1 _uwhke4h9 _1q51u2gc _85i5u2gc",
|
|
16
|
+
footerDivider: "_1i531l7x _15a5nqa1 _uwhke4h9 _1o9zidpf"
|
|
17
|
+
};
|
|
18
|
+
export var ToolbarQuickInsertMenu = function ToolbarQuickInsertMenu(_ref) {
|
|
19
|
+
var Item = _ref.Item,
|
|
20
|
+
model = _ref.model,
|
|
21
|
+
emptyStateHandler = _ref.emptyStateHandler,
|
|
22
|
+
listLabel = _ref.listLabel,
|
|
23
|
+
activePreviewItemKey = _ref.activePreviewItemKey,
|
|
24
|
+
itemCount = _ref.itemCount,
|
|
25
|
+
listId = _ref.listId,
|
|
26
|
+
maxHeight = _ref.maxHeight,
|
|
27
|
+
rows = _ref.rows,
|
|
28
|
+
onItemBlur = _ref.onItemBlur,
|
|
29
|
+
onItemFocus = _ref.onItemFocus,
|
|
30
|
+
onItemHover = _ref.onItemHover,
|
|
31
|
+
onItemLeave = _ref.onItemLeave,
|
|
32
|
+
onItemVisibilityChange = _ref.onItemVisibilityChange,
|
|
33
|
+
onRenderedItemsChange = _ref.onRenderedItemsChange,
|
|
34
|
+
query = _ref.query,
|
|
35
|
+
selectedItemIndex = _ref.selectedItemIndex;
|
|
36
|
+
var footerItemIndex = itemCount - 1;
|
|
37
|
+
var footerItemId = getQuickInsertMenuItemId(listId, footerItemIndex);
|
|
38
|
+
var isEmptySearch = query !== '' && model.sections.length === 0;
|
|
39
|
+
var hasNoSearchResults = model.sections.length === 0 && model.fallbackItems.length === 0;
|
|
40
|
+
var externalControls = isEmptySearch ? emptyStateHandler === null || emptyStateHandler === void 0 ? void 0 : emptyStateHandler({
|
|
41
|
+
mode: 'inline',
|
|
42
|
+
searchTerm: query,
|
|
43
|
+
showNoResultsMessage: false
|
|
44
|
+
}) : null;
|
|
45
|
+
var onFooterItemFocus = useCallback(function () {
|
|
46
|
+
return onItemFocus(footerItemIndex);
|
|
47
|
+
}, [footerItemIndex, onItemFocus]);
|
|
48
|
+
var onFooterItemHover = useCallback(function () {
|
|
49
|
+
return onItemHover(footerItemIndex);
|
|
50
|
+
}, [footerItemIndex, onItemHover]);
|
|
51
|
+
var listMaxHeight = Math.max(0, maxHeight - (model.footer ? MENU_FOOTER_HEIGHT : 0));
|
|
52
|
+
var contentStyle = {
|
|
53
|
+
maxHeight: maxHeight
|
|
54
|
+
};
|
|
55
|
+
var getItemId = useCallback(function (_ref2) {
|
|
56
|
+
var itemIndex = _ref2.itemIndex;
|
|
57
|
+
return getQuickInsertMenuItemId(listId, itemIndex);
|
|
58
|
+
}, [listId]);
|
|
59
|
+
var onScrollableContentScroll = useCallback(function (event) {
|
|
60
|
+
if (event.target === event.currentTarget && activePreviewItemKey) {
|
|
61
|
+
onItemVisibilityChange(activePreviewItemKey, false);
|
|
62
|
+
}
|
|
63
|
+
}, [activePreviewItemKey, onItemVisibilityChange]);
|
|
64
|
+
if (!model.root) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
return /*#__PURE__*/React.createElement(Box, {
|
|
68
|
+
xcss: styles.content,
|
|
69
|
+
style: contentStyle
|
|
70
|
+
}, /*#__PURE__*/React.createElement(Box, {
|
|
71
|
+
xcss: styles.scrollable,
|
|
72
|
+
onScroll: onScrollableContentScroll
|
|
73
|
+
}, /*#__PURE__*/React.createElement(Box, {
|
|
74
|
+
"aria-label": listLabel,
|
|
75
|
+
"aria-owns": model.footer ? footerItemId : undefined,
|
|
76
|
+
id: listId,
|
|
77
|
+
role: "listbox"
|
|
78
|
+
}, rows.length > 0 && /*#__PURE__*/React.createElement(RegisteredMenuList, {
|
|
79
|
+
rows: rows,
|
|
80
|
+
Item: Item,
|
|
81
|
+
width: LIST_WIDTH,
|
|
82
|
+
maxHeight: listMaxHeight,
|
|
83
|
+
getItemId: getItemId,
|
|
84
|
+
activeItemKey: activePreviewItemKey,
|
|
85
|
+
selectedItemIndex: selectedItemIndex,
|
|
86
|
+
scrollResetKey: query,
|
|
87
|
+
onItemHover: onItemHover,
|
|
88
|
+
onItemFocus: onItemFocus,
|
|
89
|
+
onItemBlur: onItemBlur,
|
|
90
|
+
onItemLeave: onItemLeave,
|
|
91
|
+
onItemVisibilityChange: onItemVisibilityChange,
|
|
92
|
+
onRenderedItemsChange: onRenderedItemsChange,
|
|
93
|
+
role: "group",
|
|
94
|
+
tabIndex: null,
|
|
95
|
+
omitAriaReadonly: true,
|
|
96
|
+
lastRowPadding: "space.100",
|
|
97
|
+
scrollTo: "top-on-reset"
|
|
98
|
+
})), query !== '' && hasNoSearchResults && /*#__PURE__*/React.createElement(QuickInsertEmptyState, {
|
|
99
|
+
mode: "inline"
|
|
100
|
+
}), externalControls && /*#__PURE__*/React.createElement(Box, {
|
|
101
|
+
testId: "registered-insert-menu-external-controls",
|
|
102
|
+
xcss: styles.externalControls
|
|
103
|
+
}, externalControls)), model.footer && /*#__PURE__*/React.createElement(Box, {
|
|
104
|
+
xcss: styles.footer
|
|
105
|
+
}, /*#__PURE__*/React.createElement(Box, {
|
|
106
|
+
testId: "registered-insert-menu-footer",
|
|
107
|
+
xcss: styles.footer
|
|
108
|
+
}, !isEmptySearch || !hasNoSearchResults || Boolean(externalControls) ? /*#__PURE__*/React.createElement(Box, {
|
|
109
|
+
"aria-hidden": "true",
|
|
110
|
+
xcss: styles.footerDivider
|
|
111
|
+
}) : null, /*#__PURE__*/React.createElement(Box, {
|
|
112
|
+
onFocus: onFooterItemFocus,
|
|
113
|
+
onMouseMove: onFooterItemHover
|
|
114
|
+
}, /*#__PURE__*/React.createElement(Item, {
|
|
115
|
+
id: footerItemId,
|
|
116
|
+
isSelected: selectedItemIndex === footerItemIndex,
|
|
117
|
+
isActive: false,
|
|
118
|
+
registration: model.footer
|
|
119
|
+
})))));
|
|
120
|
+
};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/* TypeAheadQuickInsertMenu.tsx generated by @compiled/babel-plugin v3.0.2 */
|
|
2
|
+
import "./TypeAheadQuickInsertMenu.compiled.css";
|
|
3
|
+
import { ax, ix } from "@compiled/react/runtime";
|
|
4
|
+
import React, { useCallback } from 'react';
|
|
5
|
+
import { RegisteredMenuList } from '@atlaskit/editor-common/registered-menu/list';
|
|
6
|
+
import { Box } from '@atlaskit/primitives/compiled/box';
|
|
7
|
+
import { getQuickInsertMenuItemId } from './getQuickInsertMenuItemId';
|
|
8
|
+
import { QuickInsertEmptyState } from './QuickInsertEmptyState';
|
|
9
|
+
var LIST_WIDTH = 320;
|
|
10
|
+
var MENU_FOOTER_HEIGHT = 45;
|
|
11
|
+
var MENU_FOOTER_HEIGHT_WITH_SCROLL_PADDING = 51;
|
|
12
|
+
var styles = {
|
|
13
|
+
footer: "_1i531l7x _15a5nqa1 _uwhke4h9"
|
|
14
|
+
};
|
|
15
|
+
export var TypeAheadQuickInsertMenu = function TypeAheadQuickInsertMenu(_ref) {
|
|
16
|
+
var Item = _ref.Item,
|
|
17
|
+
rows = _ref.rows,
|
|
18
|
+
activeItemKey = _ref.activeItemKey,
|
|
19
|
+
itemCount = _ref.itemCount,
|
|
20
|
+
listId = _ref.listId,
|
|
21
|
+
listLabel = _ref.listLabel,
|
|
22
|
+
maxHeight = _ref.maxHeight,
|
|
23
|
+
model = _ref.model,
|
|
24
|
+
onItemFocus = _ref.onItemFocus,
|
|
25
|
+
onItemBlur = _ref.onItemBlur,
|
|
26
|
+
onItemHover = _ref.onItemHover,
|
|
27
|
+
onItemLeave = _ref.onItemLeave,
|
|
28
|
+
onItemVisibilityChange = _ref.onItemVisibilityChange,
|
|
29
|
+
onRenderedItemsChange = _ref.onRenderedItemsChange,
|
|
30
|
+
_ref$query = _ref.query,
|
|
31
|
+
query = _ref$query === void 0 ? '' : _ref$query,
|
|
32
|
+
selectedItemIndex = _ref.selectedItemIndex,
|
|
33
|
+
_ref$hasScrollPadding = _ref.hasScrollPadding,
|
|
34
|
+
hasScrollPadding = _ref$hasScrollPadding === void 0 ? false : _ref$hasScrollPadding;
|
|
35
|
+
var footerItemIndex = itemCount - 1;
|
|
36
|
+
var onFooterItemHover = useCallback(function () {
|
|
37
|
+
return onItemHover(footerItemIndex);
|
|
38
|
+
}, [footerItemIndex, onItemHover]);
|
|
39
|
+
var getItemId = useCallback(function (_ref2) {
|
|
40
|
+
var itemIndex = _ref2.itemIndex;
|
|
41
|
+
return getQuickInsertMenuItemId(listId, itemIndex);
|
|
42
|
+
}, [listId]);
|
|
43
|
+
if (!model.root) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
var listMaxHeight = Math.max(0, maxHeight - (model.footer ? hasScrollPadding ? MENU_FOOTER_HEIGHT_WITH_SCROLL_PADDING : MENU_FOOTER_HEIGHT : 0));
|
|
47
|
+
var hasListboxContent = rows.length > 0 || model.footer !== undefined;
|
|
48
|
+
return /*#__PURE__*/React.createElement(Box, {
|
|
49
|
+
"aria-label": hasListboxContent ? listLabel : undefined,
|
|
50
|
+
id: listId,
|
|
51
|
+
role: hasListboxContent ? 'listbox' : undefined
|
|
52
|
+
}, rows.length > 0 ? /*#__PURE__*/React.createElement(RegisteredMenuList, {
|
|
53
|
+
rows: rows,
|
|
54
|
+
Item: Item,
|
|
55
|
+
width: LIST_WIDTH,
|
|
56
|
+
maxHeight: listMaxHeight,
|
|
57
|
+
getItemId: getItemId,
|
|
58
|
+
activeItemKey: activeItemKey,
|
|
59
|
+
selectedItemIndex: selectedItemIndex,
|
|
60
|
+
scrollResetKey: query,
|
|
61
|
+
hasScrollPadding: hasScrollPadding,
|
|
62
|
+
scrollTo: "top-on-reset",
|
|
63
|
+
onItemFocus: onItemFocus,
|
|
64
|
+
onItemBlur: onItemBlur,
|
|
65
|
+
onItemHover: onItemHover,
|
|
66
|
+
onItemLeave: onItemLeave,
|
|
67
|
+
onItemVisibilityChange: onItemVisibilityChange,
|
|
68
|
+
onRenderedItemsChange: onRenderedItemsChange
|
|
69
|
+
}) : query !== '' && /*#__PURE__*/React.createElement(QuickInsertEmptyState, {
|
|
70
|
+
mode: "inline",
|
|
71
|
+
spacing: "spacious"
|
|
72
|
+
}), model.footer && /*#__PURE__*/React.createElement(Box, {
|
|
73
|
+
onMouseMove: onFooterItemHover,
|
|
74
|
+
paddingBlockEnd: hasScrollPadding ? 'space.075' : undefined,
|
|
75
|
+
xcss: styles.footer
|
|
76
|
+
}, /*#__PURE__*/React.createElement(Item, {
|
|
77
|
+
id: getQuickInsertMenuItemId(listId, footerItemIndex),
|
|
78
|
+
isSelected: selectedItemIndex === footerItemIndex,
|
|
79
|
+
isActive: false,
|
|
80
|
+
registration: model.footer
|
|
81
|
+
})));
|
|
82
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export default function NoResultsIllustration(_ref) {
|
|
3
|
+
var height = _ref.height,
|
|
4
|
+
width = _ref.width;
|
|
5
|
+
return /*#__PURE__*/React.createElement("svg", {
|
|
6
|
+
width: width,
|
|
7
|
+
height: height,
|
|
8
|
+
viewBox: "0 0 57 63",
|
|
9
|
+
fill: "none",
|
|
10
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
11
|
+
"aria-hidden": "true",
|
|
12
|
+
focusable: "false"
|
|
13
|
+
}, /*#__PURE__*/React.createElement("path", {
|
|
14
|
+
fill: "#dddee1",
|
|
15
|
+
d: "M23.5 49.223c-5.196 0-10.166-1.955-14.442-5.814a30 30 0 0 1-3.545-3.85 29.6 29.6 0 0 1-2.868-4.456c-4.56-8.775-3.179-18.124 3.79-25.647a32.6 32.6 0 0 1 3.942-3.593 32 32 0 0 1 4.287-2.81c9.017-4.89 18.424-3.869 25.803 2.8a30.3 30.3 0 0 1 3.59 3.897 29.7 29.7 0 0 1 2.837 4.396C51.5 22.96 50.12 32.324 43.106 39.83a31.5 31.5 0 0 1-3.797 3.442 33 33 0 0 1-4.468 2.912c-3.777 2.03-7.62 3.036-11.341 3.036zm2.478-44.539c-2.957 0-6.02.824-9.082 2.489a28 28 0 0 0-3.658 2.396 27.5 27.5 0 0 0-3.37 3.07C4.24 18.711 3.15 25.92 6.798 32.941a25 25 0 0 0 2.42 3.75 25 25 0 0 0 2.981 3.24c5.866 5.299 13.119 6.054 20.427 2.13a27.4 27.4 0 0 0 3.818-2.492 27.5 27.5 0 0 0 3.24-2.936c5.658-6.054 6.741-13.27 3.06-20.318a25 25 0 0 0-2.39-3.698 25.3 25.3 0 0 0-3.021-3.289c-3.418-3.086-7.288-4.645-11.348-4.645z"
|
|
16
|
+
}), /*#__PURE__*/React.createElement("path", {
|
|
17
|
+
fill: "#dddee1",
|
|
18
|
+
d: "M42.822 42.291c-1.21-1.685-2.509-1.675-3.777-.694-1.19.92-1.507 2.164-.24 3.801l1.45 1.873 4.017-3.107z"
|
|
19
|
+
}), /*#__PURE__*/React.createElement("path", {
|
|
20
|
+
fill: "#dddee1",
|
|
21
|
+
d: "m45.28 43.385-6.03 4.663 11.332 14.657 6.03-4.663z"
|
|
22
|
+
}), /*#__PURE__*/React.createElement("path", {
|
|
23
|
+
fill: "#b7b9be",
|
|
24
|
+
d: "m44.31 44.134-4.091 3.163 3.843 4.97 4.091-3.163z"
|
|
25
|
+
}), /*#__PURE__*/React.createElement("path", {
|
|
26
|
+
fill: "#dddee1",
|
|
27
|
+
d: "M26.834 30.328h-3.42v-.217c-.116-2.432 1.264-5.066 3.227-6.143l.037-.02q.08-.042.154-.093c1.071-.69 1.68-1.88 1.643-3.189-.037-1.298-.707-2.439-1.791-3.052a4.5 4.5 0 0 0-2.21-.592c-2.315 0-4.198 1.897-4.198 4.229h-3.42c0-4.23 3.417-7.672 7.618-7.672a7.9 7.9 0 0 1 3.884 1.033c2.14 1.211 3.462 3.437 3.534 5.955.073 2.53-1.125 4.84-3.203 6.18q-.211.139-.424.251c-.815.458-1.497 1.868-1.434 2.97zM24.795 32.303a3.4 3.4 0 0 1 1.096-.004c1.115.183 2.021.965 2.241 2.182l.002.01.002.009a3.4 3.4 0 0 1-.002 1.103v.004c-.216 1.23-1.136 2.009-2.247 2.19a3.417 3.417 0 0 1-1.085-.003c-1.117-.18-2.027-.961-2.249-2.179l-.002-.01-.001-.01a3.3 3.3 0 0 1 0-1.095l.002-.01.001-.01c.223-1.223 1.137-1.992 2.24-2.177z"
|
|
28
|
+
}));
|
|
29
|
+
}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
3
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
4
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
5
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
|
|
6
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
7
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
8
|
+
import { ASK_ROVO_MENU_ITEM, MENU, SEARCH_RESULTS_SECTION } from '@atlaskit/editor-common/quick-insert/keys';
|
|
9
|
+
import { applyRegisteredItemRanks } from '@atlaskit/editor-common/registered-menu/item-rank';
|
|
10
|
+
import { isMenuFooterSectionKey } from '@atlaskit/editor-common/type-ahead-is-menu-footer-section-key';
|
|
11
|
+
import { isSectionOverflowItemKey } from '@atlaskit/editor-common/type-ahead-is-section-overflow-item-key';
|
|
12
|
+
import { getComponentIdentity, resolveSurface, willComponentRender } from '@atlaskit/editor-ui-control-model/surface-renderer';
|
|
13
|
+
import { QuickInsertSearchResultsSection } from './QuickInsertSearchResultsSection';
|
|
14
|
+
var SEARCH_TOP_MATCH_LIMIT = 5;
|
|
15
|
+
var SEARCH_RESULTS_HEADING = {
|
|
16
|
+
key: SEARCH_RESULTS_SECTION.key,
|
|
17
|
+
type: SEARCH_RESULTS_SECTION.type,
|
|
18
|
+
component: QuickInsertSearchResultsSection,
|
|
19
|
+
parents: [{
|
|
20
|
+
key: MENU.key,
|
|
21
|
+
type: MENU.type,
|
|
22
|
+
rank: 0
|
|
23
|
+
}]
|
|
24
|
+
};
|
|
25
|
+
var getParentRank = function getParentRank(component, parentKey) {
|
|
26
|
+
var _component$parents$fi, _component$parents;
|
|
27
|
+
return (_component$parents$fi = (_component$parents = component.parents) === null || _component$parents === void 0 || (_component$parents = _component$parents.find(function (parent) {
|
|
28
|
+
return parent.key === parentKey;
|
|
29
|
+
})) === null || _component$parents === void 0 ? void 0 : _component$parents.rank) !== null && _component$parents$fi !== void 0 ? _component$parents$fi : Number.MAX_SAFE_INTEGER;
|
|
30
|
+
};
|
|
31
|
+
var compareMatchedItems = function compareMatchedItems(a, b) {
|
|
32
|
+
return a.sectionRank - b.sectionRank || a.score - b.score || a.itemRank - b.itemRank || a.sourceIndex - b.sourceIndex || a.identity.localeCompare(b.identity);
|
|
33
|
+
};
|
|
34
|
+
var compareSearchResults = function compareSearchResults(a, b) {
|
|
35
|
+
return a.score - b.score || a.sectionRank - b.sectionRank || a.itemRank - b.itemRank || a.sourceIndex - b.sourceIndex || a.identity.localeCompare(b.identity);
|
|
36
|
+
};
|
|
37
|
+
var comparePrioritizedSearchResults = function comparePrioritizedSearchResults(a, b) {
|
|
38
|
+
var _b$priorityGroup, _a$priorityGroup;
|
|
39
|
+
return ((_b$priorityGroup = b.priorityGroup) !== null && _b$priorityGroup !== void 0 ? _b$priorityGroup : 0) - ((_a$priorityGroup = a.priorityGroup) !== null && _a$priorityGroup !== void 0 ? _a$priorityGroup : 0) || compareSearchResults(a, b);
|
|
40
|
+
};
|
|
41
|
+
var getSearchResults = function getSearchResults(matches) {
|
|
42
|
+
var topMatches = Array.from(matches).sort(compareSearchResults).slice(0, SEARCH_TOP_MATCH_LIMIT);
|
|
43
|
+
var topMatchIdentities = new Set(topMatches.map(function (_ref) {
|
|
44
|
+
var identity = _ref.identity;
|
|
45
|
+
return identity;
|
|
46
|
+
}));
|
|
47
|
+
var tailMatches = matches.filter(function (_ref2) {
|
|
48
|
+
var identity = _ref2.identity;
|
|
49
|
+
return !topMatchIdentities.has(identity);
|
|
50
|
+
});
|
|
51
|
+
return [].concat(_toConsumableArray(topMatches), _toConsumableArray(tailMatches)).map(function (_ref3) {
|
|
52
|
+
var item = _ref3.item;
|
|
53
|
+
return item;
|
|
54
|
+
});
|
|
55
|
+
};
|
|
56
|
+
var getRenderedMenuItems = function getRenderedMenuItems(section, childrenMap, surfaceContext) {
|
|
57
|
+
var _childrenMap$get;
|
|
58
|
+
return ((_childrenMap$get = childrenMap.get(getComponentIdentity(section))) !== null && _childrenMap$get !== void 0 ? _childrenMap$get : []).filter(function (child) {
|
|
59
|
+
return child.type === 'menu-item' && willComponentRender(child, childrenMap, surfaceContext);
|
|
60
|
+
});
|
|
61
|
+
};
|
|
62
|
+
var buildBrowseSections = function buildBrowseSections(_ref4) {
|
|
63
|
+
var childrenMap = _ref4.childrenMap,
|
|
64
|
+
contentSections = _ref4.contentSections,
|
|
65
|
+
selectCategoryItems = _ref4.selectCategoryItems,
|
|
66
|
+
surfaceContext = _ref4.surfaceContext;
|
|
67
|
+
var sections = [];
|
|
68
|
+
var _iterator = _createForOfIteratorHelper(contentSections),
|
|
69
|
+
_step;
|
|
70
|
+
try {
|
|
71
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
72
|
+
var section = _step.value;
|
|
73
|
+
var children = getRenderedMenuItems(section, childrenMap, surfaceContext);
|
|
74
|
+
var overflowItems = children.filter(function (child) {
|
|
75
|
+
return isSectionOverflowItemKey(child.key);
|
|
76
|
+
});
|
|
77
|
+
var viewMoreItem = overflowItems[overflowItems.length - 1];
|
|
78
|
+
var items = children.filter(function (child) {
|
|
79
|
+
return !isSectionOverflowItemKey(child.key);
|
|
80
|
+
});
|
|
81
|
+
if (items.length === 0) {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
var selectedItems = viewMoreItem !== undefined && selectCategoryItems !== undefined ? selectCategoryItems(items) : items;
|
|
85
|
+
if (selectedItems.length < items.length && viewMoreItem !== undefined) {
|
|
86
|
+
sections.push([section].concat(_toConsumableArray(selectedItems), [viewMoreItem]));
|
|
87
|
+
} else {
|
|
88
|
+
sections.push([section].concat(_toConsumableArray(selectedItems)));
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
} catch (err) {
|
|
92
|
+
_iterator.e(err);
|
|
93
|
+
} finally {
|
|
94
|
+
_iterator.f();
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
fallbackItems: [],
|
|
98
|
+
sections: sections
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
var buildSearchSections = function buildSearchSections(_ref5) {
|
|
102
|
+
var childrenMap = _ref5.childrenMap,
|
|
103
|
+
components = _ref5.components,
|
|
104
|
+
contentSections = _ref5.contentSections,
|
|
105
|
+
formatMessage = _ref5.formatMessage,
|
|
106
|
+
query = _ref5.query,
|
|
107
|
+
root = _ref5.root,
|
|
108
|
+
surfaceContext = _ref5.surfaceContext;
|
|
109
|
+
var matches = new Map();
|
|
110
|
+
var sourceIndexByComponent = new Map(components.map(function (component, index) {
|
|
111
|
+
return [component, index];
|
|
112
|
+
}));
|
|
113
|
+
var _iterator2 = _createForOfIteratorHelper(contentSections),
|
|
114
|
+
_step2;
|
|
115
|
+
try {
|
|
116
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
117
|
+
var section = _step2.value;
|
|
118
|
+
var _iterator3 = _createForOfIteratorHelper(getRenderedMenuItems(section, childrenMap, surfaceContext)),
|
|
119
|
+
_step3;
|
|
120
|
+
try {
|
|
121
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
122
|
+
var _item$match, _match$score, _sourceIndexByCompone;
|
|
123
|
+
var item = _step3.value;
|
|
124
|
+
if (isSectionOverflowItemKey(item.key)) {
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
var match = (_item$match = item.match) === null || _item$match === void 0 ? void 0 : _item$match.call(item, {
|
|
128
|
+
formatMessage: formatMessage,
|
|
129
|
+
itemKey: item.key,
|
|
130
|
+
query: query
|
|
131
|
+
});
|
|
132
|
+
if (item.match && match === null) {
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
var candidate = {
|
|
136
|
+
identity: "".concat(item.type, ":").concat(item.key),
|
|
137
|
+
item: item,
|
|
138
|
+
itemRank: getParentRank(item, section.key),
|
|
139
|
+
priorityGroup: (match === null || match === void 0 ? void 0 : match.priorityGroup) !== undefined && Number.isFinite(match.priorityGroup) ? match.priorityGroup : undefined,
|
|
140
|
+
score: Math.min(1, Math.max(0, (_match$score = match === null || match === void 0 ? void 0 : match.score) !== null && _match$score !== void 0 ? _match$score : 0)),
|
|
141
|
+
sourceIndex: (_sourceIndexByCompone = sourceIndexByComponent.get(item)) !== null && _sourceIndexByCompone !== void 0 ? _sourceIndexByCompone : Number.MAX_SAFE_INTEGER,
|
|
142
|
+
sectionRank: getParentRank(section, root.key)
|
|
143
|
+
};
|
|
144
|
+
var existing = matches.get(candidate.identity);
|
|
145
|
+
if (!existing || compareMatchedItems(candidate, existing) < 0) {
|
|
146
|
+
matches.set(candidate.identity, candidate);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
} catch (err) {
|
|
150
|
+
_iterator3.e(err);
|
|
151
|
+
} finally {
|
|
152
|
+
_iterator3.f();
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
} catch (err) {
|
|
156
|
+
_iterator2.e(err);
|
|
157
|
+
} finally {
|
|
158
|
+
_iterator2.f();
|
|
159
|
+
}
|
|
160
|
+
var uniqueMatches = Array.from(matches.values()).sort(compareMatchedItems);
|
|
161
|
+
var prioritizedMatches = uniqueMatches.filter(function (_ref6) {
|
|
162
|
+
var priorityGroup = _ref6.priorityGroup;
|
|
163
|
+
return priorityGroup !== undefined;
|
|
164
|
+
});
|
|
165
|
+
var unprioritizedMatches = uniqueMatches.filter(function (_ref7) {
|
|
166
|
+
var priorityGroup = _ref7.priorityGroup;
|
|
167
|
+
return priorityGroup === undefined;
|
|
168
|
+
});
|
|
169
|
+
var orderedSearchResults = [].concat(_toConsumableArray(prioritizedMatches.sort(comparePrioritizedSearchResults).map(function (_ref8) {
|
|
170
|
+
var item = _ref8.item;
|
|
171
|
+
return item;
|
|
172
|
+
})), _toConsumableArray(getSearchResults(unprioritizedMatches)));
|
|
173
|
+
if (orderedSearchResults.length > 0) {
|
|
174
|
+
return {
|
|
175
|
+
fallbackItems: [],
|
|
176
|
+
sections: [[SEARCH_RESULTS_HEADING].concat(_toConsumableArray(orderedSearchResults))]
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
var fallbackItem = contentSections.flatMap(function (section) {
|
|
180
|
+
var _childrenMap$get2;
|
|
181
|
+
return (_childrenMap$get2 = childrenMap.get(getComponentIdentity(section))) !== null && _childrenMap$get2 !== void 0 ? _childrenMap$get2 : [];
|
|
182
|
+
}).find(function (component) {
|
|
183
|
+
return component.type === ASK_ROVO_MENU_ITEM.type && component.key === ASK_ROVO_MENU_ITEM.key && willComponentRender(component, childrenMap, surfaceContext);
|
|
184
|
+
});
|
|
185
|
+
return {
|
|
186
|
+
fallbackItems: fallbackItem ? [fallbackItem] : [],
|
|
187
|
+
sections: []
|
|
188
|
+
};
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Builds the registered quick-insert menu model. An empty query browses every
|
|
193
|
+
* category; a non-empty query returns ranked matches. The footer is shared by both.
|
|
194
|
+
*/
|
|
195
|
+
export var getQuickInsertMenuModel = function getQuickInsertMenuModel(_ref9) {
|
|
196
|
+
var components = _ref9.components,
|
|
197
|
+
formatMessage = _ref9.formatMessage,
|
|
198
|
+
getItemRank = _ref9.getItemRank,
|
|
199
|
+
query = _ref9.query,
|
|
200
|
+
rootComponent = _ref9.rootComponent,
|
|
201
|
+
selectCategoryItems = _ref9.selectCategoryItems,
|
|
202
|
+
surfaceContext = _ref9.surfaceContext;
|
|
203
|
+
var rankedComponents = applyRegisteredItemRanks(components, getItemRank);
|
|
204
|
+
var _resolveSurface = resolveSurface(rankedComponents, rootComponent),
|
|
205
|
+
childrenMap = _resolveSurface.childrenMap,
|
|
206
|
+
root = _resolveSurface.root,
|
|
207
|
+
_resolveSurface$topLe = _resolveSurface.topLevelChildren,
|
|
208
|
+
topLevelChildren = _resolveSurface$topLe === void 0 ? [] : _resolveSurface$topLe;
|
|
209
|
+
if (!root || !willComponentRender(root, childrenMap, surfaceContext)) {
|
|
210
|
+
return {
|
|
211
|
+
fallbackItems: [],
|
|
212
|
+
footer: undefined,
|
|
213
|
+
root: undefined,
|
|
214
|
+
sections: []
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
var renderedSections = topLevelChildren.filter(function (section) {
|
|
218
|
+
return section.type === 'menu-section' && willComponentRender(section, childrenMap, surfaceContext);
|
|
219
|
+
});
|
|
220
|
+
var footerSection = renderedSections.find(function (_ref0) {
|
|
221
|
+
var key = _ref0.key;
|
|
222
|
+
return isMenuFooterSectionKey(key);
|
|
223
|
+
});
|
|
224
|
+
var contentSections = renderedSections.filter(function (_ref1) {
|
|
225
|
+
var key = _ref1.key;
|
|
226
|
+
return !isMenuFooterSectionKey(key);
|
|
227
|
+
});
|
|
228
|
+
var content = query === '' ? buildBrowseSections({
|
|
229
|
+
childrenMap: childrenMap,
|
|
230
|
+
contentSections: contentSections,
|
|
231
|
+
selectCategoryItems: selectCategoryItems,
|
|
232
|
+
surfaceContext: surfaceContext
|
|
233
|
+
}) : buildSearchSections({
|
|
234
|
+
childrenMap: childrenMap,
|
|
235
|
+
components: rankedComponents,
|
|
236
|
+
contentSections: contentSections,
|
|
237
|
+
formatMessage: formatMessage,
|
|
238
|
+
query: query,
|
|
239
|
+
root: root,
|
|
240
|
+
surfaceContext: surfaceContext
|
|
241
|
+
});
|
|
242
|
+
var footer = footerSection ? getRenderedMenuItems(footerSection, childrenMap, surfaceContext)[0] : undefined;
|
|
243
|
+
return _objectSpread(_objectSpread({}, content), {}, {
|
|
244
|
+
footer: footer,
|
|
245
|
+
root: root
|
|
246
|
+
});
|
|
247
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { quickInsertProviderMenuItemKey } from '@atlaskit/editor-common/quick-insert/get-provider-menu-item-key';
|
|
2
|
+
var DEFAULT_ITEM_LIMIT = 30;
|
|
3
|
+
var ECOSYSTEM_ITEM_LIMIT = 10;
|
|
4
|
+
var isEcosystemQuickInsertItem = function isEcosystemQuickInsertItem(item) {
|
|
5
|
+
return quickInsertProviderMenuItemKey.isEcosystem(item.key);
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Keeps the initial native and ecosystem results while ensuring ecosystem registrations
|
|
10
|
+
* remain discoverable beyond the default category item limit.
|
|
11
|
+
*/
|
|
12
|
+
export var selectQuickInsertCategoryItems = function selectQuickInsertCategoryItems(items) {
|
|
13
|
+
var ecosystemItemCount = 0;
|
|
14
|
+
return items.filter(function (item, index) {
|
|
15
|
+
var isEcosystemItem = isEcosystemQuickInsertItem(item);
|
|
16
|
+
if (isEcosystemItem) {
|
|
17
|
+
ecosystemItemCount++;
|
|
18
|
+
}
|
|
19
|
+
return index < DEFAULT_ITEM_LIMIT || isEcosystemItem && ecosystemItemCount <= ECOSYSTEM_ITEM_LIMIT;
|
|
20
|
+
});
|
|
21
|
+
};
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
3
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
4
|
+
import { useCallback, useEffect, useRef } from 'react';
|
|
5
|
+
import { ACTION, ACTION_SUBJECT, EVENT_TYPE } from '@atlaskit/editor-common/analytics/types/enums';
|
|
6
|
+
var SEARCH_DEBOUNCE_MS = 1000;
|
|
7
|
+
export var useQuickInsertSearchAnalytics = function useQuickInsertSearchAnalytics(_ref) {
|
|
8
|
+
var query = _ref.query,
|
|
9
|
+
resultCount = _ref.resultCount,
|
|
10
|
+
surface = _ref.surface,
|
|
11
|
+
category = _ref.category,
|
|
12
|
+
_ref$isOpen = _ref.isOpen,
|
|
13
|
+
isOpen = _ref$isOpen === void 0 ? true : _ref$isOpen,
|
|
14
|
+
fireAnalyticsEvent = _ref.fireAnalyticsEvent;
|
|
15
|
+
var latestOptions = useRef({
|
|
16
|
+
query: query,
|
|
17
|
+
resultCount: resultCount,
|
|
18
|
+
surface: surface,
|
|
19
|
+
category: category,
|
|
20
|
+
fireAnalyticsEvent: fireAnalyticsEvent
|
|
21
|
+
});
|
|
22
|
+
latestOptions.current = {
|
|
23
|
+
query: query,
|
|
24
|
+
resultCount: resultCount,
|
|
25
|
+
surface: surface,
|
|
26
|
+
category: category,
|
|
27
|
+
fireAnalyticsEvent: fireAnalyticsEvent
|
|
28
|
+
};
|
|
29
|
+
var pendingSearch = useRef(null);
|
|
30
|
+
var effectVersion = useRef(0);
|
|
31
|
+
var flush = useCallback(function () {
|
|
32
|
+
var pending = pendingSearch.current;
|
|
33
|
+
if (!pending) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
clearTimeout(pending.timer);
|
|
37
|
+
pendingSearch.current = null;
|
|
38
|
+
var current = latestOptions.current;
|
|
39
|
+
if (current.query.trim() !== pending.query || !current.fireAnalyticsEvent) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
var attributes = _objectSpread(_objectSpread({}, current.surface === 'element-browser' && current.category !== undefined ? {
|
|
43
|
+
category: current.category
|
|
44
|
+
} : {}), {}, {
|
|
45
|
+
isEmpty: current.resultCount === 0,
|
|
46
|
+
queryLength: current.query.trim().length,
|
|
47
|
+
resultCount: current.resultCount,
|
|
48
|
+
surface: current.surface
|
|
49
|
+
});
|
|
50
|
+
var payload = {
|
|
51
|
+
action: ACTION.SEARCHED,
|
|
52
|
+
actionSubject: ACTION_SUBJECT.QUICK_INSERT,
|
|
53
|
+
eventType: EVENT_TYPE.TRACK,
|
|
54
|
+
attributes: attributes
|
|
55
|
+
};
|
|
56
|
+
current.fireAnalyticsEvent(payload);
|
|
57
|
+
}, []);
|
|
58
|
+
useEffect(function () {
|
|
59
|
+
var currentVersion = ++effectVersion.current;
|
|
60
|
+
if (!isOpen) {
|
|
61
|
+
flush();
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
var trimmedQuery = query.trim();
|
|
65
|
+
if (!trimmedQuery) {
|
|
66
|
+
if (pendingSearch.current) {
|
|
67
|
+
clearTimeout(pendingSearch.current.timer);
|
|
68
|
+
pendingSearch.current = null;
|
|
69
|
+
}
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (pendingSearch.current) {
|
|
73
|
+
clearTimeout(pendingSearch.current.timer);
|
|
74
|
+
}
|
|
75
|
+
var timer = setTimeout(flush, SEARCH_DEBOUNCE_MS);
|
|
76
|
+
pendingSearch.current = {
|
|
77
|
+
query: trimmedQuery,
|
|
78
|
+
timer: timer
|
|
79
|
+
};
|
|
80
|
+
return function () {
|
|
81
|
+
if (pendingSearch.current) {
|
|
82
|
+
clearTimeout(pendingSearch.current.timer);
|
|
83
|
+
}
|
|
84
|
+
Promise.resolve().then(function () {
|
|
85
|
+
// oxlint-disable-next-line react-hooks/exhaustive-deps -- The live effect version distinguishes dependency cleanup from a real unmount.
|
|
86
|
+
if (effectVersion.current === currentVersion) {
|
|
87
|
+
flush();
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
};
|
|
91
|
+
}, [query, surface, category, isOpen, flush]);
|
|
92
|
+
return flush;
|
|
93
|
+
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { INPUT_METHOD } from '@atlaskit/editor-common/analytics/types/enums';
|
|
2
2
|
import type { QuickInsertItem } from '@atlaskit/editor-common/provider-factory/quick-insert-provider';
|
|
3
3
|
import type { IsRecommendedItem } from '@atlaskit/editor-common/quick-insert/is-recommended-item';
|
|
4
|
-
import type { RegisteredItemRankResolver } from '@atlaskit/editor-common/
|
|
4
|
+
import type { RegisteredItemRankResolver } from '@atlaskit/editor-common/registered-menu/item-rank';
|
|
5
5
|
import type { Command } from '@atlaskit/editor-common/types/command';
|
|
6
6
|
import type { EditorCommand } from '@atlaskit/editor-common/types/editor-command';
|
|
7
7
|
import type { NextEditorPlugin, OptionalPlugin } from '@atlaskit/editor-common/types/next-editor-plugin';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import type { RegisterMenuItem, SurfaceContext } from '@atlaskit/editor-ui-control-model/types';
|
|
3
|
-
type Props =
|
|
2
|
+
import type { CommonComponentProps, RegisterMenuItem, SurfaceContext } from '@atlaskit/editor-ui-control-model/types';
|
|
3
|
+
type Props = CommonComponentProps & {
|
|
4
4
|
getSnapshot: (surfaceContext?: SurfaceContext) => RegisterMenuItem[];
|
|
5
5
|
index: number;
|
|
6
6
|
};
|
|
7
|
-
export declare const QuickInsertRecommendedSlot: ({ index, getSnapshot,
|
|
7
|
+
export declare const QuickInsertRecommendedSlot: ({ children, parents, surfaceContext, index, getSnapshot, }: Props) => React.ReactNode;
|
|
8
8
|
export {};
|
|
@@ -6,6 +6,7 @@ import React from 'react';
|
|
|
6
6
|
import type { QuickInsertSelectionHandler } from '@atlaskit/editor-common/quick-insert/context';
|
|
7
7
|
import type { EmptyStateHandler } from '@atlaskit/editor-common/types/empty-state-handler';
|
|
8
8
|
import type { EditorView } from '@atlaskit/editor-prosemirror/view';
|
|
9
|
+
import type { SurfaceContext } from '@atlaskit/editor-ui-control-model/types';
|
|
9
10
|
import type { RegistryElementBrowserItem } from './model';
|
|
10
11
|
type Props = {
|
|
11
12
|
editorView: EditorView;
|
|
@@ -20,13 +21,15 @@ type Props = {
|
|
|
20
21
|
resultsId: string;
|
|
21
22
|
section?: string;
|
|
22
23
|
selectedKey?: string;
|
|
24
|
+
surfaceContext: SurfaceContext;
|
|
23
25
|
};
|
|
24
|
-
declare const RegistryElementBrowserItem: ({ editorView, isOffline, isSelected, item, onSelect, }: {
|
|
26
|
+
declare const RegistryElementBrowserItem: ({ editorView, isOffline, isSelected, item, onSelect, surfaceContext, }: {
|
|
25
27
|
editorView: EditorView;
|
|
26
28
|
isOffline: boolean;
|
|
27
29
|
isSelected: boolean;
|
|
28
30
|
item: RegistryElementBrowserItem;
|
|
29
31
|
onSelect: (key: string, handler: QuickInsertSelectionHandler) => void;
|
|
32
|
+
surfaceContext: SurfaceContext;
|
|
30
33
|
}) => React.JSX.Element | null;
|
|
31
|
-
export declare const RegistryElementBrowserSearchResults: ({ editorView, emptyStateHandler, fallbackItems, isLoading, isOffline, items, query, resultsId, section, selectedKey, onKeyDown, onSelect, }: Props) => React.JSX.Element;
|
|
34
|
+
export declare const RegistryElementBrowserSearchResults: ({ editorView, emptyStateHandler, fallbackItems, isLoading, isOffline, items, query, resultsId, section, selectedKey, surfaceContext, onKeyDown, onSelect, }: Props) => React.JSX.Element;
|
|
32
35
|
export {};
|