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