@atlaskit/media-card 70.10.0 → 72.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 (150) hide show
  1. package/CHANGELOG.md +79 -0
  2. package/dist/cjs/errors.js +76 -5
  3. package/dist/cjs/files/cardImageView/index.js +58 -89
  4. package/dist/cjs/files/index.js +0 -6
  5. package/dist/cjs/index.js +16 -6
  6. package/dist/cjs/root/card/cardAnalytics.js +33 -19
  7. package/dist/cjs/root/card/cardConstants.js +8 -0
  8. package/dist/cjs/root/card/cardLoader.js +66 -124
  9. package/dist/cjs/root/card/cardState.js +50 -0
  10. package/dist/cjs/root/card/getCardPreview/cache.js +5 -0
  11. package/dist/cjs/root/card/getCardPreview/filePreviewStatus.js +50 -0
  12. package/dist/cjs/root/card/getCardPreview/helpers.js +13 -21
  13. package/dist/cjs/root/card/getCardPreview/index.js +171 -100
  14. package/dist/cjs/root/card/getCardStatus.js +7 -1
  15. package/dist/cjs/root/card/index.js +407 -322
  16. package/dist/cjs/root/cardView.js +115 -76
  17. package/dist/cjs/root/index.js +9 -1
  18. package/dist/cjs/root/inline/loader.js +22 -21
  19. package/dist/cjs/root/inline/{inlineMediaCard.js → mediaInlineCard.js} +72 -25
  20. package/dist/cjs/root/inlinePlayer.js +5 -15
  21. package/dist/cjs/root/ui/iconMessage/index.js +17 -9
  22. package/dist/cjs/root/ui/imageRenderer/imageRenderer.js +36 -115
  23. package/dist/cjs/root/ui/styled.js +1 -1
  24. package/dist/cjs/root/ui/titleBox/failedTitleBox.js +7 -3
  25. package/dist/cjs/utils/analytics.js +26 -43
  26. package/dist/cjs/utils/cardActions/cardActionsDropdownMenu.js +16 -9
  27. package/dist/cjs/utils/dimensionComparer.js +1 -1
  28. package/dist/cjs/utils/document.js +12 -0
  29. package/dist/cjs/utils/getDataURIDimension.js +13 -2
  30. package/dist/cjs/utils/metadata.js +11 -3
  31. package/dist/cjs/utils/objectURLCache.js +6 -0
  32. package/dist/cjs/utils/resizeModeToMediaImageProps.js +13 -0
  33. package/dist/cjs/utils/shouldDisplayImageThumbnail.js +1 -1
  34. package/dist/cjs/version.json +1 -1
  35. package/dist/es2019/errors.js +42 -2
  36. package/dist/es2019/files/cardImageView/index.js +12 -46
  37. package/dist/es2019/files/index.js +1 -1
  38. package/dist/es2019/index.js +3 -3
  39. package/dist/es2019/root/card/cardAnalytics.js +23 -17
  40. package/dist/es2019/root/card/cardConstants.js +1 -0
  41. package/dist/es2019/root/card/cardLoader.js +47 -53
  42. package/dist/es2019/root/card/cardState.js +26 -0
  43. package/dist/es2019/root/card/getCardPreview/cache.js +5 -0
  44. package/dist/es2019/root/card/getCardPreview/filePreviewStatus.js +35 -0
  45. package/dist/es2019/root/card/getCardPreview/helpers.js +2 -12
  46. package/dist/es2019/root/card/getCardPreview/index.js +112 -79
  47. package/dist/es2019/root/card/getCardStatus.js +1 -0
  48. package/dist/es2019/root/card/index.js +356 -254
  49. package/dist/es2019/root/cardView.js +98 -58
  50. package/dist/es2019/root/index.js +2 -1
  51. package/dist/es2019/root/inline/loader.js +16 -15
  52. package/dist/es2019/root/inline/mediaInlineCard.js +132 -0
  53. package/dist/es2019/root/inlinePlayer.js +5 -13
  54. package/dist/es2019/root/ui/iconMessage/index.js +10 -6
  55. package/dist/es2019/root/ui/imageRenderer/imageRenderer.js +26 -74
  56. package/dist/es2019/root/ui/styled.js +1 -0
  57. package/dist/es2019/root/ui/titleBox/failedTitleBox.js +5 -3
  58. package/dist/es2019/utils/analytics.js +29 -40
  59. package/dist/es2019/utils/cardActions/cardActionsDropdownMenu.js +8 -4
  60. package/dist/es2019/utils/dimensionComparer.js +1 -1
  61. package/dist/es2019/utils/document.js +1 -0
  62. package/dist/es2019/utils/getDataURIDimension.js +8 -0
  63. package/dist/es2019/utils/metadata.js +12 -4
  64. package/dist/es2019/utils/objectURLCache.js +5 -0
  65. package/dist/es2019/utils/resizeModeToMediaImageProps.js +6 -0
  66. package/dist/es2019/utils/shouldDisplayImageThumbnail.js +1 -1
  67. package/dist/es2019/version.json +1 -1
  68. package/dist/esm/errors.js +60 -1
  69. package/dist/esm/files/cardImageView/index.js +55 -87
  70. package/dist/esm/files/index.js +1 -1
  71. package/dist/esm/index.js +3 -3
  72. package/dist/esm/root/card/cardAnalytics.js +23 -18
  73. package/dist/esm/root/card/cardConstants.js +1 -0
  74. package/dist/esm/root/card/cardLoader.js +66 -126
  75. package/dist/esm/root/card/cardState.js +32 -0
  76. package/dist/esm/root/card/getCardPreview/cache.js +6 -0
  77. package/dist/esm/root/card/getCardPreview/filePreviewStatus.js +35 -0
  78. package/dist/esm/root/card/getCardPreview/helpers.js +13 -21
  79. package/dist/esm/root/card/getCardPreview/index.js +142 -95
  80. package/dist/esm/root/card/getCardStatus.js +3 -0
  81. package/dist/esm/root/card/index.js +416 -325
  82. package/dist/esm/root/cardView.js +114 -73
  83. package/dist/esm/root/index.js +2 -1
  84. package/dist/esm/root/inline/loader.js +23 -22
  85. package/dist/esm/root/inline/mediaInlineCard.js +145 -0
  86. package/dist/esm/root/inlinePlayer.js +5 -13
  87. package/dist/esm/root/ui/iconMessage/index.js +12 -7
  88. package/dist/esm/root/ui/imageRenderer/imageRenderer.js +28 -106
  89. package/dist/esm/root/ui/styled.js +1 -1
  90. package/dist/esm/root/ui/titleBox/failedTitleBox.js +6 -3
  91. package/dist/esm/utils/analytics.js +22 -35
  92. package/dist/esm/utils/cardActions/cardActionsDropdownMenu.js +16 -9
  93. package/dist/esm/utils/dimensionComparer.js +1 -1
  94. package/dist/esm/utils/document.js +3 -0
  95. package/dist/esm/utils/getDataURIDimension.js +8 -0
  96. package/dist/esm/utils/metadata.js +12 -4
  97. package/dist/esm/utils/objectURLCache.js +6 -0
  98. package/dist/esm/utils/resizeModeToMediaImageProps.js +6 -0
  99. package/dist/esm/utils/shouldDisplayImageThumbnail.js +1 -1
  100. package/dist/esm/version.json +1 -1
  101. package/dist/types/errors.d.ts +15 -1
  102. package/dist/types/files/cardImageView/index.d.ts +5 -12
  103. package/dist/types/files/cardImageView/styled.d.ts +1 -1
  104. package/dist/types/files/index.d.ts +1 -1
  105. package/dist/types/index.d.ts +11 -13
  106. package/dist/types/root/card/cardAnalytics.d.ts +5 -7
  107. package/dist/types/root/card/cardConstants.d.ts +1 -0
  108. package/dist/types/root/card/cardLoader.d.ts +4 -18
  109. package/dist/types/root/card/cardState.d.ts +5 -0
  110. package/dist/types/root/card/getCardPreview/cache.d.ts +4 -2
  111. package/dist/types/root/card/getCardPreview/filePreviewStatus.d.ts +5 -0
  112. package/dist/types/root/card/getCardPreview/helpers.d.ts +4 -5
  113. package/dist/types/root/card/getCardPreview/index.d.ts +25 -14
  114. package/dist/types/root/card/getCardStatus.d.ts +1 -0
  115. package/dist/types/root/card/index.d.ts +18 -15
  116. package/dist/types/root/cardView.d.ts +14 -8
  117. package/dist/types/root/index.d.ts +1 -0
  118. package/dist/types/root/inline/loader.d.ts +8 -8
  119. package/dist/types/root/inline/{inlineMediaCard.d.ts → mediaInlineCard.d.ts} +4 -4
  120. package/dist/types/root/inlinePlayer.d.ts +1 -1
  121. package/dist/types/root/ui/iconMessage/index.d.ts +7 -2
  122. package/dist/types/root/ui/imageRenderer/imageRenderer.d.ts +5 -18
  123. package/dist/types/root/ui/titleBox/failedTitleBox.d.ts +2 -0
  124. package/dist/types/types.d.ts +9 -1
  125. package/dist/types/utils/analytics.d.ts +20 -21
  126. package/dist/types/utils/cardDimensions.d.ts +5 -1
  127. package/dist/types/utils/dimensionComparer.d.ts +1 -1
  128. package/dist/types/utils/document.d.ts +2 -0
  129. package/dist/types/utils/getDataURIDimension.d.ts +3 -1
  130. package/dist/types/utils/index.d.ts +1 -0
  131. package/dist/types/utils/lazyContent/styled.d.ts +1 -1
  132. package/dist/types/utils/lightCards/types.d.ts +1 -1
  133. package/dist/types/utils/metadata.d.ts +2 -2
  134. package/dist/types/utils/objectURLCache.d.ts +2 -1
  135. package/dist/types/utils/resizeModeToMediaImageProps.d.ts +5 -0
  136. package/dist/types/utils/shouldDisplayImageThumbnail.d.ts +1 -1
  137. package/example-helpers/developmentUseMessage.tsx +14 -0
  138. package/example-helpers/index.tsx +55 -4
  139. package/example-helpers/selectableCard.tsx +2 -1
  140. package/package.json +18 -14
  141. package/dist/cjs/root/card/getCardPreview/types.js +0 -5
  142. package/dist/cjs/utils/fileAttributesContext.js +0 -40
  143. package/dist/es2019/root/card/getCardPreview/types.js +0 -1
  144. package/dist/es2019/root/inline/inlineMediaCard.js +0 -92
  145. package/dist/es2019/utils/fileAttributesContext.js +0 -19
  146. package/dist/esm/root/card/getCardPreview/types.js +0 -1
  147. package/dist/esm/root/inline/inlineMediaCard.js +0 -100
  148. package/dist/esm/utils/fileAttributesContext.js +0 -18
  149. package/dist/types/root/card/getCardPreview/types.d.ts +0 -5
  150. package/dist/types/utils/fileAttributesContext.d.ts +0 -10
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.CardView = exports.CardViewBase = exports.newFileExperienceClassName = void 0;
8
+ exports.CardView = exports.CardViewBase = void 0;
9
9
 
