@atlaskit/editor-plugin-extension 4.1.2 → 5.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.
Files changed (48) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cjs/extensionPlugin.js +16 -4
  3. package/dist/cjs/ui/ConfigPanel/ConfigPanel.js +9 -1
  4. package/dist/cjs/ui/ConfigPanel/DescriptionSummary.js +50 -0
  5. package/dist/cjs/ui/ConfigPanel/Header/HeaderAfterIconElement.js +50 -0
  6. package/dist/cjs/ui/ConfigPanel/Header/HeaderIcon.js +49 -0
  7. package/dist/cjs/ui/ConfigPanel/Header.js +3 -12
  8. package/dist/cjs/ui/ConfigPanel/HelpLink.js +22 -0
  9. package/dist/cjs/ui/ConfigPanel/constants.js +4 -2
  10. package/dist/cjs/ui/ConfigPanel/withExtensionManifest.js +33 -0
  11. package/dist/cjs/ui/useConfigPanelPluginHook.js +250 -0
  12. package/dist/es2019/extensionPlugin.js +16 -4
  13. package/dist/es2019/ui/ConfigPanel/ConfigPanel.js +9 -1
  14. package/dist/es2019/ui/ConfigPanel/DescriptionSummary.js +45 -0
  15. package/dist/es2019/ui/ConfigPanel/Header/HeaderAfterIconElement.js +44 -0
  16. package/dist/es2019/ui/ConfigPanel/Header/HeaderIcon.js +39 -0
  17. package/dist/es2019/ui/ConfigPanel/Header.js +1 -11
  18. package/dist/es2019/ui/ConfigPanel/HelpLink.js +16 -0
  19. package/dist/es2019/ui/ConfigPanel/constants.js +3 -1
  20. package/dist/es2019/ui/ConfigPanel/withExtensionManifest.js +21 -0
  21. package/dist/es2019/ui/useConfigPanelPluginHook.js +201 -0
  22. package/dist/esm/extensionPlugin.js +15 -4
  23. package/dist/esm/ui/ConfigPanel/ConfigPanel.js +9 -1
  24. package/dist/esm/ui/ConfigPanel/DescriptionSummary.js +41 -0
  25. package/dist/esm/ui/ConfigPanel/Header/HeaderAfterIconElement.js +43 -0
  26. package/dist/esm/ui/ConfigPanel/Header/HeaderIcon.js +40 -0
  27. package/dist/esm/ui/ConfigPanel/Header.js +1 -10
  28. package/dist/esm/ui/ConfigPanel/HelpLink.js +15 -0
  29. package/dist/esm/ui/ConfigPanel/constants.js +3 -1
  30. package/dist/esm/ui/ConfigPanel/withExtensionManifest.js +26 -0
  31. package/dist/esm/ui/useConfigPanelPluginHook.js +236 -0
  32. package/dist/types/extensionPluginType.d.ts +2 -0
  33. package/dist/types/ui/ConfigPanel/DescriptionSummary.d.ts +7 -0
  34. package/dist/types/ui/ConfigPanel/Header/HeaderAfterIconElement.d.ts +7 -0
  35. package/dist/types/ui/ConfigPanel/Header/HeaderIcon.d.ts +7 -0
  36. package/dist/types/ui/ConfigPanel/HelpLink.d.ts +7 -0
  37. package/dist/types/ui/ConfigPanel/constants.d.ts +2 -0
  38. package/dist/types/ui/ConfigPanel/withExtensionManifest.d.ts +9 -0
  39. package/dist/types/ui/useConfigPanelPluginHook.d.ts +27 -0
  40. package/dist/types-ts4.5/extensionPluginType.d.ts +2 -0
  41. package/dist/types-ts4.5/ui/ConfigPanel/DescriptionSummary.d.ts +7 -0
  42. package/dist/types-ts4.5/ui/ConfigPanel/Header/HeaderAfterIconElement.d.ts +7 -0
  43. package/dist/types-ts4.5/ui/ConfigPanel/Header/HeaderIcon.d.ts +7 -0
  44. package/dist/types-ts4.5/ui/ConfigPanel/HelpLink.d.ts +7 -0
  45. package/dist/types-ts4.5/ui/ConfigPanel/constants.d.ts +2 -0
  46. package/dist/types-ts4.5/ui/ConfigPanel/withExtensionManifest.d.ts +9 -0
  47. package/dist/types-ts4.5/ui/useConfigPanelPluginHook.d.ts +27 -0
  48. package/package.json +6 -3
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @atlaskit/editor-plugin-extension
2
2
 
