@atlaskit/editor-core 187.41.0 → 187.41.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @atlaskit/editor-core
2
2
 
3
+ ## 187.41.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [`9c76ed81343`](https://bitbucket.org/atlassian/atlassian-frontend/commits/9c76ed81343) - [ED-16733] Purge WithPluginState from media plugin
8
+
3
9
  ## 187.41.0
4
10
 
5
11
  ### Minor Changes
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "insertMediaSingleNode", {
12
12
  }
13
13
  });
14
14
  var _react = _interopRequireDefault(require("react"));
15
+ var _hooks = require("@atlaskit/editor-common/hooks");
15
16
  var _state = require("@atlaskit/editor-prosemirror/state");
16
17
  var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
17
18
  var _adfSchema = require("@atlaskit/adf-schema");
@@ -29,19 +30,34 @@ var _mediaSingle = require("./nodeviews/mediaSingle");
29
30
  var _toolbar = require("./toolbar");
30
31
  var _analytics = require("@atlaskit/editor-common/analytics");
31
32
  var _quickInsert = require("@atlaskit/editor-common/quick-insert");
32
- var _WithPluginState = _interopRequireDefault(require("../../ui/WithPluginState"));
33
33
  var _MediaPicker = require("./ui/MediaPicker");
34
- var _messages = require("../insert-block/ui/ToolbarInsertBlock/messages");
34
+ var _messages = require("@atlaskit/editor-common/messages");
35
35
  var _mediaNodeView = require("./nodeviews/mediaNodeView");
36
36
  var _mediaInline = require("./nodeviews/mediaInline");
37
37
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
38
38
  var _pluginKey = require("./pm-plugins/plugin-key");
39
39
  var _mediaSingle2 = require("./utils/media-single");
