@atlaskit/media-viewer 46.1.0 → 46.2.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.
Files changed (40) hide show
  1. package/CHANGELOG.md +103 -0
  2. package/dist/cjs/analytics/ufoExperiences.js +66 -0
  3. package/dist/cjs/errorMessage.js +17 -0
  4. package/dist/cjs/header.js +2 -2
  5. package/dist/cjs/item-viewer.js +82 -16
  6. package/dist/cjs/media-viewer.js +8 -1
  7. package/dist/cjs/styled.js +1 -1
  8. package/dist/cjs/version.json +1 -1
  9. package/dist/cjs/viewers/archiveSidebar/styled.js +2 -2
  10. package/dist/cjs/viewers/codeViewer/index.js +1 -1
  11. package/dist/es2019/analytics/ufoExperiences.js +40 -0
  12. package/dist/es2019/errorMessage.js +10 -0
  13. package/dist/es2019/header.js +2 -2
  14. package/dist/es2019/item-viewer.js +28 -6
  15. package/dist/es2019/media-viewer.js +9 -2
  16. package/dist/es2019/styled.js +1 -1
  17. package/dist/es2019/version.json +1 -1
  18. package/dist/es2019/viewers/archiveSidebar/styled.js +6 -6
  19. package/dist/es2019/viewers/codeViewer/index.js +1 -1
  20. package/dist/esm/analytics/ufoExperiences.js +47 -0
  21. package/dist/esm/errorMessage.js +15 -0
  22. package/dist/esm/header.js +2 -2
  23. package/dist/esm/item-viewer.js +58 -6
  24. package/dist/esm/media-viewer.js +9 -2
  25. package/dist/esm/styled.js +1 -1
  26. package/dist/esm/version.json +1 -1
  27. package/dist/esm/viewers/archiveSidebar/styled.js +2 -2
  28. package/dist/esm/viewers/codeViewer/index.js +1 -1
  29. package/dist/types/analytics/events/operational/loadFailed.d.ts +2 -1
  30. package/dist/types/analytics/events/ui/navigated.d.ts +1 -1
  31. package/dist/types/analytics/ufoExperiences.d.ts +13 -0
  32. package/dist/types/errorMessage.d.ts +5 -2
  33. package/dist/types/item-viewer.d.ts +1 -1
  34. package/dist/types/navigation.d.ts +1 -1
  35. package/dist/types/styled.d.ts +37 -37
  36. package/dist/types/viewers/archiveSidebar/archive.d.ts +1 -1
  37. package/dist/types/viewers/archiveSidebar/styled.d.ts +12 -12
  38. package/dist/types/viewers/codeViewer/styled.d.ts +2 -2
  39. package/dist/types/viewers/image/interactive-img.d.ts +1 -1
  40. package/package.json +16 -12
package/CHANGELOG.md CHANGED
@@ -1,5 +1,108 @@
1
1
  # @atlaskit/media-viewer
2
2
 