10
10
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
11
 
@@ -77,10 +77,12 @@ var _spinner = _interopRequireDefault(require("@atlaskit/spinner"));
77
77
 
78
78
  var _iconMessage = require("./ui/iconMessage");
79
79
 
80
- var _loadingRateLimited = require("./ui/loadingRateLimited/loadingRateLimited");
81
-
82
80
  var _mediaClient = require("@atlaskit/media-client");
83
81
 
82
+ var _cardConstants = require("./card/cardConstants");
83
+
84
+ var _errors = require("../errors");
85
+
84
86
  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; }
85
87
 
86
88
  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; }
@@ -89,9 +91,6 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
89
91
 
90
92
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
91
93
 
92
- var newFileExperienceClassName = 'new-file-experience-wrapper';
93
- exports.newFileExperienceClassName = newFileExperienceClassName;
94
-
95
94
  /**
96
95
  * This is classic vanilla CardView class. To create an instance of class one would need to supply
97
96
  * `createAnalyticsEvent` prop to satisfy it's Analytics Events needs.
@@ -112,13 +111,33 @@ var CardViewBase = /*#__PURE__*/function (_React$Component) {
112
111
 
113
112
  _this = _super.call.apply(_super, [this].concat(args));
114
113
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "state", {
115
- isImageFailedToLoad: false
114
+ didImageRender: false
116
115
  });
