@atlaskit/editor-plugin-extension 0.6.3 → 0.7.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.
Files changed (43) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cjs/actions.js +31 -35
  3. package/dist/cjs/context-panel.js +18 -9
  4. package/dist/cjs/extension-api.js +12 -0
  5. package/dist/cjs/plugin.js +5 -4
  6. package/dist/cjs/pm-plugins/macro/actions.js +21 -11
  7. package/dist/cjs/pm-plugins/main.js +10 -53
  8. package/dist/cjs/toolbar.js +1 -1
  9. package/dist/cjs/ui/ConfigPanel/ConfigPanel.js +55 -29
  10. package/dist/cjs/ui/ConfigPanel/ConfigPanelFieldsLoader.js +3 -1
  11. package/dist/es2019/actions.js +22 -24
  12. package/dist/es2019/context-panel.js +15 -4
  13. package/dist/es2019/extension-api.js +17 -1
  14. package/dist/es2019/plugin.js +5 -4
  15. package/dist/es2019/pm-plugins/macro/actions.js +20 -6
  16. package/dist/es2019/pm-plugins/main.js +3 -22
  17. package/dist/es2019/toolbar.js +1 -1
  18. package/dist/es2019/ui/ConfigPanel/ConfigPanel.js +58 -28
  19. package/dist/es2019/ui/ConfigPanel/ConfigPanelFieldsLoader.js +3 -1
  20. package/dist/esm/actions.js +30 -34
  21. package/dist/esm/context-panel.js +19 -9
  22. package/dist/esm/extension-api.js +12 -0
  23. package/dist/esm/plugin.js +5 -4
  24. package/dist/esm/pm-plugins/macro/actions.js +21 -11
  25. package/dist/esm/pm-plugins/main.js +9 -52
  26. package/dist/esm/toolbar.js +1 -1
  27. package/dist/esm/ui/ConfigPanel/ConfigPanel.js +55 -29
  28. package/dist/esm/ui/ConfigPanel/ConfigPanelFieldsLoader.js +3 -1
  29. package/dist/types/actions.d.ts +2 -5
  30. package/dist/types/context-panel.d.ts +9 -4
  31. package/dist/types/pm-plugins/main.d.ts +1 -2
  32. package/dist/types/types.d.ts +4 -4
  33. package/dist/types/ui/ConfigPanel/ConfigPanel.d.ts +4 -3
  34. package/dist/types/ui/ConfigPanel/ConfigPanelFieldsLoader.d.ts +4 -3
  35. package/dist/types-ts4.5/actions.d.ts +2 -5
  36. package/dist/types-ts4.5/context-panel.d.ts +9 -4
  37. package/dist/types-ts4.5/pm-plugins/main.d.ts +1 -2
  38. package/dist/types-ts4.5/types.d.ts +4 -4
  39. package/dist/types-ts4.5/ui/ConfigPanel/ConfigPanel.d.ts +4 -3
  40. package/dist/types-ts4.5/ui/ConfigPanel/ConfigPanelFieldsLoader.d.ts +4 -3
  41. package/example-utils/config-panel/ConfigPanelWithProviders.tsx +2 -1
  42. package/example-utils/config-panel/FieldTypePicker.tsx +1 -1
  43. package/package.json +5 -4
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @atlaskit/editor-plugin-extension
2
2
 
