@atlaskit/media-viewer 49.2.6 → 49.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.
Files changed (52) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/cjs/analytics/index.js +1 -1
  3. package/dist/cjs/analytics/ufoExperiences.js +1 -1
  4. package/dist/cjs/components/media-viewer.js +4 -2
  5. package/dist/cjs/item-viewer.js +20 -3
  6. package/dist/cjs/list.js +4 -2
  7. package/dist/cjs/media-viewer.js +4 -2
  8. package/dist/cjs/viewerOptions.js +5 -0
  9. package/dist/cjs/viewers/archiveSidebar/archive.js +52 -8
  10. package/dist/cjs/viewers/customViewer/customViewer.js +55 -0
  11. package/dist/cjs/viewers/video.js +25 -19
  12. package/dist/es2019/analytics/index.js +1 -1
  13. package/dist/es2019/analytics/ufoExperiences.js +1 -1
  14. package/dist/es2019/components/media-viewer.js +4 -2
  15. package/dist/es2019/item-viewer.js +18 -3
  16. package/dist/es2019/list.js +4 -2
  17. package/dist/es2019/media-viewer.js +4 -2
  18. package/dist/es2019/viewerOptions.js +1 -0
  19. package/dist/es2019/viewers/archiveSidebar/archive.js +27 -5
  20. package/dist/es2019/viewers/customViewer/customViewer.js +37 -0
  21. package/dist/es2019/viewers/video.js +7 -3
  22. package/dist/esm/analytics/index.js +1 -1
  23. package/dist/esm/analytics/ufoExperiences.js +1 -1
  24. package/dist/esm/components/media-viewer.js +4 -2
  25. package/dist/esm/item-viewer.js +20 -3
  26. package/dist/esm/list.js +4 -2
  27. package/dist/esm/media-viewer.js +4 -2
  28. package/dist/esm/viewerOptions.js +1 -0
  29. package/dist/esm/viewers/archiveSidebar/archive.js +52 -8
  30. package/dist/esm/viewers/customViewer/customViewer.js +46 -0
  31. package/dist/esm/viewers/video.js +25 -19
  32. package/dist/types/components/media-viewer.d.ts +1 -1
  33. package/dist/types/components/types.d.ts +2 -0
  34. package/dist/types/errors.d.ts +2 -2
  35. package/dist/types/index.d.ts +1 -0
  36. package/dist/types/item-viewer.d.ts +4 -1
  37. package/dist/types/list.d.ts +3 -1
  38. package/dist/types/media-viewer.d.ts +2 -0
  39. package/dist/types/viewerOptions.d.ts +21 -0
  40. package/dist/types/viewers/archiveSidebar/types.d.ts +2 -0
  41. package/dist/types/viewers/customViewer/customViewer.d.ts +12 -0
  42. package/dist/types-ts4.5/components/media-viewer.d.ts +1 -1
  43. package/dist/types-ts4.5/components/types.d.ts +2 -0
  44. package/dist/types-ts4.5/errors.d.ts +2 -2
  45. package/dist/types-ts4.5/index.d.ts +1 -0
  46. package/dist/types-ts4.5/item-viewer.d.ts +4 -1
  47. package/dist/types-ts4.5/list.d.ts +3 -1
  48. package/dist/types-ts4.5/media-viewer.d.ts +2 -0
  49. package/dist/types-ts4.5/viewerOptions.d.ts +21 -0
  50. package/dist/types-ts4.5/viewers/archiveSidebar/types.d.ts +2 -0
  51. package/dist/types-ts4.5/viewers/customViewer/customViewer.d.ts +12 -0
  52. package/package.json +7 -7
package/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # @atlaskit/media-viewer
2
2
 