40
- var mediaPlugin = function mediaPlugin(_ref) {
40
+ var MediaPickerFunctionalComponent = function MediaPickerFunctionalComponent(_ref) {
41
+ var api = _ref.api,
42
+ editorDomElement = _ref.editorDomElement,
43
+ appearance = _ref.appearance;
44
+ var _useSharedPluginState = (0, _hooks.useSharedPluginState)(api, ['media']),
45
+ mediaState = _useSharedPluginState.mediaState;
46
+ if (!mediaState) {
47
+ return null;
48
+ }
49
+ return /*#__PURE__*/_react.default.createElement(_MediaPicker.MediaPickerComponents, {
50
+ editorDomElement: editorDomElement,
51
+ mediaState: mediaState,
52
+ appearance: appearance,
53
+ api: api
54
+ });
55
+ };
56
+ var mediaPlugin = function mediaPlugin(_ref2) {
41
57
  var _api$featureFlags;
42
- var _ref$config = _ref.config,
43
- options = _ref$config === void 0 ? {} : _ref$config,
44
- api = _ref.api;
58
+ var _ref2$config = _ref2.config,
59
+ options = _ref2$config === void 0 ? {} : _ref2$config,
60
+ api = _ref2.api;
45
61
  var featureFlags = (api === null || api === void 0 ? void 0 : (_api$featureFlags = api.featureFlags) === null || _api$featureFlags === void 0 ? void 0 : _api$featureFlags.sharedState.currentState()) || {};
46
62
  return {
47
63
  name: 'media',
@@ -52,12 +68,12 @@ var mediaPlugin = function mediaPlugin(_ref) {
52
68
  return _pluginKey.stateKey.getState(editorState) || null;
53
69
  },
54
70
  nodes: function nodes() {
55
- var _ref2 = options || {},
56
- _ref2$allowMediaGroup = _ref2.allowMediaGroup,
57
- allowMediaGroup = _ref2$allowMediaGroup === void 0 ? true : _ref2$allowMediaGroup,
58
- _ref2$allowMediaSingl = _ref2.allowMediaSingle,
59
- allowMediaSingle = _ref2$allowMediaSingl === void 0 ? false : _ref2$allowMediaSingl,
60
- mediaFeatureFlags = _ref2.featureFlags;
71
+ var _ref3 = options || {},
72
+ _ref3$allowMediaGroup = _ref3.allowMediaGroup,
73
+ allowMediaGroup = _ref3$allowMediaGroup === void 0 ? true : _ref3$allowMediaGroup,
74
+ _ref3$allowMediaSingl = _ref3.allowMediaSingle,
75
+ allowMediaSingle = _ref3$allowMediaSingl === void 0 ? false : _ref3$allowMediaSingl,
76
+ mediaFeatureFlags = _ref3.featureFlags;
61
77
  var captions = (0, _mediaCommon.getMediaFeatureFlag)('captions', mediaFeatureFlags);
62
78
  var allowMediaInline = (0, _mediaCommon.getMediaFeatureFlag)('mediaInline', mediaFeatureFlags);
63
79
  var mediaSingleOption = (0, _platformFeatureFlags.getBooleanFF)('platform.editor.media.extended-resize-experience') ? {
@@ -96,22 +112,23 @@ var mediaPlugin = function mediaPlugin(_ref) {
96
112
  pmPlugins: function pmPlugins() {
97
113
  var pmPlugins = [{
98
114
  name: 'media',
99
- plugin: function plugin(_ref3) {
100
- var schema = _ref3.schema,
101
- dispatch = _ref3.dispatch,
102
- getIntl = _ref3.getIntl,
103
- eventDispatcher = _ref3.eventDispatcher,
104
- providerFactory = _ref3.providerFactory,
105
- errorReporter = _ref3.errorReporter,
106
- portalProviderAPI = _ref3.portalProviderAPI,
107
- reactContext = _ref3.reactContext,
108
- dispatchAnalyticsEvent = _ref3.dispatchAnalyticsEvent;
115
+ plugin: function plugin(_ref4) {
116
+ var schema = _ref4.schema,
117
+ dispatch = _ref4.dispatch,
118
+ getIntl = _ref4.getIntl,
119
+ eventDispatcher = _ref4.eventDispatcher,
120
+ providerFactory = _ref4.providerFactory,
121
+ errorReporter = _ref4.errorReporter,
122
+ portalProviderAPI = _ref4.portalProviderAPI,
123
+ reactContext = _ref4.reactContext,
124
+ dispatchAnalyticsEvent = _ref4.dispatchAnalyticsEvent;
109
125
  return (0, _main.createPlugin)(schema, {
110
126
  providerFactory: providerFactory,
111
127
  nodeViews: {
112
128
  mediaGroup: (0, _mediaGroup.ReactMediaGroupNode)(portalProviderAPI, eventDispatcher, providerFactory, options, api),
113
129
  mediaSingle: (0, _mediaSingle.ReactMediaSingleNode)(portalProviderAPI, eventDispatcher, providerFactory, api, dispatchAnalyticsEvent, options),
114
130
  media: (0, _mediaNodeView.ReactMediaNode)(portalProviderAPI, eventDispatcher, providerFactory, options, api),
131
+ // @ts-expect-error
115
132
  mediaInline: (0, _mediaInline.ReactMediaInlineNode)(portalProviderAPI, eventDispatcher, providerFactory, api)
116
133
  },
117
134
  errorReporter: errorReporter,
@@ -132,8 +149,8 @@ var mediaPlugin = function mediaPlugin(_ref) {
132
149
  if (options && options.allowMediaSingle) {
133
150
  pmPlugins.push({
134
151
  name: 'mediaSingleKeymap',
135
- plugin: function plugin(_ref4) {
136
- var schema = _ref4.schema;
152
+ plugin: function plugin(_ref5) {
153
+ var schema = _ref5.schema;
137
154
  return (0, _keymapMediaSingle.default)(schema);
138
155
  }
139
156
  });
@@ -145,9 +162,9 @@ var mediaPlugin = function mediaPlugin(_ref) {
145
162
  });
146
163
  pmPlugins.push({
147
164
  name: 'mediaAltTextKeymap',
148
- plugin: function plugin(_ref5) {
165
+ plugin: function plugin(_ref6) {
149
166
  var _api$analytics2;
150
- var schema = _ref5.schema;
167
+ var schema = _ref6.schema;
151
168
  return (0, _keymap.default)(schema, api === null || api === void 0 ? void 0 : (_api$analytics2 = api.analytics) === null || _api$analytics2 === void 0 ? void 0 : _api$analytics2.actions);
152
169
  }
153
170
  });
@@ -155,15 +172,15 @@ var mediaPlugin = function mediaPlugin(_ref) {
155
172
  if (options && options.allowLinking) {
156
173
  pmPlugins.push({
157
174
  name: 'mediaLinking',
158
- plugin: function plugin(_ref6) {
159
- var dispatch = _ref6.dispatch;
175
+ plugin: function plugin(_ref7) {
176
+ var dispatch = _ref7.dispatch;
160
177
  return (0, _linking.default)(dispatch);
161
178
  }
162
179
  });
163
180
  pmPlugins.push({
164
181
  name: 'mediaLinkingKeymap',
165
- plugin: function plugin(_ref7) {
166
- var schema = _ref7.schema;
182
+ plugin: function plugin(_ref8) {
183
+ var schema = _ref8.schema;
167
184
  return (0, _keymap2.default)(schema);
168
185
  }
169
186
  });
@@ -199,35 +216,23 @@ var mediaPlugin = function mediaPlugin(_ref) {
199
216
  });
200
217
  return pmPlugins;
201
218
  },
202
- contentComponent: function contentComponent(_ref8) {
203
- var editorView = _ref8.editorView,
204
- appearance = _ref8.appearance;
205
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_WithPluginState.default, {
206
- editorView: editorView,
207
- plugins: {
208
- mediaState: _main.stateKey
209
- },
210
- render: function render(_ref9) {
211
- var mediaState = _ref9.mediaState;
212
- return /*#__PURE__*/_react.default.createElement(_MediaPicker.MediaPickerComponents, {
213
- editorDomElement: editorView.dom,
214
- mediaState: mediaState,
215
- appearance: appearance,
216
- api: api
217
- });
218
- }
219
- }));
219
+ contentComponent: function contentComponent(_ref9) {
220
+ var editorView = _ref9.editorView,
221
+ appearance = _ref9.appearance;
222
+ return /*#__PURE__*/_react.default.createElement(MediaPickerFunctionalComponent, {
223
+ editorDomElement: editorView.dom,
224
+ appearance: appearance,
225
+ api: api
226
+ });
220
227
  },
221
228
  secondaryToolbarComponent: function secondaryToolbarComponent(_ref10) {
222
229
  var editorView = _ref10.editorView,
223
230
  eventDispatcher = _ref10.eventDispatcher,
224
231
  disabled = _ref10.disabled;
225
232
  return /*#__PURE__*/_react.default.createElement(_ToolbarMedia.default, {
226
- editorView: editorView,
227
- eventDispatcher: eventDispatcher,
228
- pluginKey: _main.stateKey,
229
233
  isDisabled: disabled,
230
- isReducedSpacing: true
234
+ isReducedSpacing: true,
235
+ api: api
231
236
  });
232
237
  },
233
238
  pluginsOptions: {
@@ -235,8 +240,8 @@ var mediaPlugin = function mediaPlugin(_ref) {
235
240
  var formatMessage = _ref11.formatMessage;
236
241
  return [{
237
242
  id: 'media',
238
- title: formatMessage(_messages.messages.mediaFiles),
239
- description: formatMessage(_messages.messages.mediaFilesDescription),
243
+ title: formatMessage(_messages.toolbarInsertBlockMessages.mediaFiles),
244
+ description: formatMessage(_messages.toolbarInsertBlockMessages.mediaFilesDescription),
240
245
  priority: 400,
241
246
  keywords: ['attachment', 'gif', 'media', 'picture', 'image', 'video'],
242
247
  icon: function icon() {
@@ -18,11 +18,10 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/
18
18
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
19
19
  var _react = _interopRequireWildcard(require("react"));
20
20
  var _selectionBasedNodeView = require("@atlaskit/editor-common/selection-based-node-view");
21
- var _WithPluginState = _interopRequireDefault(require("../../../ui/WithPluginState"));
21
+ var _hooks = require("@atlaskit/editor-common/hooks");
22
22
  var _mediaCard = require("@atlaskit/media-card");
23
23
  var _providerFactory = require("@atlaskit/editor-common/provider-factory");
24
24
  var _styles = require("./styles");
25
- var _pluginKey = require("../pm-plugins/plugin-key");
26
25
  var _mediaNodeUpdater = require("./mediaNodeUpdater");
27
26
  var _mediaUi = require("@atlaskit/media-ui");
28
27
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
@@ -188,6 +187,31 @@ var MediaInline = function MediaInline(props) {
188
187
  });
189
188
  };
190
189
  exports.MediaInline = MediaInline;
190
+ var MediaInlineSharedState = function MediaInlineSharedState(_ref3) {
191
+ var identifier = _ref3.identifier,
192
+ mediaProvider = _ref3.mediaProvider,
193
+ node = _ref3.node,
194
+ isSelected = _ref3.isSelected,
195
+ getPos = _ref3.getPos,
196
+ contextIdentifierProvider = _ref3.contextIdentifierProvider,
197
+ api = _ref3.api,
198
+ view = _ref3.view;
199
+ var _useSharedPluginState = (0, _hooks.useSharedPluginState)(api, ['media']),
200
+ mediaState = _useSharedPluginState.mediaState;
201
+ if (!mediaState) {
202
+ return null;
203
+ }
204
+ return /*#__PURE__*/_react.default.createElement(MediaInline, {
205
+ identifier: identifier,
206
+ mediaProvider: mediaProvider,
207
+ mediaPluginState: mediaState,
208
+ node: node,
209
+ isSelected: isSelected,
210
+ view: view,
211
+ getPos: getPos,
212
+ contextIdentifierProvider: contextIdentifierProvider
213
+ });
214
+ };
191
215
  var MediaInlineNodeView = /*#__PURE__*/function (_SelectionBasedNodeVi) {
192
216
  (0, _inherits2.default)(MediaInlineNodeView, _SelectionBasedNodeVi);
193
217
  var _super = _createSuper(MediaInlineNodeView);
@@ -228,38 +252,28 @@ var MediaInlineNodeView = /*#__PURE__*/function (_SelectionBasedNodeVi) {
228
252
  key: "render",
229
253
  value: function render(props) {
230
254
  var _this = this;
231
- var providerFactory = props.providerFactory;
255
+ var providerFactory = props.providerFactory,
256
+ api = props.api;
257
+ var view = this.view;
232
258
  var getPos = this.getPos;
233
259
  return /*#__PURE__*/_react.default.createElement(_providerFactory.WithProviders, {
234
260
  providers: ['mediaProvider', 'contextIdentifierProvider'],
235
261
  providerFactory: providerFactory,
236
- renderNode: function renderNode(_ref3) {
237
- var mediaProvider = _ref3.mediaProvider,
238
- contextIdentifierProvider = _ref3.contextIdentifierProvider;
262
+ renderNode: function renderNode(_ref4) {
263
+ var mediaProvider = _ref4.mediaProvider,
264
+ contextIdentifierProvider = _ref4.contextIdentifierProvider;
239
265
  if (!mediaProvider) {
240
266
  return null;
241
267
  }
242
- return /*#__PURE__*/_react.default.createElement(_WithPluginState.default, {
243
- editorView: _this.view,
244
- plugins: {
245
- mediaPluginState: _pluginKey.stateKey
246
- },
247
- render: function render(_ref4) {
248
- var mediaPluginState = _ref4.mediaPluginState;
249
- if (!mediaPluginState) {
250
- return null;
251
- }
252
- return /*#__PURE__*/_react.default.createElement(MediaInline, {
253
- identifier: _this.node.attrs.id,
254
- mediaProvider: mediaProvider,
255
- mediaPluginState: mediaPluginState,
256
- node: _this.node,
257
- isSelected: _this.nodeInsideSelection(),
258
- view: _this.view,
259
- getPos: getPos,
260
- contextIdentifierProvider: contextIdentifierProvider
261
- });
262
- }
268
+ return /*#__PURE__*/_react.default.createElement(MediaInlineSharedState, {
269
+ identifier: _this.node.attrs.id,
270
+ mediaProvider: mediaProvider,
271
+ node: _this.node,
272
+ isSelected: _this.nodeInsideSelection(),
273
+ view: view,
274
+ getPos: getPos,
275
+ contextIdentifierProvider: contextIdentifierProvider,
276
+ api: api
263
277
  });
264
278
  }
265
279
  });
@@ -268,11 +282,12 @@ var MediaInlineNodeView = /*#__PURE__*/function (_SelectionBasedNodeVi) {
268
282
  return MediaInlineNodeView;
269
283
  }(_selectionBasedNodeView.SelectionBasedNodeView);
270
284
  exports.MediaInlineNodeView = MediaInlineNodeView;
271
- var ReactMediaInlineNode = function ReactMediaInlineNode(portalProviderAPI, eventDispatcher, providerFactory, pluginInjectionApi, dispatchAnalyticsEvent) {
285
+ var ReactMediaInlineNode = function ReactMediaInlineNode(portalProviderAPI, eventDispatcher, providerFactory, api, dispatchAnalyticsEvent) {
272
286
  return function (node, view, getPos) {
273
287
  return new MediaInlineNodeView(node, view, getPos, portalProviderAPI, eventDispatcher, {
274
288
  providerFactory: providerFactory,
275
- dispatchAnalyticsEvent: dispatchAnalyticsEvent
289
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent,
290
+ api: api
276
291
  }).init();
277
292
  };
278
293
  };
@@ -1,19 +1,16 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof = require("@babel/runtime/helpers/typeof");
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
8
  var _react = _interopRequireDefault(require("react"));
10
9
  var _attachment = _interopRequireDefault(require("@atlaskit/icon/glyph/editor/attachment"));
11
- var _ToolbarButton = _interopRequireWildcard(require("../../../../ui/ToolbarButton"));
12
- var _WithPluginState = _interopRequireDefault(require("../../../../ui/WithPluginState"));
10
+ var _uiMenu = require("@atlaskit/editor-common/ui-menu");
13
11
  var _toolbarMediaMessages = require("./toolbar-media-messages");
12
+ var _hooks = require("@atlaskit/editor-common/hooks");
14
13
  var _reactIntlNext = require("react-intl-next");
15
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
16
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17
14
  var onClickMediaButton = function onClickMediaButton(pluginState) {
18
15
  return function () {
19
16
  pluginState.showMediaPicker();
@@ -21,35 +18,25 @@ var onClickMediaButton = function onClickMediaButton(pluginState) {
21
18
  };
22
19
  };
23
20
  var ToolbarMedia = function ToolbarMedia(_ref) {
24
- var editorView = _ref.editorView,
25
- eventDispatcher = _ref.eventDispatcher,
26
- pluginKey = _ref.pluginKey,
27
- isDisabled = _ref.isDisabled,
21
+ var isDisabled = _ref.isDisabled,
28
22
  isReducedSpacing = _ref.isReducedSpacing,
29
- intl = _ref.intl;
30
- return /*#__PURE__*/_react.default.createElement(_WithPluginState.default, {
31
- editorView: editorView,
32
- eventDispatcher: eventDispatcher,
33
- plugins: {
34
- mediaPlugin: pluginKey
35
- },
36
- render: function render(_ref2) {
37
- var mediaPlugin = _ref2.mediaPlugin;
38
- if (!(mediaPlugin !== null && mediaPlugin !== void 0 && mediaPlugin.allowsUploads)) {
39
- return null;
40
- }
41
- var toolbarMediaTitle = _toolbarMediaMessages.toolbarMediaMessages.toolbarMediaTitle;
42
- return /*#__PURE__*/_react.default.createElement(_ToolbarButton.default, {
43
- buttonId: _ToolbarButton.TOOLBAR_BUTTON.MEDIA,
44
- onClick: onClickMediaButton(mediaPlugin),
45
- disabled: isDisabled,
46
- title: intl.formatMessage(toolbarMediaTitle),
47
- spacing: isReducedSpacing ? 'none' : 'default',
48
- iconBefore: /*#__PURE__*/_react.default.createElement(_attachment.default, {
49
- label: intl.formatMessage(toolbarMediaTitle)
50
- })
51
- });
52
- }
23
+ intl = _ref.intl,
24
+ api = _ref.api;
25
+ var _useSharedPluginState = (0, _hooks.useSharedPluginState)(api, ['media']),
26
+ mediaState = _useSharedPluginState.mediaState;
27
+ if (!(mediaState !== null && mediaState !== void 0 && mediaState.allowsUploads)) {
28
+ return null;
29
+ }
30
+ var toolbarMediaTitle = _toolbarMediaMessages.toolbarMediaMessages.toolbarMediaTitle;
31
+ return /*#__PURE__*/_react.default.createElement(_uiMenu.ToolbarButton, {
32
+ buttonId: _uiMenu.TOOLBAR_BUTTON.MEDIA,
33
+ onClick: onClickMediaButton(mediaState),
34
+ disabled: isDisabled,
35
+ title: intl.formatMessage(toolbarMediaTitle),
36
+ spacing: isReducedSpacing ? 'none' : 'default',
37
+ iconBefore: /*#__PURE__*/_react.default.createElement(_attachment.default, {
38
+ label: intl.formatMessage(toolbarMediaTitle)
39
+ })
53
40
  });
54
41
  };
55
42
  var _default = (0, _reactIntlNext.injectIntl)(ToolbarMedia);
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.version = exports.nextMajorVersion = exports.name = void 0;
7
7
  var name = "@atlaskit/editor-core";
8
8
  exports.name = name;
9
- var version = "187.41.0";
9
+ var version = "187.41.1";
10
10
  exports.version = version;
11
11
  var nextMajorVersion = function nextMajorVersion() {
12
12
  return [Number(version.split('.')[0]) + 1, 0, 0].join('.');
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+ import { useSharedPluginState } from '@atlaskit/editor-common/hooks';
2
3
  import { PluginKey, NodeSelection } from '@atlaskit/editor-prosemirror/state';
3
4
  import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
4
5
  import { media, mediaGroup, mediaInline, mediaSingleSpec } from '@atlaskit/adf-schema';
@@ -16,14 +17,31 @@ import { ReactMediaSingleNode } from './nodeviews/mediaSingle';
16
17
  import { floatingToolbar } from './toolbar';
17
18
  import { ACTION, ACTION_SUBJECT, INPUT_METHOD, EVENT_TYPE, ACTION_SUBJECT_ID } from '@atlaskit/editor-common/analytics';
18
19
  import { IconImages } from '@atlaskit/editor-common/quick-insert';
19
- import WithPluginState from '../../ui/WithPluginState';
20
20
  import { MediaPickerComponents } from './ui/MediaPicker';
21
- import { messages } from '../insert-block/ui/ToolbarInsertBlock/messages';
21
+ import { toolbarInsertBlockMessages as messages } from '@atlaskit/editor-common/messages';
22
22
  import { ReactMediaNode } from './nodeviews/mediaNodeView';
23
23
  import { ReactMediaInlineNode } from './nodeviews/mediaInline';
24
24
  import { getBooleanFF } from '@atlaskit/platform-feature-flags';
25
25
  import { stateKey } from './pm-plugins/plugin-key';
26
26
  export { insertMediaSingleNode } from './utils/media-single';
27
+ const MediaPickerFunctionalComponent = ({
28
+ api,
29
+ editorDomElement,
30
+ appearance
31
+ }) => {
32
+ const {
33
+ mediaState
34
+ } = useSharedPluginState(api, ['media']);
35
+ if (!mediaState) {
36
+ return null;
37
+ }
38
+ return /*#__PURE__*/React.createElement(MediaPickerComponents, {
39
+ editorDomElement: editorDomElement,
40
+ mediaState: mediaState,
41
+ appearance: appearance,
42
+ api: api
43
+ });
44
+ };
27
45
  const mediaPlugin = ({
28
46
  config: options = {},
29
47
  api
@@ -99,6 +117,7 @@ const mediaPlugin = ({
99
117
  mediaGroup: ReactMediaGroupNode(portalProviderAPI, eventDispatcher, providerFactory, options, api),
100
118
  mediaSingle: ReactMediaSingleNode(portalProviderAPI, eventDispatcher, providerFactory, api, dispatchAnalyticsEvent, options),
101
119
  media: ReactMediaNode(portalProviderAPI, eventDispatcher, providerFactory, options, api),
120
+ // @ts-expect-error
102
121
  mediaInline: ReactMediaInlineNode(portalProviderAPI, eventDispatcher, providerFactory, api)
103
122
  },
104
123
  errorReporter,
@@ -193,20 +212,11 @@ const mediaPlugin = ({
193
212
  editorView,
194
213
  appearance
195
214
  }) {
196
- return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(WithPluginState, {
197
- editorView: editorView,
198
- plugins: {
199
- mediaState: pluginKey
200
- },
201
- render: ({
202
- mediaState
203
- }) => /*#__PURE__*/React.createElement(MediaPickerComponents, {
204
- editorDomElement: editorView.dom,
205
- mediaState: mediaState,
206
- appearance: appearance,
207
- api: api
208
- })
209
- }));
215
+ return /*#__PURE__*/React.createElement(MediaPickerFunctionalComponent, {
216
+ editorDomElement: editorView.dom,
217
+ appearance: appearance,
218
+ api: api
219
+ });
210
220
  },
211
221
  secondaryToolbarComponent({
212
222
  editorView,
@@ -214,11 +224,9 @@ const mediaPlugin = ({
214
224
  disabled
215
225
  }) {
216
226
  return /*#__PURE__*/React.createElement(ToolbarMedia, {
217
- editorView: editorView,
218
- eventDispatcher: eventDispatcher,
219
- pluginKey: pluginKey,
220
227
  isDisabled: disabled,
221
- isReducedSpacing: true
228
+ isReducedSpacing: true,
229
+ api: api
222
230
  });
223
231
  },
224
232
  pluginsOptions: {
@@ -1,10 +1,9 @@
1
1
  import React, { useEffect, useState } from 'react';
2
2
  import { SelectionBasedNodeView } from '@atlaskit/editor-common/selection-based-node-view';
3
- import WithPluginState from '../../../ui/WithPluginState';
3
+ import { useSharedPluginState } from '@atlaskit/editor-common/hooks';
4
4
  import { MediaInlineCard } from '@atlaskit/media-card';
5
5
  import { WithProviders } from '@atlaskit/editor-common/provider-factory';
6
6
  import { MediaInlineNodeSelector } from './styles';
7
- import { stateKey as mediaStateKey } from '../pm-plugins/plugin-key';
8
7
  import { MediaNodeUpdater } from './mediaNodeUpdater';
9
8
  import { MediaInlineCardLoadingView } from '@atlaskit/media-ui';
10
9
  export const createMediaNodeUpdater = props => {
@@ -111,6 +110,33 @@ export const MediaInline = props => {
111
110
  mediaClientConfig: viewMediaClientConfig
112
111
  });
113
112
  };
113
+ const MediaInlineSharedState = ({
114
+ identifier,
115
+ mediaProvider,
116
+ node,
117
+ isSelected,
118
+ getPos,
119
+ contextIdentifierProvider,
120
+ api,
121
+ view
122
+ }) => {
123
+ const {
124
+ mediaState
125
+ } = useSharedPluginState(api, ['media']);
126
+ if (!mediaState) {
127
+ return null;
128
+ }
129
+ return /*#__PURE__*/React.createElement(MediaInline, {
130
+ identifier: identifier,
131
+ mediaProvider: mediaProvider,
132
+ mediaPluginState: mediaState,
133
+ node: node,
134
+ isSelected: isSelected,
135
+ view: view,
136
+ getPos: getPos,
137
+ contextIdentifierProvider: contextIdentifierProvider
138
+ });
139
+ };
114
140
  export class MediaInlineNodeView extends SelectionBasedNodeView {
115
141
  createDomRef() {
116
142
  const domRef = document.createElement('span');
@@ -135,8 +161,12 @@ export class MediaInlineNodeView extends SelectionBasedNodeView {
135
161
  }
136
162
  render(props) {
137
163
  const {
138
- providerFactory
164
+ providerFactory,
165
+ api
139
166
  } = props;
167
+ const {
168
+ view
169
+ } = this;
140
170
  const getPos = this.getPos;
141
171
  return /*#__PURE__*/React.createElement(WithProviders, {
142
172
  providers: ['mediaProvider', 'contextIdentifierProvider'],
@@ -148,36 +178,24 @@ export class MediaInlineNodeView extends SelectionBasedNodeView {
148
178
  if (!mediaProvider) {
149
179
  return null;
150
180
  }
151
- return /*#__PURE__*/React.createElement(WithPluginState, {
152
- editorView: this.view,
153
- plugins: {
154
- mediaPluginState: mediaStateKey
155
- },
156
- render: ({
157
- mediaPluginState
158
- }) => {
159
- if (!mediaPluginState) {
160
- return null;
161
- }
162
- return /*#__PURE__*/React.createElement(MediaInline, {
163
- identifier: this.node.attrs.id,
164
- mediaProvider: mediaProvider,
165
- mediaPluginState: mediaPluginState,
166
- node: this.node,
167
- isSelected: this.nodeInsideSelection(),
168
- view: this.view,
169
- getPos: getPos,
170
- contextIdentifierProvider: contextIdentifierProvider
171
- });
172
- }
181
+ return /*#__PURE__*/React.createElement(MediaInlineSharedState, {
182
+ identifier: this.node.attrs.id,
183
+ mediaProvider: mediaProvider,
184
+ node: this.node,
185
+ isSelected: this.nodeInsideSelection(),
186
+ view: view,
187
+ getPos: getPos,
188
+ contextIdentifierProvider: contextIdentifierProvider,
189
+ api: api
173
190
  });
174
191
  }
175
192
  });
176
193
  }
177
194
  }
178
- export const ReactMediaInlineNode = (portalProviderAPI, eventDispatcher, providerFactory, pluginInjectionApi, dispatchAnalyticsEvent) => (node, view, getPos) => {
195
+ export const ReactMediaInlineNode = (portalProviderAPI, eventDispatcher, providerFactory, api, dispatchAnalyticsEvent) => (node, view, getPos) => {
179
196
  return new MediaInlineNodeView(node, view, getPos, portalProviderAPI, eventDispatcher, {
180
197
  providerFactory,
181
- dispatchAnalyticsEvent
198
+ dispatchAnalyticsEvent,
199
+ api
182
200
  }).init();
183
201
  };