3
+ ## 5.0.0
4
+
5
+ ### Major Changes
6
+
7
+ - [#122281](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/122281)
8
+ [`8c84e6db9b94f`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/8c84e6db9b94f) -
9
+ EDF-2539 Integrated object sidebar api through context-panel plugin in extensions to show panel.
10
+
11
+ ### Patch Changes
12
+
13
+ - Updated dependencies
14
+
3
15
  ## 4.1.2
4
16
 
5
17
  ### Patch Changes
@@ -20,6 +20,9 @@ var _bodiedExtension = require("./pm-plugins/toDOM-fixes/bodiedExtension");
20
20
  var _toolbar = require("./pm-plugins/toolbar");
21
21
  var _uniqueId = require("./pm-plugins/unique-id");
22
22
  var _contextPanel = require("./ui/context-panel");
23
+ var _useConfigPanelPluginHook = require("./ui/useConfigPanelPluginHook");
24
+ // Remove below line when cleaning up platform_editor_ai_object_sidebar_injection feature flag
25
+
23
26
  var extensionPlugin = exports.extensionPlugin = function extensionPlugin(_ref) {
24
27
  var _api$featureFlags, _api$analytics2, _api$analytics3, _api$contextPanel3, _api$decorations, _api$contextPanel4, _api$analytics4;
25
28
  var _ref$config = _ref.config,
@@ -58,7 +61,9 @@ var extensionPlugin = exports.extensionPlugin = function extensionPlugin(_ref) {
58
61
  }
59
62
  var pluginState = _pluginKey.pluginKey.getState(state);
60
63
  return {
61
- showContextPanel: pluginState === null || pluginState === void 0 ? void 0 : pluginState.showContextPanel
64
+ showContextPanel: pluginState === null || pluginState === void 0 ? void 0 : pluginState.showContextPanel,
65
+ extensionProvider: pluginState === null || pluginState === void 0 ? void 0 : pluginState.extensionProvider,
66
+ processParametersAfter: pluginState === null || pluginState === void 0 ? void 0 : pluginState.processParametersAfter
62
67
  };
63
68
  },
64
69
  pmPlugins: function pmPlugins() {
@@ -176,10 +181,17 @@ var extensionPlugin = exports.extensionPlugin = function extensionPlugin(_ref) {
176
181
  applyChangeToContextPanel: _api === null || _api === void 0 || (_api$contextPanel4 = _api.contextPanel) === null || _api$contextPanel4 === void 0 ? void 0 : _api$contextPanel4.actions.applyChange,
177
182
  editorAnalyticsAPI: _api === null || _api === void 0 || (_api$analytics4 = _api.analytics) === null || _api$analytics4 === void 0 ? void 0 : _api$analytics4.actions
178
183
  }),
179
- contextPanel: (0, _contextPanel.getContextPanel)(function () {
184
+ contextPanel: !(0, _platformFeatureFlags.fg)('platform_editor_ai_object_sidebar_injection') ? (0, _contextPanel.getContextPanel)(function () {
180
185
  var _editorViewRef$curren;
181
186
  return (_editorViewRef$curren = editorViewRef.current) !== null && _editorViewRef$curren !== void 0 ? _editorViewRef$curren : undefined;
182
- })(_api, featureFlags)
183
- }
187
+ })(_api, featureFlags) : undefined
188
+ },
189
+ usePluginHook: (0, _platformFeatureFlags.fg)('platform_editor_ai_object_sidebar_injection') ? function (_ref6) {
190
+ var editorView = _ref6.editorView;
191
+ (0, _useConfigPanelPluginHook.useConfigPanelPluginHook)({
192
+ editorView: editorView,
193
+ api: _api
194
+ });
195
+ } : undefined
184
196
  };
185
197
  };
@@ -27,7 +27,9 @@ var _analytics = require("@atlaskit/editor-common/analytics");
27
27
  var _extensions = require("@atlaskit/editor-common/extensions");
28
28
  var _hooks = require("@atlaskit/editor-common/hooks");
29
29
  var _form = _interopRequireWildcard(require("@atlaskit/form"));
30
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
30
31
  var _constants = require("./constants");
32
+ var _DescriptionSummary = require("./DescriptionSummary");
31
33
  var _ErrorMessage = _interopRequireDefault(require("./ErrorMessage"));
32
34
  var _FormContent = _interopRequireDefault(require("./FormContent"));
33
35
  var _FormErrorBoundary = require("./FormErrorBoundary");
@@ -270,6 +272,10 @@ var ConfigPanel = /*#__PURE__*/function (_React$Component) {
270
272
  }());
271
273
  // memoized to prevent rerender on new parameters