3
+ ## 49.3.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`6099ac032dd30`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/6099ac032dd30) -
8
+ Added viewerOptions to override file preview renderer in media components
9
+
10
+ ### Patch Changes
11
+
12
+ - Updated dependencies
13
+
14
+ ## 49.2.7
15
+
16
+ ### Patch Changes
17
+
18
+ - [#156911](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/156911)
19
+ [`194066533e77e`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/194066533e77e) -
20
+ Overriding HDActive flag and using HDAvailable instead to request for 1280p video
21
+
3
22
  ## 49.2.6
4
23
 
5
24
  ### Patch Changes
@@ -10,7 +10,7 @@ exports.packageVersion = exports.packageName = void 0;
10
10
  var _analytics = require("@atlaskit/media-common/analytics");
11
11
  var componentName = exports.component = exports.componentName = 'mediaViewer';
12
12
  var packageName = exports.packageName = "@atlaskit/media-viewer";
13
- var packageVersion = exports.packageVersion = "49.2.6";
13
+ var packageVersion = exports.packageVersion = "49.3.0";
14
14
  function getFileAttributes(fileState) {
15
15
  if (!fileState) {
16
16
  return {
@@ -12,7 +12,7 @@ var _mediaCommon = require("@atlaskit/media-common");
12
12
  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; }
13
13
  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; }
14
14
  var packageName = "@atlaskit/media-viewer";
15
- var packageVersion = "49.2.6";
15
+ var packageVersion = "49.3.0";
16
16
  var ufoExperience;
17
17
  var getExperience = function getExperience() {
18
18
  if (!ufoExperience) {
@@ -47,7 +47,8 @@ var MediaViewerBase = exports.MediaViewerBase = function MediaViewerBase(_ref) {
47
47
  collectionName = _ref.collectionName,
48
48
  items = _ref.items,
49
49
  extensions = _ref.extensions,
50
- contextId = _ref.contextId;
50
+ contextId = _ref.contextId,
51
+ viewerOptions = _ref.viewerOptions;
51
52
  var _useMemo = (0, _react.useMemo)(function () {
52
53
  return normaliseItems(items, selectedItem, collectionName);
53
54
  }, [items, selectedItem, collectionName]),
@@ -80,7 +81,8 @@ var MediaViewerBase = exports.MediaViewerBase = function MediaViewerBase(_ref) {
80
81
  items: normalisedItems,
81
82
  featureFlags: featureFlags,
82
83
  extensions: extensions,
83
- contextId: contextId
84
+ contextId: contextId,
85
+ viewerOptions: viewerOptions
84
86
  });
85
87
  };
86
88
 
@@ -11,6 +11,7 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
11
11
  var _react = _interopRequireWildcard(require("react"));
12
12
  var _reactLoadable = _interopRequireDefault(require("react-loadable"));
13
13
  var _mediaClient = require("@atlaskit/media-client");
14
+ var _primitives = require("@atlaskit/primitives");
14
15
  var _reactIntlNext = require("react-intl-next");
15
16
  var _mediaUi = require("@atlaskit/media-ui");
16
17
  var _codeViewer = require("@atlaskit/media-ui/codeViewer");
@@ -28,6 +29,7 @@ var _interactiveImg = require("./viewers/image/interactive-img");
28
29
  var _archiveViewerLoader = _interopRequireDefault(require("./viewers/archiveSidebar/archiveViewerLoader"));
29
30
  var _mediaCommon = require("@atlaskit/media-common");
30
31
  var _ufoExperiences = require("./analytics/ufoExperiences");
32
+ var _customViewer = require("./viewers/customViewer/customViewer");
31
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); }
32
34
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != (0, _typeof2.default)(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; }
33
35
  var ImageViewer = (0, _reactLoadable.default)({
@@ -119,7 +121,8 @@ var ItemViewerBase = exports.ItemViewerBase = function ItemViewerBase(_ref) {
119
121
  onClose = _ref.onClose,
120
122
  previewCount = _ref.previewCount,
121
123
  contextId = _ref.contextId,
122
- createAnalyticsEvent = _ref.createAnalyticsEvent;
124
+ createAnalyticsEvent = _ref.createAnalyticsEvent,
125
+ viewerOptions = _ref.viewerOptions;
123
126
  // States and Refs
124
127
  var _useState = (0, _react.useState)(_domain.Outcome.pending()),
125
128
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
@@ -204,14 +207,28 @@ var ItemViewerBase = exports.ItemViewerBase = function ItemViewerBase(_ref) {
204
207
  setItem(_domain.Outcome.failed(mediaViewerError, fileState));
205
208
  }, [fileState]);
206
209
  var renderItem = function renderItem(fileItem) {
210
+ var _viewerOptions$custom;
207
211
  var collectionName = (0, _mediaClient.isFileIdentifier)(identifier) ? identifier.collectionName : undefined;
208
212
  var viewerProps = {
209
213
  mediaClient: mediaClient,
210
214
  item: fileItem,
211
215
  collectionName: collectionName,
212
216
  onClose: onClose,
213
- previewCount: previewCount
217
+ previewCount: previewCount,
218
+ viewerOptions: viewerOptions
214
219
  };
220
+ var customRenderer = viewerOptions === null || viewerOptions === void 0 || (_viewerOptions$custom = viewerOptions.customRenderers) === null || _viewerOptions$custom === void 0 ? void 0 : _viewerOptions$custom.find(function (renderer) {
221
+ return renderer.shouldUseCustomRenderer({
222
+ fileItem: fileItem
223
+ });
224
+ });
225
+ if (customRenderer) {
226
+ return /*#__PURE__*/_react.default.createElement(_customViewer.CustomViewer, (0, _extends2.default)({
227
+ customRendererConfig: customRenderer,
228
+ onError: onLoadFail,
229
+ onSuccess: onSuccess
230
+ }, viewerProps));
231
+ }
215
232
 
216
233
  // TODO: fix all of the item errors
217
234
 
@@ -288,7 +305,7 @@ var ItemViewerBase = exports.ItemViewerBase = function ItemViewerBase(_ref) {
288
305
  fileState: _fileState,
289
306
  fileStateFlags: fileStateFlagsRef.current,
290
307
  traceContext: traceContext.current
291
- }, /*#__PURE__*/_react.default.createElement("p", null, /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _mediaUi.messages.try_downloading_file)), renderDownloadButton(_fileState, error));
308
+ }, /*#__PURE__*/_react.default.createElement(_primitives.Text, null, /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _mediaUi.messages.try_downloading_file)), renderDownloadButton(_fileState, error));
292
309
  } else {
293
310
  return /*#__PURE__*/_react.default.createElement(_errorMessage.default, {
294
311
  fileId: (0, _mediaClient.isFileIdentifier)(identifier) ? identifier.id : 'undefined',
package/dist/cjs/list.js CHANGED
@@ -25,7 +25,8 @@ var List = exports.List = function List(_ref) {
25
25
  featureFlags = _ref.featureFlags,
26
26
  isSidebarVisible = _ref.isSidebarVisible,
27
27
  onNavigationChange = _ref.onNavigationChange,
28
- items = _ref.items;
28
+ items = _ref.items,
29
+ viewerOptions = _ref.viewerOptions;
29
30
  var _useState = (0, _react.useState)(defaultSelectedItem),
30
31
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
31
32
  selectedItem = _useState2[0],
@@ -58,7 +59,8 @@ var List = exports.List = function List(_ref) {
58
59
  onClose: onClose,
59
60
  previewCount: previewCount,
60
61
  contextId: contextId,
61
- featureFlags: featureFlags
62
+ featureFlags: featureFlags,
63
+ viewerOptions: viewerOptions
62
64
  }), /*#__PURE__*/_react.default.createElement(_navigation.Navigation, {
63
65
  items: items,
64
66
  selectedItem: selectedItem,
@@ -32,7 +32,8 @@ var MediaViewerComponent = function MediaViewerComponent(_ref) {
32
32
  innerRef = _ref.innerRef,
33
33
  _onClose = _ref.onClose,
34
34
  selectedItem = _ref.selectedItem,
35
- intl = _ref.intl;
35
+ intl = _ref.intl,
36
+ viewerOptions = _ref.viewerOptions;
36
37
  var _useState = (0, _react.useState)(false),
37
38
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
38
39
  isSidebarVisible = _useState2[0],
@@ -95,7 +96,8 @@ var MediaViewerComponent = function MediaViewerComponent(_ref) {
95
96
  },
96
97
  isSidebarVisible: isSidebarVisible,
97
98
  contextId: contextId,
98
- featureFlags: featureFlags
99
+ featureFlags: featureFlags,
100
+ viewerOptions: viewerOptions
99
101
  })), renderSidebar()));
100
102
  return intl ? content : /*#__PURE__*/_react.default.createElement(_reactIntlNext.IntlProvider, {
101
103
  locale: "en"
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -19,6 +19,7 @@ var _unzipit = require("unzipit");
19
19
  var _reactIntlNext = require("react-intl-next");
20
20
  var _mediaUi = require("@atlaskit/media-ui");
21
21
  var _codeViewer = require("@atlaskit/media-ui/codeViewer");
22
+ var _primitives = require("@atlaskit/primitives");
22
23
  var _domain = require("../../domain");
23
24
  var _styleWrappers = require("../../styleWrappers");
24
25
  var _audioMediaServicesAudio = _interopRequireDefault(require("@atlaskit/icon/core/migration/audio--media-services-audio"));
@@ -98,7 +99,8 @@ var ArchiveViewerBase = exports.ArchiveViewerBase = /*#__PURE__*/function (_Base
98
99
  case 0:
99
100
  _this.setState({
100
101
  content: _domain.Outcome.successful(_objectSpread(_objectSpread({}, _this.state.content.data), {}, {
101
- selectedArchiveEntry: undefined
102
+ selectedArchiveEntry: undefined,
103
+ hasLoadedEntries: false // displays a nice loading spinner for the content viewer
102
104
  }))
103
105
  });
104
106
  src = '';
@@ -112,7 +114,7 @@ var ArchiveViewerBase = exports.ArchiveViewerBase = /*#__PURE__*/function (_Base
112
114
  _context2.next = 8;
113
115
  return (0, _utils.rejectAfter)(function () {
114
116
  return selectedArchiveEntry.blob();
115
- });
117
+ }, 10000);
116
118
  case 8:
117
119
  blob = _context2.sent;
118
120
  src = URL.createObjectURL(blob);
@@ -142,7 +144,8 @@ var ArchiveViewerBase = exports.ArchiveViewerBase = /*#__PURE__*/function (_Base
142
144
  isDirectory: selectedArchiveEntry.isDirectory,
143
145
  error: undefined,
144
146
  codeViewerSrc: codeViewerSrc,
145
- isCodeMimeType: isCodeMimeType
147
+ isCodeMimeType: isCodeMimeType,
148
+ hasLoadedEntries: true
146
149
  }))
147
150
  });
