@atlaskit/editor-plugin-media 9.4.1 → 9.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/dist/cjs/nodeviews/mediaNodeView/index.js +13 -5
- package/dist/cjs/nodeviews/mediaNodeView/media.js +47 -20
- package/dist/es2019/nodeviews/mediaNodeView/index.js +13 -5
- package/dist/es2019/nodeviews/mediaNodeView/media.js +39 -12
- package/dist/esm/nodeviews/mediaNodeView/index.js +13 -5
- package/dist/esm/nodeviews/mediaNodeView/media.js +47 -20
- package/dist/types/nodeviews/mediaNodeView/index.d.ts +1 -0
- package/dist/types/nodeviews/mediaNodeView/media.d.ts +3 -0
- package/dist/types-ts4.5/nodeviews/mediaNodeView/index.d.ts +1 -0
- package/dist/types-ts4.5/nodeviews/mediaNodeView/media.d.ts +3 -0
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# @atlaskit/editor-plugin-media
|
|
2
2
|
|
|
3
|
+
## 9.4.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`688d81c54687e`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/688d81c54687e) -
|
|
8
|
+
fix media client config undefined issue in media node
|
|
9
|
+
- Updated dependencies
|
|
10
|
+
|
|
3
11
|
## 9.4.1
|
|
4
12
|
|
|
5
13
|
### Patch Changes
|
|
@@ -114,6 +114,17 @@ var MediaNodeView = /*#__PURE__*/function (_SelectionBasedNodeVi) {
|
|
|
114
114
|
}
|
|
115
115
|
return flexibleDimensions;
|
|
116
116
|
});
|
|
117
|
+
(0, _defineProperty2.default)(_this, "getMediaProviderToUse", function (mediaOptions, mediaProvider) {
|
|
118
|
+
if (mediaProvider) {
|
|
119
|
+
return mediaProvider;
|
|
120
|
+
}
|
|
121
|
+
if ((0, _expValEquals.expValEquals)('platform_editor_media_vc_fixes', 'isEnabled', true)) {
|
|
122
|
+
return mediaOptions.provider;
|
|
123
|
+
}
|
|
124
|
+
if ((0, _expValEquals.expValEquals)('platform_editor_ssr_renderer', 'isEnabled', true)) {
|
|
125
|
+
return mediaOptions.syncProvider ? Promise.resolve(mediaOptions.syncProvider) : mediaOptions.provider;
|
|
126
|
+
}
|
|
127
|
+
});
|
|
117
128
|
(0, _defineProperty2.default)(_this, "renderMediaNodeWithState", function (contextIdentifierProvider) {
|
|
118
129
|
return function (_ref2) {
|
|
119
130
|
var _this$reactComponentP;
|
|
@@ -145,10 +156,6 @@ var MediaNodeView = /*#__PURE__*/function (_SelectionBasedNodeVi) {
|
|
|
145
156
|
height: height
|
|
146
157
|
};
|
|
147
158
|
var isSelectedAndInteracted = _this.nodeInsideSelection() && interactionState !== 'hasNotHadInteraction';
|
|
148
|
-
var mediaProviderToUse = mediaProvider;
|
|
149
|
-
if (!mediaProviderToUse && (0, _expValEquals.expValEquals)('platform_editor_ssr_renderer', 'isEnabled', true)) {
|
|
150
|
-
mediaProviderToUse = mediaOptions.syncProvider ? Promise.resolve(mediaOptions.syncProvider) : mediaOptions.provider;
|
|
151
|
-
}
|
|
152
159
|
return /*#__PURE__*/_react.default.createElement(_media.default, {
|
|
153
160
|
api: pluginInjectionApi,
|
|
154
161
|
view: _this.view,
|
|
@@ -158,7 +165,8 @@ var MediaNodeView = /*#__PURE__*/function (_SelectionBasedNodeVi) {
|
|
|
158
165
|
originalDimensions: originalDimensions,
|
|
159
166
|
maxDimensions: maxDimensions,
|
|
160
167
|
url: url,
|
|
161
|
-
mediaProvider:
|
|
168
|
+
mediaProvider: _this.getMediaProviderToUse(mediaOptions, mediaProvider),
|
|
169
|
+
syncProvider: mediaOptions.syncProvider,
|
|
162
170
|
contextIdentifierProvider: contextIdentifierProvider,
|
|
163
171
|
mediaOptions: mediaOptions,
|
|
164
172
|
onExternalImageLoaded: _this.onExternalImageLoaded,
|
|
@@ -16,6 +16,7 @@ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits
|
|
|
16
16
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
17
17
|
var _react = _interopRequireWildcard(require("react"));
|
|
18
18
|
var _bindEventListener = require("bind-event-listener");
|
|
19
|
+
var _memoizeOne = _interopRequireDefault(require("memoize-one"));
|
|
19
20
|
var _analyticsNamespacedContext = require("@atlaskit/analytics-namespaced-context");
|
|
20
21
|
var _analyticsNext = require("@atlaskit/analytics-next");
|
|
21
22
|
var _toolbarFlagCheck = require("@atlaskit/editor-common/toolbar-flag-check");
|
|
@@ -54,10 +55,20 @@ var MediaNode = exports.MediaNode = /*#__PURE__*/function (_Component) {
|
|
|
54
55
|
if (mediaProvider) {
|
|
55
56
|
viewMediaClientConfig = mediaProvider.viewMediaClientConfig;
|
|
56
57
|
viewAndUploadMediaClientConfig = mediaProvider.viewAndUploadMediaClientConfig;
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
viewAndUploadMediaClientConfig
|
|
60
|
-
|
|
58
|
+
if ((0, _expValEquals.expValEquals)('platform_editor_media_vc_fixes', 'isEnabled', true)) {
|
|
59
|
+
// Only update state if new configs are available and different from current state
|
|
60
|
+
if (viewMediaClientConfig && _this.state.viewMediaClientConfig !== viewMediaClientConfig || viewAndUploadMediaClientConfig && _this.state.viewAndUploadMediaClientConfig !== viewAndUploadMediaClientConfig) {
|
|
61
|
+
_this.setState({
|
|
62
|
+
viewMediaClientConfig: viewMediaClientConfig,
|
|
63
|
+
viewAndUploadMediaClientConfig: viewAndUploadMediaClientConfig
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
} else {
|
|
67
|
+
_this.setState({
|
|
68
|
+
viewMediaClientConfig: viewMediaClientConfig,
|
|
69
|
+
viewAndUploadMediaClientConfig: viewAndUploadMediaClientConfig
|
|
70
|
+
});
|
|
71
|
+
}
|
|
61
72
|
}
|
|
62
73
|
case 4:
|
|
63
74
|
case "end":
|
|
@@ -103,6 +114,15 @@ var MediaNode = exports.MediaNode = /*#__PURE__*/function (_Component) {
|
|
|
103
114
|
(0, _utils.setNodeSelection)(_this.props.view, propPos - 1);
|
|
104
115
|
}
|
|
105
116
|
});
|
|
117
|
+
(0, _defineProperty2.default)(_this, "getMediaSettings", (0, _memoizeOne.default)(function (viewAndUploadMediaClientConfig) {
|
|
118
|
+
return {
|
|
119
|
+
canUpdateVideoCaptions: (0, _platformFeatureFlags.fg)('platform_media_video_captions') ? !!viewAndUploadMediaClientConfig : false
|
|
120
|
+
};
|
|
121
|
+
}));
|
|
122
|
+
(0, _defineProperty2.default)(_this, "onError", function (reason) {
|
|
123
|
+
var _this$props$api;
|
|
124
|
+
(_this$props$api = _this.props.api) === null || _this$props$api === void 0 || _this$props$api.media.actions.handleMediaNodeRenderError(_this.props.node, reason);
|
|
125
|
+
});
|
|
106
126
|
(0, _defineProperty2.default)(_this, "onFullscreenChange", function (fullscreen) {
|
|
107
127
|
var _this$mediaPluginStat;
|
|
108
128
|
(_this$mediaPluginStat = _this.mediaPluginState) === null || _this$mediaPluginStat === void 0 || _this$mediaPluginStat.updateAndDispatch({
|
|
@@ -116,8 +136,18 @@ var MediaNode = exports.MediaNode = /*#__PURE__*/function (_Component) {
|
|
|
116
136
|
return _this.props.getPos();
|
|
117
137
|
});
|
|
118
138
|
});
|
|
119
|
-
var
|
|
139
|
+
var _this$props = _this.props,
|
|
140
|
+
view = _this$props.view,
|
|
141
|
+
syncProvider = _this$props.syncProvider;
|
|
120
142
|
_this.mediaPluginState = _pluginKey.stateKey.getState(view.state);
|
|
143
|
+
|
|
144
|
+
// Initialize state from syncProvider (available on both server and client for SSR)
|
|
145
|
+
if ((0, _expValEquals.expValEquals)('platform_editor_media_vc_fixes', 'isEnabled', true) && syncProvider) {
|
|
146
|
+
_this.state = {
|
|
147
|
+
viewMediaClientConfig: syncProvider.viewMediaClientConfig,
|
|
148
|
+
viewAndUploadMediaClientConfig: syncProvider.viewAndUploadMediaClientConfig
|
|
149
|
+
};
|
|
150
|
+
}
|
|
121
151
|
return _this;
|
|
122
152
|
}
|
|
123
153
|
(0, _inherits2.default)(MediaNode, _Component);
|
|
@@ -126,7 +156,7 @@ var MediaNode = exports.MediaNode = /*#__PURE__*/function (_Component) {
|
|
|
126
156
|
value: function shouldComponentUpdate(nextProps, nextState) {
|
|
127
157
|
var hasNewViewMediaClientConfig = !this.state.viewMediaClientConfig && nextState.viewMediaClientConfig;
|
|
128
158
|
var hasNewViewAndUploadMediaClientConfig = !this.state.viewAndUploadMediaClientConfig && nextState.viewAndUploadMediaClientConfig;
|
|
129
|
-
if (this.props.selected !== nextProps.selected || this.props.node.attrs.id !== nextProps.node.attrs.id || this.props.node.attrs.collection !== nextProps.node.attrs.collection || this.props.maxDimensions.height !== nextProps.maxDimensions.height || this.props.maxDimensions.width !== nextProps.maxDimensions.width || this.props.contextIdentifierProvider !== nextProps.contextIdentifierProvider || this.props.isLoading !== nextProps.isLoading || this.props.mediaProvider !== nextProps.mediaProvider || hasNewViewMediaClientConfig || hasNewViewAndUploadMediaClientConfig) {
|
|
159
|
+
if (this.props.selected !== nextProps.selected || this.props.node.attrs.id !== nextProps.node.attrs.id || this.props.node.attrs.collection !== nextProps.node.attrs.collection || this.props.maxDimensions.height !== nextProps.maxDimensions.height || this.props.maxDimensions.width !== nextProps.maxDimensions.width || this.props.contextIdentifierProvider !== nextProps.contextIdentifierProvider || this.props.isLoading !== nextProps.isLoading || this.props.mediaProvider !== nextProps.mediaProvider || (0, _expValEquals.expValEquals)('platform_editor_media_vc_fixes', 'isEnabled', true) && this.props.syncProvider !== nextProps.syncProvider || hasNewViewMediaClientConfig || hasNewViewAndUploadMediaClientConfig) {
|
|
130
160
|
return true;
|
|
131
161
|
}
|
|
132
162
|
return false;
|
|
@@ -240,14 +270,13 @@ var MediaNode = exports.MediaNode = /*#__PURE__*/function (_Component) {
|
|
|
240
270
|
}, {
|
|
241
271
|
key: "render",
|
|
242
272
|
value: function render() {
|
|
243
|
-
var _this$
|
|
244
|
-
node = _this$
|
|
245
|
-
selected = _this$
|
|
246
|
-
originalDimensions = _this$
|
|
247
|
-
isLoading = _this$
|
|
248
|
-
maxDimensions = _this$
|
|
249
|
-
mediaOptions = _this$
|
|
250
|
-
api = _this$props.api;
|
|
273
|
+
var _this$props2 = this.props,
|
|
274
|
+
node = _this$props2.node,
|
|
275
|
+
selected = _this$props2.selected,
|
|
276
|
+
originalDimensions = _this$props2.originalDimensions,
|
|
277
|
+
isLoading = _this$props2.isLoading,
|
|
278
|
+
maxDimensions = _this$props2.maxDimensions,
|
|
279
|
+
mediaOptions = _this$props2.mediaOptions;
|
|
251
280
|
var borderMark = node.marks.find(function (m) {
|
|
252
281
|
return m.type.name === 'border';
|
|
253
282
|
});
|
|
@@ -261,6 +290,8 @@ var MediaNode = exports.MediaNode = /*#__PURE__*/function (_Component) {
|
|
|
261
290
|
collection = _node$attrs.collection,
|
|
262
291
|
url = _node$attrs.url,
|
|
263
292
|
alt = _node$attrs.alt;
|
|
293
|
+
|
|
294
|
+
// Check if we have any media client config available (syncProvider, state, or upload config)
|
|
264
295
|
var hasNoMediaClientConfig = !viewMediaClientConfig && ((0, _platformFeatureFlags.fg)('platform_media_video_captions') ? !viewAndUploadMediaClientConfig : true);
|
|
265
296
|
if (isLoading || type !== 'external' && hasNoMediaClientConfig) {
|
|
266
297
|
if ((0, _expValEquals.expValEquals)('platform_editor_media_vc_fixes', 'isEnabled', true)) {
|
|
@@ -332,12 +363,8 @@ var MediaNode = exports.MediaNode = /*#__PURE__*/function (_Component) {
|
|
|
332
363
|
alt: alt,
|
|
333
364
|
videoControlsWrapperRef: this.videoControlsWrapperRef,
|
|
334
365
|
ssr: ssr,
|
|
335
|
-
mediaSettings:
|
|
336
|
-
|
|
337
|
-
},
|
|
338
|
-
onError: (0, _expValEquals.expValEquals)('platform_editor_media_error_analytics', 'isEnabled', true) ? function (reason) {
|
|
339
|
-
return api === null || api === void 0 ? void 0 : api.media.actions.handleMediaNodeRenderError(node, reason);
|
|
340
|
-
} : undefined
|
|
366
|
+
mediaSettings: this.getMediaSettings(viewAndUploadMediaClientConfig),
|
|
367
|
+
onError: (0, _expValEquals.expValEquals)('platform_editor_media_error_analytics', 'isEnabled', true) ? this.onError : undefined
|
|
341
368
|
})));
|
|
342
369
|
}
|
|
343
370
|
}]);
|
|
@@ -94,6 +94,17 @@ class MediaNodeView extends SelectionBasedNodeView {
|
|
|
94
94
|
}
|
|
95
95
|
return flexibleDimensions;
|
|
96
96
|
});
|
|
97
|
+
_defineProperty(this, "getMediaProviderToUse", (mediaOptions, mediaProvider) => {
|
|
98
|
+
if (mediaProvider) {
|
|
99
|
+
return mediaProvider;
|
|
100
|
+
}
|
|
101
|
+
if (expValEquals('platform_editor_media_vc_fixes', 'isEnabled', true)) {
|
|
102
|
+
return mediaOptions.provider;
|
|
103
|
+
}
|
|
104
|
+
if (expValEquals('platform_editor_ssr_renderer', 'isEnabled', true)) {
|
|
105
|
+
return mediaOptions.syncProvider ? Promise.resolve(mediaOptions.syncProvider) : mediaOptions.provider;
|
|
106
|
+
}
|
|
107
|
+
});
|
|
97
108
|
_defineProperty(this, "renderMediaNodeWithState", contextIdentifierProvider => {
|
|
98
109
|
return ({
|
|
99
110
|
mediaProvider,
|
|
@@ -134,10 +145,6 @@ class MediaNodeView extends SelectionBasedNodeView {
|
|
|
134
145
|
height
|
|
135
146
|
};
|
|
136
147
|
const isSelectedAndInteracted = this.nodeInsideSelection() && interactionState !== 'hasNotHadInteraction';
|
|
137
|
-
let mediaProviderToUse = mediaProvider;
|
|
138
|
-
if (!mediaProviderToUse && expValEquals('platform_editor_ssr_renderer', 'isEnabled', true)) {
|
|
139
|
-
mediaProviderToUse = mediaOptions.syncProvider ? Promise.resolve(mediaOptions.syncProvider) : mediaOptions.provider;
|
|
140
|
-
}
|
|
141
148
|
return /*#__PURE__*/React.createElement(MediaNode, {
|
|
142
149
|
api: pluginInjectionApi,
|
|
143
150
|
view: this.view,
|
|
@@ -147,7 +154,8 @@ class MediaNodeView extends SelectionBasedNodeView {
|
|
|
147
154
|
originalDimensions: originalDimensions,
|
|
148
155
|
maxDimensions: maxDimensions,
|
|
149
156
|
url: url,
|
|
150
|
-
mediaProvider:
|
|
157
|
+
mediaProvider: this.getMediaProviderToUse(mediaOptions, mediaProvider),
|
|
158
|
+
syncProvider: mediaOptions.syncProvider,
|
|
151
159
|
contextIdentifierProvider: contextIdentifierProvider,
|
|
152
160
|
mediaOptions: mediaOptions,
|
|
153
161
|
onExternalImageLoaded: this.onExternalImageLoaded,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
2
|
import React, { Component } from 'react';
|
|
3
3
|
import { bind } from 'bind-event-listener';
|
|
4
|
+
import memoizeOne from 'memoize-one';
|
|
4
5
|
import { MEDIA_CONTEXT } from '@atlaskit/analytics-namespaced-context';
|
|
5
6
|
import { AnalyticsContext } from '@atlaskit/analytics-next';
|
|
6
7
|
import { areToolbarFlagsEnabled } from '@atlaskit/editor-common/toolbar-flag-check';
|
|
@@ -24,14 +25,25 @@ export class MediaNode extends Component {
|
|
|
24
25
|
_defineProperty(this, "videoControlsWrapperRef", /*#__PURE__*/React.createRef());
|
|
25
26
|
_defineProperty(this, "unbindKeyDown", null);
|
|
26
27
|
_defineProperty(this, "setViewMediaClientConfig", async () => {
|
|
28
|
+
// mediaProvider is Promise<MediaProvider>, so await it first to get the actual provider
|
|
27
29
|
const mediaProvider = await this.props.mediaProvider;
|
|
28
30
|
if (mediaProvider) {
|
|
29
31
|
const viewMediaClientConfig = mediaProvider.viewMediaClientConfig;
|
|
30
32
|
const viewAndUploadMediaClientConfig = mediaProvider.viewAndUploadMediaClientConfig;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
viewAndUploadMediaClientConfig
|
|
34
|
-
|
|
33
|
+
if (expValEquals('platform_editor_media_vc_fixes', 'isEnabled', true)) {
|
|
34
|
+
// Only update state if new configs are available and different from current state
|
|
35
|
+
if (viewMediaClientConfig && this.state.viewMediaClientConfig !== viewMediaClientConfig || viewAndUploadMediaClientConfig && this.state.viewAndUploadMediaClientConfig !== viewAndUploadMediaClientConfig) {
|
|
36
|
+
this.setState({
|
|
37
|
+
viewMediaClientConfig,
|
|
38
|
+
viewAndUploadMediaClientConfig
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
} else {
|
|
42
|
+
this.setState({
|
|
43
|
+
viewMediaClientConfig,
|
|
44
|
+
viewAndUploadMediaClientConfig
|
|
45
|
+
});
|
|
46
|
+
}
|
|
35
47
|
}
|
|
36
48
|
});
|
|
37
49
|
_defineProperty(this, "selectMediaSingleFromCard", ({
|
|
@@ -75,6 +87,13 @@ export class MediaNode extends Component {
|
|
|
75
87
|
setNodeSelection(this.props.view, propPos - 1);
|
|
76
88
|
}
|
|
77
89
|
});
|
|
90
|
+
_defineProperty(this, "getMediaSettings", memoizeOne(viewAndUploadMediaClientConfig => ({
|
|
91
|
+
canUpdateVideoCaptions: fg('platform_media_video_captions') ? !!viewAndUploadMediaClientConfig : false
|
|
92
|
+
})));
|
|
93
|
+
_defineProperty(this, "onError", reason => {
|
|
94
|
+
var _this$props$api;
|
|
95
|
+
(_this$props$api = this.props.api) === null || _this$props$api === void 0 ? void 0 : _this$props$api.media.actions.handleMediaNodeRenderError(this.props.node, reason);
|
|
96
|
+
});
|
|
78
97
|
_defineProperty(this, "onFullscreenChange", fullscreen => {
|
|
79
98
|
var _this$mediaPluginStat;
|
|
80
99
|
(_this$mediaPluginStat = this.mediaPluginState) === null || _this$mediaPluginStat === void 0 ? void 0 : _this$mediaPluginStat.updateAndDispatch({
|
|
@@ -89,14 +108,23 @@ export class MediaNode extends Component {
|
|
|
89
108
|
(_this$mediaPluginStat2 = this.mediaPluginState) === null || _this$mediaPluginStat2 === void 0 ? void 0 : _this$mediaPluginStat2.handleMediaNodeMount(node, () => this.props.getPos());
|
|
90
109
|
});
|
|
91
110
|
const {
|
|
92
|
-
view
|
|
111
|
+
view,
|
|
112
|
+
syncProvider
|
|
93
113
|
} = this.props;
|
|
94
114
|
this.mediaPluginState = mediaStateKey.getState(view.state);
|
|
115
|
+
|
|
116
|
+
// Initialize state from syncProvider (available on both server and client for SSR)
|
|
117
|
+
if (expValEquals('platform_editor_media_vc_fixes', 'isEnabled', true) && syncProvider) {
|
|
118
|
+
this.state = {
|
|
119
|
+
viewMediaClientConfig: syncProvider.viewMediaClientConfig,
|
|
120
|
+
viewAndUploadMediaClientConfig: syncProvider.viewAndUploadMediaClientConfig
|
|
121
|
+
};
|
|
122
|
+
}
|
|
95
123
|
}
|
|
96
124
|
shouldComponentUpdate(nextProps, nextState) {
|
|
97
125
|
const hasNewViewMediaClientConfig = !this.state.viewMediaClientConfig && nextState.viewMediaClientConfig;
|
|
98
126
|
const hasNewViewAndUploadMediaClientConfig = !this.state.viewAndUploadMediaClientConfig && nextState.viewAndUploadMediaClientConfig;
|
|
99
|
-
if (this.props.selected !== nextProps.selected || this.props.node.attrs.id !== nextProps.node.attrs.id || this.props.node.attrs.collection !== nextProps.node.attrs.collection || this.props.maxDimensions.height !== nextProps.maxDimensions.height || this.props.maxDimensions.width !== nextProps.maxDimensions.width || this.props.contextIdentifierProvider !== nextProps.contextIdentifierProvider || this.props.isLoading !== nextProps.isLoading || this.props.mediaProvider !== nextProps.mediaProvider || hasNewViewMediaClientConfig || hasNewViewAndUploadMediaClientConfig) {
|
|
127
|
+
if (this.props.selected !== nextProps.selected || this.props.node.attrs.id !== nextProps.node.attrs.id || this.props.node.attrs.collection !== nextProps.node.attrs.collection || this.props.maxDimensions.height !== nextProps.maxDimensions.height || this.props.maxDimensions.width !== nextProps.maxDimensions.width || this.props.contextIdentifierProvider !== nextProps.contextIdentifierProvider || this.props.isLoading !== nextProps.isLoading || this.props.mediaProvider !== nextProps.mediaProvider || expValEquals('platform_editor_media_vc_fixes', 'isEnabled', true) && this.props.syncProvider !== nextProps.syncProvider || hasNewViewMediaClientConfig || hasNewViewAndUploadMediaClientConfig) {
|
|
100
128
|
return true;
|
|
101
129
|
}
|
|
102
130
|
return false;
|
|
@@ -187,8 +215,7 @@ export class MediaNode extends Component {
|
|
|
187
215
|
originalDimensions,
|
|
188
216
|
isLoading,
|
|
189
217
|
maxDimensions,
|
|
190
|
-
mediaOptions
|
|
191
|
-
api
|
|
218
|
+
mediaOptions
|
|
192
219
|
} = this.props;
|
|
193
220
|
const borderMark = node.marks.find(m => m.type.name === 'border');
|
|
194
221
|
const {
|
|
@@ -203,6 +230,8 @@ export class MediaNode extends Component {
|
|
|
203
230
|
url,
|
|
204
231
|
alt
|
|
205
232
|
} = node.attrs;
|
|
233
|
+
|
|
234
|
+
// Check if we have any media client config available (syncProvider, state, or upload config)
|
|
206
235
|
const hasNoMediaClientConfig = !viewMediaClientConfig && (fg('platform_media_video_captions') ? !viewAndUploadMediaClientConfig : true);
|
|
207
236
|
if (isLoading || type !== 'external' && hasNoMediaClientConfig) {
|
|
208
237
|
if (expValEquals('platform_editor_media_vc_fixes', 'isEnabled', true)) {
|
|
@@ -274,10 +303,8 @@ export class MediaNode extends Component {
|
|
|
274
303
|
alt: alt,
|
|
275
304
|
videoControlsWrapperRef: this.videoControlsWrapperRef,
|
|
276
305
|
ssr: ssr,
|
|
277
|
-
mediaSettings:
|
|
278
|
-
|
|
279
|
-
},
|
|
280
|
-
onError: expValEquals('platform_editor_media_error_analytics', 'isEnabled', true) ? reason => api === null || api === void 0 ? void 0 : api.media.actions.handleMediaNodeRenderError(node, reason) : undefined
|
|
306
|
+
mediaSettings: this.getMediaSettings(viewAndUploadMediaClientConfig),
|
|
307
|
+
onError: expValEquals('platform_editor_media_error_analytics', 'isEnabled', true) ? this.onError : undefined
|
|
281
308
|
})));
|
|
282
309
|
}
|
|
283
310
|
}
|
|
@@ -108,6 +108,17 @@ var MediaNodeView = /*#__PURE__*/function (_SelectionBasedNodeVi) {
|
|
|
108
108
|
}
|
|
109
109
|
return flexibleDimensions;
|
|
110
110
|
});
|
|
111
|
+
_defineProperty(_this, "getMediaProviderToUse", function (mediaOptions, mediaProvider) {
|
|
112
|
+
if (mediaProvider) {
|
|
113
|
+
return mediaProvider;
|
|
114
|
+
}
|
|
115
|
+
if (expValEquals('platform_editor_media_vc_fixes', 'isEnabled', true)) {
|
|
116
|
+
return mediaOptions.provider;
|
|
117
|
+
}
|
|
118
|
+
if (expValEquals('platform_editor_ssr_renderer', 'isEnabled', true)) {
|
|
119
|
+
return mediaOptions.syncProvider ? Promise.resolve(mediaOptions.syncProvider) : mediaOptions.provider;
|
|
120
|
+
}
|
|
121
|
+
});
|
|
111
122
|
_defineProperty(_this, "renderMediaNodeWithState", function (contextIdentifierProvider) {
|
|
112
123
|
return function (_ref2) {
|
|
113
124
|
var _this$reactComponentP;
|
|
@@ -139,10 +150,6 @@ var MediaNodeView = /*#__PURE__*/function (_SelectionBasedNodeVi) {
|
|
|
139
150
|
height: height
|
|
140
151
|
};
|
|
141
152
|
var isSelectedAndInteracted = _this.nodeInsideSelection() && interactionState !== 'hasNotHadInteraction';
|
|
142
|
-
var mediaProviderToUse = mediaProvider;
|
|
143
|
-
if (!mediaProviderToUse && expValEquals('platform_editor_ssr_renderer', 'isEnabled', true)) {
|
|
144
|
-
mediaProviderToUse = mediaOptions.syncProvider ? Promise.resolve(mediaOptions.syncProvider) : mediaOptions.provider;
|
|
145
|
-
}
|
|
146
153
|
return /*#__PURE__*/React.createElement(MediaNode, {
|
|
147
154
|
api: pluginInjectionApi,
|
|
148
155
|
view: _this.view,
|
|
@@ -152,7 +159,8 @@ var MediaNodeView = /*#__PURE__*/function (_SelectionBasedNodeVi) {
|
|
|
152
159
|
originalDimensions: originalDimensions,
|
|
153
160
|
maxDimensions: maxDimensions,
|
|
154
161
|
url: url,
|
|
155
|
-
mediaProvider:
|
|
162
|
+
mediaProvider: _this.getMediaProviderToUse(mediaOptions, mediaProvider),
|
|
163
|
+
syncProvider: mediaOptions.syncProvider,
|
|
156
164
|
contextIdentifierProvider: contextIdentifierProvider,
|
|
157
165
|
mediaOptions: mediaOptions,
|
|
158
166
|
onExternalImageLoaded: _this.onExternalImageLoaded,
|
|
@@ -10,6 +10,7 @@ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstruct
|
|
|
10
10
|
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
11
11
|
import React, { Component } from 'react';
|
|
12
12
|
import { bind } from 'bind-event-listener';
|
|
13
|
+
import memoizeOne from 'memoize-one';
|
|
13
14
|
import { MEDIA_CONTEXT } from '@atlaskit/analytics-namespaced-context';
|
|
14
15
|
import { AnalyticsContext } from '@atlaskit/analytics-next';
|
|
15
16
|
import { areToolbarFlagsEnabled } from '@atlaskit/editor-common/toolbar-flag-check';
|
|
@@ -46,10 +47,20 @@ export var MediaNode = /*#__PURE__*/function (_Component) {
|
|
|
46
47
|
if (mediaProvider) {
|
|
47
48
|
viewMediaClientConfig = mediaProvider.viewMediaClientConfig;
|
|
48
49
|
viewAndUploadMediaClientConfig = mediaProvider.viewAndUploadMediaClientConfig;
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
viewAndUploadMediaClientConfig
|
|
52
|
-
|
|
50
|
+
if (expValEquals('platform_editor_media_vc_fixes', 'isEnabled', true)) {
|
|
51
|
+
// Only update state if new configs are available and different from current state
|
|
52
|
+
if (viewMediaClientConfig && _this.state.viewMediaClientConfig !== viewMediaClientConfig || viewAndUploadMediaClientConfig && _this.state.viewAndUploadMediaClientConfig !== viewAndUploadMediaClientConfig) {
|
|
53
|
+
_this.setState({
|
|
54
|
+
viewMediaClientConfig: viewMediaClientConfig,
|
|
55
|
+
viewAndUploadMediaClientConfig: viewAndUploadMediaClientConfig
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
} else {
|
|
59
|
+
_this.setState({
|
|
60
|
+
viewMediaClientConfig: viewMediaClientConfig,
|
|
61
|
+
viewAndUploadMediaClientConfig: viewAndUploadMediaClientConfig
|
|
62
|
+
});
|
|
63
|
+
}
|
|
53
64
|
}
|
|
54
65
|
case 4:
|
|
55
66
|
case "end":
|
|
@@ -95,6 +106,15 @@ export var MediaNode = /*#__PURE__*/function (_Component) {
|
|
|
95
106
|
setNodeSelection(_this.props.view, propPos - 1);
|
|
96
107
|
}
|
|
97
108
|
});
|
|
109
|
+
_defineProperty(_this, "getMediaSettings", memoizeOne(function (viewAndUploadMediaClientConfig) {
|
|
110
|
+
return {
|
|
111
|
+
canUpdateVideoCaptions: fg('platform_media_video_captions') ? !!viewAndUploadMediaClientConfig : false
|
|
112
|
+
};
|
|
113
|
+
}));
|
|
114
|
+
_defineProperty(_this, "onError", function (reason) {
|
|
115
|
+
var _this$props$api;
|
|
116
|
+
(_this$props$api = _this.props.api) === null || _this$props$api === void 0 || _this$props$api.media.actions.handleMediaNodeRenderError(_this.props.node, reason);
|
|
117
|
+
});
|
|
98
118
|
_defineProperty(_this, "onFullscreenChange", function (fullscreen) {
|
|
99
119
|
var _this$mediaPluginStat;
|
|
100
120
|
(_this$mediaPluginStat = _this.mediaPluginState) === null || _this$mediaPluginStat === void 0 || _this$mediaPluginStat.updateAndDispatch({
|
|
@@ -108,8 +128,18 @@ export var MediaNode = /*#__PURE__*/function (_Component) {
|
|
|
108
128
|
return _this.props.getPos();
|
|
109
129
|
});
|
|
110
130
|
});
|
|
111
|
-
var
|
|
131
|
+
var _this$props = _this.props,
|
|
132
|
+
view = _this$props.view,
|
|
133
|
+
syncProvider = _this$props.syncProvider;
|
|
112
134
|
_this.mediaPluginState = mediaStateKey.getState(view.state);
|
|
135
|
+
|
|
136
|
+
// Initialize state from syncProvider (available on both server and client for SSR)
|
|
137
|
+
if (expValEquals('platform_editor_media_vc_fixes', 'isEnabled', true) && syncProvider) {
|
|
138
|
+
_this.state = {
|
|
139
|
+
viewMediaClientConfig: syncProvider.viewMediaClientConfig,
|
|
140
|
+
viewAndUploadMediaClientConfig: syncProvider.viewAndUploadMediaClientConfig
|
|
141
|
+
};
|
|
142
|
+
}
|
|
113
143
|
return _this;
|
|
114
144
|
}
|
|
115
145
|
_inherits(MediaNode, _Component);
|
|
@@ -118,7 +148,7 @@ export var MediaNode = /*#__PURE__*/function (_Component) {
|
|
|
118
148
|
value: function shouldComponentUpdate(nextProps, nextState) {
|
|
119
149
|
var hasNewViewMediaClientConfig = !this.state.viewMediaClientConfig && nextState.viewMediaClientConfig;
|
|
120
150
|
var hasNewViewAndUploadMediaClientConfig = !this.state.viewAndUploadMediaClientConfig && nextState.viewAndUploadMediaClientConfig;
|
|
121
|
-
if (this.props.selected !== nextProps.selected || this.props.node.attrs.id !== nextProps.node.attrs.id || this.props.node.attrs.collection !== nextProps.node.attrs.collection || this.props.maxDimensions.height !== nextProps.maxDimensions.height || this.props.maxDimensions.width !== nextProps.maxDimensions.width || this.props.contextIdentifierProvider !== nextProps.contextIdentifierProvider || this.props.isLoading !== nextProps.isLoading || this.props.mediaProvider !== nextProps.mediaProvider || hasNewViewMediaClientConfig || hasNewViewAndUploadMediaClientConfig) {
|
|
151
|
+
if (this.props.selected !== nextProps.selected || this.props.node.attrs.id !== nextProps.node.attrs.id || this.props.node.attrs.collection !== nextProps.node.attrs.collection || this.props.maxDimensions.height !== nextProps.maxDimensions.height || this.props.maxDimensions.width !== nextProps.maxDimensions.width || this.props.contextIdentifierProvider !== nextProps.contextIdentifierProvider || this.props.isLoading !== nextProps.isLoading || this.props.mediaProvider !== nextProps.mediaProvider || expValEquals('platform_editor_media_vc_fixes', 'isEnabled', true) && this.props.syncProvider !== nextProps.syncProvider || hasNewViewMediaClientConfig || hasNewViewAndUploadMediaClientConfig) {
|
|
122
152
|
return true;
|
|
123
153
|
}
|
|
124
154
|
return false;
|
|
@@ -232,14 +262,13 @@ export var MediaNode = /*#__PURE__*/function (_Component) {
|
|
|
232
262
|
}, {
|
|
233
263
|
key: "render",
|
|
234
264
|
value: function render() {
|
|
235
|
-
var _this$
|
|
236
|
-
node = _this$
|
|
237
|
-
selected = _this$
|
|
238
|
-
originalDimensions = _this$
|
|
239
|
-
isLoading = _this$
|
|
240
|
-
maxDimensions = _this$
|
|
241
|
-
mediaOptions = _this$
|
|
242
|
-
api = _this$props.api;
|
|
265
|
+
var _this$props2 = this.props,
|
|
266
|
+
node = _this$props2.node,
|
|
267
|
+
selected = _this$props2.selected,
|
|
268
|
+
originalDimensions = _this$props2.originalDimensions,
|
|
269
|
+
isLoading = _this$props2.isLoading,
|
|
270
|
+
maxDimensions = _this$props2.maxDimensions,
|
|
271
|
+
mediaOptions = _this$props2.mediaOptions;
|
|
243
272
|
var borderMark = node.marks.find(function (m) {
|
|
244
273
|
return m.type.name === 'border';
|
|
245
274
|
});
|
|
@@ -253,6 +282,8 @@ export var MediaNode = /*#__PURE__*/function (_Component) {
|
|
|
253
282
|
collection = _node$attrs.collection,
|
|
254
283
|
url = _node$attrs.url,
|
|
255
284
|
alt = _node$attrs.alt;
|
|
285
|
+
|
|
286
|
+
// Check if we have any media client config available (syncProvider, state, or upload config)
|
|
256
287
|
var hasNoMediaClientConfig = !viewMediaClientConfig && (fg('platform_media_video_captions') ? !viewAndUploadMediaClientConfig : true);
|
|
257
288
|
if (isLoading || type !== 'external' && hasNoMediaClientConfig) {
|
|
258
289
|
if (expValEquals('platform_editor_media_vc_fixes', 'isEnabled', true)) {
|
|
@@ -324,12 +355,8 @@ export var MediaNode = /*#__PURE__*/function (_Component) {
|
|
|
324
355
|
alt: alt,
|
|
325
356
|
videoControlsWrapperRef: this.videoControlsWrapperRef,
|
|
326
357
|
ssr: ssr,
|
|
327
|
-
mediaSettings:
|
|
328
|
-
|
|
329
|
-
},
|
|
330
|
-
onError: expValEquals('platform_editor_media_error_analytics', 'isEnabled', true) ? function (reason) {
|
|
331
|
-
return api === null || api === void 0 ? void 0 : api.media.actions.handleMediaNodeRenderError(node, reason);
|
|
332
|
-
} : undefined
|
|
358
|
+
mediaSettings: this.getMediaSettings(viewAndUploadMediaClientConfig),
|
|
359
|
+
onError: expValEquals('platform_editor_media_error_analytics', 'isEnabled', true) ? this.onError : undefined
|
|
333
360
|
})));
|
|
334
361
|
}
|
|
335
362
|
}]);
|
|
@@ -35,6 +35,7 @@ declare class MediaNodeView extends SelectionBasedNodeView<MediaNodeViewProps> {
|
|
|
35
35
|
width: string;
|
|
36
36
|
height: string;
|
|
37
37
|
};
|
|
38
|
+
getMediaProviderToUse: (mediaOptions: MediaOptions, mediaProvider?: Promise<MediaProvider>) => Promise<MediaProvider> | undefined;
|
|
38
39
|
renderMediaNodeWithState: (contextIdentifierProvider?: Promise<ContextIdentifierProvider>) => ({ mediaProvider, interactionState, }: MediaNodeWithPluginStateComponentProps) => React.JSX.Element;
|
|
39
40
|
renderMediaNodeWithProviders: ({ contextIdentifierProvider }: Providers) => React.JSX.Element;
|
|
40
41
|
render(): React.JSX.Element;
|
|
@@ -25,6 +25,7 @@ export interface MediaNodeProps extends ReactNodeProps, ImageLoaderProps {
|
|
|
25
25
|
onClick?: CardOnClickCallback;
|
|
26
26
|
originalDimensions: NumericalCardDimensions;
|
|
27
27
|
pluginInjectionApi: ExtractInjectionAPI<MediaNextEditorPluginType> | undefined;
|
|
28
|
+
syncProvider?: MediaProvider;
|
|
28
29
|
view: EditorView;
|
|
29
30
|
}
|
|
30
31
|
interface MediaNodeState {
|
|
@@ -46,6 +47,8 @@ export declare class MediaNode extends Component<MediaNodeProps, MediaNodeState>
|
|
|
46
47
|
private setViewMediaClientConfig;
|
|
47
48
|
private selectMediaSingleFromCard;
|
|
48
49
|
private selectMediaSingle;
|
|
50
|
+
private getMediaSettings;
|
|
51
|
+
private onError;
|
|
49
52
|
render(): React.JSX.Element;
|
|
50
53
|
private onFullscreenChange;
|
|
51
54
|
private handleNewNode;
|
|
@@ -35,6 +35,7 @@ declare class MediaNodeView extends SelectionBasedNodeView<MediaNodeViewProps> {
|
|
|
35
35
|
width: string;
|
|
36
36
|
height: string;
|
|
37
37
|
};
|
|
38
|
+
getMediaProviderToUse: (mediaOptions: MediaOptions, mediaProvider?: Promise<MediaProvider>) => Promise<MediaProvider> | undefined;
|
|
38
39
|
renderMediaNodeWithState: (contextIdentifierProvider?: Promise<ContextIdentifierProvider>) => ({ mediaProvider, interactionState, }: MediaNodeWithPluginStateComponentProps) => React.JSX.Element;
|
|
39
40
|
renderMediaNodeWithProviders: ({ contextIdentifierProvider }: Providers) => React.JSX.Element;
|
|
40
41
|
render(): React.JSX.Element;
|
|
@@ -25,6 +25,7 @@ export interface MediaNodeProps extends ReactNodeProps, ImageLoaderProps {
|
|
|
25
25
|
onClick?: CardOnClickCallback;
|
|
26
26
|
originalDimensions: NumericalCardDimensions;
|
|
27
27
|
pluginInjectionApi: ExtractInjectionAPI<MediaNextEditorPluginType> | undefined;
|
|
28
|
+
syncProvider?: MediaProvider;
|
|
28
29
|
view: EditorView;
|
|
29
30
|
}
|
|
30
31
|
interface MediaNodeState {
|
|
@@ -46,6 +47,8 @@ export declare class MediaNode extends Component<MediaNodeProps, MediaNodeState>
|
|
|
46
47
|
private setViewMediaClientConfig;
|
|
47
48
|
private selectMediaSingleFromCard;
|
|
48
49
|
private selectMediaSingle;
|
|
50
|
+
private getMediaSettings;
|
|
51
|
+
private onError;
|
|
49
52
|
render(): React.JSX.Element;
|
|
50
53
|
private onFullscreenChange;
|
|
51
54
|
private handleNewNode;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/editor-plugin-media",
|
|
3
|
-
"version": "9.4.
|
|
3
|
+
"version": "9.4.2",
|
|
4
4
|
"description": "Media plugin for @atlaskit/editor-core",
|
|
5
5
|
"author": "Atlassian Pty Ltd",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"@atlaskit/primitives": "^17.1.0",
|
|
67
67
|
"@atlaskit/textfield": "^8.2.0",
|
|
68
68
|
"@atlaskit/theme": "^21.0.0",
|
|
69
|
-
"@atlaskit/tmp-editor-statsig": "^16.
|
|
69
|
+
"@atlaskit/tmp-editor-statsig": "^16.25.0",
|
|
70
70
|
"@atlaskit/tokens": "^10.0.0",
|
|
71
71
|
"@atlaskit/tooltip": "^20.14.0",
|
|
72
72
|
"@babel/runtime": "^7.0.0",
|