@atlaskit/editor-plugin-media 2.7.0 → 2.7.2

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 (59) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/cjs/mediaPlugin.js +21 -6
  3. package/dist/cjs/nodeviews/mediaGroup.js +21 -6
  4. package/dist/cjs/nodeviews/mediaInline.js +55 -13
  5. package/dist/cjs/nodeviews/mediaNodeView/index.js +11 -3
  6. package/dist/cjs/nodeviews/mediaSingle.js +87 -48
  7. package/dist/cjs/nodeviews/mediaSingleNext.js +5 -4
  8. package/dist/cjs/pm-plugins/utils/media-files.js +64 -6
  9. package/dist/cjs/ui/CommentBadge/index.js +44 -14
  10. package/dist/cjs/ui/ImageBorder/styles.js +1 -2
  11. package/dist/cjs/ui/MediaPicker/index.js +15 -3
  12. package/dist/cjs/ui/MediaViewer/MediaViewerContainer.js +3 -3
  13. package/dist/cjs/ui/ResizableMediaSingle/ResizableMediaSingleNext.js +2 -1
  14. package/dist/cjs/ui/ToolbarMedia/index.js +17 -5
  15. package/dist/cjs/ui/hooks/useMediaProvider.js +11 -3
  16. package/dist/cjs/ui/toolbar/utils.js +6 -4
  17. package/dist/es2019/mediaPlugin.js +21 -6
  18. package/dist/es2019/nodeviews/mediaGroup.js +21 -6
  19. package/dist/es2019/nodeviews/mediaInline.js +54 -12
  20. package/dist/es2019/nodeviews/mediaNodeView/index.js +11 -3
  21. package/dist/es2019/nodeviews/mediaSingle.js +59 -24
  22. package/dist/es2019/nodeviews/mediaSingleNext.js +5 -4
  23. package/dist/es2019/pm-plugins/utils/media-files.js +63 -5
  24. package/dist/es2019/ui/CommentBadge/index.js +40 -10
  25. package/dist/es2019/ui/ImageBorder/styles.js +1 -2
  26. package/dist/es2019/ui/MediaPicker/index.js +15 -3
  27. package/dist/es2019/ui/MediaViewer/MediaViewerContainer.js +4 -4
  28. package/dist/es2019/ui/ResizableMediaSingle/ResizableMediaSingleNext.js +2 -1
  29. package/dist/es2019/ui/ToolbarMedia/index.js +17 -5
  30. package/dist/es2019/ui/hooks/useMediaProvider.js +11 -3
  31. package/dist/es2019/ui/toolbar/utils.js +5 -3
  32. package/dist/esm/mediaPlugin.js +21 -6
  33. package/dist/esm/nodeviews/mediaGroup.js +21 -6
  34. package/dist/esm/nodeviews/mediaInline.js +55 -13
  35. package/dist/esm/nodeviews/mediaNodeView/index.js +11 -3
  36. package/dist/esm/nodeviews/mediaSingle.js +87 -48
  37. package/dist/esm/nodeviews/mediaSingleNext.js +5 -4
  38. package/dist/esm/pm-plugins/utils/media-files.js +63 -5
  39. package/dist/esm/ui/CommentBadge/index.js +44 -14
  40. package/dist/esm/ui/ImageBorder/styles.js +1 -2
  41. package/dist/esm/ui/MediaPicker/index.js +15 -3
  42. package/dist/esm/ui/MediaViewer/MediaViewerContainer.js +4 -4
  43. package/dist/esm/ui/ResizableMediaSingle/ResizableMediaSingleNext.js +2 -1
  44. package/dist/esm/ui/ToolbarMedia/index.js +17 -5
  45. package/dist/esm/ui/hooks/useMediaProvider.js +11 -3
  46. package/dist/esm/ui/toolbar/utils.js +5 -3
  47. package/dist/types/nodeviews/mediaInline.d.ts +7 -2
  48. package/dist/types/nodeviews/mediaSingleNext.d.ts +3 -4
  49. package/dist/types/nodeviews/types.d.ts +3 -4
  50. package/dist/types/pm-plugins/utils/media-files.d.ts +3 -2
  51. package/dist/types/ui/MediaViewer/MediaViewerContainer.d.ts +4 -3
  52. package/dist/types/ui/toolbar/utils.d.ts +1 -0
  53. package/dist/types-ts4.5/nodeviews/mediaInline.d.ts +7 -2
  54. package/dist/types-ts4.5/nodeviews/mediaSingleNext.d.ts +3 -4
  55. package/dist/types-ts4.5/nodeviews/types.d.ts +3 -4
  56. package/dist/types-ts4.5/pm-plugins/utils/media-files.d.ts +3 -2
  57. package/dist/types-ts4.5/ui/MediaViewer/MediaViewerContainer.d.ts +4 -3
  58. package/dist/types-ts4.5/ui/toolbar/utils.d.ts +1 -0
  59. package/package.json +10 -4