272
274
  (0, _defineProperty2.default)(_this, "renderHeader", (0, _memoizeOne.default)(function (extensionManifest) {
275
+ // If below FG is true then Header will be rendered separately
276
+ if ((0, _platformFeatureFlags.fg)('platform_editor_ai_object_sidebar_injection')) {
277
+ return null;
278
+ }
273
279
  var _this$props2 = _this.props,
274
280
  onCancel = _this$props2.onCancel,
275
281
  showHeader = _this$props2.showHeader;
@@ -436,7 +442,9 @@ var ConfigPanel = /*#__PURE__*/function (_React$Component) {
436
442
  noValidate: true,
437
443
  onKeyDown: handleKeyDown,
438
444
  "data-testid": "extension-config-panel"
439
- }), _this2.renderHeader(extensionManifest), /*#__PURE__*/_react.default.createElement(ConfigFormIntlWithBoundary, {
445
+ }), _this2.renderHeader(extensionManifest), (0, _platformFeatureFlags.fg)('platform_editor_ai_object_sidebar_injection') && /*#__PURE__*/_react.default.createElement(_DescriptionSummary.DescriptionSummary, {
446
+ extensionManifest: extensionManifest
447
+ }), /*#__PURE__*/_react.default.createElement(ConfigFormIntlWithBoundary, {
440
448
  api: api,
441
449
  canSave: false,
442
450
  errorMessage: errorMessage,
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.DescriptionSummary = DescriptionSummary;
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ var _reactIntlNext = require("react-intl-next");
10
+ var _extensions = require("@atlaskit/editor-common/extensions");
11
+ var _primitives = require("@atlaskit/primitives");
12
+ var _HelpLink = require("./HelpLink");
13
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
14
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
15
+ var descriptionStyles = (0, _primitives.xcss)({
16
+ marginBottom: 'space.300'
17
+ });
18
+ var helpLinkStyles = (0, _primitives.xcss)({
19
+ paddingTop: 'space.150'
20
+ });
21
+ function DescriptionSummary(_ref) {
22
+ var extensionManifest = _ref.extensionManifest;
23
+ var _useIntl = (0, _reactIntlNext.useIntl)(),
24
+ formatMessage = _useIntl.formatMessage;
25
+ var description = extensionManifest.description,
26
+ documentationUrl = extensionManifest.documentationUrl;
27
+ // Use a temporary allowlist of top 3 macros to test out a new "Documentation" CTA ("Need help?")
28
+ // This will be removed when Top 5 Modernized Macros updates are rolled out
29
+ var modernizedMacrosList = ['children', 'recently-updated', 'excerpt'];
30
+ var enableHelpCTA = modernizedMacrosList.includes(extensionManifest.key);
31
+ return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, (description || documentationUrl) && /*#__PURE__*/_react.default.createElement(_primitives.Box, {
32
+ xcss: descriptionStyles
33
+ }, /*#__PURE__*/_react.default.createElement(_primitives.Text, {
34
+ as: "p",
35
+ testId: "config-panel-header-description"
36
+ }, description && /*#__PURE__*/_react.default.createElement(_react.Fragment, null,
37
+ // Ignored via go/ees005
38
+ // eslint-disable-next-line require-unicode-regexp
39
+ description.replace(/([^.])$/, '$1.'), ' '), documentationUrl && (enableHelpCTA ? /*#__PURE__*/_react.default.createElement(_primitives.Box, {
40
+ xcss: helpLinkStyles
41
+ }, /*#__PURE__*/_react.default.createElement(_primitives.Text, {
42
+ as: "p"
43
+ }, /*#__PURE__*/_react.default.createElement(_HelpLink.HelpLink, {
44
+ documentationUrl: documentationUrl,
45
+ label: formatMessage(_extensions.configPanelMessages.help)
46
+ }))) : /*#__PURE__*/_react.default.createElement(_HelpLink.HelpLink, {
47
+ documentationUrl: documentationUrl,
48
+ label: formatMessage(_extensions.configPanelMessages.documentation)
49
+ })))));
50
+ }
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _primitives = require("@atlaskit/primitives");
10
+ var _withExtensionManifest = require("../withExtensionManifest");
11
+ var itemBodyStyles = (0, _primitives.xcss)({
12
+ display: 'flex',
13
+ flexDirection: 'row',
14
+ flexWrap: 'nowrap',
15
+ justifyContent: 'space-between',
16
+ margin: 'space.200',
17
+ flexGrow: 3
18
+ });
19
+ var itemTextStyles = (0, _primitives.xcss)({
20
+ maxWidth: '100%',
21
+ whiteSpace: 'initial'
22
+ });
23
+ var summaryStyles = (0, _primitives.xcss)({
24
+ font: "var(--ds-font-body-small, normal 400 11px/16px ui-sans-serif, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Ubuntu, \"Helvetica Neue\", sans-serif)",
25
+ color: 'color.text.subtlest',
26
+ marginTop: 'space.050',
27
+ whiteSpace: 'nowrap',
28
+ overflow: 'hidden',
29
+ textOverflow: 'ellipsis'
30
+ });
31
+ function HeaderAfterIconElement(_ref) {
32
+ var extensionManifest = _ref.extensionManifest;
33
+ var title = extensionManifest.title;
34
+ var summary = extensionManifest.summary;
35
+ return /*#__PURE__*/_react.default.createElement(_primitives.Box, {
36
+ xcss: itemBodyStyles
37
+ }, summary ? /*#__PURE__*/_react.default.createElement(_primitives.Box, {
38
+ xcss: itemTextStyles
39
+ }, /*#__PURE__*/_react.default.createElement("div", {
40
+ id: "context-panel-title",
41
+ "data-testid": "context-panel-title"
42
+ }, title), /*#__PURE__*/_react.default.createElement(_primitives.Box, {
43
+ xcss: summaryStyles
44
+ }, summary)) : /*#__PURE__*/_react.default.createElement(_primitives.Flex, {
45
+ direction: "column",
46
+ alignItems: "center",
47
+ testId: "context-panel-title"
48
+ }, title));
49
+ }
50
+ var _default = exports.default = (0, _withExtensionManifest.withExtensionManifest)(HeaderAfterIconElement);
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ var _primitives = require("@atlaskit/primitives");
10
+ var _withExtensionManifest = require("../withExtensionManifest");
11
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
12
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
13
+ var iconWidth = '40px';
14
+ var itemIconStyles = (0, _primitives.xcss)({
15
+ width: iconWidth,
16
+ height: iconWidth,
17
+ overflow: 'hidden',
18
+ border: "1px solid ".concat("var(--ds-border, rgba(223, 225, 229, 0.5))"),
19
+ borderRadius: "var(--ds-border-radius, 3px)",
20
+ boxSizing: 'border-box',
21
+ display: 'flex',
22
+ justifyContent: 'center',
23
+ alignItems: 'center'
24
+ });
25
+ function HeaderIcon(_ref) {
26
+ var extensionManifest = _ref.extensionManifest;
27
+ var icon = extensionManifest.icons['48'];
28
+ var title = extensionManifest.title;
29
+ var ResolvedIcon = (0, _react.useMemo)(function () {
30
+ return /*#__PURE__*/(0, _react.lazy)(function () {
31
+ return icon().then(function (Cmp) {
32
+ if ('default' in Cmp) {
33
+ return Cmp;
34
+ }
35
+ return {
36
+ default: Cmp
37
+ };
38
+ });
39
+ });
40
+ }, [icon]);
41
+ return /*#__PURE__*/_react.default.createElement(_primitives.Box, {
42
+ xcss: itemIconStyles
43
+ }, /*#__PURE__*/_react.default.createElement(_react.Suspense, {
44
+ fallback: null
45
+ }, /*#__PURE__*/_react.default.createElement(ResolvedIcon, {
46
+ label: title
47
+ })));
48
+ }
49
+ var _default = exports.default = (0, _withExtensionManifest.withExtensionManifest)(HeaderIcon);
@@ -15,6 +15,7 @@ var _closeCross = _interopRequireDefault(require("@atlaskit/icon/core/migration/
15
15
  var _primitives = require("@atlaskit/primitives");
16
16
  var _colors = require("@atlaskit/theme/colors");
17
17
  var _constants = require("@atlaskit/theme/constants");
18
+ var _HelpLink = require("./HelpLink");
18
19
  /**
19
20
  * @jsxRuntime classic
20
21
  * @jsx jsx
@@ -152,22 +153,12 @@ var Header = function Header(_ref) {
152
153
  xcss: helpLinkStyles
153
154
  }, (0, _react2.jsx)(_primitives.Text, {
154
155
  as: "p"
155
- }, (0, _react2.jsx)(HelpLink, {
156
+ }, (0, _react2.jsx)(_HelpLink.HelpLink, {
156
157
  documentationUrl: documentationUrl,
157
158
  label: intl.formatMessage(_extensions.configPanelMessages.help)
158
- }))) : (0, _react2.jsx)(HelpLink, {
159
+ }))) : (0, _react2.jsx)(_HelpLink.HelpLink, {
159
160
  documentationUrl: documentationUrl,
160
161
  label: intl.formatMessage(_extensions.configPanelMessages.documentation)
161
162
  })))));
162
163
  };
163
- var HelpLink = function HelpLink(_ref2) {
164
- var documentationUrl = _ref2.documentationUrl,
165
- label = _ref2.label;
166
- return (0, _react2.jsx)("a", {
167
- target: "_blank",
168
- rel: "noopener noreferrer",
169
- href: documentationUrl,
170
- "data-testid": "config-panel-header-documentation-link"
171
- }, label);
172
- };
173
164
  var _default = exports.default = (0, _reactIntlNext.injectIntl)(Header);
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.HelpLink = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var HelpLink = exports.HelpLink = function HelpLink(_ref) {
10
+ var documentationUrl = _ref.documentationUrl,
11
+ label = _ref.label;
12
+ return (
13
+ /*#__PURE__*/
14
+ // eslint-disable-next-line @atlaskit/design-system/no-html-anchor
15
+ _react.default.createElement("a", {
16
+ target: "_blank",
17
+ rel: "noopener noreferrer",
18
+ href: documentationUrl,
19
+ "data-testid": "config-panel-header-documentation-link"
20
+ }, label)
21
+ );
22
+ };
@@ -3,11 +3,13 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.ALLOWED_PARAM_TYPES = exports.ALLOWED_LOGGED_MACRO_PARAMS = void 0;
6
+ exports.CONFIG_PANEL_WIDTH = exports.CONFIG_PANEL_ID = exports.ALLOWED_PARAM_TYPES = exports.ALLOWED_LOGGED_MACRO_PARAMS = void 0;
7
7
  // Allowlist of { macroKey: parameterName[] } for analytics logging
8
8
  var ALLOWED_LOGGED_MACRO_PARAMS = exports.ALLOWED_LOGGED_MACRO_PARAMS = {
9
9
  children: ['all', 'first', 'depth', 'style', 'excerptType', 'sort', 'reverse'],
10
10
  'recently-updated': ['width', 'types', 'max', 'theme', 'showProfilePic', 'hideHeading'],
11
11
  excerpt: ['hidden']
12
12
  };
13
- var ALLOWED_PARAM_TYPES = exports.ALLOWED_PARAM_TYPES = ['enum', 'number', 'boolean'];
13
+ var ALLOWED_PARAM_TYPES = exports.ALLOWED_PARAM_TYPES = ['enum', 'number', 'boolean'];
14
+ var CONFIG_PANEL_WIDTH = exports.CONFIG_PANEL_WIDTH = 320;
15
+ var CONFIG_PANEL_ID = exports.CONFIG_PANEL_ID = 'extensions-panel';
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.withExtensionManifest = withExtensionManifest;
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
11
+ var _react = _interopRequireDefault(require("react"));
12
+ var _useStateFromPromise3 = require("./use-state-from-promise");
13
+ var _excluded = ["extensionKey", "extensionProvider", "extensionType"];
14
+ function withExtensionManifest(WrappedComponent) {
15
+ return function WithExtensionManifest(props) {
16
+ var extensionKey = props.extensionKey,
17
+ extensionProvider = props.extensionProvider,
18
+ extensionType = props.extensionType,
19
+ restProps = (0, _objectWithoutProperties2.default)(props, _excluded);
20
+ var _useStateFromPromise = (0, _useStateFromPromise3.useStateFromPromise)(function () {
21
+ return extensionProvider.getExtension(extensionType, extensionKey);
22
+ }, [extensionProvider, extensionType, extensionKey]),
23
+ _useStateFromPromise2 = (0, _slicedToArray2.default)(_useStateFromPromise, 1),
24
+ extensionManifest = _useStateFromPromise2[0];
25
+ return extensionManifest ?
26
+ /*#__PURE__*/
27
+ // Ignored via go/ees005
28
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any, react/jsx-props-no-spreading
29
+ _react.default.createElement(WrappedComponent, (0, _extends2.default)({
30
+ extensionManifest: extensionManifest
31
+ }, restProps)) : null;
32
+ };
33
+ }
@@ -0,0 +1,250 @@
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.getContextPanelBodyComponent = void 0;
9
+ exports.hideConfigPanel = hideConfigPanel;
10
+ exports.showConfigPanel = showConfigPanel;
11
+ exports.startClosingConfigPanel = startClosingConfigPanel;
12
+ exports.useConfigPanelPluginHook = useConfigPanelPluginHook;
13
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
14
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
15
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
16
+ var _react = _interopRequireWildcard(require("react"));
17
+ var _extensions = require("@atlaskit/editor-common/extensions");
18
+ var _hooks = require("@atlaskit/editor-common/hooks");
19
+ var _primitives = require("@atlaskit/primitives");
20
+ var _commands = require("../editor-commands/commands");
21
+ var _pluginFactory = require("../pm-plugins/plugin-factory");
22
+ var _utils = require("../pm-plugins/utils");
23
+ var _ConfigPanelLoader = _interopRequireDefault(require("./ConfigPanel/ConfigPanelLoader"));
24
+ var _constants = require("./ConfigPanel/constants");
25
+ var _HeaderAfterIconElement = _interopRequireDefault(require("./ConfigPanel/Header/HeaderAfterIconElement"));
26
+ var _HeaderIcon = _interopRequireDefault(require("./ConfigPanel/Header/HeaderIcon"));
27
+ var _contextPanel = require("./context-panel");
28
+ var _SaveIndicator = require("./SaveIndicator/SaveIndicator");
29
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
30
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
31
+ function useConfigPanelPluginHook(_ref) {
32
+ var editorView = _ref.editorView,
33
+ api = _ref.api;
34
+ var editorState = editorView.state;
35
+ var _useSharedPluginState = (0, _hooks.useSharedPluginState)(api, ['extension']),
36
+ extensionState = _useSharedPluginState.extensionState;
37
+ (0, _react.useEffect)(function () {
38
+ var nodeWithPos = (0, _utils.getSelectedExtension)(editorState, true);
39
+ // Adding checks to bail out early
40
+ if (!nodeWithPos || !extensionState) {
41
+ hideConfigPanel(api);
42
+ return;
43
+ }
44
+ if (extensionState) {
45
+ var showContextPanel = extensionState.showContextPanel,
46
+ extensionProvider = extensionState.extensionProvider,
47
+ processParametersAfter = extensionState.processParametersAfter;
48
+ if (showContextPanel && extensionProvider && processParametersAfter) {
49
+ showConfigPanel({
50
+ api: api,
51
+ editorView: editorView,
52
+ extensionProvider: extensionProvider,
53
+ nodeWithPos: nodeWithPos
54
+ });
55
+ } else {
56
+ hideConfigPanel(api);
57
+ }
58
+ }
59
+ }, [api, editorState, editorView, extensionState]);
60
+ }
61
+ function hideConfigPanel(api) {
62
+ var _api$contextPanel;
63
+ var closePanelById = api === null || api === void 0 || (_api$contextPanel = api.contextPanel) === null || _api$contextPanel === void 0 || (_api$contextPanel = _api$contextPanel.actions) === null || _api$contextPanel === void 0 ? void 0 : _api$contextPanel.closePanelById;
64
+ if (closePanelById) {
65
+ closePanelById(_constants.CONFIG_PANEL_ID);
66
+ }
67
+ }
68
+ function showConfigPanel(_ref2) {
69
+ var _api$contextPanel2;
70
+ var api = _ref2.api,
71
+ editorView = _ref2.editorView,
72
+ extensionProvider = _ref2.extensionProvider,
73
+ nodeWithPos = _ref2.nodeWithPos;
74
+ var showContextPanel = api === null || api === void 0 || (_api$contextPanel2 = api.contextPanel) === null || _api$contextPanel2 === void 0 || (_api$contextPanel2 = _api$contextPanel2.actions) === null || _api$contextPanel2 === void 0 ? void 0 : _api$contextPanel2.showPanel;
75
+ if (showContextPanel) {
76
+ var nodeAttrs = nodeWithPos === null || nodeWithPos === void 0 ? void 0 : nodeWithPos.node.attrs;
77
+ var extensionType = nodeAttrs === null || nodeAttrs === void 0 ? void 0 : nodeAttrs.extensionType;
78
+ var extensionKey = nodeAttrs === null || nodeAttrs === void 0 ? void 0 : nodeAttrs.extensionKey;
79
+
80
+ /**
81
+ * Loading extension manifest fails when using
82
+ * extensionKey directly from nodeAttrs.
83
+ * Always get extensionKey from getExtensionKeyAndNodeKey to load
84
+ * extension manifest successfully.
85
+ */
86
+ var _getExtensionKeyAndNo = (0, _extensions.getExtensionKeyAndNodeKey)(extensionKey, extensionType),
87
+ _getExtensionKeyAndNo2 = (0, _slicedToArray2.default)(_getExtensionKeyAndNo, 2),
88
+ extKey = _getExtensionKeyAndNo2[0],
89
+ _ = _getExtensionKeyAndNo2[1];
90
+ var HeadeIconWrapper = function HeadeIconWrapper() {
91
+ return /*#__PURE__*/_react.default.createElement(_HeaderIcon.default, {
92
+ extensionProvider: extensionProvider,
93
+ extensionKey: extKey,
94
+ extensionType: extensionType
95
+ });
96
+ };
97
+ var HeaderAfterIconElementWrapper = function HeaderAfterIconElementWrapper() {
98
+ return /*#__PURE__*/_react.default.createElement(_HeaderAfterIconElement.default, {
99
+ extensionProvider: extensionProvider,
100
+ extensionKey: extKey,
101
+ extensionType: extensionType
102
+ });
103
+ };
104
+ var BodyComponent = getContextPanelBodyComponent({
105
+ api: api,
106
+ editorView: editorView,
107
+ extensionProvider: extensionProvider,
108
+ nodeWithPos: nodeWithPos
109
+ });
110
+ showContextPanel({
111
+ id: _constants.CONFIG_PANEL_ID,
112
+ headerComponentElements: {
113
+ HeaderIcon: HeadeIconWrapper,
114
+ headerLabel: _extensions.configPanelMessages.objectSidebarPanelHeaderLabel,
115
+ HeaderAfterIconElement: HeaderAfterIconElementWrapper
116
+ },
117
+ BodyComponent: BodyComponent,
118
+ closeOptions: {
119
+ canClosePanel: function canClosePanel() {
120
+ var extensionState = (0, _pluginFactory.getPluginState)(editorView.state);
121
+ /**
122
+ * If context panel is open, then first update extension plugin state.
123
+ * Updating extension plugin state will trigger useEffect in useConfigPanelPluginHook,
124
+ * which will call hideConfigPanel.
125
+ */
126
+ if (extensionState !== null && extensionState !== void 0 && extensionState.showContextPanel) {
127
+ startClosingConfigPanel({
128
+ api: api,
129
+ editorView: editorView
130
+ });
131
+ return false;
132
+ }
133
+
134
+ // Return true if extension plugin state has been updated and hideConfigPanel has been called.
135
+ return true;
136
+ }
137
+ }
138
+ }, 'push', _constants.CONFIG_PANEL_WIDTH);
139
+ }
140
+ }
141
+ function startClosingConfigPanel(_x) {
142
+ return _startClosingConfigPanel.apply(this, arguments);
143
+ }
144
+ function _startClosingConfigPanel() {
145
+ _startClosingConfigPanel = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(_ref3) {
146
+ var _api$contextPanel3;
147
+ var api, editorView, applyChange;
148
+ return _regenerator.default.wrap(function _callee2$(_context2) {
149
+ while (1) switch (_context2.prev = _context2.next) {
150
+ case 0:
151
+ api = _ref3.api, editorView = _ref3.editorView;
152
+ applyChange = api === null || api === void 0 || (_api$contextPanel3 = api.contextPanel) === null || _api$contextPanel3 === void 0 ? void 0 : _api$contextPanel3.actions.applyChange; // Even if the save failed, we should proceed with closing the panel
153
+ (0, _commands.clearEditingContext)(applyChange)(editorView.state, editorView.dispatch);
154
+ _context2.prev = 3;
155
+ _context2.next = 6;
156
+ return new Promise(function (resolve, reject) {
157
+ (0, _commands.forceAutoSave)(applyChange)(resolve, reject)(editorView.state, editorView.dispatch);
158
+ });
159
+ case 6:
160
+ _context2.next = 11;
161
+ break;
162
+ case 8:
163
+ _context2.prev = 8;
164
+ _context2.t0 = _context2["catch"](3);
165
+ // Even if the save failed, we should proceed with closing the panel
166
+ // eslint-disable-next-line no-console
167
+ console.error("Autosave failed with error", _context2.t0);
168
+ case 11:
169
+ case "end":
170
+ return _context2.stop();
171
+ }
172
+ }, _callee2, null, [[3, 8]]);
173
+ }));
174
+ return _startClosingConfigPanel.apply(this, arguments);
175
+ }
176
+ var getContextPanelBodyComponent = exports.getContextPanelBodyComponent = function getContextPanelBodyComponent(_ref4) {
177
+ var _api$featureFlags;
178
+ var api = _ref4.api,
179
+ editorView = _ref4.editorView,
180
+ extensionProvider = _ref4.extensionProvider,
181
+ nodeWithPos = _ref4.nodeWithPos;
182
+ var featureFlags = (api === null || api === void 0 || (_api$featureFlags = api.featureFlags) === null || _api$featureFlags === void 0 ? void 0 : _api$featureFlags.sharedState.currentState()) || {};
183
+ var editorState = editorView.state;
184
+ var extensionState = (0, _pluginFactory.getPluginState)(editorState);
185
+ var autoSaveResolve = extensionState.autoSaveResolve,
186
+ autoSaveReject = extensionState.autoSaveReject,
187
+ processParametersBefore = extensionState.processParametersBefore;
188
+ var _nodeWithPos$node$att = nodeWithPos.node.attrs,
189
+ extensionType = _nodeWithPos$node$att.extensionType,
190
+ extensionKey = _nodeWithPos$node$att.extensionKey,
191
+ parameters = _nodeWithPos$node$att.parameters;
192
+ var _getExtensionKeyAndNo3 = (0, _extensions.getExtensionKeyAndNodeKey)(extensionKey, extensionType),
193
+ _getExtensionKeyAndNo4 = (0, _slicedToArray2.default)(_getExtensionKeyAndNo3, 2),
194
+ extKey = _getExtensionKeyAndNo4[0],
195
+ nodeKey = _getExtensionKeyAndNo4[1];
196
+ var configParams = processParametersBefore ? processParametersBefore(parameters || {}) : parameters;
197
+ return function () {
198
+ return /*#__PURE__*/_react.default.createElement(_primitives.Box, {
199
+ padding: "space.200"
200
+ }, /*#__PURE__*/_react.default.createElement(_SaveIndicator.SaveIndicator, {
201
+ duration: 5000,
202
+ visible: true
203
+ }, function (_ref5) {
204
+ var onSaveStarted = _ref5.onSaveStarted,
205
+ onSaveEnded = _ref5.onSaveEnded;
206
+ return /*#__PURE__*/_react.default.createElement(_ConfigPanelLoader.default, {
207
+ api: api,
208
+ showHeader: true,
209
+ closeOnEsc: true,
210
+ extensionType: extensionType,
211
+ extensionKey: extKey,
212
+ nodeKey: nodeKey,
213
+ extensionParameters: parameters,
214
+ parameters: configParams,
215
+ extensionProvider: extensionProvider,
216
+ autoSaveTrigger: autoSaveResolve,
217
+ autoSaveReject: autoSaveReject,
218
+ onChange: ( /*#__PURE__*/function () {
219
+ var _ref6 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(updatedParameters) {
220
+ return _regenerator.default.wrap(function _callee$(_context) {
221
+ while (1) switch (_context.prev = _context.next) {
222
+ case 0:
223
+ _context.next = 2;
224
+ return (0, _contextPanel.onChangeAction)(editorView, updatedParameters, parameters, nodeWithPos, onSaveStarted);
225
+ case 2:
226
+ onSaveEnded();
227
+ if (autoSaveResolve) {
228
+ autoSaveResolve();
229
+ }
230
+ case 4:
231
+ case "end":
232
+ return _context.stop();
233
+ }
234
+ }, _callee);
235
+ }));
236
+ return function (_x2) {
237
+ return _ref6.apply(this, arguments);
238
+ };
239
+ }()),
240
+ onCancel: function onCancel() {
241
+ return startClosingConfigPanel({
242
+ api: api,
243
+ editorView: editorView
244
+ });
245
+ },
246
+ featureFlags: featureFlags
247
+ });
248
+ }));
249
+ };
250
+ };
@@ -12,7 +12,9 @@ import { pluginKey } from './pm-plugins/plugin-key';
12
12
  import { bodiedExtensionSpecWithFixedToDOM } from './pm-plugins/toDOM-fixes/bodiedExtension';
