@atlaskit/editor-plugin-media-insert 1.2.1 → 1.3.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 +21 -0
- package/dist/cjs/actions.js +28 -0
- package/dist/cjs/plugin.js +57 -10
- package/dist/cjs/pm-plugins/main.js +40 -0
- package/dist/cjs/pm-plugins/plugin-key.js +8 -0
- package/dist/cjs/types.js +5 -0
- package/dist/cjs/ui/FromURL.js +108 -85
- package/dist/cjs/ui/MediaInsertContent.js +24 -0
- package/dist/cjs/ui/MediaInsertPicker.js +86 -0
- package/dist/cjs/ui/MediaInsertWrapper.js +21 -0
- package/dist/es2019/actions.js +21 -0
- package/dist/es2019/plugin.js +62 -12
- package/dist/es2019/pm-plugins/main.js +34 -0
- package/dist/es2019/pm-plugins/plugin-key.js +2 -0
- package/dist/es2019/types.js +1 -0
- package/dist/es2019/ui/FromURL.js +34 -16
- package/dist/es2019/ui/MediaInsertContent.js +14 -0
- package/dist/es2019/ui/MediaInsertPicker.js +79 -0
- package/dist/es2019/ui/MediaInsertWrapper.js +15 -0
- package/dist/esm/actions.js +22 -0
- package/dist/esm/plugin.js +57 -10
- package/dist/esm/pm-plugins/main.js +34 -0
- package/dist/esm/pm-plugins/plugin-key.js +2 -0
- package/dist/esm/types.js +1 -0
- package/dist/esm/ui/FromURL.js +108 -85
- package/dist/esm/ui/MediaInsertContent.js +14 -0
- package/dist/esm/ui/MediaInsertPicker.js +79 -0
- package/dist/esm/ui/MediaInsertWrapper.js +14 -0
- package/dist/types/actions.d.ts +6 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/plugin.d.ts +1 -2
- package/dist/types/pm-plugins/main.d.ts +3 -0
- package/dist/types/pm-plugins/plugin-key.d.ts +3 -0
- package/dist/types/types.d.ts +14 -0
- package/dist/types/ui/MediaInsertContent.d.ts +2 -0
- package/dist/types/ui/MediaInsertPicker.d.ts +3 -0
- package/dist/types/ui/MediaInsertWrapper.d.ts +4 -0
- package/dist/types-ts4.5/actions.d.ts +6 -0
- package/dist/types-ts4.5/index.d.ts +1 -1
- package/dist/types-ts4.5/plugin.d.ts +1 -2
- package/dist/types-ts4.5/pm-plugins/main.d.ts +3 -0
- package/dist/types-ts4.5/pm-plugins/plugin-key.d.ts +3 -0
- package/dist/types-ts4.5/types.d.ts +16 -0
- package/dist/types-ts4.5/ui/MediaInsertContent.d.ts +2 -0
- package/dist/types-ts4.5/ui/MediaInsertPicker.d.ts +3 -0
- package/dist/types-ts4.5/ui/MediaInsertWrapper.d.ts +4 -0
- package/package.json +11 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# @atlaskit/editor-plugin-media-insert
|
|
2
2
|
|
|
3
|
+
## 1.3.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#129365](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/129365)
|
|
8
|
+
[`0cb229e53ad8f`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/0cb229e53ad8f) -
|
|
9
|
+
[ux] [ED-24249] Added popup dialog for inserting media using editor-plugin-media-insert
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- Updated dependencies
|
|
14
|
+
|
|
15
|
+
## 1.2.2
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- [#128111](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/128111)
|
|
20
|
+
[`5d65c0d1d28c8`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/5d65c0d1d28c8) -
|
|
21
|
+
[ux] [ED-24322] Add onPaste UX improvements to url upload
|
|
22
|
+
- Updated dependencies
|
|
23
|
+
|
|
3
24
|
## 1.2.1
|
|
4
25
|
|
|
5
26
|
### Patch Changes
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.showMediaInsertPopup = exports.closeMediaInsertPicker = exports.ACTION_OPEN_POPUP = exports.ACTION_CLOSE_POPUP = void 0;
|
|
7
|
+
var _pluginKey = require("./pm-plugins/plugin-key");
|
|
8
|
+
var ACTION_OPEN_POPUP = exports.ACTION_OPEN_POPUP = 'OPEN_POPUP';
|
|
9
|
+
var ACTION_CLOSE_POPUP = exports.ACTION_CLOSE_POPUP = 'CLOSE_POPUP';
|
|
10
|
+
var setPopupMeta = function setPopupMeta(_ref) {
|
|
11
|
+
var type = _ref.type,
|
|
12
|
+
tr = _ref.tr;
|
|
13
|
+
return tr.setMeta(_pluginKey.pluginKey, {
|
|
14
|
+
type: type
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
var showMediaInsertPopup = exports.showMediaInsertPopup = function showMediaInsertPopup(tr) {
|
|
18
|
+
return setPopupMeta({
|
|
19
|
+
type: ACTION_OPEN_POPUP,
|
|
20
|
+
tr: tr
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
var closeMediaInsertPicker = exports.closeMediaInsertPicker = function closeMediaInsertPicker(tr) {
|
|
24
|
+
return setPopupMeta({
|
|
25
|
+
type: ACTION_CLOSE_POPUP,
|
|
26
|
+
tr: tr
|
|
27
|
+
});
|
|
28
|
+
};
|
package/dist/cjs/plugin.js
CHANGED
|
@@ -6,24 +6,60 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.mediaInsertPlugin = void 0;
|
|
8
8
|
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var _analytics = require("@atlaskit/editor-common/analytics");
|
|
9
10
|
var _messages = require("@atlaskit/editor-common/messages");
|
|
10
11
|
var _quickInsert = require("@atlaskit/editor-common/quick-insert");
|
|
11
|
-
var
|
|
12
|
+
var _actions = require("./actions");
|
|
13
|
+
var _main = require("./pm-plugins/main");
|
|
14
|
+
var _pluginKey = require("./pm-plugins/plugin-key");
|
|
15
|
+
var _MediaInsertPicker = require("./ui/MediaInsertPicker");
|
|
16
|
+
var mediaInsertPlugin = exports.mediaInsertPlugin = function mediaInsertPlugin(_ref) {
|
|
17
|
+
var api = _ref.api;
|
|
12
18
|
return {
|
|
13
19
|
name: 'mediaInsert',
|
|
14
20
|
pmPlugins: function pmPlugins() {
|
|
15
21
|
return [{
|
|
16
22
|
name: 'mediaInsert',
|
|
17
23
|
plugin: function plugin() {
|
|
18
|
-
|
|
19
|
-
console.log('mediaInsert plugin');
|
|
20
|
-
return undefined;
|
|
24
|
+
return (0, _main.createPlugin)();
|
|
21
25
|
}
|
|
22
26
|
}];
|
|
23
27
|
},
|
|
28
|
+
getSharedState: function getSharedState(editorState) {
|
|
29
|
+
if (!editorState) {
|
|
30
|
+
return {
|
|
31
|
+
isOpen: false
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
var _ref2 = _pluginKey.pluginKey.getState(editorState) || {},
|
|
35
|
+
isOpen = _ref2.isOpen;
|
|
36
|
+
return {
|
|
37
|
+
isOpen: isOpen
|
|
38
|
+
};
|
|
39
|
+
},
|
|
40
|
+
contentComponent: function contentComponent(_ref3) {
|
|
41
|
+
var editorView = _ref3.editorView,
|
|
42
|
+
dispatchAnalyticsEvent = _ref3.dispatchAnalyticsEvent,
|
|
43
|
+
popupsMountPoint = _ref3.popupsMountPoint,
|
|
44
|
+
popupsBoundariesElement = _ref3.popupsBoundariesElement,
|
|
45
|
+
popupsScrollableElement = _ref3.popupsScrollableElement;
|
|
46
|
+
var dispatch = editorView.dispatch,
|
|
47
|
+
state = editorView.state;
|
|
48
|
+
return /*#__PURE__*/_react.default.createElement(_MediaInsertPicker.MediaInsertPicker, {
|
|
49
|
+
api: api,
|
|
50
|
+
editorView: editorView,
|
|
51
|
+
dispatchAnalyticsEvent: dispatchAnalyticsEvent,
|
|
52
|
+
popupsMountPoint: popupsMountPoint,
|
|
53
|
+
popupsBoundariesElement: popupsBoundariesElement,
|
|
54
|
+
popupsScrollableElement: popupsScrollableElement,
|
|
55
|
+
closeMediaInsertPicker: function closeMediaInsertPicker() {
|
|
56
|
+
return dispatch((0, _actions.closeMediaInsertPicker)(state.tr));
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
},
|
|
24
60
|
pluginsOptions: {
|
|
25
|
-
quickInsert: function quickInsert(
|
|
26
|
-
var formatMessage =
|
|
61
|
+
quickInsert: function quickInsert(_ref4) {
|
|
62
|
+
var formatMessage = _ref4.formatMessage;
|
|
27
63
|
return [{
|
|
28
64
|
id: 'media-insert',
|
|
29
65
|
title: formatMessage(_messages.toolbarInsertBlockMessages.insertMediaFromUrl),
|
|
@@ -34,10 +70,21 @@ var mediaInsertPlugin = exports.mediaInsertPlugin = function mediaInsertPlugin()
|
|
|
34
70
|
return /*#__PURE__*/_react.default.createElement(_quickInsert.IconImages, null);
|
|
35
71
|
},
|
|
36
72
|
action: function action(insert) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
73
|
+
var _api$analytics;
|
|
74
|
+
// Insert empty string to remove the typeahead raw text
|
|
75
|
+
// close the quick insert immediately
|
|
76
|
+
var tr = insert('');
|
|
77
|
+
(0, _actions.showMediaInsertPopup)(tr);
|
|
78
|
+
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({
|
|
79
|
+
action: _analytics.ACTION.OPENED,
|
|
80
|
+
actionSubject: _analytics.ACTION_SUBJECT.PICKER,
|
|
81
|
+
actionSubjectId: _analytics.ACTION_SUBJECT_ID.PICKER_MEDIA,
|
|
82
|
+
attributes: {
|
|
83
|
+
inputMethod: _analytics.INPUT_METHOD.QUICK_INSERT
|
|
84
|
+
},
|
|
85
|
+
eventType: _analytics.EVENT_TYPE.UI
|
|
86
|
+
})(tr);
|
|
87
|
+
return tr;
|
|
41
88
|
}
|
|
42
89
|
}];
|
|
43
90
|
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createPlugin = void 0;
|
|
7
|
+
var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
|
|
8
|
+
var _actions = require("../actions");
|
|
9
|
+
var _pluginKey = require("./plugin-key");
|
|
10
|
+
var createPlugin = exports.createPlugin = function createPlugin() {
|
|
11
|
+
return new _safePlugin.SafePlugin({
|
|
12
|
+
state: {
|
|
13
|
+
init: function init() {
|
|
14
|
+
return {
|
|
15
|
+
isOpen: false
|
|
16
|
+
};
|
|
17
|
+
},
|
|
18
|
+
apply: function apply(tr, mediaInsertPluginState) {
|
|
19
|
+
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;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
key: _pluginKey.pluginKey
|
|
39
|
+
});
|
|
40
|
+
};
|
package/dist/cjs/ui/FromURL.js
CHANGED
|
@@ -89,118 +89,141 @@ function MediaFromURL(_ref) {
|
|
|
89
89
|
};
|
|
90
90
|
var _React$useState = _react.default.useState(placeholders[1]),
|
|
91
91
|
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
|
|
92
|
-
|
|
92
|
+
inputUrl = _React$useState2[0],
|
|
93
93
|
setUrl = _React$useState2[1];
|
|
94
94
|
var _React$useReducer = _react.default.useReducer(previewStateReducer, INITIAL_PREVIEW_STATE),
|
|
95
95
|
_React$useReducer2 = (0, _slicedToArray2.default)(_React$useReducer, 2),
|
|
96
96
|
previewState = _React$useReducer2[0],
|
|
97
97
|
dispatch = _React$useReducer2[1];
|
|
98
|
+
var pasteFlag = _react.default.useRef(false);
|
|
98
99
|
var _useAnalyticsEvents = (0, _useAnalyticsEvents2.useAnalyticsEvents)(dispatchAnalyticsEvent),
|
|
99
100
|
onUploadAnalytics = _useAnalyticsEvents.onUploadAnalytics,
|
|
100
101
|
onUploadSuccessAnalytics = _useAnalyticsEvents.onUploadSuccessAnalytics,
|
|
101
102
|
onUploadFailureAnalytics = _useAnalyticsEvents.onUploadFailureAnalytics;
|
|
102
|
-
var
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
var uploadExternalMedia = _react.default.useCallback( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
109
|
-
var _yield$mediaProvider, uploadMediaClientConfig, uploadParams, mediaClient, collection, _yield$mediaClient$fi, uploadableFileUpfrontIds, dimensions, message;
|
|
110
|
-
return _regenerator.default.wrap(function _callee$(_context) {
|
|
111
|
-
while (1) switch (_context.prev = _context.next) {
|
|
112
|
-
case 0:
|
|
113
|
-
dispatch({
|
|
114
|
-
type: 'loading'
|
|
115
|
-
});
|
|
116
|
-
_context.next = 3;
|
|
117
|
-
return mediaProvider;
|
|
118
|
-
case 3:
|
|
119
|
-
_yield$mediaProvider = _context.sent;
|
|
120
|
-
uploadMediaClientConfig = _yield$mediaProvider.uploadMediaClientConfig;
|
|
121
|
-
uploadParams = _yield$mediaProvider.uploadParams;
|
|
122
|
-
if (uploadMediaClientConfig) {
|
|
123
|
-
_context.next = 8;
|
|
124
|
-
break;
|
|
125
|
-
}
|
|
126
|
-
return _context.abrupt("return");
|
|
127
|
-
case 8:
|
|
128
|
-
mediaClient = (0, _mediaClientReact.getMediaClient)(uploadMediaClientConfig);
|
|
129
|
-
collection = uploadParams === null || uploadParams === void 0 ? void 0 : uploadParams.collection;
|
|
130
|
-
onUploadAnalytics();
|
|
131
|
-
_context.prev = 11;
|
|
132
|
-
_context.next = 14;
|
|
133
|
-
return mediaClient.file.uploadExternal(url, collection);
|
|
134
|
-
case 14:
|
|
135
|
-
_yield$mediaClient$fi = _context.sent;
|
|
136
|
-
uploadableFileUpfrontIds = _yield$mediaClient$fi.uploadableFileUpfrontIds;
|
|
137
|
-
dimensions = _yield$mediaClient$fi.dimensions;
|
|
138
|
-
onUploadSuccessAnalytics();
|
|
139
|
-
dispatch({
|
|
140
|
-
type: 'success',
|
|
141
|
-
payload: {
|
|
142
|
-
id: uploadableFileUpfrontIds.id,
|
|
143
|
-
collection: collection,
|
|
144
|
-
height: dimensions.height,
|
|
145
|
-
width: dimensions.width,
|
|
146
|
-
occurrenceKey: uploadableFileUpfrontIds.occurrenceKey
|
|
147
|
-
}
|
|
148
|
-
});
|
|
149
|
-
_context.next = 24;
|
|
150
|
-
break;
|
|
151
|
-
case 21:
|
|
152
|
-
_context.prev = 21;
|
|
153
|
-
_context.t0 = _context["catch"](11);
|
|
154
|
-
if (typeof _context.t0 === 'string' && _context.t0 === 'Could not download remote file') {
|
|
155
|
-
// TODO: Make sure this gets good unit test coverage with the actual
|
|
156
|
-
// media plugin. This hard coded error message could be changed at any
|
|
157
|
-
// point and we need a unit test to break to stop people changing it.
|
|
158
|
-
onUploadFailureAnalytics(_context.t0);
|
|
159
|
-
dispatch({
|
|
160
|
-
type: 'warning',
|
|
161
|
-
warning: _context.t0,
|
|
162
|
-
url: url
|
|
163
|
-
});
|
|
164
|
-
} else if (_context.t0 instanceof Error) {
|
|
165
|
-
message = 'Image preview fetch failed';
|
|
166
|
-
onUploadFailureAnalytics(message);
|
|
103
|
+
var uploadExternalMedia = _react.default.useCallback( /*#__PURE__*/function () {
|
|
104
|
+
var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(url) {
|
|
105
|
+
var _yield$mediaProvider, uploadMediaClientConfig, uploadParams, mediaClient, collection, _yield$mediaClient$fi, uploadableFileUpfrontIds, dimensions, message;
|
|
106
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
|
107
|
+
while (1) switch (_context.prev = _context.next) {
|
|
108
|
+
case 0:
|
|
167
109
|
dispatch({
|
|
168
|
-
type: '
|
|
169
|
-
error: message
|
|
110
|
+
type: 'loading'
|
|
170
111
|
});
|
|
171
|
-
|
|
172
|
-
|
|
112
|
+
_context.next = 3;
|
|
113
|
+
return mediaProvider;
|
|
114
|
+
case 3:
|
|
115
|
+
_yield$mediaProvider = _context.sent;
|
|
116
|
+
uploadMediaClientConfig = _yield$mediaProvider.uploadMediaClientConfig;
|
|
117
|
+
uploadParams = _yield$mediaProvider.uploadParams;
|
|
118
|
+
if (uploadMediaClientConfig) {
|
|
119
|
+
_context.next = 8;
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
return _context.abrupt("return");
|
|
123
|
+
case 8:
|
|
124
|
+
mediaClient = (0, _mediaClientReact.getMediaClient)(uploadMediaClientConfig);
|
|
125
|
+
collection = uploadParams === null || uploadParams === void 0 ? void 0 : uploadParams.collection;
|
|
126
|
+
onUploadAnalytics();
|
|
127
|
+
_context.prev = 11;
|
|
128
|
+
_context.next = 14;
|
|
129
|
+
return mediaClient.file.uploadExternal(url, collection);
|
|
130
|
+
case 14:
|
|
131
|
+
_yield$mediaClient$fi = _context.sent;
|
|
132
|
+
uploadableFileUpfrontIds = _yield$mediaClient$fi.uploadableFileUpfrontIds;
|
|
133
|
+
dimensions = _yield$mediaClient$fi.dimensions;
|
|
134
|
+
onUploadSuccessAnalytics();
|
|
173
135
|
dispatch({
|
|
174
|
-
type: '
|
|
175
|
-
|
|
136
|
+
type: 'success',
|
|
137
|
+
payload: {
|
|
138
|
+
id: uploadableFileUpfrontIds.id,
|
|
139
|
+
collection: collection,
|
|
140
|
+
height: dimensions.height,
|
|
141
|
+
width: dimensions.width,
|
|
142
|
+
occurrenceKey: uploadableFileUpfrontIds.occurrenceKey
|
|
143
|
+
}
|
|
176
144
|
});
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
145
|
+
_context.next = 24;
|
|
146
|
+
break;
|
|
147
|
+
case 21:
|
|
148
|
+
_context.prev = 21;
|
|
149
|
+
_context.t0 = _context["catch"](11);
|
|
150
|
+
if (typeof _context.t0 === 'string' && _context.t0 === 'Could not download remote file') {
|
|
151
|
+
// TODO: Make sure this gets good unit test coverage with the actual
|
|
152
|
+
// media plugin. This hard coded error message could be changed at any
|
|
153
|
+
// point and we need a unit test to break to stop people changing it.
|
|
154
|
+
onUploadFailureAnalytics(_context.t0);
|
|
155
|
+
dispatch({
|
|
156
|
+
type: 'warning',
|
|
157
|
+
warning: _context.t0,
|
|
158
|
+
url: inputUrl
|
|
159
|
+
});
|
|
160
|
+
} else if (_context.t0 instanceof Error) {
|
|
161
|
+
message = 'Image preview fetch failed';
|
|
162
|
+
onUploadFailureAnalytics(message);
|
|
163
|
+
dispatch({
|
|
164
|
+
type: 'error',
|
|
165
|
+
error: message
|
|
166
|
+
});
|
|
167
|
+
} else {
|
|
168
|
+
onUploadFailureAnalytics('Unknown error');
|
|
169
|
+
dispatch({
|
|
170
|
+
type: 'error',
|
|
171
|
+
error: 'Unknown error'
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
case 24:
|
|
175
|
+
case "end":
|
|
176
|
+
return _context.stop();
|
|
177
|
+
}
|
|
178
|
+
}, _callee, null, [[11, 21]]);
|
|
179
|
+
}));
|
|
180
|
+
return function (_x) {
|
|
181
|
+
return _ref2.apply(this, arguments);
|
|
182
|
+
};
|
|
183
|
+
}(), [mediaProvider, onUploadAnalytics, onUploadFailureAnalytics, onUploadSuccessAnalytics, inputUrl]);
|
|
184
|
+
var onURLChange = _react.default.useCallback(function (e) {
|
|
185
|
+
var url = e.target.value;
|
|
186
|
+
setUrl(url);
|
|
187
|
+
dispatch({
|
|
188
|
+
type: 'reset'
|
|
189
|
+
});
|
|
190
|
+
if (pasteFlag.current === true) {
|
|
191
|
+
pasteFlag.current = false;
|
|
192
|
+
uploadExternalMedia(url);
|
|
193
|
+
}
|
|
194
|
+
}, [uploadExternalMedia]);
|
|
195
|
+
var onPaste = _react.default.useCallback(function (e) {
|
|
196
|
+
// Note: this is a little weird, but the paste event will always be
|
|
197
|
+
// fired before the change event when pasting. We don't really want to
|
|
198
|
+
// duplicate logic by handling pastes separately to changes, so we're
|
|
199
|
+
// just noting paste occured to then be handled in the onURLChange fn
|
|
200
|
+
// above. The one exception to this is where paste inputs exactly what was
|
|
201
|
+
// already in the input, in which case we want to ignore it.
|
|
202
|
+
if (e.clipboardData.getData('text') !== inputUrl) {
|
|
203
|
+
pasteFlag.current = true;
|
|
204
|
+
}
|
|
205
|
+
}, [inputUrl]);
|
|
184
206
|
var onInsertClick = _react.default.useCallback(function () {
|
|
185
207
|
if (previewState.previewInfo) {
|
|
186
208
|
return onInsert(previewState.previewInfo);
|
|
187
209
|
}
|
|
188
210
|
if (previewState.warning) {
|
|
189
|
-
return onExternalInsert(
|
|
211
|
+
return onExternalInsert(inputUrl);
|
|
190
212
|
}
|
|
191
|
-
}, [onExternalInsert, onInsert, previewState.previewInfo, previewState.warning,
|
|
213
|
+
}, [onExternalInsert, onInsert, previewState.previewInfo, previewState.warning, inputUrl]);
|
|
192
214
|
return /*#__PURE__*/_react.default.createElement("form", {
|
|
193
215
|
onSubmit: function onSubmit(e) {
|
|
194
216
|
e.preventDefault();
|
|
195
|
-
uploadExternalMedia();
|
|
217
|
+
uploadExternalMedia(inputUrl);
|
|
196
218
|
}
|
|
197
219
|
}, /*#__PURE__*/_react.default.createElement(_primitives.Stack, {
|
|
198
220
|
space: "space.150"
|
|
199
221
|
}, /*#__PURE__*/_react.default.createElement(_textfield.default, {
|
|
200
222
|
autoFocus: true,
|
|
201
|
-
value:
|
|
223
|
+
value: inputUrl,
|
|
202
224
|
placeholder: strings.pasteLinkToUpload,
|
|
203
|
-
onChange: onURLChange
|
|
225
|
+
onChange: onURLChange,
|
|
226
|
+
onPaste: onPaste
|
|
204
227
|
}), previewState.previewInfo && /*#__PURE__*/_react.default.createElement(_primitives.Inline, {
|
|
205
228
|
alignInline: "center",
|
|
206
229
|
alignBlock: "center",
|
|
@@ -220,7 +243,7 @@ function MediaFromURL(_ref) {
|
|
|
220
243
|
}, /*#__PURE__*/_react.default.createElement(_new.default, {
|
|
221
244
|
type: "submit",
|
|
222
245
|
isLoading: previewState.isLoading,
|
|
223
|
-
isDisabled: !
|
|
246
|
+
isDisabled: !inputUrl,
|
|
224
247
|
iconBefore: _filePreview.default
|
|
225
248
|
}, strings.loadPreview)), /*#__PURE__*/_react.default.createElement(_primitives.Box, {
|
|
226
249
|
xcss: ButtonGroupStyles
|
|
@@ -0,0 +1,24 @@
|
|
|
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.MediaInsertContent = void 0;
|
|
9
|
+
var _react = _interopRequireDefault(require("react"));
|
|
10
|
+
var _new = _interopRequireDefault(require("@atlaskit/button/new"));
|
|
11
|
+
var _primitives = require("@atlaskit/primitives");
|
|
12
|
+
var _tabs = _interopRequireWildcard(require("@atlaskit/tabs"));
|
|
13
|
+
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); }
|
|
14
|
+
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 && Object.prototype.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; }
|
|
15
|
+
var MediaInsertContent = exports.MediaInsertContent = function MediaInsertContent() {
|
|
16
|
+
return /*#__PURE__*/_react.default.createElement(_tabs.default, {
|
|
17
|
+
id: "media-insert-tab-navigation"
|
|
18
|
+
}, /*#__PURE__*/_react.default.createElement(_primitives.Box, {
|
|
19
|
+
paddingBlockEnd: "space.150"
|
|
20
|
+
}, /*#__PURE__*/_react.default.createElement(_tabs.TabList, null, /*#__PURE__*/_react.default.createElement(_tabs.Tab, null, /*#__PURE__*/_react.default.createElement(_new.default, {
|
|
21
|
+
autoFocus: true,
|
|
22
|
+
appearance: "subtle"
|
|
23
|
+
}, "Link")))), /*#__PURE__*/_react.default.createElement(_tabs.TabPanel, null, /*#__PURE__*/_react.default.createElement("p", null, "InsertLinkPanel here")));
|
|
24
|
+
};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.MediaInsertPicker = void 0;
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var _analytics = require("@atlaskit/editor-common/analytics");
|
|
10
|
+
var _hooks = require("@atlaskit/editor-common/hooks");
|
|
11
|
+
var _ui = require("@atlaskit/editor-common/ui");
|
|
12
|
+
var _utils = require("@atlaskit/editor-prosemirror/utils");
|
|
13
|
+
var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
|
|
14
|
+
var _MediaInsertContent = require("./MediaInsertContent");
|
|
15
|
+
var _MediaInsertWrapper = require("./MediaInsertWrapper");
|
|
16
|
+
var PopupWithListeners = (0, _ui.withOuterListeners)(_ui.Popup);
|
|
17
|
+
var getDomRefFromSelection = function getDomRefFromSelection(view, dispatchAnalyticsEvent) {
|
|
18
|
+
try {
|
|
19
|
+
var domRef = (0, _utils.findDomRefAtPos)(view.state.selection.from, view.domAtPos.bind(view));
|
|
20
|
+
if (domRef instanceof HTMLElement) {
|
|
21
|
+
return domRef;
|
|
22
|
+
} else {
|
|
23
|
+
throw new Error('Invalid DOM reference');
|
|
24
|
+
}
|
|
25
|
+
} catch (error) {
|
|
26
|
+
if (dispatchAnalyticsEvent) {
|
|
27
|
+
var payload = {
|
|
28
|
+
action: _analytics.ACTION.ERRORED,
|
|
29
|
+
actionSubject: _analytics.ACTION_SUBJECT.PICKER,
|
|
30
|
+
actionSubjectId: _analytics.ACTION_SUBJECT_ID.PICKER_MEDIA,
|
|
31
|
+
eventType: _analytics.EVENT_TYPE.OPERATIONAL,
|
|
32
|
+
attributes: {
|
|
33
|
+
error: 'Error getting DOM reference from selection'
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
dispatchAnalyticsEvent(payload);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
var MediaInsertPicker = exports.MediaInsertPicker = function MediaInsertPicker(_ref) {
|
|
41
|
+
var api = _ref.api,
|
|
42
|
+
editorView = _ref.editorView,
|
|
43
|
+
dispatchAnalyticsEvent = _ref.dispatchAnalyticsEvent,
|
|
44
|
+
popupsMountPoint = _ref.popupsMountPoint,
|
|
45
|
+
popupsBoundariesElement = _ref.popupsBoundariesElement,
|
|
46
|
+
popupsScrollableElement = _ref.popupsScrollableElement,
|
|
47
|
+
closeMediaInsertPicker = _ref.closeMediaInsertPicker;
|
|
48
|
+
var targetRef = getDomRefFromSelection(editorView, dispatchAnalyticsEvent);
|
|
49
|
+
var _useSharedPluginState = (0, _hooks.useSharedPluginState)(api, ['mediaInsert']),
|
|
50
|
+
mediaInsertState = _useSharedPluginState.mediaInsertState;
|
|
51
|
+
if (!mediaInsertState || !mediaInsertState.isOpen) {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
var handleClose = function handleClose(exitMethod) {
|
|
55
|
+
return function (event) {
|
|
56
|
+
event.preventDefault();
|
|
57
|
+
if (dispatchAnalyticsEvent) {
|
|
58
|
+
var payload = {
|
|
59
|
+
action: _analytics.ACTION.CLOSED,
|
|
60
|
+
actionSubject: _analytics.ACTION_SUBJECT.PICKER,
|
|
61
|
+
actionSubjectId: _analytics.ACTION_SUBJECT_ID.PICKER_MEDIA,
|
|
62
|
+
eventType: _analytics.EVENT_TYPE.UI,
|
|
63
|
+
attributes: {
|
|
64
|
+
exitMethod: exitMethod
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
dispatchAnalyticsEvent(payload);
|
|
68
|
+
}
|
|
69
|
+
closeMediaInsertPicker();
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
return /*#__PURE__*/_react.default.createElement(PopupWithListeners
|
|
73
|
+
// TODO: i18n
|
|
74
|
+
, {
|
|
75
|
+
ariaLabel: 'Media Insert',
|
|
76
|
+
offset: [0, 12],
|
|
77
|
+
target: targetRef,
|
|
78
|
+
zIndex: _editorSharedStyles.akEditorFloatingDialogZIndex,
|
|
79
|
+
mountTo: popupsMountPoint,
|
|
80
|
+
boundariesElement: popupsBoundariesElement,
|
|
81
|
+
handleClickOutside: handleClose(_analytics.INPUT_METHOD.MOUSE),
|
|
82
|
+
handleEscapeKeydown: handleClose(_analytics.INPUT_METHOD.KEYBOARD),
|
|
83
|
+
scrollableElement: popupsScrollableElement,
|
|
84
|
+
focusTrap: true
|
|
85
|
+
}, /*#__PURE__*/_react.default.createElement(_MediaInsertWrapper.MediaInsertWrapper, null, /*#__PURE__*/_react.default.createElement(_MediaInsertContent.MediaInsertContent, null)));
|
|
86
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.MediaInsertWrapper = void 0;
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var _primitives = require("@atlaskit/primitives");
|
|
10
|
+
var styles = (0, _primitives.xcss)({
|
|
11
|
+
boxShadow: 'elevation.shadow.overflow',
|
|
12
|
+
width: '340px',
|
|
13
|
+
padding: 'space.200',
|
|
14
|
+
borderRadius: 'border.radius'
|
|
15
|
+
});
|
|
16
|
+
var MediaInsertWrapper = exports.MediaInsertWrapper = function MediaInsertWrapper(_ref) {
|
|
17
|
+
var children = _ref.children;
|
|
18
|
+
return /*#__PURE__*/_react.default.createElement(_primitives.Box, {
|
|
19
|
+
xcss: styles
|
|
20
|
+
}, children);
|
|
21
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { pluginKey } from './pm-plugins/plugin-key';
|
|
2
|
+
export const ACTION_OPEN_POPUP = 'OPEN_POPUP';
|
|
3
|
+
export const ACTION_CLOSE_POPUP = 'CLOSE_POPUP';
|
|
4
|
+
const setPopupMeta = ({
|
|
5
|
+
type,
|
|
6
|
+
tr
|
|
7
|
+
}) => tr.setMeta(pluginKey, {
|
|
8
|
+
type
|
|
9
|
+
});
|
|
10
|
+
export const showMediaInsertPopup = tr => {
|
|
11
|
+
return setPopupMeta({
|
|
12
|
+
type: ACTION_OPEN_POPUP,
|
|
13
|
+
tr
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
export const closeMediaInsertPicker = tr => {
|
|
17
|
+
return setPopupMeta({
|
|
18
|
+
type: ACTION_CLOSE_POPUP,
|
|
19
|
+
tr
|
|
20
|
+
});
|
|
21
|
+
};
|