@atlaskit/media-card 70.11.0 → 73.0.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 (197) hide show
  1. package/CHANGELOG.md +104 -0
  2. package/dist/cjs/errors.js +78 -5
  3. package/dist/cjs/files/cardImageView/cardOverlay/styled.js +1 -1
  4. package/dist/cjs/files/cardImageView/index.js +53 -104
  5. package/dist/cjs/files/cardImageView/styled.js +1 -1
  6. package/dist/cjs/files/index.js +0 -6
  7. package/dist/cjs/index.js +12 -6
  8. package/dist/cjs/root/card/cardAnalytics.js +11 -17
  9. package/dist/cjs/root/card/cardLoader.js +66 -124
  10. package/dist/cjs/root/card/cardState.js +50 -0
  11. package/dist/cjs/root/card/getCardPreview/cache.js +6 -1
  12. package/dist/cjs/root/card/getCardPreview/filePreviewStatus.js +53 -0
  13. package/dist/cjs/root/card/getCardPreview/helpers.js +14 -22
  14. package/dist/cjs/root/card/getCardPreview/index.js +176 -102
  15. package/dist/cjs/root/card/getCardStatus.js +7 -1
  16. package/dist/cjs/root/card/index.js +361 -281
  17. package/dist/cjs/root/cardView.js +109 -86
  18. package/dist/cjs/root/index.js +9 -1
  19. package/dist/cjs/root/inline/loader.js +22 -21
  20. package/dist/cjs/root/inline/{inlineMediaCard.js → mediaInlineCard.js} +84 -26
  21. package/dist/cjs/root/inlinePlayer.js +4 -3
  22. package/dist/cjs/root/styled.js +7 -3
  23. package/dist/cjs/root/ui/actionsBar/styled.js +1 -1
  24. package/dist/cjs/root/ui/blanket/styled.js +1 -1
  25. package/dist/cjs/root/ui/common.js +11 -5
  26. package/dist/cjs/root/ui/iconMessage/index.js +16 -7
  27. package/dist/cjs/root/ui/iconWrapper/styled.js +1 -1
  28. package/dist/cjs/root/ui/imageRenderer/imageRenderer.js +34 -124
  29. package/dist/cjs/root/ui/loadingRateLimited/loadingRateLimited.js +6 -4
  30. package/dist/cjs/root/ui/loadingRateLimited/styled.js +1 -1
  31. package/dist/cjs/root/ui/playButton/styled.js +1 -1
  32. package/dist/cjs/root/ui/progressBar/progressBar.js +2 -2
  33. package/dist/cjs/root/ui/progressBar/styled.js +2 -4
  34. package/dist/cjs/root/ui/styled.js +80 -17
  35. package/dist/cjs/root/ui/tickBox/styled.js +1 -1
  36. package/dist/cjs/root/ui/titleBox/failedTitleBox.js +9 -3
  37. package/dist/cjs/root/ui/titleBox/styled.js +2 -4
  38. package/dist/cjs/root/ui/titleBox/titleBox.js +2 -2
  39. package/dist/cjs/styles/index.js +25 -23
  40. package/dist/cjs/styles/mixins.js +1 -1
  41. package/dist/cjs/utils/analytics.js +21 -43
  42. package/dist/cjs/utils/breakpoint.js +1 -1
  43. package/dist/cjs/utils/cardActions/cardActionsDropdownMenu.js +16 -9
  44. package/dist/cjs/utils/cardActions/index.js +10 -10
  45. package/dist/cjs/utils/cardActions/styled.js +1 -1
  46. package/dist/cjs/utils/cardDimensions.js +1 -1
  47. package/dist/cjs/utils/dimensionComparer.js +1 -1
  48. package/dist/cjs/utils/getErrorMessage.js +2 -2
  49. package/dist/cjs/utils/index.js +46 -46
  50. package/dist/cjs/utils/lightCards/styled.js +1 -1
  51. package/dist/cjs/utils/metadata.js +11 -3
  52. package/dist/cjs/utils/objectURLCache.js +7 -1
  53. package/dist/cjs/utils/shouldDisplayImageThumbnail.js +1 -1
  54. package/dist/cjs/utils/viewportDetector.js +1 -1
  55. package/dist/cjs/version.json +1 -1
  56. package/dist/es2019/errors.js +42 -2
  57. package/dist/es2019/files/cardImageView/index.js +8 -61
  58. package/dist/es2019/files/index.js +1 -1
  59. package/dist/es2019/index.js +1 -1
  60. package/dist/es2019/root/card/cardAnalytics.js +7 -15
  61. package/dist/es2019/root/card/cardLoader.js +47 -53
  62. package/dist/es2019/root/card/cardState.js +26 -0
  63. package/dist/es2019/root/card/getCardPreview/cache.js +5 -0
  64. package/dist/es2019/root/card/getCardPreview/filePreviewStatus.js +38 -0
  65. package/dist/es2019/root/card/getCardPreview/helpers.js +2 -12
  66. package/dist/es2019/root/card/getCardPreview/index.js +112 -79
  67. package/dist/es2019/root/card/getCardStatus.js +1 -0
  68. package/dist/es2019/root/card/index.js +285 -190
  69. package/dist/es2019/root/cardView.js +93 -68
  70. package/dist/es2019/root/index.js +2 -1
  71. package/dist/es2019/root/inline/loader.js +16 -15
  72. package/dist/es2019/root/inline/mediaInlineCard.js +143 -0
  73. package/dist/es2019/root/inlinePlayer.js +3 -2
  74. package/dist/es2019/root/styled.js +2 -1
  75. package/dist/es2019/root/ui/common.js +7 -1
  76. package/dist/es2019/root/ui/iconMessage/index.js +8 -5
  77. package/dist/es2019/root/ui/imageRenderer/imageRenderer.js +25 -88
  78. package/dist/es2019/root/ui/loadingRateLimited/loadingRateLimited.js +4 -3
  79. package/dist/es2019/root/ui/progressBar/progressBar.js +1 -1
  80. package/dist/es2019/root/ui/progressBar/styled.js +1 -2
  81. package/dist/es2019/root/ui/styled.js +64 -3
  82. package/dist/es2019/root/ui/titleBox/failedTitleBox.js +6 -3
  83. package/dist/es2019/root/ui/titleBox/styled.js +1 -2
  84. package/dist/es2019/root/ui/titleBox/titleBox.js +1 -1
  85. package/dist/es2019/utils/analytics.js +15 -34
  86. package/dist/es2019/utils/cardActions/cardActionsDropdownMenu.js +8 -4
  87. package/dist/es2019/utils/dimensionComparer.js +1 -1
  88. package/dist/es2019/utils/getErrorMessage.js +1 -1
  89. package/dist/es2019/utils/metadata.js +12 -4
  90. package/dist/es2019/utils/objectURLCache.js +5 -0
  91. package/dist/es2019/utils/shouldDisplayImageThumbnail.js +1 -1
  92. package/dist/es2019/version.json +1 -1
  93. package/dist/esm/errors.js +60 -1
  94. package/dist/esm/files/cardImageView/index.js +51 -102
  95. package/dist/esm/files/index.js +1 -1
  96. package/dist/esm/index.js +1 -1
  97. package/dist/esm/root/card/cardAnalytics.js +7 -16
  98. package/dist/esm/root/card/cardLoader.js +66 -126
  99. package/dist/esm/root/card/cardState.js +32 -0
  100. package/dist/esm/root/card/getCardPreview/cache.js +6 -0
  101. package/dist/esm/root/card/getCardPreview/filePreviewStatus.js +38 -0
  102. package/dist/esm/root/card/getCardPreview/helpers.js +13 -21
  103. package/dist/esm/root/card/getCardPreview/index.js +142 -95
  104. package/dist/esm/root/card/getCardStatus.js +3 -0
  105. package/dist/esm/root/card/index.js +370 -284
  106. package/dist/esm/root/cardView.js +109 -84
  107. package/dist/esm/root/index.js +2 -1
  108. package/dist/esm/root/inline/loader.js +23 -22
  109. package/dist/esm/root/inline/mediaInlineCard.js +156 -0
  110. package/dist/esm/root/inlinePlayer.js +3 -2
  111. package/dist/esm/root/styled.js +3 -2
  112. package/dist/esm/root/ui/common.js +7 -1
  113. package/dist/esm/root/ui/iconMessage/index.js +10 -5
  114. package/dist/esm/root/ui/imageRenderer/imageRenderer.js +27 -118
  115. package/dist/esm/root/ui/loadingRateLimited/loadingRateLimited.js +4 -3
  116. package/dist/esm/root/ui/progressBar/progressBar.js +1 -1
  117. package/dist/esm/root/ui/progressBar/styled.js +1 -2
  118. package/dist/esm/root/ui/styled.js +61 -13
  119. package/dist/esm/root/ui/titleBox/failedTitleBox.js +7 -3
  120. package/dist/esm/root/ui/titleBox/styled.js +1 -2
  121. package/dist/esm/root/ui/titleBox/titleBox.js +1 -1
  122. package/dist/esm/utils/analytics.js +16 -35
  123. package/dist/esm/utils/cardActions/cardActionsDropdownMenu.js +16 -9
  124. package/dist/esm/utils/dimensionComparer.js +1 -1
  125. package/dist/esm/utils/getErrorMessage.js +1 -1
  126. package/dist/esm/utils/metadata.js +12 -4
  127. package/dist/esm/utils/objectURLCache.js +6 -0
  128. package/dist/esm/utils/shouldDisplayImageThumbnail.js +1 -1
  129. package/dist/esm/version.json +1 -1
  130. package/dist/types/errors.d.ts +15 -1
  131. package/dist/types/files/cardImageView/index.d.ts +4 -13
  132. package/dist/types/files/cardImageView/styled.d.ts +1 -1
  133. package/dist/types/files/index.d.ts +1 -1
  134. package/dist/types/index.d.ts +7 -5
  135. package/dist/types/root/card/cardAnalytics.d.ts +2 -6
  136. package/dist/types/root/card/cardLoader.d.ts +5 -19
  137. package/dist/types/root/card/cardState.d.ts +5 -0
  138. package/dist/types/root/card/getCardPreview/cache.d.ts +3 -1
  139. package/dist/types/root/card/getCardPreview/filePreviewStatus.d.ts +5 -0
  140. package/dist/types/root/card/getCardPreview/helpers.d.ts +3 -4
  141. package/dist/types/root/card/getCardPreview/index.d.ts +24 -14
  142. package/dist/types/root/card/getCardStatus.d.ts +1 -0
  143. package/dist/types/root/card/index.d.ts +19 -18
  144. package/dist/types/root/cardView.d.ts +13 -8
  145. package/dist/types/root/index.d.ts +1 -0
  146. package/dist/types/root/inline/loader.d.ts +8 -8
  147. package/dist/types/root/inline/{inlineMediaCard.d.ts → mediaInlineCard.d.ts} +4 -6
  148. package/dist/types/root/inlinePlayer.d.ts +1 -1
  149. package/dist/types/root/styled.d.ts +1 -0
  150. package/dist/types/root/ui/common.d.ts +4 -1
  151. package/dist/types/root/ui/iconMessage/index.d.ts +4 -3
  152. package/dist/types/root/ui/iconWrapper/styled.d.ts +1 -1
  153. package/dist/types/root/ui/imageRenderer/imageRenderer.d.ts +5 -15
  154. package/dist/types/root/ui/loadingRateLimited/loadingRateLimited.d.ts +2 -1
  155. package/dist/types/root/ui/loadingRateLimited/styled.d.ts +1 -1
  156. package/dist/types/root/ui/playButton/playButton.d.ts +1 -0
  157. package/dist/types/root/ui/progressBar/progressBar.d.ts +2 -1
  158. package/dist/types/root/ui/progressBar/styled.d.ts +1 -1
  159. package/dist/types/root/ui/styled.d.ts +10 -3
  160. package/dist/types/root/ui/tickBox/tickBox.d.ts +1 -0
  161. package/dist/types/root/ui/titleBox/failedTitleBox.d.ts +3 -1
  162. package/dist/types/root/ui/titleBox/styled.d.ts +1 -1
  163. package/dist/types/root/ui/titleBox/titleBox.d.ts +2 -10
  164. package/dist/types/styles/mixins.d.ts +1 -1
  165. package/dist/types/types.d.ts +7 -1
  166. package/dist/types/utils/analytics.d.ts +14 -15
  167. package/dist/types/utils/cardDimensions.d.ts +4 -4
  168. package/dist/types/utils/dimensionComparer.d.ts +1 -1
  169. package/dist/types/utils/getErrorMessage.d.ts +1 -0
  170. package/dist/types/utils/metadata.d.ts +2 -2
  171. package/dist/types/utils/objectURLCache.d.ts +2 -1
  172. package/example-helpers/developmentUseMessage.tsx +14 -0
  173. package/example-helpers/index.tsx +55 -4
  174. package/example-helpers/selectableCard.tsx +2 -1
  175. package/package.json +20 -16
  176. package/dist/cjs/root/card/cardSSRView.js +0 -99
  177. package/dist/cjs/root/card/getCardPreview/types.js +0 -5
  178. package/dist/cjs/root/ui/Breakpoint.js +0 -13
  179. package/dist/cjs/root/ui/styledSSR.js +0 -108
  180. package/dist/cjs/utils/fileAttributesContext.js +0 -40
  181. package/dist/es2019/root/card/cardSSRView.js +0 -79
  182. package/dist/es2019/root/card/getCardPreview/types.js +0 -1
  183. package/dist/es2019/root/inline/inlineMediaCard.js +0 -92
  184. package/dist/es2019/root/ui/Breakpoint.js +0 -6
  185. package/dist/es2019/root/ui/styledSSR.js +0 -93
  186. package/dist/es2019/utils/fileAttributesContext.js +0 -19
  187. package/dist/esm/root/card/cardSSRView.js +0 -78
  188. package/dist/esm/root/card/getCardPreview/types.js +0 -1
  189. package/dist/esm/root/inline/inlineMediaCard.js +0 -100
  190. package/dist/esm/root/ui/Breakpoint.js +0 -6
  191. package/dist/esm/root/ui/styledSSR.js +0 -76
  192. package/dist/esm/utils/fileAttributesContext.js +0 -18
  193. package/dist/types/root/card/cardSSRView.d.ts +0 -12
  194. package/dist/types/root/card/getCardPreview/types.d.ts +0 -5
  195. package/dist/types/root/ui/Breakpoint.d.ts +0 -4
  196. package/dist/types/root/ui/styledSSR.d.ts +0 -16
  197. package/dist/types/utils/fileAttributesContext.d.ts +0 -10