3
+ ## 0.7.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [#70741](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/70741) [`7c1487568202`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/7c1487568202) - ED-21973: Fix for MBE side panel config params update
8
+
9
+ ## 0.7.0
10
+
11
+ ### Minor Changes
12
+
13
+ - [#68640](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/68640) [`e173cb423c75`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/e173cb423c75) - Migrate extension plugin to useSharedPluginState from WithPluginState. Adds new dependency on BasePlugin.
14
+
15
+ ### Patch Changes
16
+
17
+ - Updated dependencies
18
+
3
19
  ## 0.6.3
4
20
 
5
21
  ### Patch Changes
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.performNodeUpdate = exports.editSelectedExtension = exports.editExtension = exports.createEditSelectedExtensionAction = exports.buildExtensionNode = void 0;
7
+ exports.performNodeUpdate = exports.editExtension = exports.createEditSelectedExtensionAction = exports.buildExtensionNode = void 0;
8
8
  Object.defineProperty(exports, "transformSliceToRemoveOpenBodiedExtension", {
9
9
  enumerable: true,
10
10
  get: function get() {
@@ -57,18 +57,26 @@ var performNodeUpdate = exports.performNodeUpdate = function performNodeUpdate(e
57
57
  bodiedExtension = _schema$nodes.bodiedExtension,
58
58
  multiBodiedExtension = _schema$nodes.multiBodiedExtension;
59
59
  var isBodiedExtensionSelected = !!(0, _utils.findSelectedNodeOfType)([bodiedExtension])(selection);
60
+ var isMultiBodiedExtensionSelected = !!(0, _utils.findSelectedNodeOfType)([multiBodiedExtension])(selection);
60
61
  var extensionState = (0, _main.getPluginState)(state);
62
+ var updateSelectionsByNodeType = function updateSelectionsByNodeType(nodeType) {
63
+ // Bodied/MultiBodied extensions can trigger an update when the cursor is inside which means that there is no node selected.
64
+ // To work around that we replace the parent and create a text selection instead of new node selection
65
+ tr = (0, _utils.replaceParentNodeOfType)(nodeType, newNode)(tr);
66
+ // Replacing selected node doesn't update the selection. `selection.node` still returns the old node
67
+ tr.setSelection(_state2.TextSelection.create(tr.doc, state.selection.anchor));
68
+ };
61
69
  var targetSelectionSource = _analytics.TARGET_SELECTION_SOURCE.CURRENT_SELECTION;
62
70
  var action = _analytics.ACTION.UPDATED;
63
71
  var tr = state.tr;
64
72
 
65
73
  // When it's a bodiedExtension but not selected
66
74
  if (newNode.type === bodiedExtension && !isBodiedExtensionSelected) {
67
- // Bodied extensions can trigger an update when the cursor is inside which means that there is no node selected.
68
- // To work around that we replace the parent and create a text selection instead of new node selection
69
- tr = (0, _utils.replaceParentNodeOfType)(state.schema.nodes.bodiedExtension, newNode)(tr);
70
- // Replacing selected node doesn't update the selection. `selection.node` still returns the old node
71
- tr.setSelection(_state2.TextSelection.create(tr.doc, state.selection.anchor));
75
+ updateSelectionsByNodeType(state.schema.nodes.bodiedExtension);
76
+ }
77
+ // When it's a multiBodiedExtension but not selected
78
+ else if (newNode.type === multiBodiedExtension && !isMultiBodiedExtensionSelected) {
79
+ updateSelectionsByNodeType(state.schema.nodes.multiBodiedExtension);
72
80
  }
73
81
  // If any extension is currently selected
74
82
  else if ((0, _utils.findSelectedNodeOfType)([extension, bodiedExtension, inlineExtension, multiBodiedExtension])(selection)) {
@@ -139,26 +147,29 @@ var updateExtensionParams = function updateExtensionParams(editorAnalyticsAPI) {
139
147
  case 7:
140
148
  newParameters = _context.sent;
141
149
  if (!newParameters) {
142
- _context.next = 11;
150
+ _context.next = 12;
143
151
  break;
144
152
  }
145
153
  newAttrs = _objectSpread(_objectSpread({}, attrs), {}, {
146
154
  parameters: _objectSpread(_objectSpread({}, parameters), newParameters)
147
155
  });
156
+ if (type.name === 'multiBodiedExtension') {
157
+ newAttrs.parameters.macroParams = _objectSpread(_objectSpread({}, parameters.macroParams), newParameters === null || newParameters === void 0 ? void 0 : newParameters.macroParams);
158
+ }
148
159
  return _context.abrupt("return", performNodeUpdate(editorAnalyticsAPI)(type.name, newAttrs, content, marks, true)(state, dispatch, view));
149
- case 11:
150
- _context.next = 15;
160
+ case 12:
161
+ _context.next = 16;
151
162
  break;
152
- case 13:
153
- _context.prev = 13;
163
+ case 14:
164
+ _context.prev = 14;
154
165
  _context.t0 = _context["catch"](4);
155
- case 15:
156
- return _context.abrupt("return", true);
157
166
  case 16:
167
+ return _context.abrupt("return", true);
168
+ case 17:
158
169
  case "end":
159
170
  return _context.stop();
160
171
  }
161
- }, _callee, null, [[4, 13]]);
172
+ }, _callee, null, [[4, 14]]);
162
173
  }));
163
174
  return function (_x, _x2, _x3) {
164
175
  return _ref.apply(this, arguments);
@@ -166,28 +177,13 @@ var updateExtensionParams = function updateExtensionParams(editorAnalyticsAPI) {
166
177
  }();
167
178
  };
168
179
  };