@@ -10,6 +10,7 @@ import { jsx } from '@emotion/react';
10
10
  import classnames from 'classnames';
11
11
  import throttle from 'lodash/throttle';
12
12
  import memoizeOne from 'memoize-one';
13
+ import { isSSR } from '@atlaskit/editor-common/core-utils';
13
14
  import { findClosestSnap, generateDefaultGuidelines, generateDynamicGuidelines, getGuidelineSnaps, getGuidelinesWithHighlights, getGuidelineTypeFromKey, getRelativeGuidelines, getRelativeGuideSnaps } from '@atlaskit/editor-common/guideline';
14
15
  import { calcMediaSingleMaxWidth, DEFAULT_IMAGE_WIDTH, MEDIA_SINGLE_ADJACENT_HANDLE_MARGIN, MEDIA_SINGLE_DEFAULT_MIN_PIXEL_WIDTH, MEDIA_SINGLE_RESIZE_THROTTLE_TIME, MEDIA_SINGLE_SNAP_GAP, MEDIA_SINGLE_VIDEO_MIN_PIXEL_WIDTH } from '@atlaskit/editor-common/media-single';
15
16
  import { ResizerNext } from '@atlaskit/editor-common/resizer';
@@ -457,7 +458,7 @@ class ResizableMediaSingleNext extends React.Component {
457
458
  const resizerNextClassName = classnames(className, resizerStyles);
458
459
  const isNestedNode = this.isAdjacentMode();
459
460
  const handlePositioning = this.getHandlePositioning();
460
- const maxWidth = this.getMaxWidth();
461
+ const maxWidth = isSSR() && size.width && fg('platform_editor_fix_image_size_diff_during_ssr') ? undefined : this.getMaxWidth();
461
462
  const minWidth = this.calcMinWidth(isVideoFile, lineLength);
462
463
 
463
464
  // while is not resizing, we take 100% as min-width if the container width is less than the min-width
@@ -3,9 +3,11 @@ import { injectIntl } from 'react-intl-next';
3
3
  import { useSharedPluginState } from '@atlaskit/editor-common/hooks';
4
4
  import { toolbarMediaMessages } from '@atlaskit/editor-common/media';
5
5
  import { TOOLBAR_BUTTON, ToolbarButton } from '@atlaskit/editor-common/ui-menu';
6
+ import { useSharedPluginStateSelector } from '@atlaskit/editor-common/use-shared-plugin-state-selector';
6
7
  import AttachmentIcon from '@atlaskit/icon/core/migration/attachment--editor-attachment';
7
- const onClickMediaButton = pluginState => () => {
8
- pluginState.showMediaPicker();
8
+ import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
9
+ const onClickMediaButton = showMediaPicker => () => {
10
+ showMediaPicker();
9
11
  return true;
10
12
  };
11
13
  const ToolbarMedia = ({
@@ -16,8 +18,18 @@ const ToolbarMedia = ({
16
18
  }) => {
17
19
  const {
18
20
  mediaState
19
- } = useSharedPluginState(api, ['media']);
20
- if (!(mediaState !== null && mediaState !== void 0 && mediaState.allowsUploads)) {
21
+ } = useSharedPluginState(api, ['media'], {
22
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', true)
23
+ });
24
+ const allowsUploadsSelector = useSharedPluginStateSelector(api, 'media.allowsUploads', {
25
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', false)
26
+ });
27
+ const showMediaPickerSelector = useSharedPluginStateSelector(api, 'media.showMediaPicker', {
28
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', false)
29
+ });
30
+ const allowsUploads = editorExperiment('platform_editor_usesharedpluginstateselector', true) ? allowsUploadsSelector : mediaState === null || mediaState === void 0 ? void 0 : mediaState.allowsUploads;
31
+ const showMediaPicker = editorExperiment('platform_editor_usesharedpluginstateselector', true) ? showMediaPickerSelector : mediaState === null || mediaState === void 0 ? void 0 : mediaState.showMediaPicker;
32
+ if (!allowsUploads || !showMediaPicker) {
21
33
  return null;
22
34
  }
23
35
  const {
@@ -25,7 +37,7 @@ const ToolbarMedia = ({
25
37
  } = toolbarMediaMessages;
26
38
  return /*#__PURE__*/React.createElement(ToolbarButton, {
27
39
  buttonId: TOOLBAR_BUTTON.MEDIA,
28
- onClick: onClickMediaButton(mediaState),
40
+ onClick: onClickMediaButton(showMediaPicker),
29
41
  disabled: isDisabled,
30
42
  title: intl.formatMessage(toolbarMediaTitle),
31
43
  spacing: isReducedSpacing ? 'none' : 'default',
@@ -1,11 +1,19 @@
1
1
  import { useMemo } from 'react';
2
2
  import { useSharedPluginState } from '@atlaskit/editor-common/hooks';
3
+ import { useSharedPluginStateSelector } from '@atlaskit/editor-common/use-shared-plugin-state-selector';
4
+ import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
3
5
  export const useMediaProvider = pluginInjectionApi => {
4
6
  const {
5
7
  mediaState
6
- } = useSharedPluginState(pluginInjectionApi, ['media']);
8
+ } = useSharedPluginState(pluginInjectionApi, ['media'], {
9
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', true)
10
+ });
11
+ const mediaProviderSelector = useSharedPluginStateSelector(pluginInjectionApi, 'media.mediaProvider', {
12
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', false)
13
+ });
14
+ const mediaProvider = editorExperiment('platform_editor_usesharedpluginstateselector', true) ? mediaProviderSelector : mediaState === null || mediaState === void 0 ? void 0 : mediaState.mediaProvider;
7
15
  const provider = useMemo(() => {
8
- return mediaState === null || mediaState === void 0 ? void 0 : mediaState.mediaProvider;
9
- }, [mediaState === null || mediaState === void 0 ? void 0 : mediaState.mediaProvider]);
16
+ return mediaProvider;
17
+ }, [mediaProvider]);
10
18
  return provider;
11
19
  };
@@ -16,9 +16,8 @@ const getSelectedMediaContainerNodeAttrs = mediaPluginState => {
16
16
  }
17
17
  return null;
18
18
  };
19
- export const getSelectedNearestMediaContainerNodeAttrs = mediaPluginState => {
20
- var _mediaPluginState$sel2;
21
- const selectedNode = (_mediaPluginState$sel2 = mediaPluginState.selectedMediaContainerNode) === null || _mediaPluginState$sel2 === void 0 ? void 0 : _mediaPluginState$sel2.call(mediaPluginState);
19
+ export const getSelectedNearestMediaContainerNodeAttrsFunction = selectedMediaContainerNode => {
20
+ const selectedNode = selectedMediaContainerNode === null || selectedMediaContainerNode === void 0 ? void 0 : selectedMediaContainerNode();
22
21
  if (selectedNode) {
23
22
  switch (selectedNode.type.name) {
24
23
  case 'mediaSingle':
@@ -32,6 +31,9 @@ export const getSelectedNearestMediaContainerNodeAttrs = mediaPluginState => {
32
31
  }
33
32
  return null;
34
33
  };
34
+ export const getSelectedNearestMediaContainerNodeAttrs = mediaPluginState => {
35
+ return getSelectedNearestMediaContainerNodeAttrsFunction(mediaPluginState.selectedMediaContainerNode);
36
+ };
35
37
  export const downloadMedia = async (mediaPluginState, isViewMode) => {
36
38
  try {
37
39
  const selectedNodeAttrs = isViewMode ? getSelectedNearestMediaContainerNodeAttrs(mediaPluginState) : getSelectedMediaContainerNodeAttrs(mediaPluginState);
@@ -4,6 +4,7 @@ import { useSharedPluginState } from '@atlaskit/editor-common/hooks';
4
4
  import { toolbarInsertBlockMessages as messages } from '@atlaskit/editor-common/messages';
5
5
  import { IconImages } from '@atlaskit/editor-common/quick-insert';
6
6
  import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
7
+ import { useSharedPluginStateSelector } from '@atlaskit/editor-common/use-shared-plugin-state-selector';
7
8
  import { NodeSelection, PluginKey } from '@atlaskit/editor-prosemirror/state';
8
9
  import { getMediaFeatureFlag } from '@atlaskit/media-common';
9
10
  import { fg } from '@atlaskit/platform-feature-flags';
@@ -51,22 +52,36 @@ var MediaPickerFunctionalComponent = function MediaPickerFunctionalComponent(_re
51
52
  var MediaViewerFunctionalComponent = function MediaViewerFunctionalComponent(_ref2) {
52
53
  var api = _ref2.api,
53
54
  editorView = _ref2.editorView;
54
- var _useSharedPluginState2 = useSharedPluginState(api, ['media']),
55
+ var _useSharedPluginState2 = useSharedPluginState(api, ['media'], {
56
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', true)
57
+ }),
55
58
  mediaState = _useSharedPluginState2.mediaState;
59
+ var isMediaViewerVisibleSelector = useSharedPluginStateSelector(api, 'media.isMediaViewerVisible', {
60
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', false)
61
+ });
62
+ var mediaViewerSelectedMediaSelector = useSharedPluginStateSelector(api, 'media.mediaViewerSelectedMedia', {
63
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', false)
64
+ });
65
+ var mediaClientConfigSelector = useSharedPluginStateSelector(api, 'media.mediaClientConfig', {
66
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', false)
67
+ });
68
+ var isMediaViewerVisible = editorExperiment('platform_editor_usesharedpluginstateselector', true) ? isMediaViewerVisibleSelector : mediaState === null || mediaState === void 0 ? void 0 : mediaState.isMediaViewerVisible;
69
+ var mediaViewerSelectedMedia = editorExperiment('platform_editor_usesharedpluginstateselector', true) ? mediaViewerSelectedMediaSelector : mediaState === null || mediaState === void 0 ? void 0 : mediaState.mediaViewerSelectedMedia;
70
+ var mediaClientConfig = editorExperiment('platform_editor_usesharedpluginstateselector', true) ? mediaClientConfigSelector : mediaState === null || mediaState === void 0 ? void 0 : mediaState.mediaClientConfig;
56
71
 
57
72
  // Only traverse document once when media viewer is visible, media viewer items will not update
58
73
  // when document changes are made while media viewer is open
59
74
 
60
75
  var mediaItems = useMemo(function () {
61
- if (mediaState !== null && mediaState !== void 0 && mediaState.isMediaViewerVisible) {
76
+ if (isMediaViewerVisible) {
62
77
  var mediaNodes = extractMediaNodes(editorView.state.doc);
63
78
  return createMediaIdentifierArray(mediaNodes);
64
79
  }
65
80
  // eslint-disable-next-line react-hooks/exhaustive-deps -- only update mediaItems once when media viewer is visible
66
- }, [mediaState === null || mediaState === void 0 ? void 0 : mediaState.isMediaViewerVisible]);
81
+ }, [isMediaViewerVisible]);
67
82
 
68
83
  // Viewer does not have required attributes to render the media viewer
69
- if (!(mediaState !== null && mediaState !== void 0 && mediaState.isMediaViewerVisible) || !(mediaState !== null && mediaState !== void 0 && mediaState.mediaViewerSelectedMedia) || !(mediaState !== null && mediaState !== void 0 && mediaState.mediaClientConfig)) {
84
+ if (!isMediaViewerVisible || !mediaViewerSelectedMedia || !mediaClientConfig) {
70
85
  return null;
71
86
  }
72
87
  var handleOnClose = function handleOnClose() {
@@ -74,9 +89,9 @@ var MediaViewerFunctionalComponent = function MediaViewerFunctionalComponent(_re
74
89
  api === null || api === void 0 || api.core.actions.execute(api === null || api === void 0 ? void 0 : api.media.commands.hideMediaViewer);
75
90
  };
76
91
  return /*#__PURE__*/React.createElement(RenderMediaViewer, {
77
- mediaClientConfig: mediaState === null || mediaState === void 0 ? void 0 : mediaState.mediaClientConfig,
92
+ mediaClientConfig: mediaClientConfig,
78
93
  onClose: handleOnClose,
79
- selectedNodeAttrs: mediaState.mediaViewerSelectedMedia,
94
+ selectedNodeAttrs: mediaViewerSelectedMedia,
80
95
  items: mediaItems
81
96
  });
82
97
  };
@@ -16,6 +16,7 @@ import { useSharedPluginState } from '@atlaskit/editor-common/hooks';
16
16
  import { nodeViewsMessages as messages } from '@atlaskit/editor-common/media';
17
17
  import { WithProviders } from '@atlaskit/editor-common/provider-factory';
18
18
  import ReactNodeView from '@atlaskit/editor-common/react-node-view';
19
+ import { useSharedPluginStateSelector } from '@atlaskit/editor-common/use-shared-plugin-state-selector';
19
20
  import { isNodeSelectedOrInRange, SelectedState, setNodeSelection } from '@atlaskit/editor-common/utils';
20
21
  import EditorCloseIcon from '@atlaskit/icon/core/migration/close--editor-close';
21
22
  import { getMediaFeatureFlag } from '@atlaskit/media-common';
@@ -304,13 +305,25 @@ export default IntlMediaGroup;
304
305
  function MediaGroupNodeViewInternal(_ref3) {
305
306
  var renderFn = _ref3.renderFn,
306
307
  pluginInjectionApi = _ref3.pluginInjectionApi;
307
- var _useSharedPluginState = useSharedPluginState(pluginInjectionApi, ['editorDisabled', 'editorViewMode']),
308
+ var _useSharedPluginState = useSharedPluginState(pluginInjectionApi, ['editorDisabled', 'editorViewMode'], {
309
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', true)
310
+ }),
308
311
  editorDisabledPlugin = _useSharedPluginState.editorDisabledState,
309
312
  editorViewModePlugin = _useSharedPluginState.editorViewModeState;
313
+ var editorDisabledSelector = useSharedPluginStateSelector(pluginInjectionApi, 'editorDisabled.editorDisabled', {
314
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', false)
315
+ });
316
+ var editorViewModeSelector = useSharedPluginStateSelector(pluginInjectionApi, 'editorViewMode.mode', {
317
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', false)
318
+ });
319
+ var editorDisabled = editorExperiment('platform_editor_usesharedpluginstateselector', true) ? editorDisabledSelector : editorDisabledPlugin === null || editorDisabledPlugin === void 0 ? void 0 : editorDisabledPlugin.editorDisabled;
320
+ var editorViewMode = editorExperiment('platform_editor_usesharedpluginstateselector', true) ? editorViewModeSelector : editorViewModePlugin === null || editorViewModePlugin === void 0 ? void 0 : editorViewModePlugin.mode;
310
321
  var mediaProvider = useMediaProvider(pluginInjectionApi);
311
322
  return renderFn({
312
323
  editorDisabledPlugin: editorDisabledPlugin,
313
324
  editorViewModePlugin: editorViewModePlugin,
325
+ editorDisabled: editorDisabled,
326
+ editorViewMode: editorViewMode,
314
327
  mediaProvider: mediaProvider
315
328
  });
316
329
  }
@@ -336,7 +349,9 @@ var MediaGroupNodeView = /*#__PURE__*/function (_ReactNodeView) {
336
349
  var renderFn = function renderFn(_ref5) {
337
350
  var editorDisabledPlugin = _ref5.editorDisabledPlugin,
338
351
  editorViewModePlugin = _ref5.editorViewModePlugin,
339
- mediaProviderFromState = _ref5.mediaProvider;
352
+ mediaProviderFromState = _ref5.mediaProvider,
353
+ editorDisabled = _ref5.editorDisabled,
354
+ editorViewMode = _ref5.editorViewMode;
340
355
  var mediaProvider = mediaProviderFromState ? Promise.resolve(mediaProviderFromState) : undefined;
341
356
  if (!mediaProvider) {
342
357
  return null;
@@ -347,7 +362,7 @@ var MediaGroupNodeView = /*#__PURE__*/function (_ReactNodeView) {
347
362
  getPos: getPos,
348
363
  view: _this3.view,
349
364
  forwardRef: forwardRef,
350
- disabled: (editorDisabledPlugin || {}).editorDisabled,
365
+ disabled: editorDisabled,
351
366
  allowLazyLoading: mediaOptions.allowLazyLoading,
352
367
  mediaProvider: mediaProvider,
353
368
  contextIdentifierProvider: contextIdentifierProvider,
@@ -355,7 +370,7 @@ var MediaGroupNodeView = /*#__PURE__*/function (_ReactNodeView) {
355
370
  anchorPos: _this3.view.state.selection.$anchor.pos,
356
371
  headPos: _this3.view.state.selection.$head.pos,
357
372
  mediaOptions: mediaOptions,
358
- editorViewMode: (editorViewModePlugin === null || editorViewModePlugin === void 0 ? void 0 : editorViewModePlugin.mode) === 'view'
373
+ editorViewMode: editorViewMode === 'view'
359
374
  });
360
375
  }
361
376
  return /*#__PURE__*/React.createElement(IntlMediaGroup, {
@@ -363,7 +378,7 @@ var MediaGroupNodeView = /*#__PURE__*/function (_ReactNodeView) {
363
378
  getPos: getPos,
364
379
  view: _this3.view,
365
380
  forwardRef: forwardRef,
366
- disabled: (editorDisabledPlugin || {}).editorDisabled,
381
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', true) ? editorDisabled : (editorDisabledPlugin || {}).editorDisabled,
367
382
  allowLazyLoading: mediaOptions.allowLazyLoading,
368
383
  mediaProvider: mediaProvider,
369
384
  contextIdentifierProvider: contextIdentifierProvider,
@@ -371,7 +386,7 @@ var MediaGroupNodeView = /*#__PURE__*/function (_ReactNodeView) {
371
386
  anchorPos: _this3.view.state.selection.$anchor.pos,
372
387
  headPos: _this3.view.state.selection.$head.pos,
373
388
  mediaOptions: mediaOptions,
374
- editorViewMode: (editorViewModePlugin === null || editorViewModePlugin === void 0 ? void 0 : editorViewModePlugin.mode) === 'view'
389
+ editorViewMode: editorExperiment('platform_editor_usesharedpluginstateselector', true) ? editorViewMode === 'view' : (editorViewModePlugin === null || editorViewModePlugin === void 0 ? void 0 : editorViewModePlugin.mode) === 'view'
375
390
  });
376
391
  };
377
392
  return /*#__PURE__*/React.createElement(MediaGroupNodeViewInternal, {
@@ -25,10 +25,12 @@ import { useSharedPluginState } from '@atlaskit/editor-common/hooks';
25
25
  import { MediaInlineImageCard } from '@atlaskit/editor-common/media-inline';
26
26
  import { WithProviders } from '@atlaskit/editor-common/provider-factory';
27
27
  import { SelectionBasedNodeView } from '@atlaskit/editor-common/selection-based-node-view';
28
+ import { useSharedPluginStateSelector } from '@atlaskit/editor-common/use-shared-plugin-state-selector';
28
29
  import { MediaInlineCard } from '@atlaskit/media-card';
29
30
  import { getMediaClient } from '@atlaskit/media-client-react';
30
31
  import { MediaInlineCardLoadingView } from '@atlaskit/media-ui';
31
32
  import { fg } from '@atlaskit/platform-feature-flags';
33
+ import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
32
34
  import { isImage } from '../pm-plugins/utils/is-type';
33
35
  import { MediaViewerContainer } from '../ui/MediaViewer/MediaViewerContainer';
34
36
  import { MediaNodeUpdater } from './mediaNodeUpdater';
@@ -54,7 +56,7 @@ var updateMediaNodeAttributes = /*#__PURE__*/function () {
54
56
  return _regeneratorRuntime.wrap(function _callee$(_context) {
55
57
  while (1) switch (_context.prev = _context.next) {
56
58
  case 0:
57
- addPendingTask = props.mediaPluginState.addPendingTask;
59
+ addPendingTask = props.addPendingTask;
58
60
  node = props.node;
59
61
  if (node) {
60
62
  _context.next = 4;
@@ -107,9 +109,9 @@ var updateMediaNodeAttributes = /*#__PURE__*/function () {
107
109
  }();
108
110
  export var handleNewNode = function handleNewNode(props) {
109
111
  var node = props.node,
110
- mediaPluginState = props.mediaPluginState,
112
+ handleMediaNodeMount = props.handleMediaNodeMount,
111
113
  getPos = props.getPos;
112
- mediaPluginState.handleMediaNodeMount(node, function () {
114
+ handleMediaNodeMount(node, function () {
113
115
  return getPos();
114
116
  });
115
117
  };
@@ -130,8 +132,8 @@ export var MediaInline = function MediaInline(props) {
130
132
  updateMediaNodeAttributes(props, mediaNodeUpdater);
131
133
  updateViewMediaClientConfig(props);
132
134
  return function () {
133
- var mediaPluginState = props.mediaPluginState;
134
- mediaPluginState.handleMediaNodeUnmount(props.node);
135
+ var handleMediaNodeUnmount = props.handleMediaNodeUnmount;
136
+ handleMediaNodeUnmount(props.node);
135
137
  };
136
138
  }, [props]);
137
139
  var updateViewMediaClientConfig = /*#__PURE__*/function () {
@@ -186,7 +188,7 @@ export var MediaInline = function MediaInline(props) {
186
188
  isSelected: false
187
189
  });
188
190
  }
189
- var allowInlineImages = props.mediaPluginState.allowInlineImages;
191
+ var allowInlineImages = props.allowInlineImages;
190
192
  var borderMark = (_props$node = props.node) === null || _props$node === void 0 || (_props$node = _props$node.marks) === null || _props$node === void 0 ? void 0 : _props$node.find(function (mark) {
191
193
  return mark.type.name === 'border';
192
194
  });
@@ -207,7 +209,8 @@ export var MediaInline = function MediaInline(props) {
207
209
  }
208
210
  return jsx(MediaViewerContainer, {
209
211
  mediaNode: props.node,
210
- mediaPluginState: props.mediaPluginState,
212
+ selectedMediaContainerNode: props.selectedMediaContainerNode,
213
+ mediaClientConfig: props.mediaClientConfig,
211
214
  isEditorViewMode: props.editorViewMode,
212
215
  isSelected: props.isSelected,
213
216
  isInline: fg('platform_editor_render_media_viewer_as_inline')
@@ -225,25 +228,64 @@ var MediaInlineSharedState = function MediaInlineSharedState(_ref3) {
225
228
  contextIdentifierProvider = _ref3.contextIdentifierProvider,
226
229
  api = _ref3.api,
227
230
  view = _ref3.view;
228
- var _useSharedPluginState = useSharedPluginState(api, ['editorViewMode', 'media']),
231
+ var _useSharedPluginState = useSharedPluginState(api, ['editorViewMode', 'media'], {
232
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', true)
233
+ }),
229
234
  editorViewModeState = _useSharedPluginState.editorViewModeState,
230
235
  mediaState = _useSharedPluginState.mediaState;
236
+ var viewModeSelector = useSharedPluginStateSelector(api, 'editorViewMode.mode', {
237
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', false)
238
+ });
239
+ var mediaProviderSelector = useSharedPluginStateSelector(api, 'media.mediaProvider', {
240
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', false)
241
+ });
242
+ var handleMediaNodeMountSelector = useSharedPluginStateSelector(api, 'media.handleMediaNodeMount', {
243
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', false)
244
+ });
245
+ var handleMediaNodeUnmountSelector = useSharedPluginStateSelector(api, 'media.handleMediaNodeUnmount', {
246
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', false)
247
+ });
248
+ var allowInlineImagesSelector = useSharedPluginStateSelector(api, 'media.allowInlineImages', {
249
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', false)
250
+ });
251
+ var addPendingTaskSelector = useSharedPluginStateSelector(api, 'media.addPendingTask', {
252
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', false)
253
+ });
254
+ var selectedMediaContainerNodeSelector = useSharedPluginStateSelector(api, 'media.selectedMediaContainerNode', {
255
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', false)
256
+ });
257
+ var mediaClientConfigSelector = useSharedPluginStateSelector(api, 'media.mediaClientConfig', {
258
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', false)
259
+ });
260
+ var viewMode = editorExperiment('platform_editor_usesharedpluginstateselector', true) ? viewModeSelector : editorViewModeState === null || editorViewModeState === void 0 ? void 0 : editorViewModeState.mode;
261
+ var mediaProvider = editorExperiment('platform_editor_usesharedpluginstateselector', true) ? mediaProviderSelector : mediaState === null || mediaState === void 0 ? void 0 : mediaState.mediaProvider;
262
+ var handleMediaNodeMount = editorExperiment('platform_editor_usesharedpluginstateselector', true) ? handleMediaNodeMountSelector : mediaState === null || mediaState === void 0 ? void 0 : mediaState.handleMediaNodeMount;
263
+ var handleMediaNodeUnmount = editorExperiment('platform_editor_usesharedpluginstateselector', true) ? handleMediaNodeUnmountSelector : mediaState === null || mediaState === void 0 ? void 0 : mediaState.handleMediaNodeUnmount;
264
+ var allowInlineImages = editorExperiment('platform_editor_usesharedpluginstateselector', true) ? allowInlineImagesSelector : mediaState === null || mediaState === void 0 ? void 0 : mediaState.allowInlineImages;
265
+ var addPendingTask = editorExperiment('platform_editor_usesharedpluginstateselector', true) ? addPendingTaskSelector : mediaState === null || mediaState === void 0 ? void 0 : mediaState.addPendingTask;
266
+ var selectedMediaContainerNode = editorExperiment('platform_editor_usesharedpluginstateselector', true) ? selectedMediaContainerNodeSelector : mediaState === null || mediaState === void 0 ? void 0 : mediaState.selectedMediaContainerNode;
267
+ var mediaClientConfig = editorExperiment('platform_editor_usesharedpluginstateselector', true) ? mediaClientConfigSelector : mediaState === null || mediaState === void 0 ? void 0 : mediaState.mediaClientConfig;
231
268
  var newMediaProvider = useMemo(function () {
232
- return mediaState !== null && mediaState !== void 0 && mediaState.mediaProvider ? Promise.resolve(mediaState === null || mediaState === void 0 ? void 0 : mediaState.mediaProvider) : undefined;
233
- }, [mediaState === null || mediaState === void 0 ? void 0 : mediaState.mediaProvider]);
234
- if (!mediaState || !newMediaProvider) {
269
+ return mediaProvider ? Promise.resolve(mediaProvider) : undefined;
270
+ }, [mediaProvider]);
271
+ if (!handleMediaNodeMount || !handleMediaNodeUnmount || !addPendingTask || !selectedMediaContainerNode || !mediaClientConfig || !newMediaProvider) {
235
272
  return null;
236
273
  }
237
274
  return jsx(MediaInline, {
238
275
  identifier: identifier,
239
276
  mediaProvider: newMediaProvider,
240
- mediaPluginState: mediaState,
277
+ handleMediaNodeMount: handleMediaNodeMount,
278
+ handleMediaNodeUnmount: handleMediaNodeUnmount,
279
+ allowInlineImages: allowInlineImages,
280
+ addPendingTask: addPendingTask,
281
+ selectedMediaContainerNode: selectedMediaContainerNode,
282
+ mediaClientConfig: mediaClientConfig,
241
283
  node: node,
242
284
  isSelected: isSelected,
243
285
  view: view,
244
286
  getPos: getPos,
245
287
  contextIdentifierProvider: contextIdentifierProvider,
246
- editorViewMode: (editorViewModeState === null || editorViewModeState === void 0 ? void 0 : editorViewModeState.mode) === 'view'
288
+ editorViewMode: viewMode === 'view'
247
289
  });
248
290
  };
249
291
  export var MediaInlineNodeView = /*#__PURE__*/function (_SelectionBasedNodeVi) {
@@ -17,7 +17,9 @@ import { useSharedPluginState } from '@atlaskit/editor-common/hooks';
17
17
  import { DEFAULT_IMAGE_HEIGHT, DEFAULT_IMAGE_WIDTH } from '@atlaskit/editor-common/media-single';
18
18
  import { WithProviders } from '@atlaskit/editor-common/provider-factory';
19
19
  import { SelectionBasedNodeView } from '@atlaskit/editor-common/selection-based-node-view';
20
+ import { useSharedPluginStateSelector } from '@atlaskit/editor-common/use-shared-plugin-state-selector';
20
21
  import { getAttrsFromUrl } from '@atlaskit/media-client';
22
+ import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
21
23
  import { updateCurrentMediaNodeAttrs } from '../../pm-plugins/commands/helpers';
22
24
  import { isMediaBlobUrlFromAttrs } from '../../pm-plugins/utils/media-common';
23
25
  // Ignored via go/ees005
@@ -26,12 +28,18 @@ import MediaNode from './media';
26
28
  var MediaNodeWithProviders = function MediaNodeWithProviders(_ref) {
27
29
  var pluginInjectionApi = _ref.pluginInjectionApi,
28
30
  innerComponent = _ref.innerComponent;
29
- var _useSharedPluginState = useSharedPluginState(pluginInjectionApi, ['width', 'media']),
31
+ var _useSharedPluginState = useSharedPluginState(pluginInjectionApi, ['width', 'media'], {
32
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', true)
33
+ }),
30
34
  widthState = _useSharedPluginState.widthState,
31
35
  mediaState = _useSharedPluginState.mediaState;
36
+ var mediaProviderSelector = useSharedPluginStateSelector(pluginInjectionApi, 'media.mediaProvider', {
37
+ disabled: editorExperiment('platform_editor_usesharedpluginstateselector', false)
38
+ });
39
+ var mediaProvider = editorExperiment('platform_editor_usesharedpluginstateselector', true) ? mediaProviderSelector : mediaState === null || mediaState === void 0 ? void 0 : mediaState.mediaProvider;
32
40
  return innerComponent({
33
- width: widthState,
34
- mediaProvider: mediaState !== null && mediaState !== void 0 && mediaState.mediaProvider ? Promise.resolve(mediaState === null || mediaState === void 0 ? void 0 : mediaState.mediaProvider) : undefined
41
+ width: editorExperiment('platform_editor_usesharedpluginstateselector', true) ? widthState : undefined,
42
+ mediaProvider: mediaProvider ? Promise.resolve(mediaProvider) : undefined
35
43
  });
36
44
  };
37
45
  function isMediaDecorationSpec(decoration) {