@@ -7,7 +7,7 @@ var _typeof = require("@babel/runtime/helpers/typeof");
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
10
- exports.Card = exports.CardBase = void 0;
10
+ exports.CardBase = exports.Card = void 0;
11
11
 
12
12
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
13
13
 
@@ -45,7 +45,7 @@ var _mediaClient = require("@atlaskit/media-client");
45
45
 
46
46
  var _mediaViewer = require("@atlaskit/media-viewer");
47
47
 
48
- var _reactIntl = require("react-intl");
48
+ var _reactIntlNext = require("react-intl-next");
49
49
 
50
50
  var _cardView = require("../cardView");
51
51
 
@@ -57,22 +57,18 @@ var _getCardPreview = require("./getCardPreview");
57
57
 
58
58
  var _metadata = require("../../utils/metadata");
59
59
 
60
- var _dimensionComparer = require("../../utils/dimensionComparer");
61
-
62
- var _getCardStatus = require("./getCardStatus");
63
-
64
60
  var _inlinePlayer = require("../inlinePlayer");
65
61
 
66
62
  var _analytics = require("../../utils/analytics");
67
63
 
68
- var _fileAttributesContext = require("../../utils/fileAttributesContext");
69
-
70
64
  var _errors = require("../../errors");
71
65
 