3
+ ## 46.2.2
4
+
5
+ ### Patch Changes
6
+
7
+ - [`cb2392f6d33`](https://bitbucket.org/atlassian/atlassian-frontend/commits/cb2392f6d33) - Upgrade to TypeScript 4.2.4
8
+ - Updated dependencies
9
+
10
+ ## 46.2.1
11
+
12
+ ### Patch Changes
13
+
14
+ - [`a44c7c42fa7`](https://bitbucket.org/atlassian/atlassian-frontend/commits/a44c7c42fa7) - Added payload publisher wrapper for logging ufo events in examples
15
+ - [`5a79ea6f7d6`](https://bitbucket.org/atlassian/atlassian-frontend/commits/5a79ea6f7d6) - Add support for assessing the mimetype of a file when deciding what viewer to show
16
+ - [`065ae19cb44`](https://bitbucket.org/atlassian/atlassian-frontend/commits/065ae19cb44) - Enforced "up to date" logged feature flags via type checks
17
+ - Updated dependencies
18
+
19
+ ## 46.2.0
20
+
21
+ ### Minor Changes
22
+
23
+ - [`60136fd1e34`](https://bitbucket.org/atlassian/atlassian-frontend/commits/60136fd1e34) - Replicate Media Viewer Reliability Events using UFO client library
24
+ - [`f862d5ae7aa`](https://bitbucket.org/atlassian/atlassian-frontend/commits/f862d5ae7aa) - remove RxJs peer dependency
25
+ - [`dea110be493`](https://bitbucket.org/atlassian/atlassian-frontend/commits/dea110be493) - [ux] MEX-1334 Implemented code splitting in media-viewer
26
+ - [`118f3af101f`](https://bitbucket.org/atlassian/atlassian-frontend/commits/118f3af101f) - Media Client APIs has been updated to use MediaSubscribable which provides subscription functionality (similar to RxJs observables).
27
+ It exposes subscribe method that is called with MediaObserver as an argument and returns MediaSubscription.
28
+ MediaSubscription exposes unsubscribe method.
29
+
30
+ getFileState:
31
+ The returned type of this function has changed from RxJs ReplaySubject to MediaSubscribable.
32
+
33
+ ```
34
+ import { MediaClient, MediaObserver, MediaSubscribable, MediaSubscription } from '@atlaskit/media-client';
35
+
36
+ const mediaClient = new MediaClient({ authProvider });
37
+
38
+ const fileStateSubscribable: MediaSubscribable<FileState> = mediaClient.file.getFileState(id);
39
+
40
+ const mediaObserver: MediaObserver<FileState> = {
41
+ next: (fileState) => {
42
+ nextCallback(fileState)
43
+ },
44
+ error: (error) => {
45
+ errorCallback(error)
46
+ },
47
+ };
48
+
49
+ const subscription: MediaSubscription = fileStateSubscribable.subscribe(mediaObserver);
50
+
51
+ subscription.unsubscribe();
52
+ ```
53
+
54
+ upload:
55
+ The returned type of this function has changed from RxJs ReplaySubject to MediaSubscribable.
56
+
57
+ ```
58
+ import { MediaClient, MediaObserver, MediaSubscribable, MediaSubscription } from '@atlaskit/media-client';
59
+
60
+ const mediaClient = new MediaClient({ authProvider });
61
+
62
+ const uploadFileSubscribable: MediaSubscribable<FileState> = mediaClient.file.upload(uploadableFile);
63
+
64
+ const mediaObserver: MediaObserver<FileState> = {
65
+ next: (fileState) => {
66
+ nextCallback(fileState)
67
+ },
68
+ error: (error) => {
69
+ errorCallback(error)
70
+ },
71
+ };
72
+
73
+ const subscription: MediaSubscription = uploadFileSubscribable.subscribe(mediaObserver);
74
+
75
+ subscription.unsubscribe();
76
+ ```
77
+
78
+ getItems:
79
+ The returned type of this function has changed from RxJs ReplaySubject to MediaSubscribable.
80
+
81
+ ```
82
+ import { MediaClient, MediaObserver, MediaSubscribable, MediaSubscription } from '@atlaskit/media-client';
83
+
84
+ const mediaClient = new MediaClient({ authProvider });
85
+
86
+ const collectionItemsSubscribable: MediaSubscribable<MediaCollectionItem[]> = mediaClient.collection.getItems(collectionName);
87
+
88
+ const mediaObserver: MediaObserver<MediaCollectionItem[]> = {
89
+ next: (items) => {
90
+ nextCallback(items)
91
+ },
92
+ error: (error) => {
93
+ errorCallback(error)
94
+ },
95
+ };
96
+
97
+ const subscription: MediaSubscription = collectionItemsSubscribable.subscribe(mediaObserver);
98
+
99
+ subscription.unsubscribe();
100
+ ```
101
+
102
+ ### Patch Changes
103
+
104
+ - Updated dependencies
105
+
3
106
  ## 46.1.0
4
107
 
5
108
  ### Minor Changes
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.succeedMediaFileUfoExperience = exports.startMediaFileUfoExperience = exports.failMediaFileUfoExperience = void 0;
9
+
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
12
+ var _ufo = require("@atlaskit/ufo");
13
+
14
+ var _version = require("../version.json");
15
+
16
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
17
+
18
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
19
+
20
+ var ufoExperience;
21
+
22
+ var getExperience = function getExperience() {
23
+ if (!ufoExperience) {
24
+ var inlineExperience = {
25
+ platform: {
26
+ component: 'media-viewer'
27
+ },
28
+ type: _ufo.ExperienceTypes.Experience,
29
+ performanceType: _ufo.ExperiencePerformanceTypes.InlineResult
30
+ };
31
+ ufoExperience = new _ufo.UFOExperience('media-file', inlineExperience);
32
+ }
33
+
34
+ return ufoExperience;
35
+ };
36
+
37
+ var startMediaFileUfoExperience = function startMediaFileUfoExperience() {
38
+ getExperience().start();
39
+ };
40
+
41
+ exports.startMediaFileUfoExperience = startMediaFileUfoExperience;
42
+
43
+ var succeedMediaFileUfoExperience = function succeedMediaFileUfoExperience(properties) {
44
+ getExperience().success({
45
+ metadata: {
46
+ fileAttributes: properties,
47
+ packageName: _version.name,
48
+ packageVersion: _version.version
49
+ }
50
+ });
51
+ };
52
+
53
+ exports.succeedMediaFileUfoExperience = succeedMediaFileUfoExperience;
54
+
55
+ var failMediaFileUfoExperience = function failMediaFileUfoExperience(properties) {
56
+ var refinedMetadata = _objectSpread(_objectSpread({}, properties), {}, {
57
+ packageName: _version.name,
58
+ packageVersion: _version.version
59
+ });
60
+
61
+ getExperience().failure({
62
+ metadata: refinedMetadata
63
+ });
64
+ };
65
+
66
+ exports.failMediaFileUfoExperience = failMediaFileUfoExperience;
@@ -7,6 +7,8 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.getErrorMessageFromError = exports.errorReasonToMessages = exports.default = exports.ErrorMessage = void 0;
9
9
 
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
10
12
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
13
 
12
14
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
@@ -37,6 +39,12 @@ var _loadFailed = require("./analytics/events/operational/loadFailed");
37
39
 
38
40
  var _previewUnsupported = require("./analytics/events/operational/previewUnsupported");
39
41
 
42
+ var _ufoExperiences = require("./analytics/ufoExperiences");
43
+
44
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
45
+
46
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
47
+
40
48
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
41
49
 
42
50
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
@@ -100,6 +108,15 @@ var ErrorMessage = /*#__PURE__*/function (_React$Component) {
100
108
  if (supressAnalytics !== true) {
101
109
  var payload = ErrorMessage.getEventPayload(error, fileId, fileState);
102
110
  (0, _analytics.fireAnalytics)(payload, props);
111
+
112
+ var rawPayload = _objectSpread({}, payload === null || payload === void 0 ? void 0 : payload.attributes);
113
+
114
+ if (Object.keys(rawPayload).includes('status')) {
115
+ delete rawPayload['status'];
116
+ }
117
+
118
+ var failMediaFileUfoExperiencePayload = rawPayload;
119
+ (0, _ufoExperiences.failMediaFileUfoExperience)(failMediaFileUfoExperiencePayload);
103
120
  }
104
121
  }
105
122
  }, {
@@ -117,10 +117,10 @@ var Header = /*#__PURE__*/function (_React$Component) {
117
117
  });
118
118
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "renderFileTypeText", function (item) {
119
119
  // render appropriate header if its a code/email item and the feature flag is enabled
120
- if ((0, _codeViewer.isCodeViewerItem)(item.name)) {
120
+ if ((0, _codeViewer.isCodeViewerItem)(item.name, item.mimeType)) {
121
121
  // gather language and extension
122
122
  // i.e test.py would have a language of 'python' and an extension of 'py'
123
- var language = (0, _codeViewer.getLanguageType)(item.name);
123
+ var language = (0, _codeViewer.getLanguageType)(item.name, item.mimeType);
124
124
  var ext = (0, _codeViewer.getExtension)(item.name); // specific cases for if we want a certain word translated in other languages
125
125
 
126
126
  switch (ext) {
@@ -7,6 +7,8 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.isFileStateItem = exports.isExternalImageItem = exports.ItemViewerBase = exports.ItemViewer = void 0;
9
9
 
10
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
11
+
10
12
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
13
 
12
14
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
@@ -25,6 +27,8 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
25
27
 
26
28
  var _react = _interopRequireDefault(require("react"));
27
29
 
30
+ var _reactLoadable = _interopRequireDefault(require("react-loadable"));
31
+
28
32
  var _mediaClient = require("@atlaskit/media-client");
29
33
 
30
34
  var _reactIntlNext = require("react-intl-next");
@@ -35,14 +39,6 @@ var _codeViewer = require("@atlaskit/media-ui/codeViewer");
35
39
 
36
40
  var _domain = require("./domain");
37
41
 
38
- var _image = require("./viewers/image");
39
-
40
- var _video = require("./viewers/video");
41
-
42
- var _doc = require("./viewers/doc");
43
-
44
- var _codeViewer2 = require("./viewers/codeViewer");
45
-
46
42
  var _loading = require("./loading");
47
43
 
48
44
  var _deepEqual = _interopRequireDefault(require("deep-equal"));
@@ -61,16 +57,81 @@ var _loadSucceeded = require("./analytics/events/operational/loadSucceeded");
61
57
 
62
58
  var _analytics = require("./analytics");
63
59
 
64
- var _audio = require("./viewers/audio");
65
-
66
60
  var _interactiveImg = require("./viewers/image/interactive-img");
67
61
 
68
62
  var _archiveViewerLoader = _interopRequireDefault(require("./viewers/archiveSidebar/archiveViewerLoader"));
69
63
 
64
+ var _ufoExperiences = require("./analytics/ufoExperiences");
65
+
70
66
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
71
67
 
72
68
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
73
69
 
70
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
71
+
72
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || (0, _typeof2.default)(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
73
+
74
+ var ImageViewer = (0, _reactLoadable.default)({
75
+ loader: function loader() {
76
+ return Promise.resolve().then(function () {
77
+ return _interopRequireWildcard(require('./viewers/image'));
78
+ }).then(function (mod) {
79
+ return mod.ImageViewer;
80
+ });
81
+ },
82
+ loading: function loading() {
83
+ return /*#__PURE__*/_react.default.createElement(_loading.Spinner, null);
84
+ }
85
+ });
86
+ var VideoViewer = (0, _reactLoadable.default)({
87
+ loader: function loader() {
88
+ return Promise.resolve().then(function () {
89
+ return _interopRequireWildcard(require('./viewers/video'));
90
+ }).then(function (mod) {
91
+ return mod.VideoViewer;
92
+ });
93
+ },
94
+ loading: function loading() {
95
+ return /*#__PURE__*/_react.default.createElement(_loading.Spinner, null);
96
+ }
97
+ });
98
+ var AudioViewer = (0, _reactLoadable.default)({
99
+ loader: function loader() {
100
+ return Promise.resolve().then(function () {
101
+ return _interopRequireWildcard(require('./viewers/audio'));
102
+ }).then(function (mod) {
103
+ return mod.AudioViewer;
104
+ });
105
+ },
106
+ loading: function loading() {
107
+ return /*#__PURE__*/_react.default.createElement(_loading.Spinner, null);
108
+ }
109
+ });
110
+ var DocViewer = (0, _reactLoadable.default)({
111
+ loader: function loader() {
112
+ return Promise.resolve().then(function () {
113
+ return _interopRequireWildcard(require('./viewers/doc'));
114
+ }).then(function (mod) {
115
+ return mod.DocViewer;
116
+ });
117
+ },
118
+ loading: function loading() {
119
+ return /*#__PURE__*/_react.default.createElement(_loading.Spinner, null);
120
+ }
121
+ });
122
+ var CodeViewer = (0, _reactLoadable.default)({
123
+ loader: function loader() {
124
+ return Promise.resolve().then(function () {
125
+ return _interopRequireWildcard(require('./viewers/codeViewer'));
126
+ }).then(function (mod) {
127
+ return mod.CodeViewer;
128
+ });
129
+ },
130
+ loading: function loading() {
131
+ return /*#__PURE__*/_react.default.createElement(_loading.Spinner, null);
132
+ }
133
+ });
134
+
74
135
  var isExternalImageItem = function isExternalImageItem(fileItem) {
75
136
  return fileItem === 'external-image';
76
137
  };
@@ -108,6 +169,7 @@ var ItemViewerBase = /*#__PURE__*/function (_React$Component) {
108
169
  if (isFileStateItem(fileItem)) {
109
170
  var fileAttributes = (0, _analytics.getFileAttributes)(fileItem);
110
171
  (0, _analytics.fireAnalytics)((0, _loadSucceeded.createLoadSucceededEvent)(fileAttributes), _this.props);
172
+ (0, _ufoExperiences.succeedMediaFileUfoExperience)(fileAttributes);
111
173
  }
112
174
  });
113
175
  });
@@ -120,6 +182,9 @@ var ItemViewerBase = /*#__PURE__*/function (_React$Component) {
120
182
  (0, _analytics.fireAnalytics)((0, _loadSucceeded.createLoadSucceededEvent)({
121
183
  fileId: 'external-image'
122
184
  }), _this.props);
185
+ (0, _ufoExperiences.succeedMediaFileUfoExperience)({
186
+ fileId: 'external-image'
187
+ });
123
188
  });
124
189
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onExternalImgError", function () {
125
190
  _this.setState({
@@ -173,8 +238,8 @@ var ItemViewerBase = /*#__PURE__*/function (_React$Component) {
173
238
  previewCount: previewCount
174
239
  };
175
240
 
176
- if ((0, _codeViewer.isCodeViewerItem)(fileState.name)) {
177
- return /*#__PURE__*/_react.default.createElement(_codeViewer2.CodeViewer, (0, _extends2.default)({
241
+ if ((0, _codeViewer.isCodeViewerItem)(fileState.name, fileState.mimeType)) {
242
+ return /*#__PURE__*/_react.default.createElement(CodeViewer, (0, _extends2.default)({
178
243
  onSuccess: this.onSuccess,
179
244
  onError: this.onLoadFail
180
245
  }, viewerProps));
@@ -182,28 +247,28 @@ var ItemViewerBase = /*#__PURE__*/function (_React$Component) {
182
247
 
183
248
  switch (fileState.mediaType) {
184
249
  case 'image':
185
- return /*#__PURE__*/_react.default.createElement(_image.ImageViewer, (0, _extends2.default)({
250
+ return /*#__PURE__*/_react.default.createElement(ImageViewer, (0, _extends2.default)({
186
251
  onLoad: this.onSuccess,
187
252
  onError: this.onLoadFail,
188
253
  contextId: contextId
189
254
  }, viewerProps));
190
255
 
191
256
  case 'audio':
192
- return /*#__PURE__*/_react.default.createElement(_audio.AudioViewer, (0, _extends2.default)({
257
+ return /*#__PURE__*/_react.default.createElement(AudioViewer, (0, _extends2.default)({
193
258
  showControls: showControls,
194
259
  onCanPlay: this.onSuccess,
195
260
  onError: this.onLoadFail
196
261
  }, viewerProps));
197
262
 
198
263
  case 'video':
199
- return /*#__PURE__*/_react.default.createElement(_video.VideoViewer, (0, _extends2.default)({
264
+ return /*#__PURE__*/_react.default.createElement(VideoViewer, (0, _extends2.default)({
200
265
  showControls: showControls,
201
266
  onCanPlay: this.onSuccess,
202
267
  onError: this.onLoadFail
203
268
  }, viewerProps));
204
269
 
205
270
  case 'doc':
206
- return /*#__PURE__*/_react.default.createElement(_doc.DocViewer, (0, _extends2.default)({
271
+ return /*#__PURE__*/_react.default.createElement(DocViewer, (0, _extends2.default)({
207
272
  onSuccess: this.onSuccess,
208
273
  onError: this.onLoadFail
209
274
  }, viewerProps));
@@ -326,6 +391,7 @@ var ItemViewerBase = /*#__PURE__*/function (_React$Component) {
326
391
 
327
392
  var id = identifier.id;
328
393
  (0, _analytics.fireAnalytics)((0, _commenced.createCommencedEvent)(id), this.props);
394
+ (0, _ufoExperiences.startMediaFileUfoExperience)();
329
395
  this.subscription = mediaClient.file.getFileState(id, {
330
396
  collectionName: identifier.collectionName
331
397
  }).subscribe({
@@ -212,7 +212,14 @@ var MediaViewer = (0, _mediaCommon.withMediaAnalyticsContext)({
212
212
  component: _analytics.component,
213
213
  componentName: _analytics.componentName
214
214
  }, {
215
- filterFeatureFlags: []
215
+ filterFeatureFlags: (0, _mediaCommon.filterFeatureFlagNames)({
216
+ newCardExperience: false,
217
+ captions: false,
218
+ timestampOnVideo: false,
219
+ observedWidth: false,
220
+ mediaInline: false,
221
+ folderUploads: false
222
+ })
216
223
  })((0, _analyticsNext.withAnalyticsEvents)()((0, _reactIntlNext.injectIntl)(MediaViewerComponent, {
217
224
  enforceContext: false
218
225
  })));
@@ -176,7 +176,7 @@ var Audio = _styledComponents.default.audio(_templateObject33 || (_templateObjec
176
176
 
177
177
  exports.Audio = Audio;
178
178
 
179
- var AudioCover = _styledComponents.default.img(_templateObject34 || (_templateObject34 = (0, _taggedTemplateLiteral2.default)(["\n width: 100%;\n height: 100%;\n object-fit: scale-down;\n background-color: #000000;\n"])));
179
+ var AudioCover = _styledComponents.default.img(_templateObject34 || (_templateObject34 = (0, _taggedTemplateLiteral2.default)(["\n width: 100%;\n height: 100%;\n object-fit: scale-down;\n background-color: #000;\n"])));
180
180
 
181
181
  exports.AudioCover = AudioCover;
182
182
 
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/media-viewer",
3
- "version": "46.1.0",
3
+ "version": "46.2.2",
4
4
  "sideEffects": false
5
5
  }
@@ -63,11 +63,11 @@ var Separator = _styledComponents.default.div(_templateObject10 || (_templateObj
63
63
 
64
64
  exports.Separator = Separator;
65
65
 
66
- var SidebarHeaderWrapper = _styledComponents.default.span(_templateObject11 || (_templateObject11 = (0, _taggedTemplateLiteral2.default)(["\n display: flex\n align-items: center\n flex-shrink: 0,\n"])));
66
+ var SidebarHeaderWrapper = _styledComponents.default.span(_templateObject11 || (_templateObject11 = (0, _taggedTemplateLiteral2.default)(["\n display: flex;\n align-items: center;\n flex-shrink: 0;\n"])));
67
67
 
68
68
  exports.SidebarHeaderWrapper = SidebarHeaderWrapper;
69
69
 
70
- var SidebarHeaderIcon = _styledComponents.default.div(_templateObject12 || (_templateObject12 = (0, _taggedTemplateLiteral2.default)(["\n display: flex\n align-items: center\n margin-right: 10px;\n flex-shrink: 0\n"])));
70
+ var SidebarHeaderIcon = _styledComponents.default.div(_templateObject12 || (_templateObject12 = (0, _taggedTemplateLiteral2.default)(["\n display: flex;\n align-items: center;\n margin-right: 10px;\n flex-shrink: 0;\n"])));
71
71
 
72
72
  exports.SidebarHeaderIcon = SidebarHeaderIcon;
73
73
 
@@ -225,7 +225,7 @@ var CodeViewer = /*#__PURE__*/function (_BaseViewer) {
225
225
  key: "getCodeLanguage",
226
226
  value: function getCodeLanguage(item) {
227
227
  if (!(0, _mediaClient.isErrorFileState)(item)) {
228
- return (0, _codeViewer.getLanguageType)(item.name);
228
+ return (0, _codeViewer.getLanguageType)(item.name, item.mimeType);
229
229
  }
230
230
 
231
231
  return _util.DEFAULT_LANGUAGE;
@@ -0,0 +1,40 @@
1
+ import { UFOExperience, ExperiencePerformanceTypes, ExperienceTypes } from '@atlaskit/ufo';
2
+ import { name as packageName, version as packageVersion } from '../version.json';
3
+ let ufoExperience;
4
+
5
+ const getExperience = () => {
6
+ if (!ufoExperience) {
7
+ const inlineExperience = {
8
+ platform: {
9
+ component: 'media-viewer'
10
+ },
11
+ type: ExperienceTypes.Experience,
12
+ performanceType: ExperiencePerformanceTypes.InlineResult
13
+ };
14
+ ufoExperience = new UFOExperience('media-file', inlineExperience);
15
+ }
16
+
17
+ return ufoExperience;
18
+ };
19
+
20
+ export const startMediaFileUfoExperience = () => {
21
+ getExperience().start();
22
+ };
23
+ export const succeedMediaFileUfoExperience = properties => {
24
+ getExperience().success({
25
+ metadata: {
26
+ fileAttributes: properties,
27
+ packageName,
28
+ packageVersion
29
+ }
30
+ });
31
+ };
32
+ export const failMediaFileUfoExperience = properties => {
33
+ const refinedMetadata = { ...properties,
34
+ packageName,
35
+ packageVersion
36
+ };
37
+ getExperience().failure({
38
+ metadata: refinedMetadata
39
+ });
40
+ };
@@ -8,6 +8,7 @@ import { fireAnalytics } from './analytics';
8
8
  import { getPrimaryErrorReason, getSecondaryErrorReason } from './errors';
9
9
  import { createLoadFailedEvent } from './analytics/events/operational/loadFailed';
10
10
  import { createPreviewUnsupportedEvent } from './analytics/events/operational/previewUnsupported';
11
+ import { failMediaFileUfoExperience } from './analytics/ufoExperiences';
11
12
 
12
13
  const errorLoadingFileImage = formatMessage => /*#__PURE__*/React.createElement(ErrorImage, {
13
14
  src: errorLoadingFile,
@@ -54,6 +55,15 @@ export class ErrorMessage extends React.Component {
54
55
  if (supressAnalytics !== true) {
55
56
  const payload = ErrorMessage.getEventPayload(error, fileId, fileState);
56
57
  fireAnalytics(payload, props);
58
+ const rawPayload = { ...(payload === null || payload === void 0 ? void 0 : payload.attributes)
59
+ };
60
+
61
+ if (Object.keys(rawPayload).includes('status')) {
62
+ delete rawPayload['status'];
63
+ }
64
+
65
+ const failMediaFileUfoExperiencePayload = rawPayload;
66
+ failMediaFileUfoExperience(failMediaFileUfoExperiencePayload);
57
67
  }
58
68
  }
59
69
 
@@ -70,10 +70,10 @@ export class Header extends React.Component {
70
70
 
71
71
  _defineProperty(this, "renderFileTypeText", item => {
72
72
  // render appropriate header if its a code/email item and the feature flag is enabled
73
- if (isCodeViewerItem(item.name)) {
73
+ if (isCodeViewerItem(item.name, item.mimeType)) {
74
74
  // gather language and extension
75
75
  // i.e test.py would have a language of 'python' and an extension of 'py'
76
- const language = getLanguageType(item.name);
76
+ const language = getLanguageType(item.name, item.mimeType);
77
77
  const ext = getExtension(item.name); // specific cases for if we want a certain word translated in other languages
78
78
 
79
79
  switch (ext) {
@@ -1,15 +1,12 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
3
  import React from 'react';
4
+ import Loadable from 'react-loadable';
4
5
  import { isExternalImageIdentifier, isFileIdentifier } from '@atlaskit/media-client';
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';
8
9
  import { Outcome } from './domain';
9
- import { ImageViewer } from './viewers/image';
10
- import { VideoViewer } from './viewers/video';
11
- import { DocViewer } from './viewers/doc';
12
- import { CodeViewer } from './viewers/codeViewer';
13
10
  import { Spinner } from './loading';
14
11
  import deepEqual from 'deep-equal';
15
12
  import ErrorMessage from './errorMessage';
@@ -19,9 +16,29 @@ import { withAnalyticsEvents } from '@atlaskit/analytics-next';
19
16
  import { createCommencedEvent } from './analytics/events/operational/commenced';
20
17
  import { createLoadSucceededEvent } from './analytics/events/operational/loadSucceeded';
21
18
  import { fireAnalytics, getFileAttributes } from './analytics';
22
- import { AudioViewer } from './viewers/audio';
23
19
  import { InteractiveImg } from './viewers/image/interactive-img';
24
20
  import ArchiveViewerLoader from './viewers/archiveSidebar/archiveViewerLoader';
21
+ import { startMediaFileUfoExperience, succeedMediaFileUfoExperience } from './analytics/ufoExperiences';
22
+ const ImageViewer = Loadable({
23
+ loader: () => import('./viewers/image').then(mod => mod.ImageViewer),
24
+ loading: () => /*#__PURE__*/React.createElement(Spinner, null)
25
+ });
26
+ const VideoViewer = Loadable({
27
+ loader: () => import('./viewers/video').then(mod => mod.VideoViewer),
28
+ loading: () => /*#__PURE__*/React.createElement(Spinner, null)
29
+ });
30
+ const AudioViewer = Loadable({
31
+ loader: () => import('./viewers/audio').then(mod => mod.AudioViewer),
32
+ loading: () => /*#__PURE__*/React.createElement(Spinner, null)
33
+ });
34
+ const DocViewer = Loadable({
35
+ loader: () => import('./viewers/doc').then(mod => mod.DocViewer),
36
+ loading: () => /*#__PURE__*/React.createElement(Spinner, null)
37
+ });
38
+ const CodeViewer = Loadable({
39
+ loader: () => import('./viewers/codeViewer').then(mod => mod.CodeViewer),
40
+ loading: () => /*#__PURE__*/React.createElement(Spinner, null)
41
+ });
25
42
  export const isExternalImageItem = fileItem => fileItem === 'external-image';
26
43
  export const isFileStateItem = fileItem => !isExternalImageItem(fileItem);
27
44
  const initialState = {
@@ -41,6 +58,7 @@ export class ItemViewerBase extends React.Component {
41
58
  if (isFileStateItem(fileItem)) {
42
59
  const fileAttributes = getFileAttributes(fileItem);
43
60
  fireAnalytics(createLoadSucceededEvent(fileAttributes), this.props);
61
+ succeedMediaFileUfoExperience(fileAttributes);
44
62
  }
45
63
  });
46
64
  });
@@ -55,6 +73,9 @@ export class ItemViewerBase extends React.Component {
55
73
  fireAnalytics(createLoadSucceededEvent({
56
74
  fileId: 'external-image'
57
75
  }), this.props);
76
+ succeedMediaFileUfoExperience({
77
+ fileId: 'external-image'
78
+ });
58
79
  });
59
80
 
60
81
  _defineProperty(this, "onExternalImgError", () => {
@@ -103,7 +124,7 @@ export class ItemViewerBase extends React.Component {
103
124
  previewCount
104
125
  };
105
126
 
106
- if (isCodeViewerItem(fileState.name)) {
127
+ if (isCodeViewerItem(fileState.name, fileState.mimeType)) {
107
128
  return /*#__PURE__*/React.createElement(CodeViewer, _extends({
108
129
  onSuccess: this.onSuccess,
109
130
  onError: this.onLoadFail
@@ -256,6 +277,7 @@ export class ItemViewerBase extends React.Component {
256
277
  id
257
278
  } = identifier;
258
279
  fireAnalytics(createCommencedEvent(id), this.props);
280
+ startMediaFileUfoExperience();
259
281
  this.subscription = mediaClient.file.getFileState(id, {
260
282
  collectionName: identifier.collectionName
261
283
  }).subscribe({
@@ -1,6 +1,6 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
2
  import React from 'react';
3
- import { withMediaAnalyticsContext } from '@atlaskit/media-common';
3
+ import { withMediaAnalyticsContext, filterFeatureFlagNames } from '@atlaskit/media-common';
4
4
  import { IntlProvider, injectIntl } from 'react-intl-next';
5
5
  import { Shortcut } from '@atlaskit/media-ui';
6
6
  import { withAnalyticsEvents } from '@atlaskit/analytics-next';
@@ -172,7 +172,14 @@ export const MediaViewer = withMediaAnalyticsContext({
172
172
  component,
173
173
  componentName
174
174
  }, {
175
- filterFeatureFlags: []
175
+ filterFeatureFlags: filterFeatureFlagNames({
176
+ newCardExperience: false,
177
+ captions: false,
178
+ timestampOnVideo: false,
179
+ observedWidth: false,
180
+ mediaInline: false,
181
+ folderUploads: false
182
+ })
176
183
  })(withAnalyticsEvents()(injectIntl(MediaViewerComponent, {
177
184
  enforceContext: false
178
185
  })));