148
151
  case 20:
@@ -244,7 +247,9 @@ var ArchiveViewerBase = exports.ArchiveViewerBase = /*#__PURE__*/function (_Base
244
247
  }, {
245
248
  key: "renderArchiveItemViewer",
246
249
  value: function renderArchiveItemViewer(content) {
247
- var item = this.props.item;
250
+ var _this$props2 = this.props,
251
+ item = _this$props2.item,
252
+ viewerOptions = _this$props2.viewerOptions;
248
253
  var src = content.src,
249
254
  name = content.name,
250
255
  isDirectory = content.isDirectory,
@@ -256,9 +261,48 @@ var ArchiveViewerBase = exports.ArchiveViewerBase = /*#__PURE__*/function (_Base
256
261
  return this.renderPreviewError(error, selectedArchiveEntry);
257
262
  }
258
263
  if (!isDirectory && selectedArchiveEntry) {
264
+ var _viewerOptions$custom;
259
265
  if (!name || !src) {
260
266
  return this.renderPreviewError(new _errors.ArchiveViewerError('archiveviewer-missing-name-src'), selectedArchiveEntry);
261
267
  }
268
+ var customRenderer = viewerOptions === null || viewerOptions === void 0 || (_viewerOptions$custom = viewerOptions.customRenderers) === null || _viewerOptions$custom === void 0 ? void 0 : _viewerOptions$custom.find(function (renderer) {
269
+ return renderer.shouldUseCustomRenderer({
270
+ fileItem: item,
271
+ archiveFileItem: {
272
+ name: name
273
+ }
274
+ });
275
+ });
276
+ if (customRenderer) {
277
+ return /*#__PURE__*/_react.default.createElement(_styleWrappers2.ArchiveItemViewerWrapper, null, customRenderer.renderContent({
278
+ fileItem: item,
279
+ archiveFileItem: {
280
+ name: name
281
+ },
282
+ getBinaryContent: function () {
283
+ var _getBinaryContent = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
284
+ return _regenerator.default.wrap(function _callee4$(_context4) {
285
+ while (1) switch (_context4.prev = _context4.next) {
286
+ case 0:
287
+ _context4.next = 2;
288
+ return fetch(src);
289
+ case 2:
290
+ return _context4.abrupt("return", _context4.sent.blob());
291
+ case 3:
292
+ case "end":
293
+ return _context4.stop();
294
+ }
295
+ }, _callee4);
296
+ }));
297
+ function getBinaryContent() {
298
+ return _getBinaryContent.apply(this, arguments);
299
+ }
300
+ return getBinaryContent;
301
+ }(),
302
+ onLoad: this.onViewerLoad(selectedArchiveEntry),
303
+ onError: this.onViewerError('archiveviewer-customrenderer-onerror', selectedArchiveEntry)
304
+ }));
305
+ }
262
306
  var mediaType = (0, _utils.getMediaTypeFromFilename)(name);