72
66
  var _cardAnalytics = require("./cardAnalytics");
73
67
 
74
68
  var _document = _interopRequireDefault(require("../../utils/document"));
75
69
 
70
+ var _cardState = require("./cardState");
71
+
76
72
  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); }
77
73
 
78
74
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(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; }
@@ -99,78 +95,203 @@ var CardBase = /*#__PURE__*/function (_Component) {
99
95
  _this = _super.call(this, props);
100
96
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "hasBeenMounted", false);
101
97
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "timeElapsedTillCommenced", performance.now());
102
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "shouldRefetchImage", function (current, next) {
103
- if (!current || !next) {
104
- return false;
105
- }
106
-
107
- return (0, _dimensionComparer.isBigger)(current, next);
108
- });
109
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "isLatestCardStatusUpdate", function (cardStatusUpdateTimestamp) {
110
- return !_this.lastCardStatusUpdateTimestamp || _this.lastCardStatusUpdateTimestamp <= cardStatusUpdateTimestamp;
111
- });
112
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onLocalPreviewError", function (error) {// TODO: track local preview success rate
113
- // https://product-fabric.atlassian.net/browse/MEX-774
98
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "getImageURLParams", function (_ref) {
99
+ var collection = _ref.collectionName;
100
+ return _objectSpread(_objectSpread({
101
+ collection: collection,
102
+ mode: (0, _mediaClient.imageResizeModeToFileImageMode)(_this.props.resizeMode)
103
+ }, _this.requestedDimensions), {}, {
104
+ allowAnimated: true
105
+ });
114
106
  });
115
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "createAddContextToDataURI", function (fileId, fileState, _ref, collectionName) {
116
- var width = _ref.width,
117
- height = _ref.height;
118
- return function (dataURI) {
119
- var _this$props = _this.props,
120
- contextId = _this$props.contextId,
121
- alt = _this$props.alt;
122
-
123
- if (!contextId) {
124
- return dataURI;
125
- }
126
-
127
- var metadata = (0, _metadata.getFileDetails)(fileState);
128
- return (0, _mediaClient.addFileAttrsToUrl)(dataURI, {
129
- id: fileId,
130
- collection: collectionName,
131
- contextId: contextId,
132
- mimeType: metadata.mimeType,
133
- name: metadata.name,
134
- size: metadata.size,
135
- width: width,
136
- height: height,
137
- alt: alt
138
- });
139
- };
107
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "getMediaBlobUrlAttrs", function (identifier, fileState) {
108
+ var id = identifier.id,
109
+ collection = identifier.collectionName;
110
+ var _this$props = _this.props,
111
+ originalDimensions = _this$props.originalDimensions,
112
+ contextId = _this$props.contextId,
113
+ alt = _this$props.alt;
114
+
115
+ var _getFileDetails = (0, _metadata.getFileDetails)(identifier, fileState),
116
+ mimeType = _getFileDetails.mimeType,
117
+ name = _getFileDetails.name,
118
+ size = _getFileDetails.size;
119
+
120
+ return contextId ? _objectSpread(_objectSpread({
121
+ id: id,
122
+ collection: collection,
123
+ contextId: contextId,
124
+ mimeType: mimeType,
125
+ name: name,
126
+ size: size
127
+ }, originalDimensions || _this.requestedDimensions), {}, {
128
+ alt: alt
129
+ }) : undefined;
140
130
  });
141
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "getCardPreviewParams", function (id, collectionName, fileState) {
131
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "getCardPreviewParams", function (identifier, fileState) {
132
+ var isBannedLocalPreview = _this.state.isBannedLocalPreview;
133
+ var id = identifier.id;
142
134
  var _this$props2 = _this.props,
143
135
  _this$props2$dimensio = _this$props2.dimensions,
144
136
  dimensions = _this$props2$dimensio === void 0 ? {} : _this$props2$dimensio,
145
- originalDimensions = _this$props2.originalDimensions,
146
- resizeMode = _this$props2.resizeMode,
147
137
  mediaClient = _this$props2.mediaClient;
148
- var cardRef = _this.state.cardRef;
149
- var requestedDimensions = (0, _getDataURIDimension.getRequestedDimensions)({
150
- dimensions: dimensions,
151
- element: cardRef
152
- });
153
138
  return {
154
139
  mediaClient: mediaClient,
155
140
  id: id,
156
- collectionName: collectionName,
157
141
  dimensions: dimensions,
158
- resizeMode: resizeMode,
159
- requestedDimensions: requestedDimensions,
160
- onLocalPreviewError: _this.onLocalPreviewError,
161
- filePreview: (0, _getCardPreview.getFilePreviewFromFileState)(fileState),
142
+ onLocalPreviewError: _this.fireLocalPreviewErrorEvent,
143
+ filePreview: isBannedLocalPreview ? undefined : (0, _getCardPreview.getFilePreviewFromFileState)(fileState),
162
144
  isRemotePreviewReady: (0, _mediaClient.isImageRepresentationReady)(fileState),
163
- addContextToDataURI: _this.createAddContextToDataURI(id, fileState, originalDimensions || requestedDimensions, collectionName)
145
+ imageUrlParams: _this.getImageURLParams(identifier),
146
+ mediaBlobUrlAttrs: _this.getMediaBlobUrlAttrs(identifier, fileState)
164
147
  };
165
148
  });