117
116
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "divRef", /*#__PURE__*/_react.default.createRef());
118
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onImageLoadError", function () {
117
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onImageLoad", function () {
118
+ var onImageLoad = _this.props.onImageLoad; // We render the icon & icon message always, even if there is dataURI available.
119
+ // If the image fails to load/render, the icon will remain, i.e. the user won't see a change until
120
+ // the root card decides to chage status to error.
121
+ // If the image renders successfully, we switch this variable to hide the icon & icon message
122
+ // behind the thumbnail in case the image has transparency.
123
+ // It is less likely that root component replaces a suceeded dataURI for a failed one
124
+ // than the opposite case. Therefore we prefer to hide the icon instead show when the image fails,
125
+ // for a smoother transition
126
+
119
127
  _this.setState({
120
- isImageFailedToLoad: true
128
+ didImageRender: true
121
129
  });
130
+
131
+ onImageLoad && onImageLoad();
132
+ });
133
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onImageError", function () {
134
+ var onImageError = _this.props.onImageError;
135
+
136
+ _this.setState({
137
+ didImageRender: false
138
+ });
139
+
140
+ onImageError && onImageError();
122
141
  });
123
142
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "saveElementWidth", function () {
124
143
  var dimensions = _this.props.dimensions;
@@ -152,26 +171,22 @@ var CardViewBase = /*#__PURE__*/function (_React$Component) {
152
171
  dataURI = _this$props.dataURI;
153
172
 
154
173
  var _ref = metadata || {},
155
- mediaType = _ref.mediaType,
156
174
  name = _ref.name;
157
175
 
158
176
  var shouldUsePointerCursor = status !== 'error' && status !== 'failed-processing';
159
- var shouldDisplayBackground = !dataURI || !disableOverlay;
177
+ var shouldDisplayBackground = !dataURI || !disableOverlay || status === 'error' || status === 'failed-processing';
160
178
  var isPlayButtonClickable = !!(_this.shouldRenderPlayButton() && disableOverlay);
161
- var isTickBoxSelectable = !disableOverlay && !!selectable && !selected; // Make tooltip optional for media singles - images, videos.
162
- // Intention is to show full file name when it's truncate in titlebox,
163
- // and to hide it when no titlebox exists.
179
+ var isTickBoxSelectable = !disableOverlay && !!selectable && !selected; // Disable tooltip for Media Single
164
180
 
165
- var shouldDisplayTooltip = !!name && !disableOverlay;
181
+ var shouldDisplayTooltip = !disableOverlay;
166
182
  return /*#__PURE__*/_react.default.createElement(_styled2.NewFileExperienceWrapper, {
167
- className: newFileExperienceClassName,
183
+ className: _cardConstants.newFileExperienceClassName,
168
184
  "data-testid": testId || 'media-card-view',
169
185
  dimensions: dimensions,
170
186
  appearance: appearance,
171
187
  onClick: onClick,
172
188
  onMouseEnter: onMouseEnter,
173
189
  innerRef: _this.divRef,
174
- mediaType: mediaType,
175
190
  breakpoint: _this.breakpoint,
176
191
  shouldUsePointerCursor: shouldUsePointerCursor,
177
192
  disableOverlay: !!disableOverlay,
@@ -230,7 +245,9 @@ var CardViewBase = /*#__PURE__*/function (_React$Component) {
230
245
  actions: actionsWithDetails,
231
246
  disableOverlay: disableOverlay,
232
247
  previewOrientation: previewOrientation,
233
- alt: alt
248
+ alt: alt,
249
+ onImageLoad: _this.onImageLoad,
250
+ onImageError: _this.onImageError
234
251
  });
235
252
  });
236
253
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "getRenderConfigByStatus", function () {
@@ -240,21 +257,21 @@ var CardViewBase = /*#__PURE__*/function (_React$Component) {
240
257
  metadata = _this$props3.metadata,
241
258
  disableOverlay = _this$props3.disableOverlay,
242
259
  error = _this$props3.error,
243
- selectable = _this$props3.selectable;
260
+ selectable = _this$props3.selectable,
261
+ disableAnimation = _this$props3.disableAnimation;
244
262
 
245
263
  var _ref3 = metadata || {},
246
264
  name = _ref3.name,
247
265
  mediaType = _ref3.mediaType;
248
266
 
249
- var isImageFailedToLoad = _this.state.isImageFailedToLoad;
267
+ var didImageRender = _this.state.didImageRender;
250
268
  var isZeroSize = !!(metadata && metadata.size === 0);
251
269
  var defaultConfig = {
252
- renderTypeIcon: isImageFailedToLoad || !dataURI,
253
- renderImageRenderer: !!dataURI && !isImageFailedToLoad,
270
+ renderTypeIcon: !didImageRender,
271
+ renderImageRenderer: !!dataURI,
254
272
  renderPlayButton: !!dataURI && mediaType === 'video',
255
273
  renderBlanket: !disableOverlay,
256
- renderTitleBox: !!name && !isImageFailedToLoad && !disableOverlay,
257
- renderFailedTitleBox: !!isImageFailedToLoad,
274
+ renderTitleBox: !disableOverlay && !!name,
258
275
  renderTickBox: !disableOverlay && !!selectable
259
276
  };
260
277
 
@@ -267,45 +284,62 @@ var CardViewBase = /*#__PURE__*/function (_React$Component) {
267
284
  });
268
285
 
269
286
  case 'processing':
287
+ case 'loading-preview':
270
288
  return _objectSpread(_objectSpread({}, defaultConfig), {}, {
271
- iconMessage: (isImageFailedToLoad || !dataURI) && !isZeroSize ? /*#__PURE__*/_react.default.createElement(_iconMessage.CreatingPreview, null) : undefined
289
+ iconMessage: !didImageRender && !isZeroSize ? /*#__PURE__*/_react.default.createElement(_iconMessage.CreatingPreview, {
290
+ disableAnimation: disableAnimation
291
+ }) : undefined
272
292
  });
273
293
 
274
294
  case 'complete':
275
- return _objectSpread({}, defaultConfig);
295
+ return defaultConfig;
276
296
 
277
297
  case 'error':
278
- if (error && (0, _mediaClient.isPollingError)(error)) {
279
- return _objectSpread(_objectSpread({}, defaultConfig), {}, {
280
- renderTitleBox: !!name,
281
- renderFailedTitleBox: false,
282
- iconMessage: !!metadata && !isZeroSize ? /*#__PURE__*/_react.default.createElement(_iconMessage.PreviewCurrentlyUnavailable, null) : undefined
283
- });
284
- } else if ((0, _mediaClient.isRateLimitedError)(error) && !disableOverlay) {
285
- return {
286
- renderTypeIcon: !!metadata && (isImageFailedToLoad || !dataURI),
287
- renderTitleBox: !!metadata,
288
- iconMessage: !!metadata ? /*#__PURE__*/_react.default.createElement(_iconMessage.RateLimited, null) : undefined,
289
- renderLoadingRateLimited: !metadata
290
- };
298
+ case 'failed-processing':
299
+ var baseErrorConfig = _objectSpread(_objectSpread({}, defaultConfig), {}, {
300
+ renderTypeIcon: true,
301
+ renderImageRenderer: false,
302
+ renderTitleBox: false,
303
+ renderPlayButton: false
304
+ });
305
+
306
+ var iconMessage;
307
+ var customTitleMessage;
308
+
309
+ var _ref4 = error || {},
310
+ secondaryError = _ref4.secondaryError;
311
+
312
+ if ((0, _mediaClient.isRateLimitedError)(secondaryError) || (0, _mediaClient.isPollingError)(secondaryError)) {
313
+ iconMessage = /*#__PURE__*/_react.default.createElement(_iconMessage.PreviewCurrentlyUnavailable, null);
314
+ } else if ((0, _errors.isUploadError)(error)) {
315
+ iconMessage = /*#__PURE__*/_react.default.createElement(_iconMessage.FailedToUpload, null);
316
+ customTitleMessage = _mediaUi.messages.failed_to_upload;
317
+ } else if (!metadata) {
318
+ iconMessage = /*#__PURE__*/_react.default.createElement(_iconMessage.FailedToLoad, null);
291
319
  } else {
292
- return _objectSpread(_objectSpread({}, defaultConfig), {}, {
293
- renderTitleBox: defaultConfig.renderTitleBox && !!dataURI,
294
- renderFailedTitleBox: !!isImageFailedToLoad || !dataURI
320
+ iconMessage = /*#__PURE__*/_react.default.createElement(_iconMessage.PreviewUnavailable, null);
321
+ }
322
+
323
+ if (!disableOverlay) {
324
+ var renderFailedTitleBox = !name || !!customTitleMessage;
325
+ return _objectSpread(_objectSpread({}, baseErrorConfig), {}, {
326
+ renderTitleBox: !!name && !customTitleMessage,
327
+ renderFailedTitleBox: renderFailedTitleBox,
328
+ iconMessage: !renderFailedTitleBox ? iconMessage : undefined,
329
+ customTitleMessage: customTitleMessage
295
330
  });
296
331
  }
297
332
 
298
- case 'failed-processing':
299
- return _objectSpread(_objectSpread({}, defaultConfig), {}, {
300
- renderFailedTitleBox: !!isImageFailedToLoad || !dataURI && !metadata,
301
- iconMessage: !!metadata && !isZeroSize ? /*#__PURE__*/_react.default.createElement(_iconMessage.PreviewUnavailable, null) : undefined
333
+ return _objectSpread(_objectSpread({}, baseErrorConfig), {}, {
334
+ iconMessage: iconMessage
302
335
  });
303
336
 
304
337
  case 'loading':
305
338
  default:
306
339
  return _objectSpread(_objectSpread({}, defaultConfig), {}, {
340
+ renderPlayButton: false,
307
341
  renderTypeIcon: false,
308
- renderSpinner: true
342
+ renderSpinner: !didImageRender
309
343
  });
310
344
  }
311
345
  });
@@ -322,7 +356,7 @@ var CardViewBase = /*#__PURE__*/function (_React$Component) {
322
356
  renderFailedTitleBox = _this$getRenderConfig.renderFailedTitleBox,
323
357
  renderTickBox = _this$getRenderConfig.renderTickBox,
324
358
  isFixedBlanket = _this$getRenderConfig.isFixedBlanket,
325
- renderLoadingRateLimited = _this$getRenderConfig.renderLoadingRateLimited;
359
+ customTitleMessage = _this$getRenderConfig.customTitleMessage;
326
360
 
327
361
  var _this$props4 = _this.props,
328
362
  progress = _this$props4.progress,
@@ -330,8 +364,8 @@ var CardViewBase = /*#__PURE__*/function (_React$Component) {
330
364
  status = _this$props4.status,
331
365
  metadata = _this$props4.metadata;
332
366
 
333
- var _ref4 = metadata || {},
334
- name = _ref4.name;
367
+ var _ref5 = metadata || {},
368
+ name = _ref5.name;
335
369
 
336
370
  var hasTitleBox = !!renderTitleBox || !!renderFailedTitleBox;
337
371
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_styled2.CardImageContainer, {
@@ -341,7 +375,7 @@ var CardViewBase = /*#__PURE__*/function (_React$Component) {
341
375
  "data-test-status": status,
342
376
  "data-test-progress": progress,
343
377
  "data-test-selected": selected ? true : undefined
344
- }, renderTypeIcon && _this.renderMediaTypeIcon(hasTitleBox, iconMessage), renderSpinner && _this.renderSpinner(hasTitleBox), renderImageRenderer && _this.renderImageRenderer(), renderPlayButton && _this.renderPlayButton(hasTitleBox), renderBlanket && _this.renderBlanket(!!isFixedBlanket), renderTitleBox && _this.renderTitleBox(), renderFailedTitleBox && _this.renderFailedTitleBox(), renderProgressBar && _this.renderProgressBar(!renderTitleBox), renderLoadingRateLimited && /*#__PURE__*/_react.default.createElement(_loadingRateLimited.LoadingRateLimited, null), renderTickBox && _this.renderTickBox()), _this.renderActionsBar());
378
+ }, renderTypeIcon && _this.renderMediaTypeIcon(hasTitleBox, iconMessage), renderSpinner && _this.renderSpinner(hasTitleBox), renderImageRenderer && _this.renderImageRenderer(), renderPlayButton && _this.renderPlayButton(hasTitleBox), renderBlanket && _this.renderBlanket(!!isFixedBlanket), renderTitleBox && _this.renderTitleBox(), renderFailedTitleBox && _this.renderFailedTitleBox(customTitleMessage), renderProgressBar && _this.renderProgressBar(!hasTitleBox), renderTickBox && _this.renderTickBox()), _this.renderActionsBar());
345
379
  });