263
307
  if (isCodeMimeType) {
264
308
  // Same code viewer logic as in Item-Viewer.tsx
@@ -330,16 +374,16 @@ var ArchiveViewerBase = exports.ArchiveViewerBase = /*#__PURE__*/function (_Base
330
374
  }, {
331
375
  key: "renderPreviewError",
332
376
  value: function renderPreviewError(error, entry) {
333
- var _this$props2 = this.props,
334
- item = _this$props2.item,
335
- createAnalyticsEvent = _this$props2.createAnalyticsEvent;
377
+ var _this$props3 = this.props,
378
+ item = _this$props3.item,
379
+ createAnalyticsEvent = _this$props3.createAnalyticsEvent;
336
380
  (0, _analytics.fireAnalytics)((0, _zipEntryLoadFailed.createZipEntryLoadFailedEvent)(item, error, entry), createAnalyticsEvent);
337
381
  return /*#__PURE__*/_react.default.createElement(_styleWrappers.ListWrapper, null, /*#__PURE__*/_react.default.createElement(_errorMessage.default, {
338
382
  fileId: item.id,
339
383
  fileState: item,
340
384
  error: error,
341
385
  supressAnalytics: true
342
- }, /*#__PURE__*/_react.default.createElement("p", null, /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _mediaUi.messages.try_downloading_file))));
386
+ }, /*#__PURE__*/_react.default.createElement(_primitives.Text, null, /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _mediaUi.messages.try_downloading_file))));
343
387
  }