149
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "setCacheSSRPreview", function (identifier) {
150
+ var _this$props3 = _this.props,
151
+ mediaClient = _this$props3.mediaClient,
152
+ _this$props3$dimensio = _this$props3.dimensions,
153
+ dimensions = _this$props3$dimensio === void 0 ? {} : _this$props3$dimensio;
154
+ (0, _getCardPreview.fetchAndCacheRemotePreview)(mediaClient, identifier.id, dimensions, _this.getImageURLParams(identifier), _this.getMediaBlobUrlAttrs(identifier)).catch(function () {// No need to log this error.
155
+ // If preview fails, it will be refetched later
156
+ //TODO: test this catch
157
+ // https://product-fabric.atlassian.net/browse/MEX-1071
158
+ });
159
+ });
160
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "resolveSSRPreview", function (identifier, ssr) {
161
+ var mediaClient = _this.props.mediaClient;
162
+
163
+ try {
164
+ return (0, _getCardPreview.getSSRCardPreview)(ssr, mediaClient, identifier.id, _this.getImageURLParams(identifier), _this.getMediaBlobUrlAttrs(identifier));
165
+ } catch (e) {// TODO: log SSR reliability 'failed'
166
+ // https://product-fabric.atlassian.net/browse/MEX-770
167
+ }
168
+ });
169
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "resolvePreview", /*#__PURE__*/function () {
170
+ var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(identifier, fileState) {
171
+ var params, cardPreview, wrappedError;
172
+ return _regenerator.default.wrap(function _callee$(_context) {
173
+ while (1) {
174
+ switch (_context.prev = _context.next) {
175
+ case 0:
176
+ _context.prev = 0;
177
+ params = _this.getCardPreviewParams(identifier, fileState);
178
+ _context.next = 4;
179
+ return (0, _getCardPreview.getCardPreview)(params);
180
+
181
+ case 4:
182
+ cardPreview = _context.sent;
183
+
184
+ _this.safeSetState({
185
+ cardPreview: cardPreview
186
+ });
187
+
188
+ _context.next = 12;
189
+ break;
190
+
191
+ case 8:
192
+ _context.prev = 8;
193
+ _context.t0 = _context["catch"](0);
194
+ wrappedError = (0, _errors.ensureMediaCardError)('preview-fetch', _context.t0); // If remote preview fails, we set status 'error'
195
+ // If local preview fails (i.e, no remote preview available),
196
+ // we can stay in the same status until there is a remote preview available
197
+ // If it's any other error we set status 'error'
198
+
199
+ if ((0, _errors.isLocalPreviewError)(wrappedError)) {
200
+ _this.safeSetState({
201
+ isBannedLocalPreview: true
202
+ });
203
+ } else {
204
+ _this.safeSetState({
205
+ status: 'error',
206
+ error: wrappedError
207
+ });
208
+ }
209
+
210
+ case 12:
211
+ case "end":
212
+ return _context.stop();
213
+ }
214
+ }
215
+ }, _callee, null, [[0, 8]]);
216
+ }));
217
+
218
+ return function (_x, _x2) {
219
+ return _ref2.apply(this, arguments);
220
+ };
221
+ }());
222
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "getPerformanceAttributes", function () {
223
+ var _assertThisInitialize = (0, _assertThisInitialized2.default)(_this),
224
+ timeElapsedTillCommenced = _assertThisInitialize.timeElapsedTillCommenced;
225
+
226
+ var timeElapsedTillEvent = performance.now();
227
+ var durationSinceCommenced = timeElapsedTillCommenced && timeElapsedTillEvent - timeElapsedTillCommenced;
228
+ return {
229
+ overall: {
230
+ durationSincePageStart: timeElapsedTillEvent,
231
+ durationSinceCommenced: durationSinceCommenced
232
+ }
233
+ };
234
+ });
235
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onImageError", function () {
236
+ var cardPreview = _this.state.cardPreview;
237
+ var error = new _errors.ImageLoadError(cardPreview === null || cardPreview === void 0 ? void 0 : cardPreview.source);
238
+ var isLocal = cardPreview && (0, _getCardPreview.isLocalPreview)(cardPreview);
239
+ var isSSR = cardPreview && (0, _getCardPreview.isSSRClientPreview)(cardPreview);
240
+
241
+ if (isLocal || isSSR) {
242
+ var updateState = {
243
+ cardPreview: undefined
244
+ };
245
+
246
+ if (isLocal) {
247
+ updateState.isBannedLocalPreview = true;
248
+
249
+ _this.fireLocalPreviewErrorEvent(error);
250
+ }
251
+
252
+ if (isSSR) {// TODO: set SSR-client reliability 'failed'.
253
+ // https://product-fabric.atlassian.net/browse/MEX-770
254
+ }
255
+
256
+ var _this$props4 = _this.props,
257
+ identifier = _this$props4.identifier,
258
+ _this$props4$dimensio = _this$props4.dimensions,
259
+ dimensions = _this$props4$dimensio === void 0 ? {} : _this$props4$dimensio;
260
+ (0, _mediaClient.isFileIdentifier)(identifier) && (0, _getCardPreview.removeCardPreviewFromCache)(identifier.id, dimensions);
261
+
262
+ _this.safeSetState(updateState);
263
+ } else {
264
+ _this.safeSetState({
265
+ status: 'error',
266
+ error: error
267
+ });
268
+ }
269
+ });
270
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onImageLoad", function () {
271
+ _this.safeSetState({
272
+ previewDidRender: true
273
+ });
274
+ });
166
275
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "fireCopiedEvent", function () {
167
276
  var createAnalyticsEvent = _this.props.createAnalyticsEvent;
168
277
  var cardRef = _this.state.cardRef;
169
278
  cardRef && createAnalyticsEvent && (0, _cardAnalytics.fireCopiedEvent)(createAnalyticsEvent, _this.metadata.id, cardRef);
170
279
  });
280
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "fireScreenEvent", function () {
281
+ var createAnalyticsEvent = _this.props.createAnalyticsEvent;
282
+ createAnalyticsEvent && (0, _cardAnalytics.fireScreenEvent)(createAnalyticsEvent, _this.fileAttributes);
283
+ });
284
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "fireLocalPreviewErrorEvent", function (error) {// TODO: track local preview success rate
285
+ // https://product-fabric.atlassian.net/browse/MEX-774
286
+ });
171
287
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "safeSetState", function (state) {
172
288
  if (_this.hasBeenMounted) {
173
- _this.setState(state);
289
+ // If it's setting the status, we need to use a state updater function,
290
+ // which ensures that no non-final status overrides a final status.
291
+ // If no status is set, we don't need a sate updater
292
+ var updater = !!state.status ? (0, _cardState.createStateUpdater)(state) : state;
293
+
294
+ _this.setState(updater);
174
295
  }
175
296
  });
176
297
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "unsubscribe", function () {
@@ -179,20 +300,21 @@ var CardBase = /*#__PURE__*/function (_Component) {
179
300
  }
180
301
 
181
302
  if (_this.hasBeenMounted) {
303
+ // TODO MEX-788: add test for "do not remove the card preview when unsubscribing".
182
304
  _this.setState({
183
- cardPreview: undefined
305
+ isBannedLocalPreview: false
184
306
  });
185
307
  }
186
308
  });
187
309
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onCardViewClick", function (event, analyticsEvent) {
188
- var _this$props3 = _this.props,
189
- identifier = _this$props3.identifier,
190
- useInlinePlayer = _this$props3.useInlinePlayer,
191
- shouldOpenMediaViewer = _this$props3.shouldOpenMediaViewer;
310
+ var _this$props5 = _this.props,
311
+ identifier = _this$props5.identifier,
312
+ useInlinePlayer = _this$props5.useInlinePlayer,
313
+ shouldOpenMediaViewer = _this$props5.shouldOpenMediaViewer;
192
314
  var cardPreview = _this.state.cardPreview;
