@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 +13 -0
- package/dist/cjs/pm-plugins/actions.js +0 -5
- package/dist/cjs/ui/MediaFromURL.js +17 -7
- package/dist/cjs/ui/MediaFromURLWithForm.js +372 -0
- package/dist/cjs/ui/MediaInsertPicker.js +12 -1
- package/dist/es2019/pm-plugins/actions.js +0 -5
- package/dist/es2019/ui/MediaFromURL.js +13 -7
- package/dist/es2019/ui/MediaFromURLWithForm.js +330 -0
- package/dist/es2019/ui/MediaInsertPicker.js +12 -1
- package/dist/esm/pm-plugins/actions.js +0 -5
- package/dist/esm/ui/MediaFromURL.js +17 -7
- package/dist/esm/ui/MediaFromURLWithForm.js +361 -0
- package/dist/esm/ui/MediaInsertPicker.js +12 -1
- package/dist/types/ui/MediaFromURLWithForm.d.ts +14 -0
- package/dist/types-ts4.5/ui/MediaFromURLWithForm.d.ts +14 -0
- package/package.json +10 -5
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,
|
|
295
|
-
as: "form"
|
|
296
|
-
}, formProps, {
|
|
294
|
+
_react.default.createElement(_primitives.Box, {
|
|
297
295
|
xcss: FormStyles
|
|
298
|
-
}
|
|
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: "
|
|
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: "
|
|
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,
|
|
261
|
-
as: "form"
|
|
262
|
-
}, formProps, {
|
|
260
|
+
React.createElement(Box, {
|
|
263
261
|
xcss: FormStyles
|
|
264
|
-
}
|
|
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: "
|
|
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: "
|
|
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
|
}
|