344
388
  }]);
345
389
  return ArchiveViewerBase;
@@ -0,0 +1,55 @@
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.CustomViewer = void 0;
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _errors = require("../../errors");
11
+ var _react = _interopRequireWildcard(require("react"));
12
+ var _loading = require("../../loading");
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 && {}.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 CustomViewer = exports.CustomViewer = function CustomViewer(_ref) {
16
+ var mediaClient = _ref.mediaClient,
17
+ item = _ref.item,
18
+ customRendererConfig = _ref.customRendererConfig,
19
+ onSuccess = _ref.onSuccess,
20
+ onError = _ref.onError;
21
+ var _useState = (0, _react.useState)(),
22
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
23
+ getBinaryContent = _useState2[0],
24
+ setGetBinaryContent = _useState2[1];
25
+ (0, _react.useEffect)(function () {
26
+ setGetBinaryContent(undefined);
27
+ var abortController = new AbortController();
28
+ // This sets the 'getBinaryContent' to an async function that fetches the binary content of the file
29
+ // The 'getBinaryContent' function has to be updated when the item changes
30
+ // This approach handles aborting in-progress request outside of the custom-renderer concern
31
+ if (item.status === 'processed' || item.status === 'failed-processing') {
32
+ setGetBinaryContent(function () {
33
+ return function () {
34
+ return mediaClient.mediaStore.getFileBinary(item.id, undefined, abortController);
35
+ };
36
+ });
37
+ }
38
+ return function () {
39
+ return abortController.abort();
40
+ };
41
+ }, [item, mediaClient]);
42
+ var onLoadFailed = (0, _react.useCallback)(function (error) {
43
+ var mediaError = new _errors.MediaViewerError('custom-viewer-error', error);
44
+ onError(mediaError, item);
45
+ }, [item, onError]);
46
+ if (!getBinaryContent) {
47
+ return /*#__PURE__*/_react.default.createElement(_loading.Spinner, null);
48
+ }
49
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, customRendererConfig.renderContent({
50
+ fileItem: item,
51
+ getBinaryContent: getBinaryContent,
52
+ onLoad: onSuccess,
53
+ onError: onLoadFailed
54
+ }));
55
+ };
@@ -84,6 +84,8 @@ var VideoViewer = exports.VideoViewer = /*#__PURE__*/function (_BaseViewer) {
84
84
  previewCount = _this$props2.previewCount;
85
85
  var useCustomVideoPlayer = !(0, _isIE.isIE)();
86
86
  var isAutoPlay = previewCount === 0;
87
+ var hdAvailable = isHDAvailable(item);
88
+ var hdActiveOverride = (0, _platformFeatureFlags.fg)('platform_media_disable_video_640p_artifact_usage') ? hdAvailable : isHDActive;
87
89
  return useCustomVideoPlayer ? /*#__PURE__*/_react.default.createElement(_styleWrappers.CustomVideoPlayerWrapper, {
88
90
  "data-testid": "media-viewer-video-content"
89
91
  }, /*#__PURE__*/_react.default.createElement(_mediaUi.CustomMediaPlayer, {
@@ -93,8 +95,8 @@ var VideoViewer = exports.VideoViewer = /*#__PURE__*/function (_BaseViewer) {
93
95
  showControls: showControls,
94
96
  src: content,
95
97
  fileId: item.id,
96
- isHDActive: isHDActive,
97
- isHDAvailable: isHDAvailable(item),
98
+ isHDActive: hdActiveOverride,
99
+ isHDAvailable: hdAvailable,
98
100
  isShortcutEnabled: true,
99
101
  onFirstPlay: this.onFirstPlay,
100
102
  onError: this.onError,
@@ -117,6 +119,8 @@ var VideoViewer = exports.VideoViewer = /*#__PURE__*/function (_BaseViewer) {
117
119
  item,
118
120
  collectionName,
119
121
  contentUrl,
122
+ hdAvailable,
123
+ hdActiveOverride,
120
124
  preferHd,
121
125
  _args = arguments;
122
126
  return _regenerator.default.wrap(function _callee$(_context) {
@@ -126,52 +130,54 @@ var VideoViewer = exports.VideoViewer = /*#__PURE__*/function (_BaseViewer) {
126
130
  _this$props3 = this.props, mediaClient = _this$props3.mediaClient, item = _this$props3.item, collectionName = _this$props3.collectionName;
127
131
  _context.prev = 2;
128
132
  if (!(item.status === 'processed')) {
129
- _context.next = 12;
133
+ _context.next = 14;
130
134
  break;
131
135
  }
132
- preferHd = isHDActive && isHDAvailable(item);
133
- _context.next = 7;
136
+ hdAvailable = isHDAvailable(item);
137
+ hdActiveOverride = (0, _platformFeatureFlags.fg)('platform_media_disable_video_640p_artifact_usage') ? hdAvailable : isHDActive;
138
+ preferHd = hdActiveOverride && hdAvailable;
139
+ _context.next = 9;
134
140
  return mediaClient.file.getArtifactURL(item.artifacts, preferHd ? hdArtifact : sdArtifact, collectionName);
135
- case 7:
141
+ case 9:
136
142
  contentUrl = _context.sent;
137
143
  if (contentUrl) {
138
- _context.next = 10;
144
+ _context.next = 12;
139
145
  break;
140
146
  }
141
147
  throw new _errors.MediaViewerError("videoviewer-missing-artefact");
142
- case 10:
143
- _context.next = 18;
144
- break;
145
148
  case 12:
146
- _context.next = 14;
147
- return (0, _getObjectUrlFromFileState.getObjectUrlFromFileState)(item);
149
+ _context.next = 20;
150
+ break;
148
151
  case 14:
152
+ _context.next = 16;
153
+ return (0, _getObjectUrlFromFileState.getObjectUrlFromFileState)(item);
154
+ case 16:
149
155
  contentUrl = _context.sent;
150
156
  if (contentUrl) {
151
- _context.next = 18;
157
+ _context.next = 20;
152
158
  break;
153
159
  }
154
160
  this.setState({
155
161
  content: _domain.Outcome.pending()
156
162
  });
157
163
  return _context.abrupt("return");
158
- case 18:
164
+ case 20:
159
165
  this.setState({
160
166
  content: _domain.Outcome.successful(contentUrl)
161
167
  });
162
- _context.next = 24;
168
+ _context.next = 26;
163
169
  break;
164
- case 21:
165
- _context.prev = 21;
170
+ case 23:
171
+ _context.prev = 23;
166
172
  _context.t0 = _context["catch"](2);
167
173
  this.setState({
168
174
  content: _domain.Outcome.failed(new _errors.MediaViewerError('videoviewer-fetch-url', _context.t0 instanceof Error ? _context.t0 : undefined))
169
175
  });
170
- case 24:
176
+ case 26:
171
177
  case "end":
172
178
  return _context.stop();
173
179
  }
174
- }, _callee, this, [[2, 21]]);
180
+ }, _callee, this, [[2, 23]]);
175
181
  }));
176
182
  function init() {
177
183
  return _init.apply(this, arguments);
@@ -1,7 +1,7 @@
1
1
  import { ANALYTICS_MEDIA_CHANNEL, sanitiseAnalyticsPayload } from '@atlaskit/media-common/analytics';
2
2
  const componentName = 'mediaViewer';
3
3
  const packageName = "@atlaskit/media-viewer";
4
- const packageVersion = "49.2.6";
4
+ const packageVersion = "49.3.0";
5
5
  export { packageName, packageVersion, componentName, componentName as component };
6
6
  export function getFileAttributes(fileState) {
7
7
  if (!fileState) {
@@ -2,7 +2,7 @@ import { UFOExperience, ExperiencePerformanceTypes, ExperienceTypes } from '@atl
2
2
  import { getMediaEnvironment, getMediaRegion } from '@atlaskit/media-client';
3
3
  import { getFeatureFlagKeysAllProducts } from '@atlaskit/media-common';
4
4
  const packageName = "@atlaskit/media-viewer";
5
- const packageVersion = "49.2.6";
5
+ const packageVersion = "49.3.0";
6
6
  let ufoExperience;
7
7
  const getExperience = () => {
8
8
  if (!ufoExperience) {
@@ -32,7 +32,8 @@ export const MediaViewerBase = ({
32
32
  collectionName,
33
33
  items,
34
34
  extensions,
35
- contextId
35
+ contextId,
36
+ viewerOptions
36
37
  }) => {
37
38
  const {
38
39
  items: normalisedItems,
@@ -65,7 +66,8 @@ export const MediaViewerBase = ({
65
66
  items: normalisedItems,
66
67
  featureFlags: featureFlags,
67
68
  extensions: extensions,
68
- contextId: contextId
69
+ contextId: contextId,
70
+ viewerOptions: viewerOptions
69
71
  });
70
72
  };
71
73
 
@@ -2,6 +2,7 @@ import _extends from "@babel/runtime/helpers/extends";
2
2
  import React, { useCallback, useEffect, useState, useRef } from 'react';
3
3
  import Loadable from 'react-loadable';
4
4
  import { isExternalImageIdentifier, isFileIdentifier } from '@atlaskit/media-client';
5
+ import { Text } from '@atlaskit/primitives';
5
6
  import { FormattedMessage } from 'react-intl-next';
6
7
  import { messages } from '@atlaskit/media-ui';
7
8
  import { isCodeViewerItem } from '@atlaskit/media-ui/codeViewer';
@@ -19,6 +20,7 @@ import { InteractiveImg } from './viewers/image/interactive-img';
19
20
  import ArchiveViewerLoader from './viewers/archiveSidebar/archiveViewerLoader';
20
21
  import { getRandomHex } from '@atlaskit/media-common';
21
22
  import { startMediaFileUfoExperience, succeedMediaFileUfoExperience } from './analytics/ufoExperiences';
23
+ import { CustomViewer } from './viewers/customViewer/customViewer';
22
24
  const ImageViewer = Loadable({
23
25
  loader: () => import( /* webpackChunkName: "@atlaskit-internal_imageViewer" */'./viewers/image').then(mod => mod.ImageViewer),
24
26
  loading: () => /*#__PURE__*/React.createElement(Spinner, null)
@@ -55,7 +57,8 @@ export const ItemViewerBase = ({
55
57
  onClose,
56
58
  previewCount,
57
59
  contextId,
58
- createAnalyticsEvent
60
+ createAnalyticsEvent,
61
+ viewerOptions
59
62
  }) => {
60
63
  // States and Refs
61
64
  const [item, setItem] = useState(Outcome.pending());
@@ -141,14 +144,26 @@ export const ItemViewerBase = ({
141
144
  setItem(Outcome.failed(mediaViewerError, fileState));
142
145
  }, [fileState]);
143
146
  const renderItem = fileItem => {
147
+ var _viewerOptions$custom;
144
148
  const collectionName = isFileIdentifier(identifier) ? identifier.collectionName : undefined;
145
149
  const viewerProps = {
146
150
  mediaClient,
147
151
  item: fileItem,
148
152
  collectionName,
149
153
  onClose,
150
- previewCount
154
+ previewCount,
155
+ viewerOptions
151
156
  };
157
+ const customRenderer = viewerOptions === null || viewerOptions === void 0 ? void 0 : (_viewerOptions$custom = viewerOptions.customRenderers) === null || _viewerOptions$custom === void 0 ? void 0 : _viewerOptions$custom.find(renderer => renderer.shouldUseCustomRenderer({
158
+ fileItem
159
+ }));
160
+ if (customRenderer) {
161
+ return /*#__PURE__*/React.createElement(CustomViewer, _extends({
162
+ customRendererConfig: customRenderer,
163
+ onError: onLoadFail,
164
+ onSuccess: onSuccess
165
+ }, viewerProps));
166
+ }
152
167
 
153
168
  // TODO: fix all of the item errors
154
169
 
@@ -227,7 +242,7 @@ export const ItemViewerBase = ({
227
242
  fileState: fileState,
228
243
  fileStateFlags: fileStateFlagsRef.current,
229
244
  traceContext: traceContext.current
230
- }, /*#__PURE__*/React.createElement("p", null, /*#__PURE__*/React.createElement(FormattedMessage, messages.try_downloading_file)), renderDownloadButton(fileState, error));
245
+ }, /*#__PURE__*/React.createElement(Text, null, /*#__PURE__*/React.createElement(FormattedMessage, messages.try_downloading_file)), renderDownloadButton(fileState, error));
231
246
  } else {
232
247
  return /*#__PURE__*/React.createElement(ErrorMessage, {
233
248
  fileId: isFileIdentifier(identifier) ? identifier.id : 'undefined',
@@ -14,7 +14,8 @@ export const List = ({
14
14
  featureFlags,
15
15
  isSidebarVisible,
16
16
  onNavigationChange,
17
- items
17
+ items,
18
+ viewerOptions
18
19
  }) => {
19
20
  const [selectedItem, setSelectedItem] = useState(defaultSelectedItem);
20
21
  const [previewCount, setPreviewCount] = useState(0);
@@ -39,7 +40,8 @@ export const List = ({
39
40
  onClose: onClose,
40
41
  previewCount: previewCount,
41
42
  contextId: contextId,
42
- featureFlags: featureFlags
43
+ featureFlags: featureFlags,
44
+ viewerOptions: viewerOptions
43
45
  }), /*#__PURE__*/React.createElement(Navigation, {
44
46
  items: items,
45
47
  selectedItem: selectedItem,
@@ -21,7 +21,8 @@ const MediaViewerComponent = ({
21
21
  innerRef,
22
22
  onClose,
23
23
  selectedItem,
24
- intl
24
+ intl,
25
+ viewerOptions
25
26
  }) => {
26
27
  const [isSidebarVisible, setIsSidebarVisible] = useState(false);
27
28
  const [selectedIdentifier, setSelectedIdentifier] = useState();
@@ -76,7 +77,8 @@ const MediaViewerComponent = ({
76
77
  onSidebarButtonClick: () => setIsSidebarVisible(!isSidebarVisible),
77
78
  isSidebarVisible: isSidebarVisible,
78
79
  contextId: contextId,
79
- featureFlags: featureFlags
80
+ featureFlags: featureFlags,
81
+ viewerOptions: viewerOptions
80
82
  })), renderSidebar()));
81
83
  return intl ? content : /*#__PURE__*/React.createElement(IntlProvider, {
82
84
  locale: "en"
@@ -0,0 +1 @@
1
+ export {};