@atlaskit/editor-plugin-media-insert 3.0.0 → 3.1.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,34 @@
1
1
  # @atlaskit/editor-plugin-media-insert
2
2
 
3
+ ## 3.1.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [#147220](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/147220)
8
+ [`6d387adfcf115`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/6d387adfcf115) -
9
+ [ux] [ED-25164] Disable media popup toolbar pinning
10
+ - Updated dependencies
11
+
12
+ ## 3.1.0
13
+
14
+ ### Minor Changes
15
+
16
+ - [#146643](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/146643)
17
+ [`6b3dec2ad5378`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/6b3dec2ad5378) -
18
+ [ux] ED-25116 Pin media popup to toolbar when triggered from toolbar
19
+
20
+ ### Patch Changes
21
+
22
+ - [#146446](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/146446)
23
+ [`c98c34dd5f307`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/c98c34dd5f307) -
24
+ [ED-24941] Added analytics for media-insert
25
+
26
+ - **@atlaskit/editor-common**: Add enums and types for new anaylics params
27
+ - **@atlaskit/editor-plugin-media**: Include 'insertMediaVia' on analytics events for inserting
28
+ media into the document
29
+ - **@atlaskit/editor-plugin-media-insert**: Set 'insertMediaVia' field for particular
30
+ 'externalUpload', 'externalUrl' or 'localUpload' media inserts
31
+
3
32
  ## 3.0.0
4
33
 
5
34
  ### Patch Changes
@@ -10,18 +10,21 @@ var ACTION_OPEN_POPUP = exports.ACTION_OPEN_POPUP = 'OPEN_POPUP';
10
10
  var ACTION_CLOSE_POPUP = exports.ACTION_CLOSE_POPUP = 'CLOSE_POPUP';
11
11
  var setPopupMeta = function setPopupMeta(_ref) {
12
12
  var type = _ref.type,
13
- tr = _ref.tr;
13
+ tr = _ref.tr,
14
+ target = _ref.target;
14
15
  return tr.setMeta(_pluginKey.pluginKey, {
15
- type: type
16
+ type: type,
17
+ target: target
16
18
  });
17
19
  };
18
- var showMediaInsertPopup = exports.showMediaInsertPopup = function showMediaInsertPopup(tr) {
20
+ var showMediaInsertPopup = exports.showMediaInsertPopup = function showMediaInsertPopup(tr, target) {
19
21
  // Log exposure here but don't actually switch anything on it
20
22
  (0, _experiments.editorExperiment)('add-media-from-url', true, {
21
23
  exposure: true
22
24
  });
23
25
  return setPopupMeta({
24
26
  type: ACTION_OPEN_POPUP,
27
+ target: target,
25
28
  tr: tr
26
29
  });
27
30
  };
@@ -35,15 +35,19 @@ var mediaInsertPlugin = exports.mediaInsertPlugin = function mediaInsertPlugin(_
35
35
  };
36
36
  }
37
37
  var _ref2 = _pluginKey.pluginKey.getState(editorState) || {},
38
- isOpen = _ref2.isOpen;
38
+ isOpen = _ref2.isOpen,
39
+ target = _ref2.target;
39
40
  return {
40
- isOpen: isOpen
41
+ isOpen: isOpen,
42
+ target: target
41
43
  };
42
44
  },
43
45
  commands: {
44
- showMediaInsertPopup: function showMediaInsertPopup(_ref3) {
45
- var tr = _ref3.tr;
46
- return (0, _actions.showMediaInsertPopup)(tr);
46
+ showMediaInsertPopup: function showMediaInsertPopup(target) {
47
+ return function (_ref3) {
48
+ var tr = _ref3.tr;
49
+ return (0, _actions.showMediaInsertPopup)(tr, target);
50
+ };
47
51
  }
48
52
  },
49
53
  contentComponent: function contentComponent(_ref4) {
@@ -55,7 +59,8 @@ var mediaInsertPlugin = exports.mediaInsertPlugin = function mediaInsertPlugin(_
55
59
  var insertMediaSingle = function insertMediaSingle(_ref5) {
56
60
  var _api$media$actions$in;
57
61
  var mediaState = _ref5.mediaState,
58
- inputMethod = _ref5.inputMethod;
62
+ inputMethod = _ref5.inputMethod,
63
+ insertMediaVia = _ref5.insertMediaVia;
59
64
  var id = mediaState.id,
60
65
  dimensions = mediaState.dimensions,
61
66
  contextId = mediaState.contextId,
@@ -80,7 +85,7 @@ var mediaInsertPlugin = exports.mediaInsertPlugin = function mediaInsertPlugin(_
80
85
  alt: fileName,
81
86
  __fileMimeType: mediaState.fileMimeType
82
87
  });
83
- return (_api$media$actions$in = api === null || api === void 0 ? void 0 : api.media.actions.insertMediaAsMediaSingle(editorView, node, inputMethod, isNestingInQuoteSupported)) !== null && _api$media$actions$in !== void 0 ? _api$media$actions$in : false;
88
+ return (_api$media$actions$in = api === null || api === void 0 ? void 0 : api.media.actions.insertMediaAsMediaSingle(editorView, node, inputMethod, isNestingInQuoteSupported, insertMediaVia)) !== null && _api$media$actions$in !== void 0 ? _api$media$actions$in : false;
84
89
  };
85
90
  var insertExternalMediaSingle = function insertExternalMediaSingle(_ref7) {
86
91
  var _api$media$actions$in2;
@@ -93,7 +98,7 @@ var mediaInsertPlugin = exports.mediaInsertPlugin = function mediaInsertPlugin(_
93
98
  alt: alt,
94
99
  __external: true
95
100
  });
96
- return (_api$media$actions$in2 = api === null || api === void 0 ? void 0 : api.media.actions.insertMediaAsMediaSingle(editorView, node, inputMethod, isNestingInQuoteSupported)) !== null && _api$media$actions$in2 !== void 0 ? _api$media$actions$in2 : false;
101
+ return (_api$media$actions$in2 = api === null || api === void 0 ? void 0 : api.media.actions.insertMediaAsMediaSingle(editorView, node, inputMethod, isNestingInQuoteSupported, _analytics.INSERT_MEDIA_VIA.EXTERNAL_URL)) !== null && _api$media$actions$in2 !== void 0 ? _api$media$actions$in2 : false;
97
102
  };
98
103
  var insertFile = function insertFile(_ref8) {
99
104
  var _api$media$sharedStat, _api$media$sharedStat2;
@@ -101,7 +106,7 @@ var mediaInsertPlugin = exports.mediaInsertPlugin = function mediaInsertPlugin(_
101
106
  inputMethod = _ref8.inputMethod,
102
107
  onMediaStateChanged = _ref8.onMediaStateChanged;
103
108
  var collection = mediaState.collection;
104
- return collection !== undefined ? (_api$media$sharedStat = api === null || api === void 0 || (_api$media$sharedStat2 = api.media.sharedState.currentState()) === null || _api$media$sharedStat2 === void 0 ? void 0 : _api$media$sharedStat2.insertFile(mediaState, onMediaStateChanged, inputMethod)) !== null && _api$media$sharedStat !== void 0 ? _api$media$sharedStat : false : false;
109
+ return collection !== undefined ? (_api$media$sharedStat = api === null || api === void 0 || (_api$media$sharedStat2 = api.media.sharedState.currentState()) === null || _api$media$sharedStat2 === void 0 ? void 0 : _api$media$sharedStat2.insertFile(mediaState, onMediaStateChanged, inputMethod, _analytics.INSERT_MEDIA_VIA.LOCAL_UPLOAD)) !== null && _api$media$sharedStat !== void 0 ? _api$media$sharedStat : false : false;
105
110
  };
106
111
  return /*#__PURE__*/_react.default.createElement(_MediaInsertPicker.MediaInsertPicker, {
107
112
  api: api,
@@ -135,7 +140,7 @@ var mediaInsertPlugin = exports.mediaInsertPlugin = function mediaInsertPlugin(_
135
140
  // Insert empty string to remove the typeahead raw text
136
141
  // close the quick insert immediately
137
142
  var tr = insert('');
138
- api === null || api === void 0 || api.mediaInsert.commands.showMediaInsertPopup({
143
+ api === null || api === void 0 || api.mediaInsert.commands.showMediaInsertPopup()({
139
144
  tr: tr
140
145
  });
141
146
  api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 || (_api$analytics = _api$analytics.actions) === null || _api$analytics === void 0 || _api$analytics.attachAnalyticsEvent({
@@ -12,26 +12,24 @@ var createPlugin = exports.createPlugin = function createPlugin() {
12
12
  state: {
13
13
  init: function init() {
14
14
  return {
15
- isOpen: false
15
+ isOpen: false,
16
+ target: undefined
16
17
  };
17
18
  },
18
19
  apply: function apply(tr, mediaInsertPluginState) {
19
20
  var meta = tr.getMeta(_pluginKey.pluginKey);
20
- if (meta) {
21
- switch (meta.type) {
22
- case _actions.ACTION_OPEN_POPUP:
23
- return {
24
- isOpen: true
25
- };
26
- case _actions.ACTION_CLOSE_POPUP:
27
- return {
28
- isOpen: false
29
- };
30
- default:
31
- return mediaInsertPluginState;
32
- }
33
- } else {
34
- return mediaInsertPluginState;
21
+ switch (meta === null || meta === void 0 ? void 0 : meta.type) {
22
+ case _actions.ACTION_OPEN_POPUP:
23
+ return {
24
+ isOpen: true,
25
+ target: meta.target
26
+ };
27
+ case _actions.ACTION_CLOSE_POPUP:
28
+ return {
29
+ isOpen: false
30
+ };
31
+ default:
32
+ return mediaInsertPluginState;
35
33
  }
36
34
  }
37
35
  },
@@ -250,7 +250,8 @@ function MediaFromURL(_ref) {
250
250
  if (previewState.previewInfo) {
251
251
  insertMediaSingle({
252
252
  mediaState: previewState.previewInfo,
253
- inputMethod: _analytics.INPUT_METHOD.MEDIA_PICKER
253
+ inputMethod: _analytics.INPUT_METHOD.MEDIA_PICKER,
254
+ insertMediaVia: _analytics.INSERT_MEDIA_VIA.EXTERNAL_UPLOAD
254
255
  });
255
256
  }
256
257
  closeMediaInsertPicker();
@@ -69,7 +69,7 @@ var CustomTabPanel = function CustomTabPanel(_ref) {
69
69
  }), children);
70
70
  };
71
71
  var MediaInsertPicker = exports.MediaInsertPicker = function MediaInsertPicker(_ref2) {
72
- var _useSharedPluginState, _useSharedPluginState2;
72
+ var _useSharedPluginState, _useSharedPluginState2, _useSharedPluginState3;
73
73
  var api = _ref2.api,
74
74
  editorView = _ref2.editorView,
75
75
  dispatchAnalyticsEvent = _ref2.dispatchAnalyticsEvent,
@@ -80,9 +80,12 @@ var MediaInsertPicker = exports.MediaInsertPicker = function MediaInsertPicker(_
80
80
  insertMediaSingle = _ref2.insertMediaSingle,
81
81
  insertExternalMediaSingle = _ref2.insertExternalMediaSingle,
82
82
  insertFile = _ref2.insertFile;
83
+ var _ref3 = (_useSharedPluginState = (_useSharedPluginState2 = (0, _hooks.useSharedPluginState)(api, ['mediaInsert'])) === null || _useSharedPluginState2 === void 0 ? void 0 : _useSharedPluginState2.mediaInsertState) !== null && _useSharedPluginState !== void 0 ? _useSharedPluginState : {},
84
+ isOpen = _ref3.isOpen;
85
+
86
+ // If targetRef is undefined, target the selection in the editor
83
87
  var targetRef = getDomRefFromSelection(editorView, dispatchAnalyticsEvent);
84
- var isOpen = (_useSharedPluginState = (0, _hooks.useSharedPluginState)(api, ['mediaInsert'])) === null || _useSharedPluginState === void 0 || (_useSharedPluginState = _useSharedPluginState.mediaInsertState) === null || _useSharedPluginState === void 0 ? void 0 : _useSharedPluginState.isOpen;
85
- var mediaProvider = (_useSharedPluginState2 = (0, _hooks.useSharedPluginState)(api, ['media'])) === null || _useSharedPluginState2 === void 0 || (_useSharedPluginState2 = _useSharedPluginState2.mediaState) === null || _useSharedPluginState2 === void 0 ? void 0 : _useSharedPluginState2.mediaProvider;
88
+ var mediaProvider = (_useSharedPluginState3 = (0, _hooks.useSharedPluginState)(api, ['media'])) === null || _useSharedPluginState3 === void 0 || (_useSharedPluginState3 = _useSharedPluginState3.mediaState) === null || _useSharedPluginState3 === void 0 ? void 0 : _useSharedPluginState3.mediaProvider;
86
89
  var intl = (0, _reactIntlNext.useIntl)();
87
90
  var focusEditor = (0, _useFocusEditor.useFocusEditor)({
88
91
  editorView: editorView
@@ -4,17 +4,20 @@ export const ACTION_OPEN_POPUP = 'OPEN_POPUP';
4
4
  export const ACTION_CLOSE_POPUP = 'CLOSE_POPUP';
5
5
  const setPopupMeta = ({
6
6
  type,
7
- tr
7
+ tr,
8
+ target
8
9
  }) => tr.setMeta(pluginKey, {
9
- type
10
+ type,
11
+ target
10
12
  });
11
- export const showMediaInsertPopup = tr => {
13
+ export const showMediaInsertPopup = (tr, target) => {
12
14
  // Log exposure here but don't actually switch anything on it
13
15
  editorExperiment('add-media-from-url', true, {
14
16
  exposure: true
15
17
  });
16
18
  return setPopupMeta({
17
19
  type: ACTION_OPEN_POPUP,
20
+ target,
18
21
  tr
19
22
  });
20
23
  };
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE, INPUT_METHOD } from '@atlaskit/editor-common/analytics';
2
+ import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE, INPUT_METHOD, INSERT_MEDIA_VIA } from '@atlaskit/editor-common/analytics';
3
3
  import { toolbarInsertBlockMessages as messages } from '@atlaskit/editor-common/messages';
4
4
  import { IconImages } from '@atlaskit/editor-common/quick-insert';
5
5
  import { fg } from '@atlaskit/platform-feature-flags';
@@ -27,16 +27,18 @@ export const mediaInsertPlugin = ({
27
27
  };
28
28
  }
29
29
  const {
30
- isOpen
30
+ isOpen,
31
+ target
31
32
  } = pluginKey.getState(editorState) || {};
32
33
  return {
33
- isOpen
34
+ isOpen,
35
+ target
34
36
  };
35
37
  },
36
38
  commands: {
37
- showMediaInsertPopup: ({
39
+ showMediaInsertPopup: target => ({
38
40
  tr
39
- }) => showMediaInsertPopup(tr)
41
+ }) => showMediaInsertPopup(tr, target)
40
42
  },
41
43
  contentComponent: ({
42
44
  editorView,
@@ -47,7 +49,8 @@ export const mediaInsertPlugin = ({
47
49
  }) => {
48
50
  const insertMediaSingle = ({
49
51
  mediaState,
50
- inputMethod
52
+ inputMethod,
53
+ insertMediaVia
51
54
  }) => {
52
55
  var _api$media$actions$in;
53
56
  const {
@@ -76,7 +79,7 @@ export const mediaInsertPlugin = ({
76
79
  alt: fileName,
77
80
  __fileMimeType: mediaState.fileMimeType
78
81
  });
79
- return (_api$media$actions$in = api === null || api === void 0 ? void 0 : api.media.actions.insertMediaAsMediaSingle(editorView, node, inputMethod, isNestingInQuoteSupported)) !== null && _api$media$actions$in !== void 0 ? _api$media$actions$in : false;
82
+ return (_api$media$actions$in = api === null || api === void 0 ? void 0 : api.media.actions.insertMediaAsMediaSingle(editorView, node, inputMethod, isNestingInQuoteSupported, insertMediaVia)) !== null && _api$media$actions$in !== void 0 ? _api$media$actions$in : false;
80
83
  };
81
84
  const insertExternalMediaSingle = ({
82
85
  url,
@@ -90,7 +93,7 @@ export const mediaInsertPlugin = ({
90
93
  alt,
91
94
  __external: true
92
95
  });
93
- return (_api$media$actions$in2 = api === null || api === void 0 ? void 0 : api.media.actions.insertMediaAsMediaSingle(editorView, node, inputMethod, isNestingInQuoteSupported)) !== null && _api$media$actions$in2 !== void 0 ? _api$media$actions$in2 : false;
96
+ return (_api$media$actions$in2 = api === null || api === void 0 ? void 0 : api.media.actions.insertMediaAsMediaSingle(editorView, node, inputMethod, isNestingInQuoteSupported, INSERT_MEDIA_VIA.EXTERNAL_URL)) !== null && _api$media$actions$in2 !== void 0 ? _api$media$actions$in2 : false;
94
97
  };
95
98
  const insertFile = ({
96
99
  mediaState,
@@ -99,7 +102,7 @@ export const mediaInsertPlugin = ({
99
102
  }) => {
100
103
  var _api$media$sharedStat, _api$media$sharedStat2;
101
104
  const collection = mediaState.collection;
102
- return collection !== undefined ? (_api$media$sharedStat = api === null || api === void 0 ? void 0 : (_api$media$sharedStat2 = api.media.sharedState.currentState()) === null || _api$media$sharedStat2 === void 0 ? void 0 : _api$media$sharedStat2.insertFile(mediaState, onMediaStateChanged, inputMethod)) !== null && _api$media$sharedStat !== void 0 ? _api$media$sharedStat : false : false;
105
+ return collection !== undefined ? (_api$media$sharedStat = api === null || api === void 0 ? void 0 : (_api$media$sharedStat2 = api.media.sharedState.currentState()) === null || _api$media$sharedStat2 === void 0 ? void 0 : _api$media$sharedStat2.insertFile(mediaState, onMediaStateChanged, inputMethod, INSERT_MEDIA_VIA.LOCAL_UPLOAD)) !== null && _api$media$sharedStat !== void 0 ? _api$media$sharedStat : false : false;
103
106
  };
104
107
  return /*#__PURE__*/React.createElement(MediaInsertPicker, {
105
108
  api: api,
@@ -129,7 +132,7 @@ export const mediaInsertPlugin = ({
129
132
  // Insert empty string to remove the typeahead raw text
130
133
  // close the quick insert immediately
131
134
  const tr = insert('');
132
- api === null || api === void 0 ? void 0 : api.mediaInsert.commands.showMediaInsertPopup({
135
+ api === null || api === void 0 ? void 0 : api.mediaInsert.commands.showMediaInsertPopup()({
133
136
  tr
134
137
  });
135
138
  api === null || api === void 0 ? void 0 : (_api$analytics = api.analytics) === null || _api$analytics === void 0 ? void 0 : (_api$analytics$action = _api$analytics.actions) === null || _api$analytics$action === void 0 ? void 0 : _api$analytics$action.attachAnalyticsEvent({
@@ -6,26 +6,24 @@ export const createPlugin = () => {
6
6
  state: {
7
7
  init() {
8
8
  return {
9
- isOpen: false
9
+ isOpen: false,
10
+ target: undefined
10
11
  };
11
12
  },
12
13
  apply(tr, mediaInsertPluginState) {
13
14
  const meta = tr.getMeta(pluginKey);
14
- if (meta) {
15
- switch (meta.type) {
16
- case ACTION_OPEN_POPUP:
17
- return {
18
- isOpen: true
19
- };
20
- case ACTION_CLOSE_POPUP:
21
- return {
22
- isOpen: false
23
- };
24
- default:
25
- return mediaInsertPluginState;
26
- }
27
- } else {
28
- return mediaInsertPluginState;
15
+ switch (meta === null || meta === void 0 ? void 0 : meta.type) {
16
+ case ACTION_OPEN_POPUP:
17
+ return {
18
+ isOpen: true,
19
+ target: meta.target
20
+ };
21
+ case ACTION_CLOSE_POPUP:
22
+ return {
23
+ isOpen: false
24
+ };
25
+ default:
26
+ return mediaInsertPluginState;
29
27
  }
30
28
  }
31
29
  },
@@ -4,7 +4,7 @@ import { useIntl } from 'react-intl-next';
4
4
  import { isSafeUrl } from '@atlaskit/adf-schema';
5
5
  import ButtonGroup from '@atlaskit/button/button-group';
6
6
  import Button from '@atlaskit/button/new';
7
- import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE, INPUT_METHOD } from '@atlaskit/editor-common/analytics';
7
+ import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE, INPUT_METHOD, INSERT_MEDIA_VIA } from '@atlaskit/editor-common/analytics';
8
8
  import { mediaInsertMessages } from '@atlaskit/editor-common/messages';
9
9
  import { ErrorMessage } from '@atlaskit/form';
10
10
  import EditorFilePreviewIcon from '@atlaskit/icon/glyph/editor/file-preview';
@@ -211,7 +211,8 @@ export function MediaFromURL({
211
211
  if (previewState.previewInfo) {
212
212
  insertMediaSingle({
213
213
  mediaState: previewState.previewInfo,
214
- inputMethod: INPUT_METHOD.MEDIA_PICKER
214
+ inputMethod: INPUT_METHOD.MEDIA_PICKER,
215
+ insertMediaVia: INSERT_MEDIA_VIA.EXTERNAL_UPLOAD
215
216
  });
216
217
  }
217
218
  closeMediaInsertPicker();
@@ -72,8 +72,12 @@ export const MediaInsertPicker = ({
72
72
  insertFile
73
73
  }) => {
74
74
  var _useSharedPluginState, _useSharedPluginState2, _useSharedPluginState3, _useSharedPluginState4;
75
+ const {
76
+ isOpen
77
+ } = (_useSharedPluginState = (_useSharedPluginState2 = useSharedPluginState(api, ['mediaInsert'])) === null || _useSharedPluginState2 === void 0 ? void 0 : _useSharedPluginState2.mediaInsertState) !== null && _useSharedPluginState !== void 0 ? _useSharedPluginState : {};
78
+
79
+ // If targetRef is undefined, target the selection in the editor
75
80
  const targetRef = getDomRefFromSelection(editorView, dispatchAnalyticsEvent);
76
- const isOpen = (_useSharedPluginState = useSharedPluginState(api, ['mediaInsert'])) === null || _useSharedPluginState === void 0 ? void 0 : (_useSharedPluginState2 = _useSharedPluginState.mediaInsertState) === null || _useSharedPluginState2 === void 0 ? void 0 : _useSharedPluginState2.isOpen;
77
81
  const mediaProvider = (_useSharedPluginState3 = useSharedPluginState(api, ['media'])) === null || _useSharedPluginState3 === void 0 ? void 0 : (_useSharedPluginState4 = _useSharedPluginState3.mediaState) === null || _useSharedPluginState4 === void 0 ? void 0 : _useSharedPluginState4.mediaProvider;
78
82
  const intl = useIntl();
79
83
  const focusEditor = useFocusEditor({
@@ -4,18 +4,21 @@ export var ACTION_OPEN_POPUP = 'OPEN_POPUP';
4
4
  export var ACTION_CLOSE_POPUP = 'CLOSE_POPUP';
5
5
  var setPopupMeta = function setPopupMeta(_ref) {
6
6
  var type = _ref.type,
7
- tr = _ref.tr;
7
+ tr = _ref.tr,
8
+ target = _ref.target;
8
9
  return tr.setMeta(pluginKey, {
9
- type: type
10
+ type: type,
11
+ target: target
10
12
  });
11
13
  };
12
- export var showMediaInsertPopup = function showMediaInsertPopup(tr) {
14
+ export var showMediaInsertPopup = function showMediaInsertPopup(tr, target) {
13
15
  // Log exposure here but don't actually switch anything on it
14
16
  editorExperiment('add-media-from-url', true, {
15
17
  exposure: true
16
18
  });
17
19
  return setPopupMeta({
18
20
  type: ACTION_OPEN_POPUP,
21
+ target: target,
19
22
  tr: tr
20
23
  });
21
24
  };
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE, INPUT_METHOD } from '@atlaskit/editor-common/analytics';
2
+ import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE, INPUT_METHOD, INSERT_MEDIA_VIA } from '@atlaskit/editor-common/analytics';
3
3
  import { toolbarInsertBlockMessages as messages } from '@atlaskit/editor-common/messages';
4
4
  import { IconImages } from '@atlaskit/editor-common/quick-insert';
5
5
  import { fg } from '@atlaskit/platform-feature-flags';
@@ -28,15 +28,19 @@ export var mediaInsertPlugin = function mediaInsertPlugin(_ref) {
28
28
  };
29
29
  }
30
30
  var _ref2 = pluginKey.getState(editorState) || {},
31
- isOpen = _ref2.isOpen;
31
+ isOpen = _ref2.isOpen,
32
+ target = _ref2.target;
32
33
  return {
33
- isOpen: isOpen
34
+ isOpen: isOpen,
35
+ target: target
34
36
  };
35
37
  },
36
38
  commands: {
37
- showMediaInsertPopup: function showMediaInsertPopup(_ref3) {
38
- var tr = _ref3.tr;
39
- return _showMediaInsertPopup(tr);
39
+ showMediaInsertPopup: function showMediaInsertPopup(target) {
40
+ return function (_ref3) {
41
+ var tr = _ref3.tr;
42
+ return _showMediaInsertPopup(tr, target);
43
+ };
40
44
  }
41
45
  },
42
46
  contentComponent: function contentComponent(_ref4) {
@@ -48,7 +52,8 @@ export var mediaInsertPlugin = function mediaInsertPlugin(_ref) {
48
52
  var insertMediaSingle = function insertMediaSingle(_ref5) {
49
53
  var _api$media$actions$in;
50
54
  var mediaState = _ref5.mediaState,
51
- inputMethod = _ref5.inputMethod;
55
+ inputMethod = _ref5.inputMethod,
56
+ insertMediaVia = _ref5.insertMediaVia;
52
57
  var id = mediaState.id,
53
58
  dimensions = mediaState.dimensions,
54
59
  contextId = mediaState.contextId,
@@ -73,7 +78,7 @@ export var mediaInsertPlugin = function mediaInsertPlugin(_ref) {
73
78
  alt: fileName,
74
79
  __fileMimeType: mediaState.fileMimeType
75
80
  });
76
- return (_api$media$actions$in = api === null || api === void 0 ? void 0 : api.media.actions.insertMediaAsMediaSingle(editorView, node, inputMethod, isNestingInQuoteSupported)) !== null && _api$media$actions$in !== void 0 ? _api$media$actions$in : false;
81
+ return (_api$media$actions$in = api === null || api === void 0 ? void 0 : api.media.actions.insertMediaAsMediaSingle(editorView, node, inputMethod, isNestingInQuoteSupported, insertMediaVia)) !== null && _api$media$actions$in !== void 0 ? _api$media$actions$in : false;
77
82
  };
78
83
  var insertExternalMediaSingle = function insertExternalMediaSingle(_ref7) {
79
84
  var _api$media$actions$in2;
@@ -86,7 +91,7 @@ export var mediaInsertPlugin = function mediaInsertPlugin(_ref) {
86
91
  alt: alt,
87
92
  __external: true
88
93
  });
89
- return (_api$media$actions$in2 = api === null || api === void 0 ? void 0 : api.media.actions.insertMediaAsMediaSingle(editorView, node, inputMethod, isNestingInQuoteSupported)) !== null && _api$media$actions$in2 !== void 0 ? _api$media$actions$in2 : false;
94
+ return (_api$media$actions$in2 = api === null || api === void 0 ? void 0 : api.media.actions.insertMediaAsMediaSingle(editorView, node, inputMethod, isNestingInQuoteSupported, INSERT_MEDIA_VIA.EXTERNAL_URL)) !== null && _api$media$actions$in2 !== void 0 ? _api$media$actions$in2 : false;
90
95
  };
91
96
  var insertFile = function insertFile(_ref8) {
92
97
  var _api$media$sharedStat, _api$media$sharedStat2;
@@ -94,7 +99,7 @@ export var mediaInsertPlugin = function mediaInsertPlugin(_ref) {
94
99
  inputMethod = _ref8.inputMethod,
95
100
  onMediaStateChanged = _ref8.onMediaStateChanged;
96
101
  var collection = mediaState.collection;
97
- return collection !== undefined ? (_api$media$sharedStat = api === null || api === void 0 || (_api$media$sharedStat2 = api.media.sharedState.currentState()) === null || _api$media$sharedStat2 === void 0 ? void 0 : _api$media$sharedStat2.insertFile(mediaState, onMediaStateChanged, inputMethod)) !== null && _api$media$sharedStat !== void 0 ? _api$media$sharedStat : false : false;
102
+ return collection !== undefined ? (_api$media$sharedStat = api === null || api === void 0 || (_api$media$sharedStat2 = api.media.sharedState.currentState()) === null || _api$media$sharedStat2 === void 0 ? void 0 : _api$media$sharedStat2.insertFile(mediaState, onMediaStateChanged, inputMethod, INSERT_MEDIA_VIA.LOCAL_UPLOAD)) !== null && _api$media$sharedStat !== void 0 ? _api$media$sharedStat : false : false;
98
103
  };
99
104
  return /*#__PURE__*/React.createElement(MediaInsertPicker, {
100
105
  api: api,
@@ -128,7 +133,7 @@ export var mediaInsertPlugin = function mediaInsertPlugin(_ref) {
128
133
  // Insert empty string to remove the typeahead raw text
129
134
  // close the quick insert immediately
130
135
  var tr = insert('');
131
- api === null || api === void 0 || api.mediaInsert.commands.showMediaInsertPopup({
136
+ api === null || api === void 0 || api.mediaInsert.commands.showMediaInsertPopup()({
132
137
  tr: tr
133
138
  });
134
139
  api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 || (_api$analytics = _api$analytics.actions) === null || _api$analytics === void 0 || _api$analytics.attachAnalyticsEvent({
@@ -6,26 +6,24 @@ export var createPlugin = function createPlugin() {
6
6
  state: {
7
7
  init: function init() {
8
8
  return {
9
- isOpen: false
9
+ isOpen: false,
10
+ target: undefined
10
11
  };
11
12
  },
12
13
  apply: function apply(tr, mediaInsertPluginState) {
13
14
  var meta = tr.getMeta(pluginKey);
14
- if (meta) {
15
- switch (meta.type) {
16
- case ACTION_OPEN_POPUP:
17
- return {
18
- isOpen: true
19
- };
20
- case ACTION_CLOSE_POPUP:
21
- return {
22
- isOpen: false
23
- };
24
- default:
25
- return mediaInsertPluginState;
26
- }
27
- } else {
28
- return mediaInsertPluginState;
15
+ switch (meta === null || meta === void 0 ? void 0 : meta.type) {
16
+ case ACTION_OPEN_POPUP:
17
+ return {
18
+ isOpen: true,
19
+ target: meta.target
20
+ };
21
+ case ACTION_CLOSE_POPUP:
22
+ return {
23
+ isOpen: false
24
+ };
25
+ default:
26
+ return mediaInsertPluginState;
29
27
  }
30
28
  }
31
29
  },
@@ -10,7 +10,7 @@ import { useIntl } from 'react-intl-next';
10
10
  import { isSafeUrl } from '@atlaskit/adf-schema';
11
11
  import ButtonGroup from '@atlaskit/button/button-group';
12
12
  import Button from '@atlaskit/button/new';
13
- import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE, INPUT_METHOD } from '@atlaskit/editor-common/analytics';
13
+ import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE, INPUT_METHOD, INSERT_MEDIA_VIA } from '@atlaskit/editor-common/analytics';
14
14
  import { mediaInsertMessages } from '@atlaskit/editor-common/messages';
15
15
  import { ErrorMessage } from '@atlaskit/form';
16
16
  import EditorFilePreviewIcon from '@atlaskit/icon/glyph/editor/file-preview';
@@ -242,7 +242,8 @@ export function MediaFromURL(_ref) {
242
242
  if (previewState.previewInfo) {
243
243
  insertMediaSingle({
244
244
  mediaState: previewState.previewInfo,
245
- inputMethod: INPUT_METHOD.MEDIA_PICKER
245
+ inputMethod: INPUT_METHOD.MEDIA_PICKER,
246
+ insertMediaVia: INSERT_MEDIA_VIA.EXTERNAL_UPLOAD
246
247
  });
247
248
  }
248
249
  closeMediaInsertPicker();
@@ -59,7 +59,7 @@ var CustomTabPanel = function CustomTabPanel(_ref) {
59
59
  }), children);
60
60
  };
61
61
  export var MediaInsertPicker = function MediaInsertPicker(_ref2) {
62
- var _useSharedPluginState, _useSharedPluginState2;
62
+ var _useSharedPluginState, _useSharedPluginState2, _useSharedPluginState3;
63
63
  var api = _ref2.api,
64
64
  editorView = _ref2.editorView,
65
65
  dispatchAnalyticsEvent = _ref2.dispatchAnalyticsEvent,
@@ -70,9 +70,12 @@ export var MediaInsertPicker = function MediaInsertPicker(_ref2) {
70
70
  insertMediaSingle = _ref2.insertMediaSingle,
71
71
  insertExternalMediaSingle = _ref2.insertExternalMediaSingle,
72
72
  insertFile = _ref2.insertFile;
73
+ var _ref3 = (_useSharedPluginState = (_useSharedPluginState2 = useSharedPluginState(api, ['mediaInsert'])) === null || _useSharedPluginState2 === void 0 ? void 0 : _useSharedPluginState2.mediaInsertState) !== null && _useSharedPluginState !== void 0 ? _useSharedPluginState : {},
74
+ isOpen = _ref3.isOpen;
75
+
76
+ // If targetRef is undefined, target the selection in the editor
73
77
  var targetRef = getDomRefFromSelection(editorView, dispatchAnalyticsEvent);
74
- var isOpen = (_useSharedPluginState = useSharedPluginState(api, ['mediaInsert'])) === null || _useSharedPluginState === void 0 || (_useSharedPluginState = _useSharedPluginState.mediaInsertState) === null || _useSharedPluginState === void 0 ? void 0 : _useSharedPluginState.isOpen;
75
- var mediaProvider = (_useSharedPluginState2 = useSharedPluginState(api, ['media'])) === null || _useSharedPluginState2 === void 0 || (_useSharedPluginState2 = _useSharedPluginState2.mediaState) === null || _useSharedPluginState2 === void 0 ? void 0 : _useSharedPluginState2.mediaProvider;
78
+ var mediaProvider = (_useSharedPluginState3 = useSharedPluginState(api, ['media'])) === null || _useSharedPluginState3 === void 0 || (_useSharedPluginState3 = _useSharedPluginState3.mediaState) === null || _useSharedPluginState3 === void 0 ? void 0 : _useSharedPluginState3.mediaProvider;
76
79
  var intl = useIntl();
77
80
  var focusEditor = useFocusEditor({
78
81
  editorView: editorView
@@ -2,5 +2,5 @@ import type { Transaction } from '@atlaskit/editor-prosemirror/state';
2
2
  export type MediaInsertPluginAction = typeof ACTION_OPEN_POPUP | typeof ACTION_CLOSE_POPUP;
3
3
  export declare const ACTION_OPEN_POPUP = "OPEN_POPUP";
4
4
  export declare const ACTION_CLOSE_POPUP = "CLOSE_POPUP";
5
- export declare const showMediaInsertPopup: (tr: Transaction) => Transaction;
5
+ export declare const showMediaInsertPopup: (tr: Transaction, target?: HTMLElement) => Transaction;
6
6
  export declare const closeMediaInsertPicker: (tr: Transaction) => Transaction;
@@ -1,4 +1,5 @@
1
1
  import type { InputMethodInsertMedia } from '@atlaskit/editor-common/analytics';
2
+ import { type InsertMediaVia } from '@atlaskit/editor-common/analytics';
2
3
  import type { Providers } from '@atlaskit/editor-common/provider-factory';
3
4
  import type { EditorCommand, NextEditorPlugin, OptionalPlugin, UiComponentFactoryParams } from '@atlaskit/editor-common/types';
4
5
  import { type ExtractInjectionAPI } from '@atlaskit/editor-common/types';
@@ -8,10 +9,12 @@ import type { MediaPlugin } from '@atlaskit/editor-plugin-media';
8
9
  import { type MediaState, type MediaStateEventSubscriber } from '@atlaskit/editor-plugin-media/types';
9
10
  export type MediaInsertPluginState = {
10
11
  isOpen?: boolean;
12
+ target?: HTMLElement;
11
13
  };
12
14
  export type InsertMediaSingle = (props: {
13
15
  mediaState: MediaState;
14
16
  inputMethod: InputMethodInsertMedia;
17
+ insertMediaVia: InsertMediaVia;
15
18
  }) => boolean;
16
19
  export type MediaInsertPlugin = NextEditorPlugin<'mediaInsert', {
17
20
  dependencies: [
@@ -21,7 +24,7 @@ export type MediaInsertPlugin = NextEditorPlugin<'mediaInsert', {
21
24
  ];
22
25
  sharedState: MediaInsertPluginState;
23
26
  commands: {
24
- showMediaInsertPopup: EditorCommand;
27
+ showMediaInsertPopup: (target?: HTMLElement) => EditorCommand;
25
28
  };
26
29
  }>;
27
30
  export type InsertExternalMediaSingle = (props: {
@@ -2,5 +2,5 @@ import type { Transaction } from '@atlaskit/editor-prosemirror/state';
2
2
  export type MediaInsertPluginAction = typeof ACTION_OPEN_POPUP | typeof ACTION_CLOSE_POPUP;
3
3
  export declare const ACTION_OPEN_POPUP = "OPEN_POPUP";
4
4
  export declare const ACTION_CLOSE_POPUP = "CLOSE_POPUP";
5
- export declare const showMediaInsertPopup: (tr: Transaction) => Transaction;
5
+ export declare const showMediaInsertPopup: (tr: Transaction, target?: HTMLElement) => Transaction;
6
6
  export declare const closeMediaInsertPicker: (tr: Transaction) => Transaction;
@@ -1,4 +1,5 @@
1
1
  import type { InputMethodInsertMedia } from '@atlaskit/editor-common/analytics';
2
+ import { type InsertMediaVia } from '@atlaskit/editor-common/analytics';
2
3
  import type { Providers } from '@atlaskit/editor-common/provider-factory';
3
4
  import type { EditorCommand, NextEditorPlugin, OptionalPlugin, UiComponentFactoryParams } from '@atlaskit/editor-common/types';
4
5
  import { type ExtractInjectionAPI } from '@atlaskit/editor-common/types';
@@ -8,10 +9,12 @@ import type { MediaPlugin } from '@atlaskit/editor-plugin-media';
8
9
  import { type MediaState, type MediaStateEventSubscriber } from '@atlaskit/editor-plugin-media/types';
9
10
  export type MediaInsertPluginState = {
10
11
  isOpen?: boolean;
12
+ target?: HTMLElement;
11
13
  };
12
14
  export type InsertMediaSingle = (props: {
13
15
  mediaState: MediaState;
14
16
  inputMethod: InputMethodInsertMedia;
17
+ insertMediaVia: InsertMediaVia;
15
18
  }) => boolean;
16
19
  export type MediaInsertPlugin = NextEditorPlugin<'mediaInsert', {
17
20
  dependencies: [
@@ -21,7 +24,7 @@ export type MediaInsertPlugin = NextEditorPlugin<'mediaInsert', {
21
24
  ];
22
25
  sharedState: MediaInsertPluginState;
23
26
  commands: {
24
- showMediaInsertPopup: EditorCommand;
27
+ showMediaInsertPopup: (target?: HTMLElement) => EditorCommand;
25
28
  };
26
29
  }>;
27
30
  export type InsertExternalMediaSingle = (props: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-plugin-media-insert",
3
- "version": "3.0.0",
3
+ "version": "3.1.1",
4
4
  "description": "Media Insert plugin for @atlaskit/editor-core",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -25,13 +25,13 @@
25
25
  "dependencies": {
26
26
  "@atlaskit/adf-schema": "^40.9.0",
27
27
  "@atlaskit/button": "^20.2.0",
28
- "@atlaskit/editor-common": "^91.1.0",
28
+ "@atlaskit/editor-common": "^92.0.0",
29
29
  "@atlaskit/editor-plugin-analytics": "^1.8.0",
30
- "@atlaskit/editor-plugin-media": "^1.33.0",
30
+ "@atlaskit/editor-plugin-media": "^1.34.0",
31
31
  "@atlaskit/editor-prosemirror": "6.0.0",
32
32
  "@atlaskit/editor-shared-styles": "^3.0.0",
33
33
  "@atlaskit/form": "^10.5.3",
34
- "@atlaskit/icon": "^22.18.0",
34
+ "@atlaskit/icon": "^22.19.0",
35
35
  "@atlaskit/media-card": "^78.5.0",
36
36
  "@atlaskit/media-client": "^28.0.0",
37
37
  "@atlaskit/media-client-react": "^2.2.0",