346
380
  return _this;
347
381
  }
@@ -355,15 +389,16 @@ var CardViewBase = /*#__PURE__*/function (_React$Component) {
355
389
  }
356
390
  }, {
357
391
  key: "componentDidUpdate",
358
- value: function componentDidUpdate(_ref5) {
359
- var prevDataURI = _ref5.dataURI;
360
- var dataURI = this.props.dataURI;
361
-
362
- if (prevDataURI !== dataURI) {
363
- this.setState({
364
- isImageFailedToLoad: false
365
- });
366
- }
392
+ value: function componentDidUpdate(_ref6) {
393
+ var prevDataURI = _ref6.dataURI;
394
+ var dataURI = this.props.dataURI; // We should only switch didImageRender to false
395
+ // when dataURI goes undefined, not when it is updated.
396
+ // as this method could be triggered after onImageLoad callback,
397
+ // falling on a race condition
398
+
399
+ prevDataURI && !dataURI && this.setState({
400
+ didImageRender: false
401
+ });
367
402
  }
368
403
  }, {
369
404
  key: "width",
@@ -376,10 +411,10 @@ var CardViewBase = /*#__PURE__*/function (_React$Component) {
376
411
  return elementWidth;
377
412
  }
378
413
 
379
- var _ref6 = this.props.dimensions || {
414
+ var _ref7 = this.props.dimensions || {
380
415
  width: undefined
381
416
  },
382
- width = _ref6.width;
417
+ width = _ref7.width;
383
418
 
384
419
  if (!width) {
385
420
  return _cardDimensions.defaultImageCardDimensions.width;
@@ -436,8 +471,8 @@ var CardViewBase = /*#__PURE__*/function (_React$Component) {
436
471
  metadata = _this$props6.metadata,
437
472
  dataURI = _this$props6.dataURI;
438
473
 
439
- var _ref7 = metadata || {},
440
- mediaType = _ref7.mediaType;
474
+ var _ref8 = metadata || {},
475
+ mediaType = _ref8.mediaType;
441
476
 
442
477
  if (mediaType !== 'video' || !dataURI) {
443
478
  return false;
@@ -470,9 +505,9 @@ var CardViewBase = /*#__PURE__*/function (_React$Component) {
470
505
  titleBoxBgColor = _this$props7.titleBoxBgColor,
471
506
  titleBoxIcon = _this$props7.titleBoxIcon;
472
507
 
473
- var _ref8 = metadata || {},
474
- name = _ref8.name,
475
- createdAt = _ref8.createdAt;
508
+ var _ref9 = metadata || {},
509
+ name = _ref9.name,
510
+ createdAt = _ref9.createdAt;
476
511
 
477
512
  return !!name && /*#__PURE__*/_react.default.createElement(_titleBox.TitleBox, {
478
513
  name: name,
@@ -484,9 +519,10 @@ var CardViewBase = /*#__PURE__*/function (_React$Component) {
484
519
  }
485
520
  }, {
486
521
  key: "renderFailedTitleBox",
487
- value: function renderFailedTitleBox() {
522
+ value: function renderFailedTitleBox(customMessage) {
488
523
  return /*#__PURE__*/_react.default.createElement(_failedTitleBox.FailedTitleBox, {
489
- breakpoint: this.breakpoint
524
+ breakpoint: this.breakpoint,
525
+ customMessage: customMessage
490
526
  });
491
527
  }
492
528
  }, {
@@ -512,16 +548,19 @@ var CardViewBase = /*#__PURE__*/function (_React$Component) {
512
548
  alt = _this$props8.alt,
513
549
  resizeMode = _this$props8.resizeMode,
514
550
  onDisplayImage = _this$props8.onDisplayImage,
515
- mediaItemType = _this$props8.mediaItemType;
551
+ nativeLazyLoad = _this$props8.nativeLazyLoad,
552
+ forceSyncDisplay = _this$props8.forceSyncDisplay;
516
553
  return !!dataURI && /*#__PURE__*/_react.default.createElement(_imageRenderer.ImageRenderer, {
517
554
  dataURI: dataURI,
518
555
  mediaType: mediaType,
519
- mediaItemType: mediaItemType,
520
556
  previewOrientation: previewOrientation,
521
557
  alt: alt,
522
558
  resizeMode: resizeMode,
523
559
  onDisplayImage: onDisplayImage,
524
- onImageError: this.onImageLoadError
560
+ onImageLoad: this.onImageLoad,
561
+ onImageError: this.onImageError,
562
+ nativeLazyLoad: nativeLazyLoad,
563
+ forceSyncDisplay: forceSyncDisplay
525
564
  });
526
565
  }
527
566
  }, {
@@ -537,10 +576,10 @@ var CardViewBase = /*#__PURE__*/function (_React$Component) {
537
576
  value: function renderMediaTypeIcon(hasTitleBox, iconMessage) {
538
577
  var metadata = this.props.metadata;
539
578
 
540
- var _ref9 = metadata || {},
541
- mediaType = _ref9.mediaType,
542
- mimeType = _ref9.mimeType,
543
- name = _ref9.name;
579
+ var _ref10 = metadata || {},
580
+ mediaType = _ref10.mediaType,
581
+ mimeType = _ref10.mimeType,
582
+ name = _ref10.name;
544
583
 
545
584
  return /*#__PURE__*/_react.default.createElement(_styled4.IconWrapper, {
546
585
  breakpoint: this.breakpoint,
@@ -11,5 +11,13 @@ Object.defineProperty(exports, "Card", {
11
11
  return _cardLoader.default;
12
12
  }
13
13
  });
14
+ Object.defineProperty(exports, "MediaInlineCard", {
15
+ enumerable: true,
16
+ get: function get() {
17
+ return _loader.default;
18
+ }
19
+ });
20
+
21
+ var _cardLoader = _interopRequireDefault(require("./card/cardLoader"));
14
22
 
15
- var _cardLoader = _interopRequireDefault(require("./card/cardLoader"));
23
+ var _loader = _interopRequireDefault(require("./inline/loader"));
@@ -41,15 +41,15 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
41
41
 
42
42
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
43
43
 
44
- var InlineMediaCardLoader = /*#__PURE__*/function (_React$PureComponent) {
45
- (0, _inherits2.default)(InlineMediaCardLoader, _React$PureComponent);
44
+ var MediaInlineCardLoader = /*#__PURE__*/function (_React$PureComponent) {
45
+ (0, _inherits2.default)(MediaInlineCardLoader, _React$PureComponent);
46
46
 
47
- var _super = _createSuper(InlineMediaCardLoader);
47
+ var _super = _createSuper(MediaInlineCardLoader);
48
48
 
49
- function InlineMediaCardLoader() {
49
+ function MediaInlineCardLoader() {
50
50
  var _this;
51
51
 
52
- (0, _classCallCheck2.default)(this, InlineMediaCardLoader);
52
+ (0, _classCallCheck2.default)(this, MediaInlineCardLoader);
53
53
 
54
54
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
55
55
  args[_key] = arguments[_key];
@@ -57,12 +57,13 @@ var InlineMediaCardLoader = /*#__PURE__*/function (_React$PureComponent) {
57
57
 
58
58
  _this = _super.call.apply(_super, [this].concat(args));
59
59
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "state", {
60
- InlineMediaCard: InlineMediaCardLoader.InlineMediaCard
60
+ MediaInlineCard: MediaInlineCardLoader.MediaInlineCard,
61
+ ErrorBoundary: MediaInlineCardLoader.ErrorBoundary
61
62
  });
62
63
  return _this;
63
64
  }
64
65
 
65
- (0, _createClass2.default)(InlineMediaCardLoader, [{
66
+ (0, _createClass2.default)(MediaInlineCardLoader, [{
66
67
  key: "componentDidMount",
67
68
  value: function () {
68
69
  var _componentDidMount = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
@@ -72,7 +73,7 @@ var InlineMediaCardLoader = /*#__PURE__*/function (_React$PureComponent) {
72
73
  while (1) {
73
74
  switch (_context.prev = _context.next) {
74
75
  case 0:
75
- if (this.state.InlineMediaCard) {
76
+ if (this.state.MediaInlineCard) {
76
77
  _context.next = 16;
77
78
  break;
78
79
  }
@@ -82,7 +83,7 @@ var InlineMediaCardLoader = /*#__PURE__*/function (_React$PureComponent) {
82
83
  return Promise.all([Promise.resolve().then(function () {
83
84
  return _interopRequireWildcard(require('@atlaskit/media-client'));
84
85
  }), Promise.resolve().then(function () {
85
- return _interopRequireWildcard(require('./inlineMediaCard'));
86
+ return _interopRequireWildcard(require('./mediaInlineCard'));
86
87
  }), Promise.resolve().then(function () {
87
88
  return _interopRequireWildcard(require('../media-card-analytics-error-boundary'));
88
89
  })]);
@@ -93,11 +94,11 @@ var InlineMediaCardLoader = /*#__PURE__*/function (_React$PureComponent) {
93
94
  mediaClient = _yield$Promise$all2[0];
94
95
  cardModule = _yield$Promise$all2[1];
95
96
  mediaCardErrorBoundaryModule = _yield$Promise$all2[2];
96
- InlineMediaCardLoader.InlineMediaCard = mediaClient.withMediaClient(cardModule.InlineMediaCard);
97
- InlineMediaCardLoader.ErrorBoundary = mediaCardErrorBoundaryModule.default;
97
+ MediaInlineCardLoader.MediaInlineCard = mediaClient.withMediaClient(cardModule.MediaInlineCard);
98
+ MediaInlineCardLoader.ErrorBoundary = mediaCardErrorBoundaryModule.default;
98
99
  this.setState({
99
- InlineMediaCard: InlineMediaCardLoader.InlineMediaCard,
100
- ErrorBoundary: InlineMediaCardLoader.ErrorBoundary
100
+ MediaInlineCard: MediaInlineCardLoader.MediaInlineCard,
101
+ ErrorBoundary: MediaInlineCardLoader.ErrorBoundary
101
102
  });
102
103
  _context.next = 16;
103
104
  break;
@@ -124,20 +125,20 @@ var InlineMediaCardLoader = /*#__PURE__*/function (_React$PureComponent) {
124
125
  key: "render",
125
126
  value: function render() {
126
127
  var _this$state = this.state,
127
- InlineMediaCard = _this$state.InlineMediaCard,
128
+ MediaInlineCard = _this$state.MediaInlineCard,
128
129
  ErrorBoundary = _this$state.ErrorBoundary;
129
130
 
130
- if (!InlineMediaCard || !ErrorBoundary) {
131
- return /*#__PURE__*/_react.default.createElement(_mediaUi.InlineCardResolvingView, {
132
- url: ""
131
+ if (!MediaInlineCard || !ErrorBoundary) {
132
+ return /*#__PURE__*/_react.default.createElement(_mediaUi.MediaInlineCardLoadingView, {
133
+ message: ""
133
134
  });
134
135
  }
135
136
 
136
- return /*#__PURE__*/_react.default.createElement(ErrorBoundary, null, /*#__PURE__*/_react.default.createElement(InlineMediaCard, this.props));
137
+ return /*#__PURE__*/_react.default.createElement(ErrorBoundary, null, /*#__PURE__*/_react.default.createElement(MediaInlineCard, this.props));
137
138
  }
138
139
  }]);
139
- return InlineMediaCardLoader;
140
+ return MediaInlineCardLoader;
140
141
  }(_react.default.PureComponent);
141
142
 
142
- exports.default = InlineMediaCardLoader;
143
- (0, _defineProperty2.default)(InlineMediaCardLoader, "displayName", 'InlineMediaCardLoader');
143
+ exports.default = MediaInlineCardLoader;
144
+ (0, _defineProperty2.default)(MediaInlineCardLoader, "displayName", 'MediaInlineCardLoader');
@@ -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.InlineMediaCard = exports.InlineMediaCardInternal = void 0;
10
+ exports.MediaInlineCard = exports.MediaInlineCardInternal = void 0;
11
11
 
12
12
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
13
 
@@ -23,12 +23,16 @@ var _mediaTypeIcon = require("@atlaskit/media-ui/media-type-icon");
23
23
 
24
24
  var _mediaViewer = require("@atlaskit/media-viewer");
25
25
 
26
+ var _tooltip = _interopRequireDefault(require("@atlaskit/tooltip"));
27
+
28
+ var _formatDate = require("@atlaskit/media-ui/formatDate");
29
+
26
30
  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); }
27
31
 
28
32
  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; }
29
33
 
30
34
  // UI component which renders an inline link in the appropiate state based on a media file
31
- var InlineMediaCardInternal = function InlineMediaCardInternal(_ref) {
35
+ var MediaInlineCardInternal = function MediaInlineCardInternal(_ref) {
32
36
  var mediaClient = _ref.mediaClient,
33
37
  identifier = _ref.identifier,
34
38
  shouldOpenMediaViewer = _ref.shouldOpenMediaViewer,
@@ -44,10 +48,15 @@ var InlineMediaCardInternal = function InlineMediaCardInternal(_ref) {
44
48
 
45
49
  var _useState3 = (0, _react.useState)(false),
46
50
  _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
47
- isMediaViewerVisible = _useState4[0],
48
- setMediaViewerVisible = _useState4[1];
51
+ isErrored = _useState4[0],
52
+ setIsErrored = _useState4[1];
49
53
 
50
- var onInlineCardClick = function onInlineCardClick(event) {
54
+ var _useState5 = (0, _react.useState)(false),
55
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
56
+ isMediaViewerVisible = _useState6[0],
57
+ setMediaViewerVisible = _useState6[1];
58
+
59
+ var onMediaInlineCardClick = function onMediaInlineCardClick(event) {
51
60
  if (shouldOpenMediaViewer) {
52
61
  setMediaViewerVisible(true);
53
62
  }
@@ -79,27 +88,50 @@ var InlineMediaCardInternal = function InlineMediaCardInternal(_ref) {
79
88
  };
80
89
 
81
90
  (0, _react.useEffect)(function () {
82
- // [EDM-1948] TODO: use mediaClient.file.getFileState()
83
- // [EDM-1948] TODO: handle error here
84
- mediaClient.file.getCurrentState(identifier.id, {
91
+ mediaClient.file.getFileState(identifier.id, {
85
92
  collectionName: identifier.collectionName
86
- }).then(function (fileState) {
87
- setFileState(fileState);
93
+ }).subscribe({
94
+ next: function next(fileState) {
95
+ setFileState(fileState);
96
+ },
97
+ error: function error() {
98
+ setIsErrored(true);
99
+ }
88
100
  });
89
101
  }, [identifier.collectionName, identifier.id, mediaClient.file]);
90
102
 
91
103
  if (!fileState) {
92
- return /*#__PURE__*/_react.default.createElement(_mediaUi.InlineCardResolvingView, {
93
- url: intl.formatMessage(_mediaUi.messages.loading_file),
94
- titleTextColor: "black",
95
- withoutHover: true
104
+ return /*#__PURE__*/_react.default.createElement(_mediaUi.MediaInlineCardLoadingView, {
105
+ message: intl.formatMessage(_mediaUi.messages.loading_file),
106
+ isSelected: isSelected
107
+ });
108
+ }
109
+
110
+ if (isErrored) {
111
+ return /*#__PURE__*/_react.default.createElement(_mediaUi.MediaInlineCardErroredView, {
112
+ message: intl.formatMessage(_mediaUi.messages.couldnt_load_file),
113
+ isSelected: isSelected
96
114
  });
97
115
  }
98
116
 
99
117
  if (fileState.status === 'error') {
100
- return /*#__PURE__*/_react.default.createElement(_mediaUi.InlineCardErroredView, {
101
- url: "",
102
- message: fileState.message || ''
118
+ return /*#__PURE__*/_react.default.createElement(_mediaUi.MediaInlineCardErroredView, {
119
+ message: fileState.message || '',
120
+ isSelected: isSelected
121
+ });
122
+ }
123
+
124
+ if (fileState.status === 'failed-processing') {
125
+ return /*#__PURE__*/_react.default.createElement(_mediaUi.MediaInlineCardErroredView, {
126
+ message: intl.formatMessage(_mediaUi.messages.couldnt_load_file),
127
+ isSelected: isSelected
128
+ });
129
+ }
130
+
131
+ if (fileState.status === 'uploading') {
132
+ return /*#__PURE__*/_react.default.createElement(_mediaUi.MediaInlineCardLoadingView, {
133
+ message: fileState.name,
134
+ isSelected: isSelected
103
135
  });
104
136
  }
105
137
 
@@ -107,21 +139,36 @@ var InlineMediaCardInternal = function InlineMediaCardInternal(_ref) {
107
139
  name = fileState.name;
108
140
 
109
141
  var linkIcon = /*#__PURE__*/_react.default.createElement(_mediaTypeIcon.MediaTypeIcon, {
110
- testId: 'inline-media-card-file-type-icon',
142
+ testId: 'media-inline-card-file-type-icon',
111
143
  size: "small",
112
144
  type: mediaType
113
145
  });
114
146
 
115
- var mediaViewer = renderMediaViewer(); // [EDM-1948] TODO: add Tooltip
147
+ var mediaViewer = renderMediaViewer();
148
+ var formattedDate;
149
+
150
+ if (fileState.createdAt) {
151
+ var _ref2 = intl || {
152
+ locale: 'en'
153
+ },
154
+ _ref2$locale = _ref2.locale,
155
+ locale = _ref2$locale === void 0 ? 'en' : _ref2$locale;
156
+
157
+ formattedDate = (0, _formatDate.formatDate)(fileState.createdAt, locale);
158
+ }
116
159
 
117
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_mediaUi.InlineCardResolvedView, {
160
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_tooltip.default, {
161
+ position: "bottom",
162
+ content: formattedDate,
163
+ tag: "span"
164
+ }, /*#__PURE__*/_react.default.createElement(_mediaUi.MediaInlineCardLoadedView, {
118
165
  icon: linkIcon,
119
166
  title: name,
120
- onClick: onInlineCardClick,
167
+ onClick: onMediaInlineCardClick,
121
168
  isSelected: isSelected
122
- }), mediaViewer);
169
+ })), mediaViewer);
123
170
  };
124
171
 
125
- exports.InlineMediaCardInternal = InlineMediaCardInternal;
126
- var InlineMediaCard = (0, _reactIntl.injectIntl)(InlineMediaCardInternal);
127
- exports.InlineMediaCard = InlineMediaCard;
172
+ exports.MediaInlineCardInternal = MediaInlineCardInternal;
173
+ var MediaInlineCard = (0, _reactIntl.injectIntl)(MediaInlineCardInternal);
174
+ exports.MediaInlineCard = MediaInlineCard;