169
-
170
- // This is to decouple extensions from editor core
171
- // Ideally in the future we completely deprecate `EditorActions`
172
- var editSelectedExtension = exports.editSelectedExtension = function editSelectedExtension(editorActions) {
173
- var editorView = editorActions._privateGetEditorView();
174
- var _getPluginState = (0, _main.getPluginState)(editorView.state),
175
- updateExtension = _getPluginState.updateExtension,
176
- applyChangeToContextPanel = _getPluginState.applyChangeToContextPanel;
177
- // The analytics API cannot be accessed in this case because
178
- // we do not have access to the plugin injection API. Rather
179
- // than change the way this works - we just won't use analytics
180
- // here for now.
181
- var editorAnalyticsAPI = undefined;
182
- return editExtension(null, applyChangeToContextPanel, editorAnalyticsAPI, updateExtension)(editorView.state, editorView.dispatch, editorView);
183
- };
184
180
  var editExtension = exports.editExtension = function editExtension(macroProvider, applyChangeToContextPanel, editorAnalyticsAPI, updateExtension) {
185
181
  return function (state, dispatch, view) {
186
182
  if (!view) {
187
183
  return false;
188
184
  }
189
- var _getPluginState2 = (0, _main.getPluginState)(state),
190
- localId = _getPluginState2.localId;
185
+ var _getPluginState = (0, _main.getPluginState)(state),
186
+ localId = _getPluginState.localId;
191
187
  var nodeWithPos = (0, _utils2.findExtensionWithLocalId)(state, localId);
192
188
  if (!nodeWithPos) {
193
189
  return false;
@@ -225,15 +221,15 @@ var editExtension = exports.editExtension = function editExtension(macroProvider
225
221
  };
226
222
  var createEditSelectedExtensionAction = exports.createEditSelectedExtensionAction = function createEditSelectedExtensionAction(_ref2) {
227
223
  var editorViewRef = _ref2.editorViewRef,
228
- editorAnalyticsAPI = _ref2.editorAnalyticsAPI;
224
+ editorAnalyticsAPI = _ref2.editorAnalyticsAPI,
225
+ applyChangeToContextPanel = _ref2.applyChangeToContextPanel;
229
226
  return function () {
230
227
  var view = editorViewRef.current;
231
228
  if (!view) {
232
229
  return false;
233
230
  }
234
- var _getPluginState3 = (0, _main.getPluginState)(view.state),
235
- updateExtension = _getPluginState3.updateExtension,
236
- applyChangeToContextPanel = _getPluginState3.applyChangeToContextPanel;
231
+ var _getPluginState2 = (0, _main.getPluginState)(view.state),
232
+ updateExtension = _getPluginState2.updateExtension;
237
233
  return editExtension(null, applyChangeToContextPanel, editorAnalyticsAPI, updateExtension)(view.state, view.dispatch, view);
238
234
  };
239
235
  };
@@ -46,9 +46,11 @@ var duplicateSelection = exports.duplicateSelection = function duplicateSelectio
46
46
  }
47
47
  };
48
48
  var getContextPanel = exports.getContextPanel = function getContextPanel(getEditorView) {
49
- return function (allowAutoSave, featureFlags, applyChange) {
49
+ return function (api, allowAutoSave, featureFlags) {
50
50
  return function (state) {
51
+ var _api$contextPanel;
51
52
  var nodeWithPos = (0, _utils.getSelectedExtension)(state, true);
53
+ var applyChange = api === null || api === void 0 || (_api$contextPanel = api.contextPanel) === null || _api$contextPanel === void 0 ? void 0 : _api$contextPanel.actions.applyChange;
52
54
 
53
55
  // Adding checks to bail out early
54
56
  if (!nodeWithPos) {
@@ -82,6 +84,7 @@ var getContextPanel = exports.getContextPanel = function getContextPanel(getEdit
82
84
  return null;
83
85
  }
84
86
  return /*#__PURE__*/_react.default.createElement(_ConfigPanelLoader.default, {
87
+ api: api,
85
88
  showHeader: true,
86
89
  closeOnEsc: true,
87
90
  extensionType: extensionType,
@@ -155,6 +158,8 @@ var getContextPanel = exports.getContextPanel = function getContextPanel(getEdit
155
158
  };
156
159
  };
157
160
  };
161
+
162
+ // Added this interface to handle the macroParams on Parameters
158
163
  function onChangeAction(_x2) {
159
164
  return _onChangeAction.apply(this, arguments);
160
165
  }
@@ -175,6 +180,7 @@ function _onChangeAction() {
175
180
  _ref6,
176
181
  positions,
177
182
  node,
183
+ newAttributes,
178
184
  newNode,
179
185
  positionUpdated,
180
186
  transaction,
@@ -232,15 +238,18 @@ function _onChangeAction() {
232
238
  return _context3.abrupt("return");
233
239
  case 23:
234
240
  node = nodeWithPos.node;
235
- newNode = (0, _actions.buildExtensionNode)(nodeWithPos.node.toJSON().type, editorView.state.schema, _objectSpread(_objectSpread({}, node.attrs), {}, {
236
- parameters: _objectSpread(_objectSpread({}, oldParameters), newParameters)
237
- }), node.content, node.marks);
241
+ newAttributes = _objectSpread(_objectSpread({}, node.attrs), {}, {
242
+ parameters: _objectSpread(_objectSpread(_objectSpread({}, oldParameters), newParameters), {}, {
243
+ macroParams: _objectSpread(_objectSpread({}, oldParameters === null || oldParameters === void 0 ? void 0 : oldParameters.macroParams), newParameters === null || newParameters === void 0 ? void 0 : newParameters.macroParams)
244
+ })
245
+ });
246
+ newNode = (0, _actions.buildExtensionNode)(nodeWithPos.node.toJSON().type, editorView.state.schema, newAttributes, node.content, node.marks);
238
247
  if (newNode) {
239
- _context3.next = 27;
248
+ _context3.next = 28;
240
249
  break;
241
250
  }
242
251
  return _context3.abrupt("return");
243
- case 27:
252
+ case 28:
244
253
  positionUpdated = positions[key];
245
254
  transaction = editorView.state.tr.replaceWith(positionUpdated, positionUpdated + newNode.nodeSize, newNode); // Ensure we preserve the selection, tr.replaceWith causes it to be lost in some cases
246
255
  // when replacing the node
@@ -253,13 +262,13 @@ function _onChangeAction() {
253
262
  }
254
263
  positionsLess = _objectSpread({}, (0, _main.getPluginState)(editorView.state).positions);
255
264
  delete positionsLess[key];
256
- _context3.next = 35;
265
+ _context3.next = 36;
257
266
  return (0, _commands.updateState)({
258
267
  positions: positionsLess
259
268
  })(editorView.state, editorView.dispatch);
260
- case 35:
261
- editorView.dispatch(transaction);
262
269
  case 36:
270
+ editorView.dispatch(transaction);
271
+ case 37:
263
272
  case "end":
264
273
  return _context3.stop();
265
274
  }
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.getEditInLegacyMacroBrowser = exports.createExtensionAPI = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
8
9
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
9
10
  var _validator = require("@atlaskit/adf-utils/validator");
10
11
  var _analytics = require("@atlaskit/editor-common/analytics");
@@ -17,6 +18,8 @@ var _commands = require("./commands");
17
18
  var _actions = require("./pm-plugins/macro/actions");
18
19
  var _pluginKey = require("./pm-plugins/macro/plugin-key");
19
20
  var _utils3 = require("./utils");
21
+ 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; }
22
+ 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; }
20
23
  var getEditInLegacyMacroBrowser = exports.getEditInLegacyMacroBrowser = function getEditInLegacyMacroBrowser(_ref) {
21
24
  var view = _ref.view,
22
25
  macroProvider = _ref.macroProvider,
@@ -221,6 +224,15 @@ var createExtensionAPI = exports.createExtensionAPI = function createExtensionAP
221
224
  }) : node.marks;
222
225
  var newContent = changedValues.hasOwnProperty('content') ? _model.Fragment.fromJSON(schema, changedValues.content) : node.content;
223
226
  var newAttrs = changedValues.hasOwnProperty('attrs') ? changedValues.attrs : node.attrs;
227
+ if (node.type.name === 'multiBodiedExtension') {
228
+ var _changedValues$attrs, _node$attrs$parameter, _changedValues$attrs2;
229
+ newAttrs = _objectSpread(_objectSpread(_objectSpread({}, node.attrs), changedValues.attrs), {}, {
230
+ parameters: _objectSpread(_objectSpread(_objectSpread({}, node.attrs.parameters), (_changedValues$attrs = changedValues.attrs) === null || _changedValues$attrs === void 0 ? void 0 : _changedValues$attrs.parameters), {}, {
231
+ macroParams: _objectSpread(_objectSpread({}, (_node$attrs$parameter = node.attrs.parameters) === null || _node$attrs$parameter === void 0 ? void 0 : _node$attrs$parameter.macroParams), (_changedValues$attrs2 = changedValues.attrs) === null || _changedValues$attrs2 === void 0 || (_changedValues$attrs2 = _changedValues$attrs2.parameters) === null || _changedValues$attrs2 === void 0 ? void 0 : _changedValues$attrs2.macroParams)
232
+ })
233
+ });
234
+ // console.log('newAttrs', newAttrs);
235
+ }
224
236
 
225
237
  // Validate if the new attributes, content and marks result in a valid node and adf.
226
238
  try {
@@ -19,7 +19,7 @@ var _main = require("./pm-plugins/main");
19
19
  var _uniqueId = require("./pm-plugins/unique-id");
20
20
  var _toolbar = require("./toolbar");
21
21
  var extensionPlugin = exports.extensionPlugin = function extensionPlugin(_ref) {
22
- var _api$featureFlags, _api$analytics2, _api$analytics3, _api$decorations, _api$contextPanel3, _api$analytics4, _api$contextPanel4;
22
+ var _api$featureFlags, _api$analytics2, _api$analytics3, _api$contextPanel3, _api$decorations, _api$contextPanel4, _api$analytics4;
23
23
  var _ref$config = _ref.config,
24
24
  options = _ref$config === void 0 ? {} : _ref$config,
25
25
  _api = _ref.api;
@@ -126,7 +126,8 @@ var extensionPlugin = exports.extensionPlugin = function extensionPlugin(_ref) {
126
126
  insertMacroFromMacroBrowser: (0, _actions2.insertMacroFromMacroBrowser)(_api === null || _api === void 0 || (_api$analytics2 = _api.analytics) === null || _api$analytics2 === void 0 ? void 0 : _api$analytics2.actions),
127
127
  editSelectedExtension: (0, _actions.createEditSelectedExtensionAction)({
128
128
  editorViewRef: editorViewRef,
129
- editorAnalyticsAPI: _api === null || _api === void 0 || (_api$analytics3 = _api.analytics) === null || _api$analytics3 === void 0 ? void 0 : _api$analytics3.actions
129
+ editorAnalyticsAPI: _api === null || _api === void 0 || (_api$analytics3 = _api.analytics) === null || _api$analytics3 === void 0 ? void 0 : _api$analytics3.actions,
130
+ applyChangeToContextPanel: _api === null || _api === void 0 || (_api$contextPanel3 = _api.contextPanel) === null || _api$contextPanel3 === void 0 ? void 0 : _api$contextPanel3.actions.applyChange
130
131
  }),
131
132
  runMacroAutoConvert: _actions2.runMacroAutoConvert,
132
133
  forceAutoSave: _commands.forceAutoSave
@@ -135,13 +136,13 @@ var extensionPlugin = exports.extensionPlugin = function extensionPlugin(_ref) {
135
136
  floatingToolbar: (0, _toolbar.getToolbarConfig)({
136
137
  breakoutEnabled: options.breakoutEnabled,
137
138
  hoverDecoration: _api === null || _api === void 0 || (_api$decorations = _api.decorations) === null || _api$decorations === void 0 ? void 0 : _api$decorations.actions.hoverDecoration,
138
- applyChangeToContextPanel: _api === null || _api === void 0 || (_api$contextPanel3 = _api.contextPanel) === null || _api$contextPanel3 === void 0 ? void 0 : _api$contextPanel3.actions.applyChange,
139
+ applyChangeToContextPanel: _api === null || _api === void 0 || (_api$contextPanel4 = _api.contextPanel) === null || _api$contextPanel4 === void 0 ? void 0 : _api$contextPanel4.actions.applyChange,
139
140
  editorAnalyticsAPI: _api === null || _api === void 0 || (_api$analytics4 = _api.analytics) === null || _api$analytics4 === void 0 ? void 0 : _api$analytics4.actions
140
141
  }),
141
142
  contextPanel: (0, _contextPanel.getContextPanel)(function () {
142
143
  var _editorViewRef$curren;
143
144
  return (_editorViewRef$curren = editorViewRef.current) !== null && _editorViewRef$curren !== void 0 ? _editorViewRef$curren : undefined;
144
- })(options.allowAutoSave, featureFlags, _api === null || _api === void 0 || (_api$contextPanel4 = _api.contextPanel) === null || _api$contextPanel4 === void 0 ? void 0 : _api$contextPanel4.actions.applyChange)
145
+ })(_api, options.allowAutoSave, featureFlags)
145
146
  }
146
147
  };
147
148
  };
@@ -22,7 +22,7 @@ var insertMacroFromMacroBrowser = exports.insertMacroFromMacroBrowser = function
22
22
  return function (macroProvider, macroNode, isEditing) {
23
23
  return /*#__PURE__*/function () {
24
24
  var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(view) {
25
- var newMacro, state, dispatch, currentLayout, node, selection, schema, _schema$nodes, extension, inlineExtension, bodiedExtension, extensionState, targetSelectionSource, tr, isBodiedExtensionSelected, pos, _macroNode$attrs, extensionType, extensionKey, layout, localId;
25
+ var newMacro, state, dispatch, currentLayout, node, selection, schema, _schema$nodes, extension, inlineExtension, bodiedExtension, multiBodiedExtension, updateSelectionsByNodeType, extensionState, targetSelectionSource, tr, isBodiedExtensionSelected, isMultiBodiedExtensionSelected, pos, _macroNode$attrs, extensionType, extensionKey, layout, localId;
26
26
  return _regenerator.default.wrap(function _callee$(_context) {
27
27
  while (1) switch (_context.prev = _context.next) {
28
28
  case 0:
@@ -37,7 +37,7 @@ var insertMacroFromMacroBrowser = exports.insertMacroFromMacroBrowser = function
37
37
  case 4:
38
38
  newMacro = _context.sent;
39
39
  if (!(newMacro && macroNode)) {
40
- _context.next = 20;
40
+ _context.next = 22;
41
41
  break;
42
42
  }
43
43
  state = view.state, dispatch = view.dispatch;
@@ -52,19 +52,27 @@ var insertMacroFromMacroBrowser = exports.insertMacroFromMacroBrowser = function
52
52
  return _context.abrupt("return", false);
53
53
  case 11:
54
54
  selection = state.selection, schema = state.schema;
55
- _schema$nodes = schema.nodes, extension = _schema$nodes.extension, inlineExtension = _schema$nodes.inlineExtension, bodiedExtension = _schema$nodes.bodiedExtension;
55
+ _schema$nodes = schema.nodes, extension = _schema$nodes.extension, inlineExtension = _schema$nodes.inlineExtension, bodiedExtension = _schema$nodes.bodiedExtension, multiBodiedExtension = _schema$nodes.multiBodiedExtension;
56
+ updateSelectionsByNodeType = function updateSelectionsByNodeType(nodeType) {
57
+ // `isEditing` is `false` when we are inserting from insert-block toolbar
58
+ tr = isEditing ? (0, _utils.replaceParentNodeOfType)(nodeType, node)(tr) : (0, _utils.safeInsert)(node)(tr);
59
+ // Replacing selected node doesn't update the selection. `selection.node` still returns the old node
60
+ tr.setSelection(_state.TextSelection.create(tr.doc, state.selection.anchor));
61
+ };
56
62
  extensionState = (0, _pluginFactory.getPluginState)(state);
57
63
  targetSelectionSource = _analytics.TARGET_SELECTION_SOURCE.CURRENT_SELECTION;
58
64
  tr = state.tr;
59
- isBodiedExtensionSelected = !!(0, _utils.findSelectedNodeOfType)([bodiedExtension])(selection); // When it's a bodiedExtension but not selected
65
+ isBodiedExtensionSelected = !!(0, _utils.findSelectedNodeOfType)([bodiedExtension])(selection);
66
+ isMultiBodiedExtensionSelected = !!(0, _utils.findSelectedNodeOfType)([multiBodiedExtension])(selection); // When it's a bodiedExtension but not selected
60
67
  if (macroNode.type === bodiedExtension && !isBodiedExtensionSelected) {
61
- // `isEditing` is `false` when we are inserting from insert-block toolbar
62
- tr = isEditing ? (0, _utils.replaceParentNodeOfType)(bodiedExtension, node)(tr) : (0, _utils.safeInsert)(node)(tr);
63
- // Replacing selected node doesn't update the selection. `selection.node` still returns the old node
64
- tr.setSelection(_state.TextSelection.create(tr.doc, state.selection.anchor));
68
+ updateSelectionsByNodeType(state.schema.nodes.bodiedExtension);
69
+ }
70
+ // When it's a multiBodiedExtension but not selected
71
+ else if (macroNode.type === multiBodiedExtension && !isMultiBodiedExtensionSelected) {
72
+ updateSelectionsByNodeType(state.schema.nodes.multiBodiedExtension);
65
73
  }
66
74
  // If any extension is currently selected
67
- else if ((0, _utils.findSelectedNodeOfType)([extension, bodiedExtension, inlineExtension])(selection)) {
75
+ else if ((0, _utils.findSelectedNodeOfType)([extension, bodiedExtension, inlineExtension, multiBodiedExtension])(selection)) {
68
76
  tr = (0, _utils.replaceSelectedNode)(node)(tr);
69
77
  // Replacing selected node doesn't update the selection. `selection.node` still returns the old node
70
78
  tr.setSelection(_state.NodeSelection.create(tr.doc, tr.mapping.map(state.selection.anchor)));
@@ -101,9 +109,9 @@ var insertMacroFromMacroBrowser = exports.insertMacroFromMacroBrowser = function
101
109
  dispatch(tr.scrollIntoView());
102
110
  }
103
111
  return _context.abrupt("return", true);
104
- case 20:
112
+ case 22:
105
113
  return _context.abrupt("return", false);
106
- case 21:
114
+ case 23:
107
115
  case "end":
108
116
  return _context.stop();
109
117
  }
@@ -130,6 +138,8 @@ var resolveMacro = exports.resolveMacro = function resolveMacro(macro, state, op
130
138
  node = schema.nodes.bodiedExtension.create(_objectSpread(_objectSpread({}, attrs), optionalAttrs), schema.nodeFromJSON(macro).content);
131
139
  } else if (type === 'inlineExtension') {
132
140
  node = schema.nodes.inlineExtension.create(attrs);
141
+ } else if (type === 'multiBodiedExtension') {
142
+ node = schema.nodes.multiBodiedExtension.create(_objectSpread(_objectSpread({}, attrs), optionalAttrs), schema.nodeFromJSON(macro).content);
133
143
  }
134
144
  return node && (0, _insert.normaliseNestedLayout)(state, node);
135
145
  };
@@ -10,7 +10,7 @@ Object.defineProperty(exports, "createCommand", {
10
10
  return _pluginFactory.createCommand;
11
11
  }
12
12
  });
13
- exports.createPlugin = exports.createExtensionProviderHandler = exports.createContextIdentifierProviderHandler = void 0;
13
+ exports.createPlugin = exports.createExtensionProviderHandler = void 0;
14
14
  Object.defineProperty(exports, "getPluginState", {
15
15
  enumerable: true,
16
16
  get: function get() {
@@ -123,50 +123,12 @@ var createExtensionProviderHandler = exports.createExtensionProviderHandler = fu
123
123
  };
124
124
  }();
125
125
  };
126
- var createContextIdentifierProviderHandler = exports.createContextIdentifierProviderHandler = function createContextIdentifierProviderHandler(view) {
127
- return /*#__PURE__*/function () {
128
- var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(name, provider) {
129
- var contextIdentifierProvider;
130
- return _regenerator.default.wrap(function _callee3$(_context3) {
131
- while (1) switch (_context3.prev = _context3.next) {
132
- case 0:
133
- if (!(name === 'contextIdentifierProvider' && provider)) {
134
- _context3.next = 11;
135
- break;
136
- }
137
- _context3.prev = 1;
138
- _context3.next = 4;
139
- return provider;
140
- case 4:
141
- contextIdentifierProvider = _context3.sent;
142
- (0, _commands.updateState)({
143
- contextIdentifierProvider: contextIdentifierProvider
144
- })(view.state, view.dispatch);
145
- _context3.next = 11;
146
- break;
147
- case 8:
148
- _context3.prev = 8;
149
- _context3.t0 = _context3["catch"](1);
150
- (0, _commands.updateState)({
151
- contextIdentifierProvider: undefined
152
- })(view.state, view.dispatch);
153
- case 11:
154
- case "end":
155
- return _context3.stop();
156
- }
157
- }, _callee3, null, [[1, 8]]);
158
- }));
159
- return function (_x6, _x7) {
160
- return _ref3.apply(this, arguments);
161
- };
162
- }();
163
- };
164
- var handleUpdate = exports.handleUpdate = function handleUpdate(_ref4) {
165
- var view = _ref4.view,
166
- prevState = _ref4.prevState,
167
- domAtPos = _ref4.domAtPos,
168
- extensionHandlers = _ref4.extensionHandlers,
169
- applyChange = _ref4.applyChange;
126
+ var handleUpdate = exports.handleUpdate = function handleUpdate(_ref3) {
127
+ var view = _ref3.view,
128
+ prevState = _ref3.prevState,
129
+ domAtPos = _ref3.domAtPos,
130
+ extensionHandlers = _ref3.extensionHandlers,
131
+ applyChange = _ref3.applyChange;
170
132
  var state = view.state,
171
133
  dispatch = view.dispatch;
172
134
  var _getPluginState = (0, _pluginFactory.getPluginState)(state),
@@ -224,13 +186,11 @@ var handleUpdate = exports.handleUpdate = function handleUpdate(_ref4) {
224
186
  return true;
225
187
  };
226
188
  var createPlugin = exports.createPlugin = function createPlugin(dispatch, providerFactory, extensionHandlers, portalProviderAPI, eventDispatcher, pluginInjectionApi) {
227
- var _pluginInjectionApi$c;
228
189
  var useLongPressSelection = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : false;
229
190
  var options = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : {};
230
191
  var state = (0, _pluginFactory.createPluginState)(dispatch, {
231
192
  showEditButton: false,
232
- showContextPanel: false,
233
- applyChangeToContextPanel: pluginInjectionApi === null || pluginInjectionApi === void 0 || (_pluginInjectionApi$c = pluginInjectionApi.contextPanel) === null || _pluginInjectionApi$c === void 0 || (_pluginInjectionApi$c = _pluginInjectionApi$c.actions) === null || _pluginInjectionApi$c === void 0 ? void 0 : _pluginInjectionApi$c.applyChange
193
+ showContextPanel: false
234
194
  });
235
195
  var extensionNodeViewOptions = {
236
196
  appearance: options.appearance
@@ -240,23 +200,20 @@ var createPlugin = exports.createPlugin = function createPlugin(dispatch, provid
240
200
  view: function view(editorView) {
241
201
  var domAtPos = editorView.domAtPos.bind(editorView);
242
202
  var extensionProviderHandler = createExtensionProviderHandler(editorView);
243
- var contextIdentificationProviderHandler = createContextIdentifierProviderHandler(editorView);
244
203
  providerFactory.subscribe('extensionProvider', extensionProviderHandler);
245
- providerFactory.subscribe('contextIdentificationProvider', contextIdentificationProviderHandler);
246
204
  return {
247
205
  update: function update(view, prevState) {
248
- var _pluginInjectionApi$c2;
206
+ var _pluginInjectionApi$c;
249
207
  handleUpdate({
250
208
  view: view,
251
209
  prevState: prevState,
252
210
  domAtPos: domAtPos,
253
211
  extensionHandlers: extensionHandlers,
254
- applyChange: pluginInjectionApi === null || pluginInjectionApi === void 0 || (_pluginInjectionApi$c2 = pluginInjectionApi.contextPanel) === null || _pluginInjectionApi$c2 === void 0 ? void 0 : _pluginInjectionApi$c2.actions.applyChange
212
+ applyChange: pluginInjectionApi === null || pluginInjectionApi === void 0 || (_pluginInjectionApi$c = pluginInjectionApi.contextPanel) === null || _pluginInjectionApi$c === void 0 ? void 0 : _pluginInjectionApi$c.actions.applyChange
255
213
  });
256
214
  },
257
215
  destroy: function destroy() {
258
216
  providerFactory.unsubscribe('extensionProvider', extensionProviderHandler);
259
- providerFactory.unsubscribe('contextIdentificationProvider', contextIdentificationProviderHandler);
260
217
  }
261
218
  };
262
219
  },
@@ -64,7 +64,7 @@ var isLayoutSupported = function isLayoutSupported(state, selectedExtNode) {
64
64
  if (!selectedExtNode) {
65
65
  return false;
66
66
  }
67
- return !!((selectedExtNode.node.type === bodiedExtension || selectedExtNode.node.type === multiBodiedExtension || selectedExtNode.node.type === extension && !(0, _utils2.hasParentNodeOfType)([bodiedExtension, table, expand].filter(Boolean))(selection)) && !(0, _utils2.hasParentNodeOfType)([layoutSection])(selection));
67
+ return !!(([bodiedExtension, multiBodiedExtension].includes(selectedExtNode.node.type) || selectedExtNode.node.type === extension && !(0, _utils2.hasParentNodeOfType)([bodiedExtension, table, expand].filter(Boolean))(selection)) && !(0, _utils2.hasParentNodeOfType)([layoutSection])(selection));
68
68
  };
69
69
  var breakoutOptions = function breakoutOptions(state, formatMessage, extensionState, breakoutEnabled) {
70
70
  var nodeWithPos = (0, _utils3.getSelectedExtension)(state, true);
@@ -26,9 +26,8 @@ var _buttonGroup = _interopRequireDefault(require("@atlaskit/button/button-group
26
26
  var _customThemeButton = _interopRequireDefault(require("@atlaskit/button/custom-theme-button"));
27
27
  var _analytics = require("@atlaskit/editor-common/analytics");
28
28
  var _extensions = require("@atlaskit/editor-common/extensions");
29
- var _withPluginState = require("@atlaskit/editor-common/with-plugin-state");
29
+ var _hooks = require("@atlaskit/editor-common/hooks");
30
30
  var _form = _interopRequireWildcard(require("@atlaskit/form"));
31
- var _pluginKey = require("../../plugin-key");
32
31
  var _constants = require("./constants");
33
32
  var _ErrorMessage = _interopRequireDefault(require("./ErrorMessage"));
34
33
  var _FormContent = _interopRequireDefault(require("./FormContent"));
@@ -414,7 +413,8 @@ var ConfigPanel = /*#__PURE__*/function (_React$Component) {
414
413
  errorMessage = _this$props7.errorMessage,
415
414
  fields = _this$props7.fields,
416
415
  isLoading = _this$props7.isLoading,
417
- onCancel = _this$props7.onCancel;
416
+ onCancel = _this$props7.onCancel,
417
+ api = _this$props7.api;
418
418
  var _this$state = this.state,
419
419
  currentParameters = _this$state.currentParameters,
420
420
  hasParsedParameters = _this$state.hasParsedParameters,
@@ -437,32 +437,20 @@ var ConfigPanel = /*#__PURE__*/function (_React$Component) {
437
437
  noValidate: true,
438
438
  onKeyDown: handleKeyDown,
439
439
  "data-testid": "extension-config-panel"
440
- }), _this2.renderHeader(extensionManifest), /*#__PURE__*/_react.default.createElement(_withPluginState.WithPluginState, {
441
- plugins: {
442
- extension: _pluginKey.pluginKey
443
- },
444
- render: function render(_ref6) {
445
- var extension = _ref6.extension;
446
- return /*#__PURE__*/_react.default.createElement(_FormErrorBoundary.FormErrorBoundary, {
447
- contextIdentifierProvider: extension === null || extension === void 0 ? void 0 : extension.contextIdentifierProvider,
448
- extensionKey: extensionManifest.key,
449
- fields: fields || []
450
- }, /*#__PURE__*/_react.default.createElement(ConfigFormIntl, {
451
- canSave: !autoSave,
452
- errorMessage: errorMessage,
453
- extensionManifest: extensionManifest,
454
- fields: fields,
455
- firstVisibleFieldName: firstVisibleFieldName,
456
- hasParsedParameters: hasParsedParameters,
457
- isLoading: isLoading || false,
458
- onCancel: onCancel,
459
- onFieldChange: onFieldChange,
460
- parameters: currentParameters,
461
- submitting: submitting,
462
- contextIdentifierProvider: extension === null || extension === void 0 ? void 0 : extension.contextIdentifierProvider,
463
- featureFlags: featureFlags
464
- }));
465
- }
440
+ }), _this2.renderHeader(extensionManifest), /*#__PURE__*/_react.default.createElement(ConfigFormIntlWithBoundary, {
441
+ api: api,
442
+ canSave: !autoSave,
443
+ errorMessage: errorMessage,
444
+ extensionManifest: extensionManifest,
445
+ fields: fields !== null && fields !== void 0 ? fields : [],
446
+ firstVisibleFieldName: firstVisibleFieldName,
447
+ hasParsedParameters: hasParsedParameters,
448
+ isLoading: isLoading || false,
449
+ onCancel: onCancel,
450
+ onFieldChange: onFieldChange,
451
+ parameters: currentParameters,
452
+ submitting: submitting,
453
+ featureFlags: featureFlags
466
454
  }));
467
455
  });
468
456
  });
@@ -470,6 +458,44 @@ var ConfigPanel = /*#__PURE__*/function (_React$Component) {
470
458
  }]);
471
459
  return ConfigPanel;
472
460
  }(_react.default.Component);
461
+ function ConfigFormIntlWithBoundary(_ref6) {
462
+ var api = _ref6.api,
463
+ fields = _ref6.fields,
464
+ submitting = _ref6.submitting,
465
+ parameters = _ref6.parameters,
466
+ featureFlags = _ref6.featureFlags,
467
+ canSave = _ref6.canSave,
468
+ extensionManifest = _ref6.extensionManifest,
469
+ onFieldChange = _ref6.onFieldChange,
470
+ onCancel = _ref6.onCancel,
471
+ isLoading = _ref6.isLoading,
472
+ hasParsedParameters = _ref6.hasParsedParameters,
473
+ firstVisibleFieldName = _ref6.firstVisibleFieldName,
474
+ errorMessage = _ref6.errorMessage;
475
+ var _useSharedPluginState = (0, _hooks.useSharedPluginState)(api, ['contextIdentifier']),
476
+ contextIdentifierState = _useSharedPluginState.contextIdentifierState;
477
+ var _ref7 = contextIdentifierState !== null && contextIdentifierState !== void 0 ? contextIdentifierState : {},
478
+ contextIdentifierProvider = _ref7.contextIdentifierProvider;
479
+ return /*#__PURE__*/_react.default.createElement(_FormErrorBoundary.FormErrorBoundary, {
480
+ contextIdentifierProvider: contextIdentifierProvider,
481
+ extensionKey: extensionManifest.key,
482
+ fields: fields
483
+ }, /*#__PURE__*/_react.default.createElement(ConfigFormIntl, {
484
+ canSave: canSave,
485
+ errorMessage: errorMessage,
486
+ extensionManifest: extensionManifest,
487
+ fields: fields,
488
+ firstVisibleFieldName: firstVisibleFieldName,
489
+ hasParsedParameters: hasParsedParameters,
490
+ isLoading: isLoading || false,
491
+ onCancel: onCancel,
492
+ onFieldChange: onFieldChange,
493
+ parameters: parameters,
494
+ submitting: submitting,
495
+ contextIdentifierProvider: contextIdentifierProvider,
496
+ featureFlags: featureFlags
497
+ }));
498
+ }
473
499
  var _default = exports.default = (0, _analyticsNext.withAnalyticsContext)({
474
500
  source: 'ConfigPanel'
475
501
  })((0, _analyticsNext.withAnalyticsEvents)()(ConfigPanel));
@@ -87,7 +87,8 @@ function FieldsLoader(_ref) {
87
87
  showHeader = _ref.showHeader,
88
88
  featureFlags = _ref.featureFlags,
89
89
  onChange = _ref.onChange,
90
- onCancel = _ref.onCancel;
90
+ onCancel = _ref.onCancel,
91
+ api = _ref.api;
91
92
  var _useStateFromPromise = (0, _useStateFromPromise3.useStateFromPromise)(function () {
92
93
  return extensionProvider.getExtension(extensionType, extensionKey);
93
94
  }, [extensionProvider, extensionType, extensionKey]),
@@ -104,6 +105,7 @@ function FieldsLoader(_ref) {
104
105
  extensionParameters: extensionParameters
105
106
  }, function (fields) {
106
107
  return /*#__PURE__*/_react.default.createElement(_ConfigPanel.default, {
108
+ api: api,
107
109
  extensionManifest: extensionManifest,
108
110
  isLoading: !extensionManifest || errorMessage === null && !fields,
109
111
  fields: fields,