13
13
  import { getToolbarConfig } from './pm-plugins/toolbar';
14
14
  import { createPlugin as createUniqueIdPlugin } from './pm-plugins/unique-id';
15
+ // Remove below line when cleaning up platform_editor_ai_object_sidebar_injection feature flag
15
16
  import { getContextPanel } from './ui/context-panel';
17
+ import { useConfigPanelPluginHook } from './ui/useConfigPanelPluginHook';
16
18
  export const extensionPlugin = ({
17
19
  config: options = {},
18
20
  api
@@ -51,7 +53,9 @@ export const extensionPlugin = ({
51
53
  }
52
54
  const pluginState = pluginKey.getState(state);
53
55
  return {
54
- showContextPanel: pluginState === null || pluginState === void 0 ? void 0 : pluginState.showContextPanel
56
+ showContextPanel: pluginState === null || pluginState === void 0 ? void 0 : pluginState.showContextPanel,
57
+ extensionProvider: pluginState === null || pluginState === void 0 ? void 0 : pluginState.extensionProvider,
58
+ processParametersAfter: pluginState === null || pluginState === void 0 ? void 0 : pluginState.processParametersAfter
55
59
  };
56
60
  },
57
61
  pmPlugins() {
@@ -165,10 +169,18 @@ export const extensionPlugin = ({
165
169
  applyChangeToContextPanel: api === null || api === void 0 ? void 0 : (_api$contextPanel4 = api.contextPanel) === null || _api$contextPanel4 === void 0 ? void 0 : _api$contextPanel4.actions.applyChange,
166
170
  editorAnalyticsAPI: api === null || api === void 0 ? void 0 : (_api$analytics4 = api.analytics) === null || _api$analytics4 === void 0 ? void 0 : _api$analytics4.actions
167
171
  }),
168
- contextPanel: getContextPanel(() => {
172
+ contextPanel: !fg('platform_editor_ai_object_sidebar_injection') ? getContextPanel(() => {
169
173
  var _editorViewRef$curren;
170
174
  return (_editorViewRef$curren = editorViewRef.current) !== null && _editorViewRef$curren !== void 0 ? _editorViewRef$curren : undefined;
171
- })(api, featureFlags)
172
- }
175
+ })(api, featureFlags) : undefined
176
+ },
177
+ usePluginHook: fg('platform_editor_ai_object_sidebar_injection') ? ({
178
+ editorView
179
+ }) => {
180
+ useConfigPanelPluginHook({
181
+ editorView,
182
+ api
183
+ });
184
+ } : undefined
173
185
  };
174
186
  };