@atlaskit/editor-core 239.0.3 → 240.0.0
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/composable-editor/hooks/useMemoEditorProps.js +1 -3
- package/dist/cjs/ui/Appearance/FullPage/FullPageContentArea.js +3 -9
- package/dist/cjs/ui/quick-insert/ExtensionQuickInsertMenuItem.js +22 -2
- package/dist/cjs/ui/quick-insert/app-vendor/AppVendorRequestError.js +31 -0
- package/dist/cjs/ui/quick-insert/app-vendor/appVendorCache.js +14 -0
- package/dist/cjs/ui/quick-insert/app-vendor/fetchAppVendors.js +112 -0
- package/dist/cjs/ui/quick-insert/app-vendor/fetchAppVendorsInBatches.js +101 -0
- package/dist/cjs/ui/quick-insert/app-vendor/getAppVendorLookup.js +33 -0
- package/dist/cjs/ui/quick-insert/app-vendor/prefetchAppVendors.js +129 -0
- package/dist/cjs/ui/quick-insert/app-vendor/useAppVendorName.js +26 -0
- package/dist/cjs/ui/quick-insert/getExtensionQuickInsertComponents.js +13 -2
- package/dist/cjs/version-wrapper.js +1 -1
- package/dist/es2019/composable-editor/hooks/useMemoEditorProps.js +1 -3
- package/dist/es2019/ui/Appearance/FullPage/FullPageContentArea.js +3 -9
- package/dist/es2019/ui/quick-insert/ExtensionQuickInsertMenuItem.js +20 -3
- package/dist/es2019/ui/quick-insert/app-vendor/AppVendorRequestError.js +11 -0
- package/dist/es2019/ui/quick-insert/app-vendor/appVendorCache.js +8 -0
- package/dist/es2019/ui/quick-insert/app-vendor/fetchAppVendors.js +69 -0
- package/dist/es2019/ui/quick-insert/app-vendor/fetchAppVendorsInBatches.js +51 -0
- package/dist/es2019/ui/quick-insert/app-vendor/getAppVendorLookup.js +28 -0
- package/dist/es2019/ui/quick-insert/app-vendor/prefetchAppVendors.js +109 -0
- package/dist/es2019/ui/quick-insert/app-vendor/useAppVendorName.js +18 -0
- package/dist/es2019/ui/quick-insert/getExtensionQuickInsertComponents.js +17 -10
- package/dist/es2019/version-wrapper.js +1 -1
- package/dist/esm/composable-editor/hooks/useMemoEditorProps.js +1 -3
- package/dist/esm/ui/Appearance/FullPage/FullPageContentArea.js +3 -9
- package/dist/esm/ui/quick-insert/ExtensionQuickInsertMenuItem.js +22 -3
- package/dist/esm/ui/quick-insert/app-vendor/AppVendorRequestError.js +24 -0
- package/dist/esm/ui/quick-insert/app-vendor/appVendorCache.js +8 -0
- package/dist/esm/ui/quick-insert/app-vendor/fetchAppVendors.js +105 -0
- package/dist/esm/ui/quick-insert/app-vendor/fetchAppVendorsInBatches.js +94 -0
- package/dist/esm/ui/quick-insert/app-vendor/getAppVendorLookup.js +27 -0
- package/dist/esm/ui/quick-insert/app-vendor/prefetchAppVendors.js +119 -0
- package/dist/esm/ui/quick-insert/app-vendor/useAppVendorName.js +20 -0
- package/dist/esm/ui/quick-insert/getExtensionQuickInsertComponents.js +13 -2
- package/dist/esm/version-wrapper.js +1 -1
- package/dist/types/editor-appearances/ChromelessEditor.d.ts +1 -1
- package/dist/types/editor-appearances/CommentEditor.d.ts +1 -1
- package/dist/types/editor-appearances/FullPageEditor.d.ts +1 -1
- package/dist/types/editor-appearances/FullWidthEditor.d.ts +1 -1
- package/dist/types/types/editor-props.d.ts +1 -13
- package/dist/types/ui/quick-insert/ExtensionQuickInsertMenuItem.d.ts +3 -1
- package/dist/types/ui/quick-insert/app-vendor/AppVendorRequestError.d.ts +5 -0
- package/dist/types/ui/quick-insert/app-vendor/appVendorCache.d.ts +17 -0
- package/dist/types/ui/quick-insert/app-vendor/fetchAppVendors.d.ts +8 -0
- package/dist/types/ui/quick-insert/app-vendor/fetchAppVendorsInBatches.d.ts +23 -0
- package/dist/types/ui/quick-insert/app-vendor/getAppVendorLookup.d.ts +11 -0
- package/dist/types/ui/quick-insert/app-vendor/prefetchAppVendors.d.ts +7 -0
- package/dist/types/ui/quick-insert/app-vendor/useAppVendorName.d.ts +2 -0
- package/package.json +10 -10
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# @atlaskit/editor-core
|
|
2
2
|
|
|
3
|
+
## 240.0.0
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- [`c02fec2c86f55`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/c02fec2c86f55) -
|
|
8
|
+
Remove deprecated `inputSamplingLimit` and `performanceTracking` editor props. They had no effect;
|
|
9
|
+
remove them from any `Editor` / `ComposableEditor` usages.
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- [`5157e2c52cfcd`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/5157e2c52cfcd) -
|
|
14
|
+
Update i18n NPM package versions for editor,editor-extensions,activity-platform,media,elements
|
|
15
|
+
(Group 3)
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- [`99e14378c613c`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/99e14378c613c) -
|
|
20
|
+
Clean up platform_editor_blocks and retain enabled scroll gutter behavior.
|
|
21
|
+
- [`cf2946633c12a`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/cf2946633c12a) -
|
|
22
|
+
Show the Marketplace vendor as a "By {vendor}" byline in quick insert previews for Connect and
|
|
23
|
+
Forge apps under the platform_editor_slash_command experiment. Vendor names are fetched from a
|
|
24
|
+
lazily loaded chunk when the first extension row is shown.
|
|
25
|
+
- Updated dependencies
|
|
26
|
+
|
|
3
27
|
## 239.0.3
|
|
4
28
|
|
|
5
29
|
### Patch Changes
|
|
@@ -51,8 +51,6 @@ var useMemoEditorProps = exports.useMemoEditorProps = function useMemoEditorProp
|
|
|
51
51
|
media: passedProps.media,
|
|
52
52
|
collabEdit: passedProps.collabEdit,
|
|
53
53
|
primaryToolbarComponents: passedProps.primaryToolbarComponents,
|
|
54
|
-
performanceTracking: passedProps.performanceTracking,
|
|
55
|
-
inputSamplingLimit: passedProps.inputSamplingLimit,
|
|
56
54
|
allowUndoRedoButtons: passedProps.allowUndoRedoButtons,
|
|
57
55
|
linking: passedProps.linking,
|
|
58
56
|
activityProvider: passedProps.activityProvider,
|
|
@@ -121,7 +119,7 @@ var useMemoEditorProps = exports.useMemoEditorProps = function useMemoEditorProp
|
|
|
121
119
|
};
|
|
122
120
|
var nextProps = _objectSpread(_objectSpread({}, defaultProps), allProps);
|
|
123
121
|
return nextProps;
|
|
124
|
-
}, [passedProps.preset, passedProps.appearance, passedProps.contentMode, passedProps.contentComponents, passedProps.primaryToolbarIconBefore, passedProps.secondaryToolbarComponents, passedProps.persistScrollGutter, passedProps.quickInsert, passedProps.shouldFocus, passedProps.disabled, passedProps.contextPanel, passedProps.errorReporterHandler, passedProps.contentTransformerProvider, passedProps.maxHeight, passedProps.minHeight, passedProps.placeholder, passedProps.placeholderBracketHint, passedProps.
|
|
122
|
+
}, [passedProps.preset, passedProps.appearance, passedProps.contentMode, passedProps.contentComponents, passedProps.primaryToolbarIconBefore, passedProps.secondaryToolbarComponents, passedProps.persistScrollGutter, passedProps.quickInsert, passedProps.shouldFocus, passedProps.disabled, passedProps.contextPanel, passedProps.errorReporterHandler, passedProps.contentTransformerProvider, passedProps.maxHeight, passedProps.minHeight, passedProps.placeholder, passedProps.placeholderBracketHint, passedProps.defaultValue, passedProps.assistiveLabel, passedProps.assistiveDescribedBy, passedProps.popupsMountPoint, passedProps.popupsBoundariesElement, passedProps.popupsScrollableElement, passedProps.editorActions, passedProps.onEditorReady, passedProps.onDestroy, passedProps.onChange, passedProps.onCancel, passedProps.onSSRMeasure, passedProps.extensionProviders, passedProps.UNSAFE_useAnalyticsContext, passedProps.useStickyToolbar, passedProps.isEditorModernisationEnabled, passedProps.featureFlags, passedProps.onSave, passedProps.sanitizePrivateContent, passedProps.media, passedProps.collabEdit, passedProps.primaryToolbarComponents, passedProps.allowUndoRedoButtons, passedProps.linking, passedProps.activityProvider, passedProps.searchProvider, passedProps.annotationProviders, passedProps.collabEditProvider, passedProps.presenceProvider, passedProps.emojiProvider, passedProps.taskDecisionProvider, passedProps.legacyImageUploadProvider, passedProps.mentionProvider, passedProps.autoformattingProvider, passedProps.macroProvider, passedProps.contextIdentifierProvider, passedProps.allowExpand, passedProps.allowNestedTasks, passedProps.allowBlockType, passedProps.allowTasksAndDecisions, passedProps.allowBreakout, passedProps.allowRule, passedProps.allowHelpDialog, passedProps.allowPanel, passedProps.allowExtension, passedProps.allowConfluenceInlineComment, passedProps.allowTemplatePlaceholders, passedProps.allowDate, passedProps.allowLayouts, passedProps.allowStatus, passedProps.allowTextAlignment, passedProps.allowIndentation, passedProps.showIndentationButtons, passedProps.allowFindReplace, passedProps.allowBorderMark, passedProps.allowFragmentMark, passedProps.autoScrollIntoView, passedProps.elementBrowser, passedProps.maxContentSize, passedProps.saveOnEnter, passedProps.feedbackInfo, passedProps.mention, passedProps.mentionInsertDisplayName, passedProps.uploadErrorHandler, passedProps.waitForMediaUpload, passedProps.extensionHandlers, passedProps.allowTextColor, passedProps.allowTables, passedProps.insertMenuItems, passedProps.UNSAFE_cards, passedProps.smartLinks, passedProps.allowAnalyticsGASV3, passedProps.codeBlock, passedProps.textFormatting, passedProps.__livePage, passedProps.AppearanceComponent, passedProps.skipValidation, passedProps.syncBlock, passedProps.syncedBlockProvider, passedProps.pasteWarningOptions, passedProps.UNSAFE_containLayout]);
|
|
125
123
|
return memodProps;
|
|
126
124
|
};
|
|
127
125
|
|
|
@@ -60,7 +60,7 @@ var compiledStyles = {
|
|
|
60
60
|
var CONTENT_AREA_TEST_ID = exports.CONTENT_AREA_TEST_ID = 'ak-editor-fp-content-area';
|
|
61
61
|
var EDITOR_CONTAINER = 'ak-editor-container';
|
|
62
62
|
var Content = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
63
|
-
var _props$editorAPI, _props$editorAPI$bloc, _props$editorAPI2, _contentAreaRef$curre, _allowScrollGutter$gu
|
|
63
|
+
var _props$editorAPI, _props$editorAPI$bloc, _props$editorAPI2, _contentAreaRef$curre, _allowScrollGutter$gu;
|
|
64
64
|
var fullWidthMode = props.appearance === 'full-width';
|
|
65
65
|
var maxWidthMode = props.appearance === 'max';
|
|
66
66
|
var scrollContainerRef = (0, _react.useRef)(null);
|
|
@@ -138,20 +138,14 @@ var Content = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
138
138
|
containerElement: scrollContainerRef.current,
|
|
139
139
|
dispatchAnalyticsEvent: props.dispatchAnalyticsEvent,
|
|
140
140
|
wrapperElement: props.wrapperElement
|
|
141
|
-
}), props.editorDOMElement, !!props.customContentComponents && 'after' in props.customContentComponents ? (0, _contentComponentWrapper.contentComponentClickWrapper)(props.customContentComponents.after) : null, allowScrollGutter &&
|
|
141
|
+
}), props.editorDOMElement, !!props.customContentComponents && 'after' in props.customContentComponents ? (0, _contentComponentWrapper.contentComponentClickWrapper)(props.customContentComponents.after) : null, allowScrollGutter && /*#__PURE__*/_react.default.createElement("div", {
|
|
142
142
|
id: "editor-scroll-gutter",
|
|
143
143
|
style: {
|
|
144
144
|
paddingBottom: "".concat((_allowScrollGutter$gu = allowScrollGutter.gutterSize) !== null && _allowScrollGutter$gu !== void 0 ? _allowScrollGutter$gu : '120', "px")
|
|
145
145
|
},
|
|
146
146
|
"data-vc": "scroll-gutter",
|
|
147
147
|
"data-editor-scroll-gutter": "true"
|
|
148
|
-
})
|
|
149
|
-
id: "editor-scroll-gutter",
|
|
150
|
-
style: {
|
|
151
|
-
paddingBottom: "".concat((_allowScrollGutter$gu2 = allowScrollGutter.gutterSize) !== null && _allowScrollGutter$gu2 !== void 0 ? _allowScrollGutter$gu2 : '120', "px")
|
|
152
|
-
},
|
|
153
|
-
"data-vc": "scroll-gutter"
|
|
154
|
-
}))))));
|
|
148
|
+
})))));
|
|
155
149
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
156
150
|
"data-testid": CONTENT_AREA_TEST_ID,
|
|
157
151
|
ref: containerRef,
|
|
@@ -1,25 +1,45 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
3
4
|
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
4
5
|
Object.defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
8
|
exports.ExtensionQuickInsertMenuItem = void 0;
|
|
9
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
8
10
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
11
|
var _menuItem = require("@atlaskit/editor-common/quick-insert/menu-item");
|
|
10
12
|
var _useQuickInsertContext = require("@atlaskit/editor-common/quick-insert/use-quick-insert-context");
|
|
13
|
+
var _getAppVendorLookup2 = require("./app-vendor/getAppVendorLookup");
|
|
14
|
+
var _useAppVendorName = require("./app-vendor/useAppVendorName");
|
|
11
15
|
var _executeExtensionQuickInsertItem = require("./executeExtensionQuickInsertItem");
|
|
12
16
|
var _ExtensionQuickInsertIcon = require("./ExtensionQuickInsertIcon");
|
|
13
17
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
18
|
+
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; }
|
|
19
|
+
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) { (0, _defineProperty2.default)(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; }
|
|
14
20
|
var ExtensionQuickInsertMenuItem = exports.ExtensionQuickInsertMenuItem = function ExtensionQuickInsertMenuItem(_ref) {
|
|
21
|
+
var _getAppVendorLookup;
|
|
15
22
|
var apiRef = _ref.apiRef,
|
|
16
23
|
createAnalyticsEvent = _ref.createAnalyticsEvent,
|
|
17
24
|
editorActions = _ref.editorActions,
|
|
18
25
|
item = _ref.item,
|
|
19
|
-
onInsert = _ref.onInsert
|
|
26
|
+
onInsert = _ref.onInsert,
|
|
27
|
+
prefetchVendors = _ref.prefetchVendors;
|
|
20
28
|
var _useQuickInsertContex = (0, _useQuickInsertContext.useQuickInsertContext)(),
|
|
21
29
|
editorView = _useQuickInsertContex.editorView,
|
|
22
30
|
isOffline = _useQuickInsertContex.isOffline;
|
|
31
|
+
var vendorName = (0, _useAppVendorName.useAppVendorName)((_getAppVendorLookup = (0, _getAppVendorLookup2.getAppVendorLookup)(item)) === null || _getAppVendorLookup === void 0 ? void 0 : _getAppVendorLookup.id);
|
|
32
|
+
(0, _react.useEffect)(function () {
|
|
33
|
+
prefetchVendors === null || prefetchVendors === void 0 || prefetchVendors();
|
|
34
|
+
}, [prefetchVendors]);
|
|
35
|
+
var preview = (0, _react.useMemo)(function () {
|
|
36
|
+
var _item$preview;
|
|
37
|
+
return vendorName && !((_item$preview = item.preview) !== null && _item$preview !== void 0 && _item$preview.attribution) ? _objectSpread(_objectSpread({}, item.preview), {}, {
|
|
38
|
+
attribution: {
|
|
39
|
+
name: vendorName
|
|
40
|
+
}
|
|
41
|
+
}) : item.preview;
|
|
42
|
+
}, [item.preview, vendorName]);
|
|
23
43
|
var onSelect = (0, _react.useCallback)(function (_ref2) {
|
|
24
44
|
var insert = _ref2.insert,
|
|
25
45
|
source = _ref2.source;
|
|
@@ -46,7 +66,7 @@ var ExtensionQuickInsertMenuItem = exports.ExtensionQuickInsertMenuItem = functi
|
|
|
46
66
|
isDisabled: isOffline,
|
|
47
67
|
lozenge: item.lozenge,
|
|
48
68
|
onSelect: onSelect,
|
|
49
|
-
preview:
|
|
69
|
+
preview: preview,
|
|
50
70
|
description: item.description,
|
|
51
71
|
title: item.title
|
|
52
72
|
});
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.AppVendorRequestError = void 0;
|
|
8
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
9
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
10
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
11
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
12
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
13
|
+
var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper"));
|
|
14
|
+
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
|
|
15
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
16
|
+
/** Statuses where retrying cannot succeed, or would add load to a throttled gateway. */
|
|
17
|
+
var BLOCKING_STATUSES = new Set([401, 403, 429]);
|
|
18
|
+
var AppVendorRequestError = exports.AppVendorRequestError = /*#__PURE__*/function (_Error) {
|
|
19
|
+
/** Whether every remaining lookup should stop rather than retry. */
|
|
20
|
+
|
|
21
|
+
function AppVendorRequestError(message, status) {
|
|
22
|
+
var _this;
|
|
23
|
+
(0, _classCallCheck2.default)(this, AppVendorRequestError);
|
|
24
|
+
_this = _callSuper(this, AppVendorRequestError, [message]);
|
|
25
|
+
_this.name = 'AppVendorRequestError';
|
|
26
|
+
_this.isBlocking = status !== undefined && BLOCKING_STATUSES.has(status);
|
|
27
|
+
return _this;
|
|
28
|
+
}
|
|
29
|
+
(0, _inherits2.default)(AppVendorRequestError, _Error);
|
|
30
|
+
return (0, _createClass2.default)(AppVendorRequestError);
|
|
31
|
+
}( /*#__PURE__*/(0, _wrapNativeSuper2.default)(Error));
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.appVendorCache = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Vendor names keyed by lookup id, plus the subscribers to notify when they change.
|
|
9
|
+
* Module scope so names survive editor and provider rebuilds for the rest of the page load.
|
|
10
|
+
*/
|
|
11
|
+
var appVendorCache = exports.appVendorCache = {
|
|
12
|
+
entries: new Map(),
|
|
13
|
+
listeners: new Set()
|
|
14
|
+
};
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.fetchAppVendors = void 0;
|
|
8
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
10
|
+
var _AppVendorRequestError = require("./AppVendorRequestError");
|
|
11
|
+
var AGG_PATH = '/gateway/api/graphql';
|
|
12
|
+
var OPERATION_NAME = 'QuickInsertAppVendorsQuery';
|
|
13
|
+
var getField = function getField(_ref, variable) {
|
|
14
|
+
var kind = _ref.kind;
|
|
15
|
+
return kind === 'forge' ? "marketplaceAppByCloudAppId(cloudAppId: $".concat(variable, ")") : "marketplaceAppByKey(appKey: $".concat(variable, ")");
|
|
16
|
+
};
|
|
17
|
+
var getVariableType = function getVariableType(_ref2) {
|
|
18
|
+
var kind = _ref2.kind;
|
|
19
|
+
return kind === 'forge' ? 'ID!' : 'String!';
|
|
20
|
+
};
|
|
21
|
+
var buildQuery = function buildQuery(lookups) {
|
|
22
|
+
var variables = lookups.map(function (lookup, index) {
|
|
23
|
+
return "$a".concat(index, ": ").concat(getVariableType(lookup));
|
|
24
|
+
});
|
|
25
|
+
var fields = lookups.map(function (lookup, index) {
|
|
26
|
+
return "a".concat(index, ": ").concat(getField(lookup, "a".concat(index)), " { partner { name } }");
|
|
27
|
+
});
|
|
28
|
+
return "query ".concat(OPERATION_NAME, "(").concat(variables.join(', '), ") { ").concat(fields.join(' '), " }");
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/** A request that never settles would otherwise leave its lookups pending for the page load. */
|
|
32
|
+
var REQUEST_TIMEOUT_MS = 10000;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Fetches Marketplace partner names for at most one batch of lookups.
|
|
36
|
+
* Resolves `null` for apps without a listed partner and omits lookups whose field errored, so they
|
|
37
|
+
* can be retried; rejects with `AppVendorRequestError` when the request itself fails, or with an
|
|
38
|
+
* `AbortError` when it takes longer than `REQUEST_TIMEOUT_MS`.
|
|
39
|
+
*/
|
|
40
|
+
var fetchAppVendors = exports.fetchAppVendors = /*#__PURE__*/function () {
|
|
41
|
+
var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(lookups) {
|
|
42
|
+
var controller, timeout, response, _yield$response$json, data, errors, erroredAliases;
|
|
43
|
+
return _regenerator.default.wrap(function (_context) {
|
|
44
|
+
while (1) switch (_context.prev = _context.next) {
|
|
45
|
+
case 0:
|
|
46
|
+
controller = new AbortController();
|
|
47
|
+
timeout = setTimeout(function () {
|
|
48
|
+
return controller.abort();
|
|
49
|
+
}, REQUEST_TIMEOUT_MS);
|
|
50
|
+
_context.prev = 1;
|
|
51
|
+
_context.next = 2;
|
|
52
|
+
return fetch(AGG_PATH, {
|
|
53
|
+
method: 'POST',
|
|
54
|
+
headers: {
|
|
55
|
+
'Content-Type': 'application/json'
|
|
56
|
+
},
|
|
57
|
+
body: JSON.stringify({
|
|
58
|
+
operationName: OPERATION_NAME,
|
|
59
|
+
query: buildQuery(lookups),
|
|
60
|
+
variables: Object.fromEntries(lookups.map(function (_ref4, index) {
|
|
61
|
+
var value = _ref4.value;
|
|
62
|
+
return ["a".concat(index), value];
|
|
63
|
+
}))
|
|
64
|
+
}),
|
|
65
|
+
// Also aborts reading the body, so a slow response cannot hang either.
|
|
66
|
+
signal: controller.signal
|
|
67
|
+
});
|
|
68
|
+
case 2:
|
|
69
|
+
response = _context.sent;
|
|
70
|
+
if (response.ok) {
|
|
71
|
+
_context.next = 3;
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
throw new _AppVendorRequestError.AppVendorRequestError("App vendor request failed: ".concat(response.status), response.status);
|
|
75
|
+
case 3:
|
|
76
|
+
_context.next = 4;
|
|
77
|
+
return response.json();
|
|
78
|
+
case 4:
|
|
79
|
+
_yield$response$json = _context.sent;
|
|
80
|
+
data = _yield$response$json.data;
|
|
81
|
+
errors = _yield$response$json.errors;
|
|
82
|
+
if (data) {
|
|
83
|
+
_context.next = 5;
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
throw new _AppVendorRequestError.AppVendorRequestError('App vendor request returned no data');
|
|
87
|
+
case 5:
|
|
88
|
+
// A field that errored or timed out also returns null, which must not be cached as unlisted.
|
|
89
|
+
erroredAliases = new Set(errors === null || errors === void 0 ? void 0 : errors.map(function (_ref5) {
|
|
90
|
+
var path = _ref5.path;
|
|
91
|
+
return path === null || path === void 0 ? void 0 : path[0];
|
|
92
|
+
}));
|
|
93
|
+
return _context.abrupt("return", new Map(lookups.flatMap(function (_ref6, index) {
|
|
94
|
+
var _data$alias;
|
|
95
|
+
var id = _ref6.id;
|
|
96
|
+
var alias = "a".concat(index);
|
|
97
|
+
return erroredAliases.has(alias) ? [] : [[id, ((_data$alias = data[alias]) === null || _data$alias === void 0 || (_data$alias = _data$alias.partner) === null || _data$alias === void 0 ? void 0 : _data$alias.name) || null]];
|
|
98
|
+
})));
|
|
99
|
+
case 6:
|
|
100
|
+
_context.prev = 6;
|
|
101
|
+
clearTimeout(timeout);
|
|
102
|
+
return _context.finish(6);
|
|
103
|
+
case 7:
|
|
104
|
+
case "end":
|
|
105
|
+
return _context.stop();
|
|
106
|
+
}
|
|
107
|
+
}, _callee, null, [[1,, 6, 7]]);
|
|
108
|
+
}));
|
|
109
|
+
return function fetchAppVendors(_x) {
|
|
110
|
+
return _ref3.apply(this, arguments);
|
|
111
|
+
};
|
|
112
|
+
}();
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.fetchAppVendorsInBatches = void 0;
|
|
8
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
10
|
+
var _AppVendorRequestError = require("./AppVendorRequestError");
|
|
11
|
+
var _fetchAppVendors = require("./fetchAppVendors");
|
|
12
|
+
/** Marketplace has no bulk lookup; larger aliased requests time out. */
|
|
13
|
+
var BATCH_SIZE = 15;
|
|
14
|
+
var MAX_CONCURRENT_BATCHES = 3;
|
|
15
|
+
/**
|
|
16
|
+
* Fetches lookups in batches, at most `MAX_CONCURRENT_BATCHES` at a time, reporting each batch as it
|
|
17
|
+
* settles. Batches that have not started when `shouldContinue` returns false are reported as skipped.
|
|
18
|
+
* Loaded on demand so editors without ecosystem apps never download the fetching code.
|
|
19
|
+
*/
|
|
20
|
+
var fetchAppVendorsInBatches = exports.fetchAppVendorsInBatches = /*#__PURE__*/function () {
|
|
21
|
+
var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(lookups, _ref) {
|
|
22
|
+
var onBatch, shouldContinue, batches, start, nextBatch, runWorker;
|
|
23
|
+
return _regenerator.default.wrap(function (_context2) {
|
|
24
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
25
|
+
case 0:
|
|
26
|
+
onBatch = _ref.onBatch, shouldContinue = _ref.shouldContinue;
|
|
27
|
+
batches = [];
|
|
28
|
+
for (start = 0; start < lookups.length; start += BATCH_SIZE) {
|
|
29
|
+
batches.push(lookups.slice(start, start + BATCH_SIZE));
|
|
30
|
+
}
|
|
31
|
+
nextBatch = 0;
|
|
32
|
+
runWorker = /*#__PURE__*/function () {
|
|
33
|
+
var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
34
|
+
var batch, names, isBlocking, _t;
|
|
35
|
+
return _regenerator.default.wrap(function (_context) {
|
|
36
|
+
while (1) switch (_context.prev = _context.next) {
|
|
37
|
+
case 0:
|
|
38
|
+
if (!(nextBatch < batches.length)) {
|
|
39
|
+
_context.next = 6;
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
batch = batches[nextBatch++];
|
|
43
|
+
if (shouldContinue()) {
|
|
44
|
+
_context.next = 1;
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
onBatch(batch, {
|
|
48
|
+
status: 'skipped'
|
|
49
|
+
});
|
|
50
|
+
return _context.abrupt("continue", 0);
|
|
51
|
+
case 1:
|
|
52
|
+
// Only the request is caught, so a batch is never reported twice.
|
|
53
|
+
names = void 0;
|
|
54
|
+
_context.prev = 2;
|
|
55
|
+
_context.next = 3;
|
|
56
|
+
return (0, _fetchAppVendors.fetchAppVendors)(batch);
|
|
57
|
+
case 3:
|
|
58
|
+
names = _context.sent;
|
|
59
|
+
_context.next = 5;
|
|
60
|
+
break;
|
|
61
|
+
case 4:
|
|
62
|
+
_context.prev = 4;
|
|
63
|
+
_t = _context["catch"](2);
|
|
64
|
+
isBlocking = _t instanceof _AppVendorRequestError.AppVendorRequestError && _t.isBlocking;
|
|
65
|
+
onBatch(batch, {
|
|
66
|
+
error: _t,
|
|
67
|
+
isBlocking: isBlocking,
|
|
68
|
+
status: 'rejected'
|
|
69
|
+
});
|
|
70
|
+
return _context.abrupt("continue", 0);
|
|
71
|
+
case 5:
|
|
72
|
+
onBatch(batch, {
|
|
73
|
+
names: names,
|
|
74
|
+
status: 'fulfilled'
|
|
75
|
+
});
|
|
76
|
+
_context.next = 0;
|
|
77
|
+
break;
|
|
78
|
+
case 6:
|
|
79
|
+
case "end":
|
|
80
|
+
return _context.stop();
|
|
81
|
+
}
|
|
82
|
+
}, _callee, null, [[2, 4]]);
|
|
83
|
+
}));
|
|
84
|
+
return function runWorker() {
|
|
85
|
+
return _ref3.apply(this, arguments);
|
|
86
|
+
};
|
|
87
|
+
}();
|
|
88
|
+
_context2.next = 1;
|
|
89
|
+
return Promise.all(Array.from({
|
|
90
|
+
length: Math.min(MAX_CONCURRENT_BATCHES, batches.length)
|
|
91
|
+
}, runWorker));
|
|
92
|
+
case 1:
|
|
93
|
+
case "end":
|
|
94
|
+
return _context2.stop();
|
|
95
|
+
}
|
|
96
|
+
}, _callee2);
|
|
97
|
+
}));
|
|
98
|
+
return function fetchAppVendorsInBatches(_x, _x2) {
|
|
99
|
+
return _ref2.apply(this, arguments);
|
|
100
|
+
};
|
|
101
|
+
}();
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getAppVendorLookup = void 0;
|
|
7
|
+
var _manifestHelpers = require("@atlaskit/editor-common/extensions/manifest-helpers");
|
|
8
|
+
var FORGE_APP_ARI_PREFIX = 'ari:cloud:ecosystem::app/';
|
|
9
|
+
|
|
10
|
+
/** How to look up the Marketplace partner of the app that contributes an extension item. */
|
|
11
|
+
|
|
12
|
+
/** Returns a lookup only for ecosystem apps; Atlassian-owned items have no Marketplace partner. */
|
|
13
|
+
var getAppVendorLookup = exports.getAppVendorLookup = function getAppVendorLookup(_ref) {
|
|
14
|
+
var app = _ref.app,
|
|
15
|
+
extensionType = _ref.extensionType;
|
|
16
|
+
if ((app === null || app === void 0 ? void 0 : app.source) !== 'ecosystem' || !app.key) {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
if (extensionType === _manifestHelpers.FORGE_EXTENSION_TYPE) {
|
|
20
|
+
// Marketplace returns null for a bare Forge app UUID, so always send the full ARI.
|
|
21
|
+
var value = app.key.startsWith(FORGE_APP_ARI_PREFIX) ? app.key : "".concat(FORGE_APP_ARI_PREFIX).concat(app.key);
|
|
22
|
+
return {
|
|
23
|
+
id: "forge:".concat(value),
|
|
24
|
+
kind: 'forge',
|
|
25
|
+
value: value
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
id: "connect:".concat(app.key),
|
|
30
|
+
kind: 'connect',
|
|
31
|
+
value: app.key
|
|
32
|
+
};
|
|
33
|
+
};
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.prefetchAppVendors = void 0;
|
|
9
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
|
+
var _error = require("@atlaskit/editor-common/monitoring/error");
|
|
11
|
+
var _appVendorCache = require("./appVendorCache");
|
|
12
|
+
var _getAppVendorLookup = require("./getAppVendorLookup");
|
|
13
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
14
|
+
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; }
|
|
15
|
+
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) { (0, _defineProperty2.default)(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; }
|
|
16
|
+
/** Failed lookups are retried on later menu opens, up to this many attempts per page load. */
|
|
17
|
+
var MAX_ATTEMPTS = 3;
|
|
18
|
+
var LOG_LOCATION = 'editor-core/quick-insert/prefetchAppVendors';
|
|
19
|
+
var entries = _appVendorCache.appVendorCache.entries,
|
|
20
|
+
listeners = _appVendorCache.appVendorCache.listeners;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Set once any batch fails with 401, 403, or 429. Those mean the session cannot read Marketplace
|
|
24
|
+
* data or the gateway is throttling, which applies to every editor on the page, so all further
|
|
25
|
+
* lookups stop until the page reloads.
|
|
26
|
+
*/
|
|
27
|
+
var isBlocked = false;
|
|
28
|
+
var shouldFetch = function shouldFetch(entry) {
|
|
29
|
+
return !entry || entry.status === 'failed' && entry.attempts < MAX_ATTEMPTS;
|
|
30
|
+
};
|
|
31
|
+
var getAttempts = function getAttempts(entry) {
|
|
32
|
+
return (entry === null || entry === void 0 ? void 0 : entry.status) === 'failed' ? entry.attempts : 0;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
// A throwing subscriber must not stop the others or abort the batch that is being settled.
|
|
36
|
+
var notify = function notify() {
|
|
37
|
+
return listeners.forEach(function (listener) {
|
|
38
|
+
try {
|
|
39
|
+
listener();
|
|
40
|
+
} catch (error) {
|
|
41
|
+
(0, _error.logException)(error, {
|
|
42
|
+
location: LOG_LOCATION
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
var markFailed = function markFailed(_ref) {
|
|
48
|
+
var attempts = _ref.attempts,
|
|
49
|
+
id = _ref.id;
|
|
50
|
+
return entries.set(id, {
|
|
51
|
+
attempts: attempts,
|
|
52
|
+
status: 'failed'
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
var settleBatch = function settleBatch(batch, result) {
|
|
56
|
+
if (result.status !== 'fulfilled') {
|
|
57
|
+
if (result.status === 'rejected') {
|
|
58
|
+
isBlocked || (isBlocked = result.isBlocking);
|
|
59
|
+
(0, _error.logException)(result.error, {
|
|
60
|
+
location: LOG_LOCATION
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
batch.forEach(markFailed);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Lookups missing from the result errored individually and stay retryable.
|
|
68
|
+
batch.forEach(function (lookup) {
|
|
69
|
+
var name = result.names.get(lookup.id);
|
|
70
|
+
if (name === undefined) {
|
|
71
|
+
markFailed(lookup);
|
|
72
|
+
} else {
|
|
73
|
+
entries.set(lookup.id, {
|
|
74
|
+
name: name,
|
|
75
|
+
status: 'resolved'
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
notify();
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Starts fetching Marketplace partner names for every ecosystem app among `items`.
|
|
84
|
+
* Safe to call repeatedly: cached, in-flight, and exhausted lookups are skipped. The fetching code
|
|
85
|
+
* is loaded only once a lookup is queued.
|
|
86
|
+
*/
|
|
87
|
+
var prefetchAppVendors = exports.prefetchAppVendors = function prefetchAppVendors(items) {
|
|
88
|
+
if (isBlocked) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
var lookups = [];
|
|
92
|
+
items.forEach(function (item) {
|
|
93
|
+
var lookup = (0, _getAppVendorLookup.getAppVendorLookup)(item);
|
|
94
|
+
var entry = lookup && entries.get(lookup.id);
|
|
95
|
+
if (lookup && shouldFetch(entry)) {
|
|
96
|
+
lookups.push(_objectSpread(_objectSpread({}, lookup), {}, {
|
|
97
|
+
attempts: getAttempts(entry) + 1
|
|
98
|
+
}));
|
|
99
|
+
entries.set(lookup.id, {
|
|
100
|
+
status: 'pending'
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
if (lookups.length === 0) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
void Promise.resolve().then(function () {
|
|
108
|
+
return _interopRequireWildcard(require( /* webpackChunkName: "@atlaskit-internal_editor-core-quick-insert-app-vendor" */'./fetchAppVendorsInBatches'));
|
|
109
|
+
}).then(function (_ref2) {
|
|
110
|
+
var fetchAppVendorsInBatches = _ref2.fetchAppVendorsInBatches;
|
|
111
|
+
return fetchAppVendorsInBatches(lookups, {
|
|
112
|
+
onBatch: settleBatch,
|
|
113
|
+
shouldContinue: function shouldContinue() {
|
|
114
|
+
return !isBlocked;
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
}, function (error) {
|
|
118
|
+
// The chunk failed to load; nothing was requested, so every queued lookup can retry.
|
|
119
|
+
lookups.forEach(markFailed);
|
|
120
|
+
(0, _error.logException)(error, {
|
|
121
|
+
location: LOG_LOCATION
|
|
122
|
+
});
|
|
123
|
+
}).catch(function (error) {
|
|
124
|
+
// Fetch errors are reported per batch; this only catches an unexpected throw while settling.
|
|
125
|
+
(0, _error.logException)(error, {
|
|
126
|
+
location: LOG_LOCATION
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useAppVendorName = void 0;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _appVendorCache = require("./appVendorCache");
|
|
9
|
+
var subscribe = function subscribe(listener) {
|
|
10
|
+
_appVendorCache.appVendorCache.listeners.add(listener);
|
|
11
|
+
return function () {
|
|
12
|
+
_appVendorCache.appVendorCache.listeners.delete(listener);
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
var getServerSnapshot = function getServerSnapshot() {
|
|
16
|
+
return undefined;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/** Returns the partner name, `null` for unlisted apps, or `undefined` while unknown. */
|
|
20
|
+
var useAppVendorName = exports.useAppVendorName = function useAppVendorName(id) {
|
|
21
|
+
var getSnapshot = function getSnapshot() {
|
|
22
|
+
var entry = id ? _appVendorCache.appVendorCache.entries.get(id) : undefined;
|
|
23
|
+
return (entry === null || entry === void 0 ? void 0 : entry.status) === 'resolved' ? entry.name : undefined;
|
|
24
|
+
};
|
|
25
|
+
return (0, _react.useSyncExternalStore)(subscribe, getSnapshot, getServerSnapshot);
|
|
26
|
+
};
|
|
@@ -13,6 +13,7 @@ var _createQuickInsertMatcher = require("@atlaskit/editor-common/quick-insert/cr
|
|
|
13
13
|
var _getMenuItemParents = require("@atlaskit/editor-common/quick-insert/get-menu-item-parents");
|
|
14
14
|
var _keys = require("@atlaskit/editor-common/quick-insert/keys");
|
|
15
15
|
var _rank = require("@atlaskit/editor-common/quick-insert/rank");
|
|
16
|
+
var _prefetchAppVendors = require("./app-vendor/prefetchAppVendors");
|
|
16
17
|
var _ExtensionQuickInsertMenuItem = require("./ExtensionQuickInsertMenuItem");
|
|
17
18
|
var _QuickInsertSkillMenuItem = require("./QuickInsertSkillMenuItem");
|
|
18
19
|
var structureExtensionItemKeyRanks = (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({
|
|
@@ -89,6 +90,10 @@ var getExtensionQuickInsertComponents = exports.getExtensionQuickInsertComponent
|
|
|
89
90
|
editorActions = _ref4.editorActions,
|
|
90
91
|
items = _ref4.items;
|
|
91
92
|
var getExtensionItemRank = createExtensionItemRanker(items);
|
|
93
|
+
// Every row prefetches all items so the first row to mount fetches vendors in one batch.
|
|
94
|
+
var prefetchVendors = function prefetchVendors() {
|
|
95
|
+
return (0, _prefetchAppVendors.prefetchAppVendors)(items);
|
|
96
|
+
};
|
|
92
97
|
return items.map(function (item, index) {
|
|
93
98
|
var structureRank = getStructureExtensionItemRank(item);
|
|
94
99
|
var isStructureItem = structureRank !== undefined;
|
|
@@ -123,13 +128,19 @@ var getExtensionQuickInsertComponents = exports.getExtensionQuickInsertComponent
|
|
|
123
128
|
};
|
|
124
129
|
}),
|
|
125
130
|
component: function component(props) {
|
|
126
|
-
|
|
127
|
-
return /*#__PURE__*/_react.default.createElement(Component, {
|
|
131
|
+
return item.extensionType === 'com.atlassian.rovo.skill' ? /*#__PURE__*/_react.default.createElement(_QuickInsertSkillMenuItem.QuickInsertSkillMenuItem, {
|
|
128
132
|
apiRef: apiRef,
|
|
129
133
|
createAnalyticsEvent: createAnalyticsEvent,
|
|
130
134
|
editorActions: editorActions,
|
|
131
135
|
item: item,
|
|
132
136
|
onInsert: props.onInsert
|
|
137
|
+
}) : /*#__PURE__*/_react.default.createElement(_ExtensionQuickInsertMenuItem.ExtensionQuickInsertMenuItem, {
|
|
138
|
+
apiRef: apiRef,
|
|
139
|
+
createAnalyticsEvent: createAnalyticsEvent,
|
|
140
|
+
editorActions: editorActions,
|
|
141
|
+
item: item,
|
|
142
|
+
onInsert: props.onInsert,
|
|
143
|
+
prefetchVendors: prefetchVendors
|
|
133
144
|
});
|
|
134
145
|
}
|
|
135
146
|
};
|
|
@@ -6,4 +6,4 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.version = exports.name = void 0;
|
|
7
7
|
var name = exports.name = "@atlaskit/editor-core";
|
|
8
8
|
// eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports
|
|
9
|
-
var version = exports.version = "239.0.
|
|
9
|
+
var version = exports.version = "239.0.3";
|