@atlaskit/editor-plugin-media-insert 6.1.4 → 6.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # @atlaskit/editor-plugin-media-insert
2
2
 
3
+ ## 6.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#128664](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/128664)
8
+ [`abca3266336d9`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/abca3266336d9) -
9
+ [ED-23250] Remove form element from MediaFromUrl and consolidate experiments and feature flags in
10
+ prepartion for jira release
11
+
12
+ ### Patch Changes
13
+
14
+ - Updated dependencies
15
+
3
16
  ## 6.1.4
4
17
 
5
18
  ### Patch Changes
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.showMediaInsertPopup = exports.closeMediaInsertPicker = exports.ACTION_OPEN_POPUP = exports.ACTION_CLOSE_POPUP = void 0;
7
- var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
8
7
  var _pluginKey = require("./plugin-key");
9
8
  var ACTION_OPEN_POPUP = exports.ACTION_OPEN_POPUP = 'OPEN_POPUP';
10
9
  var ACTION_CLOSE_POPUP = exports.ACTION_CLOSE_POPUP = 'CLOSE_POPUP';
@@ -18,10 +17,6 @@ var setPopupMeta = function setPopupMeta(_ref) {
18
17
  });
19
18
  };
20
19
  var showMediaInsertPopup = exports.showMediaInsertPopup = function showMediaInsertPopup(tr, mountInfo) {
21
- // Log exposure here but don't actually switch anything on it
22
- (0, _experiments.editorExperiment)('add-media-from-url', true, {
23
- exposure: true
24
- });
25
20
  return setPopupMeta({
26
21
  type: ACTION_OPEN_POPUP,
27
22
  mountInfo: mountInfo,
@@ -291,11 +291,9 @@ function MediaFromURL(_ref) {
291
291
  /*#__PURE__*/
292
292
  // Ignored via go/ees005
293
293
  // eslint-disable-next-line react/jsx-props-no-spreading
294
- _react.default.createElement(_primitives.Box, (0, _extends2.default)({
295
- as: "form"
296
- }, formProps, {
294
+ _react.default.createElement(_primitives.Box, {
297
295
  xcss: FormStyles
298
- }), /*#__PURE__*/_react.default.createElement(_primitives.Stack, {
296
+ }, /*#__PURE__*/_react.default.createElement(_primitives.Stack, {
299
297
  space: "space.150",
300
298
  grow: "fill"
301
299
  }, /*#__PURE__*/_react.default.createElement(_form.Field, {
@@ -329,6 +327,12 @@ function MediaFromURL(_ref) {
329
327
  onChange: function onChange(value) {
330
328
  onURLChange(value);
331
329
  _onChange(value);
330
+ },
331
+ onKeyDown: function onKeyDown(e) {
332
+ if (e.key === 'Enter') {
333
+ e.preventDefault();
334
+ formProps.onSubmit();
335
+ }
332
336
  }
333
337
  })), /*#__PURE__*/_react.default.createElement(_form.MessageWrapper, null, error && /*#__PURE__*/_react.default.createElement(_form.ErrorMessage, null, /*#__PURE__*/_react.default.createElement(_primitives.Box, {
334
338
  as: "span"
@@ -337,7 +341,10 @@ function MediaFromURL(_ref) {
337
341
  alignItems: "center",
338
342
  justifyContent: "center"
339
343
  }, /*#__PURE__*/_react.default.createElement(_new.default, {
340
- type: "submit",
344
+ type: "button",
345
+ onClick: function onClick() {
346
+ return formProps.onSubmit();
347
+ },
341
348
  isLoading: previewState.isLoading,
342
349
  isDisabled: !!error || !meta.dirty,
343
350
  iconBefore: function iconBefore() {
@@ -363,9 +370,12 @@ function MediaFromURL(_ref) {
363
370
  appearance: "subtle",
364
371
  onClick: onCancel
365
372
  }, strings.cancel), /*#__PURE__*/_react.default.createElement(_new.default, {
366
- type: "submit",
373
+ type: "button",
367
374
  appearance: "primary",
368
- isDisabled: !previewState.previewInfo && !previewState.warning
375
+ isDisabled: !previewState.previewInfo && !previewState.warning,
376
+ onClick: function onClick() {
377
+ return formProps.onSubmit();
378
+ }
369
379
  }, strings.insert)))))
370
380
  );
371
381
  });
@@ -0,0 +1,372 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.MediaFromURLWithForm = MediaFromURLWithForm;
9
+ exports.isValidUrl = void 0;
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
12
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
13
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
14
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
+ var _react = _interopRequireDefault(require("react"));
17
+ var _reactIntlNext = require("react-intl-next");
18
+ var _adfSchema = require("@atlaskit/adf-schema");
19
+ var _buttonGroup = _interopRequireDefault(require("@atlaskit/button/button-group"));
20
+ var _new = _interopRequireDefault(require("@atlaskit/button/new"));
21
+ var _analytics = require("@atlaskit/editor-common/analytics");
22
+ var _messages = require("@atlaskit/editor-common/messages");
23
+ var _form = _interopRequireWildcard(require("@atlaskit/form"));
24
+ var _growDiagonal = _interopRequireDefault(require("@atlaskit/icon/core/grow-diagonal"));
25
+ var _filePreview = _interopRequireDefault(require("@atlaskit/icon/glyph/editor/file-preview"));
26
+ var _mediaClientReact = require("@atlaskit/media-client-react");
27
+ var _primitives = require("@atlaskit/primitives");
28
+ var _sectionMessage = _interopRequireDefault(require("@atlaskit/section-message"));
29
+ var _textfield = _interopRequireDefault(require("@atlaskit/textfield"));
30
+ var _MediaCard = require("./MediaCard");
31
+ var _useAnalyticsEvents2 = require("./useAnalyticsEvents");
32
+ var _excluded = ["value", "onChange"];
33
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
34
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
35
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
36
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
37
+ var PreviewBoxStyles = (0, _primitives.xcss)({
38
+ borderWidth: 'border.width',
39
+ borderStyle: 'dashed',
40
+ borderColor: 'color.border',
41
+ borderRadius: 'border.radius',
42
+ height: '200px'
43
+ });
44
+ var PreviewImageStyles = (0, _primitives.xcss)({
45
+ height: '200px'
46
+ });
47
+ var FormStyles = (0, _primitives.xcss)({
48
+ flexGrow: 1
49
+ });
50
+ var INITIAL_PREVIEW_STATE = Object.freeze({
51
+ isLoading: false,
52
+ error: null,
53
+ warning: null,
54
+ previewInfo: null
55
+ });
56
+ var MAX_URL_LENGTH = 2048;
57
+ var isValidUrl = exports.isValidUrl = function isValidUrl(value) {
58
+ try {
59
+ // Check for spaces and length first to avoid the expensive URL parsing
60
+ // Ignored via go/ees005
61
+ // eslint-disable-next-line require-unicode-regexp
62
+ if (/\s/.test(value) || value.length > MAX_URL_LENGTH) {
63
+ return false;
64
+ }
65
+ new URL(value);
66
+ } catch (e) {
67
+ return false;
68
+ }
69
+ return (0, _adfSchema.isSafeUrl)(value);
70
+ };
71
+ var previewStateReducer = function previewStateReducer(state, action) {
72
+ switch (action.type) {
73
+ case 'loading':
74
+ return _objectSpread(_objectSpread({}, INITIAL_PREVIEW_STATE), {}, {
75
+ isLoading: true
76
+ });
77
+ case 'error':
78
+ return _objectSpread(_objectSpread({}, INITIAL_PREVIEW_STATE), {}, {
79
+ error: action.error
80
+ });
81
+ case 'warning':
82
+ return _objectSpread(_objectSpread({}, INITIAL_PREVIEW_STATE), {}, {
83
+ warning: action.warning
84
+ });
85
+ case 'success':
86
+ return _objectSpread(_objectSpread({}, INITIAL_PREVIEW_STATE), {}, {
87
+ previewInfo: action.payload
88
+ });
89
+ case 'reset':
90
+ return INITIAL_PREVIEW_STATE;
91
+ default:
92
+ return state;
93
+ }
94
+ };
95
+ function MediaFromURLWithForm(_ref) {
96
+ var mediaProvider = _ref.mediaProvider,
97
+ dispatchAnalyticsEvent = _ref.dispatchAnalyticsEvent,
98
+ closeMediaInsertPicker = _ref.closeMediaInsertPicker,
99
+ insertMediaSingle = _ref.insertMediaSingle,
100
+ insertExternalMediaSingle = _ref.insertExternalMediaSingle;
101
+ var intl = (0, _reactIntlNext.useIntl)();
102
+ var strings = {
103
+ loadPreview: intl.formatMessage(_messages.mediaInsertMessages.loadPreview),
104
+ insert: intl.formatMessage(_messages.mediaInsertMessages.insert),
105
+ pasteLinkToUpload: intl.formatMessage(_messages.mediaInsertMessages.pasteLinkToUpload),
106
+ cancel: intl.formatMessage(_messages.mediaInsertMessages.cancel),
107
+ errorMessage: intl.formatMessage(_messages.mediaInsertMessages.fromUrlErrorMessage),
108
+ warning: intl.formatMessage(_messages.mediaInsertMessages.fromUrlWarning),
109
+ invalidUrl: intl.formatMessage(_messages.mediaInsertMessages.invalidUrlErrorMessage)
110
+ };
111
+ var _React$useReducer = _react.default.useReducer(previewStateReducer, INITIAL_PREVIEW_STATE),
112
+ _React$useReducer2 = (0, _slicedToArray2.default)(_React$useReducer, 2),
113
+ previewState = _React$useReducer2[0],
114
+ dispatch = _React$useReducer2[1];
115
+ var pasteFlag = _react.default.useRef(false);
116
+ var _useAnalyticsEvents = (0, _useAnalyticsEvents2.useAnalyticsEvents)(dispatchAnalyticsEvent),
117
+ onUploadButtonClickedAnalytics = _useAnalyticsEvents.onUploadButtonClickedAnalytics,
118
+ onUploadCommencedAnalytics = _useAnalyticsEvents.onUploadCommencedAnalytics,
119
+ onUploadSuccessAnalytics = _useAnalyticsEvents.onUploadSuccessAnalytics,
120
+ onUploadFailureAnalytics = _useAnalyticsEvents.onUploadFailureAnalytics;
121
+ var uploadExternalMedia = _react.default.useCallback( /*#__PURE__*/function () {
122
+ var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(url) {
123
+ var uploadMediaClientConfig, uploadParams, mediaClient, collection, _yield$mediaClient$fi, uploadableFileUpfrontIds, dimensions, mimeType, message;
124
+ return _regenerator.default.wrap(function _callee$(_context) {
125
+ while (1) switch (_context.prev = _context.next) {
126
+ case 0:
127
+ onUploadButtonClickedAnalytics();
128
+ dispatch({
129
+ type: 'loading'
130
+ });
131
+ uploadMediaClientConfig = mediaProvider.uploadMediaClientConfig, uploadParams = mediaProvider.uploadParams;
132
+ if (uploadMediaClientConfig) {
133
+ _context.next = 5;
134
+ break;
135
+ }
136
+ return _context.abrupt("return");
137
+ case 5:
138
+ mediaClient = (0, _mediaClientReact.getMediaClient)(uploadMediaClientConfig);
139
+ collection = uploadParams === null || uploadParams === void 0 ? void 0 : uploadParams.collection;
140
+ onUploadCommencedAnalytics('url');
141
+ _context.prev = 8;
142
+ _context.next = 11;
143
+ return mediaClient.file.uploadExternal(url, collection);
144
+ case 11:
145
+ _yield$mediaClient$fi = _context.sent;
146
+ uploadableFileUpfrontIds = _yield$mediaClient$fi.uploadableFileUpfrontIds;
147
+ dimensions = _yield$mediaClient$fi.dimensions;
148
+ mimeType = _yield$mediaClient$fi.mimeType;
149
+ onUploadSuccessAnalytics('url');
150
+ dispatch({
151
+ type: 'success',
152
+ payload: {
153
+ id: uploadableFileUpfrontIds.id,
154
+ collection: collection,
155
+ dimensions: dimensions,
156
+ occurrenceKey: uploadableFileUpfrontIds.occurrenceKey,
157
+ fileMimeType: mimeType
158
+ }
159
+ });
160
+ _context.next = 22;
161
+ break;
162
+ case 19:
163
+ _context.prev = 19;
164
+ _context.t0 = _context["catch"](8);
165
+ if (typeof _context.t0 === 'string' && _context.t0 === 'Could not download remote file') {
166
+ // TODO: ED-26962 - Make sure this gets good unit test coverage with the actual media plugin.
167
+ // This hard coded error message could be changed at any
168
+ // point and we need a unit test to break to stop people changing it.
169
+ onUploadFailureAnalytics(_context.t0, 'url');
170
+ dispatch({
171
+ type: 'warning',
172
+ warning: _context.t0,
173
+ url: url
174
+ });
175
+ } else if (_context.t0 instanceof Error) {
176
+ message = 'Image preview fetch failed';
177
+ onUploadFailureAnalytics(message, 'url');
178
+ dispatch({
179
+ type: 'error',
180
+ error: message
181
+ });
182
+ } else {
183
+ onUploadFailureAnalytics('Unknown error', 'url');
184
+ dispatch({
185
+ type: 'error',
186
+ error: 'Unknown error'
187
+ });
188
+ }
189
+ case 22:
190
+ case "end":
191
+ return _context.stop();
192
+ }
193
+ }, _callee, null, [[8, 19]]);
194
+ }));
195
+ return function (_x) {
196
+ return _ref2.apply(this, arguments);
197
+ };
198
+ }(), [onUploadButtonClickedAnalytics, mediaProvider, onUploadCommencedAnalytics, onUploadSuccessAnalytics, onUploadFailureAnalytics]);
199
+ var onURLChange = _react.default.useCallback(function (e) {
200
+ var url = e.currentTarget.value;
201
+ dispatch({
202
+ type: 'reset'
203
+ });
204
+ if (!isValidUrl(url)) {
205
+ return;
206
+ }
207
+ if (pasteFlag.current) {
208
+ pasteFlag.current = false;
209
+ uploadExternalMedia(url);
210
+ }
211
+ }, [uploadExternalMedia]);
212
+ var _onPaste = _react.default.useCallback(function (e, inputUrl) {
213
+ // Note: this is a little weird, but the paste event will always be
214
+ // fired before the change event when pasting. We don't really want to
215
+ // duplicate logic by handling pastes separately to changes, so we're
216
+ // just noting paste occurred to then be handled in the onURLChange fn
217
+ // above. The one exception to this is where paste inputs exactly what was
218
+ // already in the input, in which case we want to ignore it.
219
+ if (e.clipboardData.getData('text') !== inputUrl) {
220
+ pasteFlag.current = true;
221
+ }
222
+ }, []);
223
+ var onInsert = _react.default.useCallback(function () {
224
+ if (previewState.previewInfo) {
225
+ insertMediaSingle({
226
+ mediaState: previewState.previewInfo,
227
+ inputMethod: _analytics.INPUT_METHOD.MEDIA_PICKER
228
+ });
229
+ }
230
+ closeMediaInsertPicker();
231
+ }, [closeMediaInsertPicker, insertMediaSingle, previewState.previewInfo]);
232
+ var onExternalInsert = _react.default.useCallback(function (url) {
233
+ if (previewState.warning) {
234
+ insertExternalMediaSingle({
235
+ url: url,
236
+ alt: '',
237
+ inputMethod: _analytics.INPUT_METHOD.MEDIA_PICKER
238
+ });
239
+ }
240
+ closeMediaInsertPicker();
241
+ }, [closeMediaInsertPicker, insertExternalMediaSingle, previewState.warning]);
242
+ var onInputKeyPress = _react.default.useCallback(function (event) {
243
+ if (event && event.key === 'Esc') {
244
+ if (dispatchAnalyticsEvent) {
245
+ var payload = {
246
+ action: _analytics.ACTION.CLOSED,
247
+ actionSubject: _analytics.ACTION_SUBJECT.PICKER,
248
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.PICKER_MEDIA,
249
+ eventType: _analytics.EVENT_TYPE.UI,
250
+ attributes: {
251
+ exitMethod: _analytics.INPUT_METHOD.KEYBOARD
252
+ }
253
+ };
254
+ dispatchAnalyticsEvent(payload);
255
+ }
256
+ closeMediaInsertPicker();
257
+ }
258
+ }, [dispatchAnalyticsEvent, closeMediaInsertPicker]);
259
+ var onCancel = _react.default.useCallback(function () {
260
+ if (dispatchAnalyticsEvent) {
261
+ var payload = {
262
+ action: _analytics.ACTION.CANCELLED,
263
+ actionSubject: _analytics.ACTION_SUBJECT.PICKER,
264
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.PICKER_MEDIA,
265
+ eventType: _analytics.EVENT_TYPE.UI
266
+ };
267
+ dispatchAnalyticsEvent(payload);
268
+ }
269
+ closeMediaInsertPicker();
270
+ }, [closeMediaInsertPicker, dispatchAnalyticsEvent]);
271
+ return /*#__PURE__*/_react.default.createElement(_form.default, {
272
+ onSubmit: function onSubmit(_ref3, form) {
273
+ var inputUrl = _ref3.inputUrl;
274
+ // This can be triggered from an enter key event on the input even when
275
+ // the button is disabled, so we explicitly do nothing when in loading
276
+ // state.
277
+ if (previewState.isLoading || form.getState().invalid) {
278
+ return;
279
+ }
280
+ if (previewState.previewInfo) {
281
+ return onInsert();
282
+ }
283
+ if (previewState.warning) {
284
+ return onExternalInsert(inputUrl);
285
+ }
286
+ return uploadExternalMedia(inputUrl);
287
+ }
288
+ }, function (_ref4) {
289
+ var formProps = _ref4.formProps;
290
+ return (
291
+ /*#__PURE__*/
292
+ // Ignored via go/ees005
293
+ // eslint-disable-next-line react/jsx-props-no-spreading
294
+ _react.default.createElement(_primitives.Box, (0, _extends2.default)({
295
+ as: "form"
296
+ }, formProps, {
297
+ xcss: FormStyles
298
+ }), /*#__PURE__*/_react.default.createElement(_primitives.Stack, {
299
+ space: "space.150",
300
+ grow: "fill"
301
+ }, /*#__PURE__*/_react.default.createElement(_form.Field, {
302
+ "aria-required": true,
303
+ isRequired: true,
304
+ name: "inputUrl",
305
+ validate: function validate(value) {
306
+ return value && isValidUrl(value) ? undefined : strings.invalidUrl;
307
+ }
308
+ }, function (_ref5) {
309
+ var _ref5$fieldProps = _ref5.fieldProps,
310
+ value = _ref5$fieldProps.value,
311
+ _onChange = _ref5$fieldProps.onChange,
312
+ rest = (0, _objectWithoutProperties2.default)(_ref5$fieldProps, _excluded),
313
+ error = _ref5.error,
314
+ meta = _ref5.meta;
315
+ return /*#__PURE__*/_react.default.createElement(_primitives.Stack, {
316
+ space: "space.150",
317
+ grow: "fill"
318
+ }, /*#__PURE__*/_react.default.createElement(_primitives.Box, null, /*#__PURE__*/_react.default.createElement(_textfield.default
319
+ // Ignored via go/ees005
320
+ // eslint-disable-next-line react/jsx-props-no-spreading
321
+ , (0, _extends2.default)({}, rest, {
322
+ value: value,
323
+ placeholder: strings.pasteLinkToUpload,
324
+ maxLength: MAX_URL_LENGTH,
325
+ onKeyPress: onInputKeyPress,
326
+ onPaste: function onPaste(event) {
327
+ return _onPaste(event, value);
328
+ },
329
+ onChange: function onChange(value) {
330
+ onURLChange(value);
331
+ _onChange(value);
332
+ }
333
+ })), /*#__PURE__*/_react.default.createElement(_form.MessageWrapper, null, error && /*#__PURE__*/_react.default.createElement(_form.ErrorMessage, null, /*#__PURE__*/_react.default.createElement(_primitives.Box, {
334
+ as: "span"
335
+ }, error)))), !previewState.previewInfo && !previewState.error && !previewState.warning && /*#__PURE__*/_react.default.createElement(_primitives.Flex, {
336
+ xcss: PreviewBoxStyles,
337
+ alignItems: "center",
338
+ justifyContent: "center"
339
+ }, /*#__PURE__*/_react.default.createElement(_new.default, {
340
+ type: "submit",
341
+ isLoading: previewState.isLoading,
342
+ isDisabled: !!error || !meta.dirty,
343
+ iconBefore: function iconBefore() {
344
+ return /*#__PURE__*/_react.default.createElement(_growDiagonal.default, {
345
+ label: "",
346
+ LEGACY_fallbackIcon: _filePreview.default
347
+ });
348
+ }
349
+ }, strings.loadPreview)));
350
+ }), previewState.previewInfo && /*#__PURE__*/_react.default.createElement(_primitives.Inline, {
351
+ alignInline: "center",
352
+ alignBlock: "center",
353
+ xcss: PreviewImageStyles,
354
+ space: "space.200"
355
+ }, /*#__PURE__*/_react.default.createElement(_MediaCard.MediaCard, {
356
+ attrs: previewState.previewInfo,
357
+ mediaProvider: mediaProvider
358
+ })), /*#__PURE__*/_react.default.createElement(_form.MessageWrapper, null, previewState.error && /*#__PURE__*/_react.default.createElement(_sectionMessage.default, {
359
+ appearance: "error"
360
+ }, strings.errorMessage), previewState.warning && /*#__PURE__*/_react.default.createElement(_sectionMessage.default, {
361
+ appearance: "warning"
362
+ }, strings.warning)), /*#__PURE__*/_react.default.createElement(_form.FormFooter, null, /*#__PURE__*/_react.default.createElement(_buttonGroup.default, null, /*#__PURE__*/_react.default.createElement(_new.default, {
363
+ appearance: "subtle",
364
+ onClick: onCancel
365
+ }, strings.cancel), /*#__PURE__*/_react.default.createElement(_new.default, {
366
+ type: "submit",
367
+ appearance: "primary",
368
+ isDisabled: !previewState.previewInfo && !previewState.warning
369
+ }, strings.insert)))))
370
+ );
371
+ });
372
+ }
@@ -15,12 +15,14 @@ var _messages = require("@atlaskit/editor-common/messages");
15
15
  var _ui = require("@atlaskit/editor-common/ui");
16
16
  var _utils = require("@atlaskit/editor-prosemirror/utils");
17
17
  var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
18
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
18
19
  var _primitives = require("@atlaskit/primitives");
19
20
  var _tabs = _interopRequireWildcard(require("@atlaskit/tabs"));
20
21
  var _useFocusEditor = require("./hooks/use-focus-editor");
21
22
  var _useUnholyAutofocus2 = require("./hooks/use-unholy-autofocus");
22
23
  var _LocalMedia = require("./LocalMedia");
23
24
  var _MediaFromURL = require("./MediaFromURL");
25
+ var _MediaFromURLWithForm = require("./MediaFromURLWithForm");
24
26
  var _MediaInsertWrapper = require("./MediaInsertWrapper");
25
27
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
26
28
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
@@ -159,7 +161,16 @@ var MediaInsertPicker = exports.MediaInsertPicker = function MediaInsertPicker(_
159
161
  },
160
162
  dispatchAnalyticsEvent: dispatchAnalyticsEvent,
161
163
  insertFile: insertFile
162
- })), /*#__PURE__*/_react.default.createElement(CustomTabPanel, null, /*#__PURE__*/_react.default.createElement(_MediaFromURL.MediaFromURL, {
164
+ })), /*#__PURE__*/_react.default.createElement(CustomTabPanel, null, (0, _platformFeatureFlags.fg)('platform_editor_media_from_url_remove_form') ? /*#__PURE__*/_react.default.createElement(_MediaFromURL.MediaFromURL, {
165
+ mediaProvider: mediaProvider,
166
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent,
167
+ closeMediaInsertPicker: function closeMediaInsertPicker() {
168
+ _closeMediaInsertPicker();
169
+ focusEditor();
170
+ },
171
+ insertMediaSingle: insertMediaSingle,
172
+ insertExternalMediaSingle: insertExternalMediaSingle
173
+ }) : /*#__PURE__*/_react.default.createElement(_MediaFromURLWithForm.MediaFromURLWithForm, {
163
174
  mediaProvider: mediaProvider,
164
175
  dispatchAnalyticsEvent: dispatchAnalyticsEvent,
165
176
  closeMediaInsertPicker: function closeMediaInsertPicker() {
@@ -1,4 +1,3 @@
1
- import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
2
1
  import { pluginKey } from './plugin-key';
3
2
  export const ACTION_OPEN_POPUP = 'OPEN_POPUP';
4
3
  export const ACTION_CLOSE_POPUP = 'CLOSE_POPUP';
@@ -11,10 +10,6 @@ const setPopupMeta = ({
11
10
  mountInfo
12
11
  });
13
12
  export const showMediaInsertPopup = (tr, mountInfo) => {
14
- // Log exposure here but don't actually switch anything on it
15
- editorExperiment('add-media-from-url', true, {
16
- exposure: true
17
- });
18
13
  return setPopupMeta({
19
14
  type: ACTION_OPEN_POPUP,
20
15
  mountInfo,
@@ -257,11 +257,9 @@ export function MediaFromURL({
257
257
  /*#__PURE__*/
258
258
  // Ignored via go/ees005
259
259
  // eslint-disable-next-line react/jsx-props-no-spreading
260
- React.createElement(Box, _extends({
261
- as: "form"
262
- }, formProps, {
260
+ React.createElement(Box, {
263
261
  xcss: FormStyles
264
- }), /*#__PURE__*/React.createElement(Stack, {
262
+ }, /*#__PURE__*/React.createElement(Stack, {
265
263
  space: "space.150",
266
264
  grow: "fill"
267
265
  }, /*#__PURE__*/React.createElement(Field, {
@@ -292,6 +290,12 @@ export function MediaFromURL({
292
290
  onChange: value => {
293
291
  onURLChange(value);
294
292
  onChange(value);
293
+ },
294
+ onKeyDown: e => {
295
+ if (e.key === 'Enter') {
296
+ e.preventDefault();
297
+ formProps.onSubmit();
298
+ }
295
299
  }
296
300
  })), /*#__PURE__*/React.createElement(MessageWrapper, null, error && /*#__PURE__*/React.createElement(ErrorMessage, null, /*#__PURE__*/React.createElement(Box, {
297
301
  as: "span"
@@ -300,7 +304,8 @@ export function MediaFromURL({
300
304
  alignItems: "center",
301
305
  justifyContent: "center"
302
306
  }, /*#__PURE__*/React.createElement(Button, {
303
- type: "submit",
307
+ type: "button",
308
+ onClick: () => formProps.onSubmit(),
304
309
  isLoading: previewState.isLoading,
305
310
  isDisabled: !!error || !meta.dirty,
306
311
  iconBefore: () => /*#__PURE__*/React.createElement(ExpandIcon, {
@@ -323,8 +328,9 @@ export function MediaFromURL({
323
328
  appearance: "subtle",
324
329
  onClick: onCancel
325
330
  }, strings.cancel), /*#__PURE__*/React.createElement(Button, {
326
- type: "submit",
331
+ type: "button",
327
332
  appearance: "primary",
328
- isDisabled: !previewState.previewInfo && !previewState.warning
333
+ isDisabled: !previewState.previewInfo && !previewState.warning,
334
+ onClick: () => formProps.onSubmit()
329
335
  }, strings.insert))))));
330
336
  }