193
315
 
194
- var _assertThisInitialize = (0, _assertThisInitialized2.default)(_this),
195
- metadata = _assertThisInitialize.metadata;
316
+ var _assertThisInitialize2 = (0, _assertThisInitialized2.default)(_this),
317
+ metadata = _assertThisInitialize2.metadata;
196
318
 
197
319
  _this.onClick(event, analyticsEvent);
198
320
 
@@ -240,13 +362,13 @@ var CardBase = /*#__PURE__*/function (_Component) {
240
362
  });
241
363
  });
242
364
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "renderInlinePlayer", function () {
243
- var _this$props4 = _this.props,
244
- identifier = _this$props4.identifier,
245
- mediaClient = _this$props4.mediaClient,
246
- dimensions = _this$props4.dimensions,
247
- selected = _this$props4.selected,
248
- testId = _this$props4.testId,
249
- originalDimensions = _this$props4.originalDimensions;
365
+ var _this$props6 = _this.props,
366
+ identifier = _this$props6.identifier,
367
+ mediaClient = _this$props6.mediaClient,
368
+ dimensions = _this$props6.dimensions,
369
+ selected = _this$props6.selected,
370
+ testId = _this$props6.testId,
371
+ originalDimensions = _this$props6.originalDimensions;
250
372
  return /*#__PURE__*/_react.default.createElement(_inlinePlayer.InlinePlayer, {
251
373
  mediaClient: mediaClient,
252
374
  dimensions: dimensions,
@@ -286,12 +408,12 @@ var CardBase = /*#__PURE__*/function (_Component) {
286
408
  });
287
409
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "renderMediaViewer", function () {
288
410
  var mediaViewerSelectedItem = _this.state.mediaViewerSelectedItem;
289
- var _this$props5 = _this.props,
290
- mediaClient = _this$props5.mediaClient,
291
- identifier = _this$props5.identifier,
292
- mediaViewerDataSource = _this$props5.mediaViewerDataSource,
293
- contextId = _this$props5.contextId,
294
- featureFlags = _this$props5.featureFlags;
411
+ var _this$props7 = _this.props,
412
+ mediaClient = _this$props7.mediaClient,
413
+ identifier = _this$props7.identifier,
414
+ mediaViewerDataSource = _this$props7.mediaViewerDataSource,
415
+ contextId = _this$props7.contextId,
416
+ featureFlags = _this$props7.featureFlags;
295
417
 
296
418
  if (!mediaViewerSelectedItem) {
297
419
  return;
@@ -312,20 +434,21 @@ var CardBase = /*#__PURE__*/function (_Component) {
312
434
  }), document.body);
313
435
  });
314
436
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "renderCard", function () {
315
- var _this$props6 = _this.props,
316
- identifier = _this$props6.identifier,
317
- isLazy = _this$props6.isLazy,
318
- appearance = _this$props6.appearance,
319
- resizeMode = _this$props6.resizeMode,
320
- dimensions = _this$props6.dimensions,
321
- selectable = _this$props6.selectable,
322
- selected = _this$props6.selected,
323
- disableOverlay = _this$props6.disableOverlay,
324
- alt = _this$props6.alt,
325
- testId = _this$props6.testId,
326
- featureFlags = _this$props6.featureFlags,
327
- titleBoxBgColor = _this$props6.titleBoxBgColor,
328
- titleBoxIcon = _this$props6.titleBoxIcon;
437
+ var _this$props8 = _this.props,
438
+ identifier = _this$props8.identifier,
439
+ isLazy = _this$props8.isLazy,
440
+ appearance = _this$props8.appearance,
441
+ resizeMode = _this$props8.resizeMode,
442
+ dimensions = _this$props8.dimensions,
443
+ selectable = _this$props8.selectable,
444
+ selected = _this$props8.selected,
445
+ disableOverlay = _this$props8.disableOverlay,
446
+ alt = _this$props8.alt,
447
+ testId = _this$props8.testId,
448
+ featureFlags = _this$props8.featureFlags,
449
+ titleBoxBgColor = _this$props8.titleBoxBgColor,
450
+ titleBoxIcon = _this$props8.titleBoxIcon,
451
+ ssr = _this$props8.ssr;
329
452
  var mediaItemType = identifier.mediaItemType;
330
453
  var _this$state = _this.state,
331
454
  status = _this$state.status,
@@ -338,21 +461,27 @@ var CardBase = /*#__PURE__*/function (_Component) {
338
461
  var dataURI = _this$state$cardPrevi.dataURI,
339
462
  orientation = _this$state$cardPrevi.orientation,
340
463
  error = _this$state.error,
341
- cardRef = _this$state.cardRef;
342
-
343
- var _assertThisInitialize2 = (0, _assertThisInitialized2.default)(_this),
344
- metadata = _assertThisInitialize2.metadata,
345
- timeElapsedTillCommenced = _assertThisInitialize2.timeElapsedTillCommenced;
464
+ cardRef = _this$state.cardRef,
465
+ isCardVisible = _this$state.isCardVisible;
346
466
 
347
467
  var _assertThisInitialize3 = (0, _assertThisInitialized2.default)(_this),
348
- onCardViewClick = _assertThisInitialize3.onCardViewClick,
349
- onDisplayImage = _assertThisInitialize3.onDisplayImage,
350
- actions = _assertThisInitialize3.actions,
351
- onMouseEnter = _assertThisInitialize3.onMouseEnter;
468
+ metadata = _assertThisInitialize3.metadata;
469
+
470
+ var _assertThisInitialize4 = (0, _assertThisInitialized2.default)(_this),
471
+ onCardViewClick = _assertThisInitialize4.onCardViewClick,
472
+ onDisplayImage = _assertThisInitialize4.onDisplayImage,
473
+ actions = _assertThisInitialize4.actions,
474
+ onMouseEnter = _assertThisInitialize4.onMouseEnter; // Card can be artificially turned visible before entering the viewport
475
+ // For example, when we have the image in cache
476
+
477
+
478
+ var nativeLazyLoad = isLazy && !isCardVisible; // Force Media Image to always display img for SSR
479
+
480
+ var forceSyncDisplay = !!ssr;
352
481
 
353
482
  var card = /*#__PURE__*/_react.default.createElement(_cardView.CardView, {
354
483
  status: status,
355
- error: error && error.secondaryError,
484
+ error: error,
356
485
  mediaItemType: mediaItemType,
357
486
  metadata: metadata,
358
487
  dataURI: dataURI,
@@ -374,7 +503,10 @@ var CardBase = /*#__PURE__*/function (_Component) {
374
503
  featureFlags: featureFlags,
375
504
  titleBoxBgColor: titleBoxBgColor,
376
505
  titleBoxIcon: titleBoxIcon,
377
- timeElapsedTillCommenced: timeElapsedTillCommenced
506
+ onImageError: _this.onImageError,
507
+ onImageLoad: _this.onImageLoad,
508
+ nativeLazyLoad: nativeLazyLoad,
509
+ forceSyncDisplay: forceSyncDisplay
378
510
  });
379
511
 
380
512
  return isLazy ? /*#__PURE__*/_react.default.createElement(_viewportDetector.ViewportDetector, {
@@ -390,8 +522,8 @@ var CardBase = /*#__PURE__*/function (_Component) {
390
522
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onClick", function (event, analyticsEvent) {
391
523
  var onClick = _this.props.onClick;
392
524
 
393
- var _assertThisInitialize4 = (0, _assertThisInitialized2.default)(_this),
394
- metadata = _assertThisInitialize4.metadata;
525
+ var _assertThisInitialize5 = (0, _assertThisInitialized2.default)(_this),
526
+ metadata = _assertThisInitialize5.metadata;
395
527
 
396
528
  if (onClick) {
397
529
  var cardEvent = {
@@ -404,8 +536,8 @@ var CardBase = /*#__PURE__*/function (_Component) {
404
536
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onMouseEnter", function (event) {
405
537
  var onMouseEnter = _this.props.onMouseEnter;
406
538
 
407
- var _assertThisInitialize5 = (0, _assertThisInitialized2.default)(_this),
408
- metadata = _assertThisInitialize5.metadata;
539
+ var _assertThisInitialize6 = (0, _assertThisInitialized2.default)(_this),
540
+ metadata = _assertThisInitialize6.metadata;
409
541
 
410
542
  if (onMouseEnter) {
411
543
  var cardEvent = {
@@ -419,38 +551,47 @@ var CardBase = /*#__PURE__*/function (_Component) {
419
551
 
420
552
  var _cardPreview;
421
553
 
422
- var _this$props7 = _this.props,
423
- _identifier = _this$props7.identifier,
424
- _this$props7$dimensio = _this$props7.dimensions,
425
- _dimensions = _this$props7$dimensio === void 0 ? {} : _this$props7$dimensio;
554
+ var _this$props9 = _this.props,
555
+ _identifier = _this$props9.identifier,
556
+ _this$props9$dimensio = _this$props9.dimensions,
557
+ _dimensions = _this$props9$dimensio === void 0 ? {} : _this$props9$dimensio,
558
+ _ssr = _this$props9.ssr;
426
559
 
427
560
  if ((0, _mediaClient.isFileIdentifier)(_identifier)) {
428
561
  var id = _identifier.id;
429
562
  _cardPreview = (0, _getCardPreview.getCardPreviewFromCache)(id, _dimensions);
563
+
564
+ if (!_cardPreview && _ssr) {
565
+ _this.fireCommencedEvent();
566
+
567
+ _cardPreview = _this.resolveSSRPreview(_identifier, _ssr);
568
+ }
430
569
  } else if ((0, _mediaClient.isExternalImageIdentifier)(_identifier)) {
431
570
  _this.fireCommencedEvent();
432
571
 
433
- _status = 'complete';
572
+ _status = 'loading-preview';
434
573
  var dataURI = _identifier.dataURI;
435
574
  _cardPreview = {
436
575
  dataURI: dataURI,
437
576
  orientation: 1,
438
577
  source: 'external'
439
578
  };
440
- }
441
- /**
442
- * If cardPreview is available from local cache, `isCardVisible`
443
- * should be true to avoid flickers during re-mount of the component
444
- */
579
+ } // If cardPreview is available from local cache or external, `isCardVisible`
580
+ // should be true to avoid flickers during re-mount of the component
581
+ // should not be visible for SSR preview, otherwise we'll fire the metadata fetch from
582
+ // outside the viewport
445
583
 
446
584
 
447
- var isCardVisible = _cardPreview ? true : !_this.props.isLazy;
585
+ var _isCardVisible = !_this.props.isLazy || !!_cardPreview && !(0, _getCardPreview.isSSRPreview)(_cardPreview);
586
+
448
587
  _this.state = {
449
588
  status: _status,
450
- isCardVisible: isCardVisible,
589
+ isCardVisible: _isCardVisible,
451
590
  isPlayingFile: false,
452
591
  cardPreview: _cardPreview,
453
- cardRef: null
592
+ cardRef: null,
593
+ isBannedLocalPreview: false,
594
+ previewDidRender: false
454
595
  };
455
596
  return _this;
456
597
  }
@@ -459,11 +600,21 @@ var CardBase = /*#__PURE__*/function (_Component) {
459
600
  key: "componentDidMount",
460
601
  value: function componentDidMount() {
461
602
  this.hasBeenMounted = true;
462
- var isCardVisible = this.state.isCardVisible;
463
- var identifier = this.props.identifier;
603
+ var _this$state2 = this.state,
604
+ isCardVisible = _this$state2.isCardVisible,
605
+ cardPreview = _this$state2.cardPreview;
606
+ var _this$props10 = this.props,
607
+ identifier = _this$props10.identifier,
608
+ ssr = _this$props10.ssr;
464
609
 
465
610
  if (isCardVisible && (0, _mediaClient.isFileIdentifier)(identifier)) {
466
611
  this.updateStateForIdentifier(identifier);
612
+ }
613
+
614
+ if (isCardVisible && !!ssr && !!cardPreview && (0, _getCardPreview.isSSRClientPreview)(cardPreview) && (0, _mediaClient.isFileIdentifier)(identifier)) {
615
+ // Since the SSR preview brings the token in the query params,
616
+ // We need to fetch the remote preview to be able to cache it,
617
+ this.setCacheSSRPreview(identifier);
467
618
  } // we add a listener for each of the cards on the page
468
619
  // and then check if the triggered listener is from the card
469
620
  // that contains a div in current window.getSelection()
@@ -479,19 +630,27 @@ var CardBase = /*#__PURE__*/function (_Component) {
479
630
  prevIdentifier = prevProps.identifier,
480
631
  prevDimensions = prevProps.dimensions;
481
632
  var prevIsCardVisible = prevState.isCardVisible;
482
- var _this$props8 = this.props,
483
- mediaClient = _this$props8.mediaClient,
484
- identifier = _this$props8.identifier,
485
- dimensions = _this$props8.dimensions;
486
- var isCardVisible = this.state.isCardVisible;
633
+ var _this$props11 = this.props,
634
+ mediaClient = _this$props11.mediaClient,
635
+ identifier = _this$props11.identifier,
636
+ dimensions = _this$props11.dimensions,
637
+ featureFlags = _this$props11.featureFlags;
638
+ var _this$state3 = this.state,
639
+ isCardVisible = _this$state3.isCardVisible,
640
+ cardPreview = _this$state3.cardPreview,
641
+ status = _this$state3.status,
642
+ fileState = _this$state3.fileState,
643
+ isBannedLocalPreview = _this$state3.isBannedLocalPreview,
644
+ previewDidRender = _this$state3.previewDidRender;
487
645
  var isDifferent = (0, _mediaClient.isDifferentIdentifier)(prevIdentifier, identifier);
488
646
  var turnedVisible = !prevIsCardVisible && isCardVisible;
647
+ var isNewMediaClient = prevMediaClient !== mediaClient;
489
648
 
490
649
  if ((0, _mediaClient.isExternalImageIdentifier)(identifier) && isDifferent) {
491
650
  this.fireCommencedEvent();
492
651
  var dataURI = identifier.dataURI;
493
652
  this.setState({
494
- status: 'complete',
653
+ status: 'loading-preview',
495
654
  cardPreview: {
496
655
  dataURI: dataURI,
497
656
  orientation: 1,
@@ -501,13 +660,42 @@ var CardBase = /*#__PURE__*/function (_Component) {
501
660
  });
502
661
  }
503
662
 
504
- if ((0, _mediaClient.isFileIdentifier)(identifier) && (turnedVisible || prevMediaClient !== mediaClient || isDifferent || // TODO: should not resubscribe on resize. Only refetch
505
- this.shouldRefetchImage(prevDimensions, dimensions))) {
663
+ if ((0, _mediaClient.isFileIdentifier)(identifier) && (turnedVisible || !!this.subscription && (isNewMediaClient || isDifferent))) {
506
664
  this.updateStateForIdentifier(identifier);
507
665
  }
508
666
 
509
667
  if (this.state.status !== prevState.status) {
510
668
  this.fireOperationalEvent();
669
+
670
+ if (this.state.status === 'complete' || this.fileAttributes.fileMediatype === 'video' && !!cardPreview && this.state.status === 'processing') {
671
+ this.fireScreenEvent();
672
+ }
673
+ }
674
+
675
+ if ((0, _mediaClient.isFileIdentifier)(identifier) && fileState && (0, _getCardPreview.shouldResolvePreview)({
676
+ status: status,
677
+ fileState: fileState,
678
+ dimensions: dimensions,
679
+ prevDimensions: prevDimensions,
680
+ featureFlags: featureFlags,
681
+ hasCardPreview: !!cardPreview,
682
+ isBannedLocalPreview: isBannedLocalPreview
683
+ })) {
684
+ this.resolvePreview(identifier, fileState);
685
+ }
686
+
687
+ if (turnedVisible && this.props.ssr && !!cardPreview && (0, _getCardPreview.isSSRClientPreview)(cardPreview) && (0, _mediaClient.isFileIdentifier)(identifier)) {
688
+ // Since the SSR preview brings the token in the query params,
689
+ // We need to fetch the remote preview to be able to cache it,
690
+ this.setCacheSSRPreview(identifier);
691
+ }
692
+
693
+ if (previewDidRender && // We should't complete if status is uploading
694
+ ['loading-preview', 'processing'].includes(status)) {
695
+ this.safeSetState({
696
+ status: 'complete'
697
+ });
698
+ this.unsubscribe();
511
699
  }
512
700
  }
513
701
  }, {
@@ -529,6 +717,7 @@ var CardBase = /*#__PURE__*/function (_Component) {
529
717
  var _this2 = this;
530
718
 
531
719
  var mediaClient = this.props.mediaClient;
720
+ var isBannedLocalPreview = this.state.isBannedLocalPreview;
532
721
  var id = identifier.id,
533
722
  collectionName = identifier.collectionName,
534
723
  occurrenceKey = identifier.occurrenceKey;
@@ -537,160 +726,58 @@ var CardBase = /*#__PURE__*/function (_Component) {
537
726
  collectionName: collectionName,
538
727
  occurrenceKey: occurrenceKey
539
728
  }).subscribe({
540
- next: function () {
541
- var _next = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(fileState) {
542
- var thisCardStatusUpdateTimestamp, filePreviewStatus, status, cardPreview, error, wrappedError;
543
- return _regenerator.default.wrap(function _callee$(_context) {
544
- while (1) {
545
- switch (_context.prev = _context.next) {
546
- case 0:
547
- _this2.lastFileState = fileState;
548
- thisCardStatusUpdateTimestamp = (performance || Date).now();
549
- filePreviewStatus = (0, _getCardPreview.extractFilePreviewStatus)(fileState, _this2.props.featureFlags);
550
- status = (0, _getCardStatus.getCardStatus)(fileState.status, filePreviewStatus);
551
-
552
- _this2.safeSetState({
553
- fileState: fileState
554
- });
555
-
556
- if (!(0, _getCardPreview.shouldGetCardPreview)(status, filePreviewStatus)) {
557
- _context.next = 17;
558
- break;
559
- }
560
-
561
- _context.prev = 6;
562
- _context.next = 9;
563
- return (0, _getCardPreview.getCardPreview)(_this2.getCardPreviewParams(id, collectionName, fileState));
564
-
565
- case 9:
566
- cardPreview = _context.sent;
567
-
568
- if (['loading-preview', 'processing'].includes(status)) {
569
- status = 'complete';
570
- }
571
-
572
- _context.next = 17;
573
- break;
574
-
575
- case 13:
576
- _context.prev = 13;
577
- _context.t0 = _context["catch"](6);
578
- wrappedError = (0, _errors.ensureMediaCardError)('preview-fetch', _context.t0);
579
- /**
580
- * If remote preview fails, we set status 'error'
581
- * If the local preview fails (i.e, no remote preview available),
582
- * we can stay in the same status until there is a remote preview available
583
- * */
584
-
585
- if ((0, _errors.isRemotePreviewError)(wrappedError)) {
586
- status = 'error';
587
- error = wrappedError;
588
- }
589
-
590
- case 17:
591
- if (_this2.isLatestCardStatusUpdate(thisCardStatusUpdateTimestamp)) {
592
- // These status and progress must not override values representing more recent FileState
593
-
594
- /* next() start some await() delay in next() status & progress update
595
- * ------- ------------------ ------------------------
596
- * |----[1]FileState:uploading------>| |
597
- * | | |
598
- * |----[2]FileState:uploading------>| |
599
- * | | |
600
- * | |----[2]FileState:uploading------>| Update status to `uploading`
601
- * |----[3]FileState:processing----->| |
602
- * | |----[3]FileState:processing----->| Update status to `complete`
603
- * | | |
604
- * | |----[1]FileState:uploading------>| We do not want to update status to `uploading` again!
605
- *
606
- */
607
- if (status === 'error' && (0, _mediaClient.isErrorFileState)(fileState) && !error) {
608
- error = new _errors.MediaCardError('error-file-state', new Error(fileState.message));
609
- }
610
-
611
- _this2.safeSetState({
612
- status: status,
613
- cardPreview: cardPreview,
614
- progress: status === 'uploading' && fileState.status === 'uploading' ? fileState.progress : 1,
615
- error: status === 'error' && error ? error : undefined
616
- });
617
-
618
- _this2.lastCardStatusUpdateTimestamp = thisCardStatusUpdateTimestamp;
619
- }
620
-
621
- case 18:
622
- case "end":
623
- return _context.stop();
624
- }
625
- }
626
- }, _callee, null, [[6, 13]]);
627
- }));
628
-
629
- function next(_x) {
630
- return _next.apply(this, arguments);
631
- }
729
+ next: function next(fileState) {
730
+ var featureFlags = _this2.props.featureFlags;
731
+ var newState = (0, _cardState.getCardStateFromFileState)(fileState, isBannedLocalPreview, featureFlags);
632
732
 
633
- return next;
634
- }(),
733
+ _this2.safeSetState(newState);
734
+ },
635
735
  error: function error(e) {
636
- // If file state subscription decides that the card is complete
637
- // and later there is an error, we won't change the card's status.
638
- if (_this2.state.status === 'complete') {
639
- return;
640
- }
641
-
642
- var errorReason = _this2.fileAttributes.fileStatus === 'uploading' ? 'upload' : 'metadata-fetch';
736
+ var errorReason = _this2.state.status === 'uploading' ? 'upload' : 'metadata-fetch';
643
737
  var error = new _errors.MediaCardError(errorReason, e);
644
738
 
645
739
  _this2.safeSetState({
646
740
  error: error,
647
741
  status: 'error'
648
742
  });
649
-
650
- _this2.lastCardStatusUpdateTimestamp = (performance || Date).now();
651
743
  }
652
744
  });
653
745
  }
746
+ }, {
747
+ key: "requestedDimensions",
748
+ get: function get() {
749
+ var dimensions = this.props.dimensions;
750
+
751
+ var _ref3 = this.state || {},
752
+ element = _ref3.cardRef;
753
+
754
+ return (0, _getDataURIDimension.getRequestedDimensions)({
755
+ dimensions: dimensions,
756
+ element: element
757
+ });
758
+ }
654
759
  }, {
655
760
  key: "metadata",
656
761
  get: function get() {
657
- var identifier = this.props.identifier;
658
- return (0, _mediaClient.isFileIdentifier)(identifier) ? this.state.fileState ? (0, _metadata.getFileDetails)(this.state.fileState) : {
659
- id: identifier.id
660
- } : {
661
- id: identifier.mediaItemType,
662
- name: identifier.name || identifier.dataURI,
663
- mediaType: 'image'
664
- };
762
+ var _this$state4;
763
+
764
+ return (0, _metadata.getFileDetails)(this.props.identifier, (_this$state4 = this.state) === null || _this$state4 === void 0 ? void 0 : _this$state4.fileState);
665
765
  }
666
766
  }, {
667
767
  key: "fileAttributes",
668
768
  get: function get() {
669
- var _this$lastFileState;
769
+ var _this$state5, _this$state5$fileStat;
670
770
 
671
- return (0, _analytics.getFileAttributes)(this.metadata, (_this$lastFileState = this.lastFileState) === null || _this$lastFileState === void 0 ? void 0 : _this$lastFileState.status);
771
+ return (0, _analytics.getFileAttributes)(this.metadata, (_this$state5 = this.state) === null || _this$state5 === void 0 ? void 0 : (_this$state5$fileStat = _this$state5.fileState) === null || _this$state5$fileStat === void 0 ? void 0 : _this$state5$fileStat.status);
672
772
  }
673
773
  }, {
674
774
  key: "fireOperationalEvent",
675
775
  value: function fireOperationalEvent() {
676
- var timeElapsedTillCommenced = this.timeElapsedTillCommenced;
677
- var _this$state2 = this.state,
678
- status = _this$state2.status,
679
- cardPreview = _this$state2.cardPreview,
680
- error = _this$state2.error;
776
+ var _this$state6 = this.state,
777
+ status = _this$state6.status,
778
+ error = _this$state6.error;
681
779
  var createAnalyticsEvent = this.props.createAnalyticsEvent;
682
- var timeElapsedTillEvent = performance.now();
683
- var durationSinceCommenced = timeElapsedTillCommenced && timeElapsedTillEvent - timeElapsedTillCommenced;
684
- var performanceAttributes = {
685
- overall: {
686
- durationSincePageStart: timeElapsedTillEvent,
687
- durationSinceCommenced: durationSinceCommenced
688
- }
689
- };
690
- createAnalyticsEvent && (0, _cardAnalytics.fireOperationalEvent)(createAnalyticsEvent, status, this.fileAttributes, performanceAttributes, {
691
- cardPreview: cardPreview,
692
- error: error
693
- });
780
+ createAnalyticsEvent && (0, _cardAnalytics.fireOperationalEvent)(createAnalyticsEvent, status, this.fileAttributes, this.getPerformanceAttributes(), error);
694
781
  }
695
782
  }, {
696
783
  key: "fireCommencedEvent",
@@ -708,11 +795,11 @@ var CardBase = /*#__PURE__*/function (_Component) {
708
795
  get: function get() {
709
796
  var _this3 = this;
710
797
 
711
- var _this$props9 = this.props,
712
- _this$props9$actions = _this$props9.actions,
713
- actions = _this$props9$actions === void 0 ? [] : _this$props9$actions,
714
- identifier = _this$props9.identifier,
715
- shouldEnableDownloadButton = _this$props9.shouldEnableDownloadButton;
798
+ var _this$props12 = this.props,
799
+ _this$props12$actions = _this$props12.actions,
800
+ actions = _this$props12$actions === void 0 ? [] : _this$props12$actions,
801
+ identifier = _this$props12.identifier,
802
+ shouldEnableDownloadButton = _this$props12.shouldEnableDownloadButton;
716
803
  var status = this.state.status;
717
804
  var metadata = this.metadata;
718
805
 
@@ -734,20 +821,15 @@ var CardBase = /*#__PURE__*/function (_Component) {
734
821
  }, {
735
822
  key: "render",
736
823
  value: function render() {
737
- var _this$lastFileState2;
738
-
739
- var _this$state3 = this.state,
740
- isPlayingFile = _this$state3.isPlayingFile,
741
- mediaViewerSelectedItem = _this$state3.mediaViewerSelectedItem;
824
+ var _this$state7 = this.state,
825
+ isPlayingFile = _this$state7.isPlayingFile,
826
+ mediaViewerSelectedItem = _this$state7.mediaViewerSelectedItem;
742
827
 
743
828
  var innerContent = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, isPlayingFile ? this.renderInlinePlayer() : this.renderCard(), mediaViewerSelectedItem ? this.renderMediaViewer() : null);
744
829
 
745
- var content = this.context.intl ? innerContent : /*#__PURE__*/_react.default.createElement(_reactIntl.IntlProvider, {
830
+ return this.props.intl ? innerContent : /*#__PURE__*/_react.default.createElement(_reactIntlNext.IntlProvider, {
746
831
  locale: "en"
747
832
  }, innerContent);
748
- return /*#__PURE__*/_react.default.createElement(_fileAttributesContext.FileAttributesProvider, {
749
- data: (0, _analytics.getFileAttributes)(this.metadata, (_this$lastFileState2 = this.lastFileState) === null || _this$lastFileState2 === void 0 ? void 0 : _this$lastFileState2.status)
750
- }, content);
751
833
  }
752
834
  }]);
753
835
  return CardBase;
@@ -762,10 +844,6 @@ exports.CardBase = CardBase;
762
844
  // Media Feature Flag defaults are defined in @atlaskit/media-common
763
845
  featureFlags: {}
764
846
  });
765
- (0, _defineProperty2.default)(CardBase, "contextTypes", {
766
- // Required to detect a parent IntlProvider
767
- intl: _reactIntl.intlShape
768
- });
769
847
  var Card = (0, _mediaCommon.withMediaAnalyticsContext)({
770
848
  packageVersion: _version.version,
771
849
  packageName: _version.name,
@@ -773,5 +851,7 @@ var Card = (0, _mediaCommon.withMediaAnalyticsContext)({
773
851
  component: 'mediaCard'
774
852
  }, {
775
853
  filterFeatureFlags: _cardAnalytics.relevantFeatureFlagNames
776
- })((0, _analyticsNext.withAnalyticsEvents)()(CardBase));
854
+ })((0, _analyticsNext.withAnalyticsEvents)()((0, _reactIntlNext.injectIntl)(CardBase, {
855
+ enforceContext: false
856
+ })));
777
857
  exports.Card = Card;