@atlaskit/media-card 70.11.0 → 73.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/CHANGELOG.md +104 -0
  2. package/dist/cjs/errors.js +78 -5
  3. package/dist/cjs/files/cardImageView/cardOverlay/styled.js +1 -1
  4. package/dist/cjs/files/cardImageView/index.js +53 -104
  5. package/dist/cjs/files/cardImageView/styled.js +1 -1
  6. package/dist/cjs/files/index.js +0 -6
  7. package/dist/cjs/index.js +12 -6
  8. package/dist/cjs/root/card/cardAnalytics.js +11 -17
  9. package/dist/cjs/root/card/cardLoader.js +66 -124
  10. package/dist/cjs/root/card/cardState.js +50 -0
  11. package/dist/cjs/root/card/getCardPreview/cache.js +6 -1
  12. package/dist/cjs/root/card/getCardPreview/filePreviewStatus.js +53 -0
  13. package/dist/cjs/root/card/getCardPreview/helpers.js +14 -22
  14. package/dist/cjs/root/card/getCardPreview/index.js +176 -102
  15. package/dist/cjs/root/card/getCardStatus.js +7 -1
  16. package/dist/cjs/root/card/index.js +361 -281
  17. package/dist/cjs/root/cardView.js +109 -86
  18. package/dist/cjs/root/index.js +9 -1
  19. package/dist/cjs/root/inline/loader.js +22 -21
  20. package/dist/cjs/root/inline/{inlineMediaCard.js → mediaInlineCard.js} +84 -26
  21. package/dist/cjs/root/inlinePlayer.js +4 -3
  22. package/dist/cjs/root/styled.js +7 -3
  23. package/dist/cjs/root/ui/actionsBar/styled.js +1 -1
  24. package/dist/cjs/root/ui/blanket/styled.js +1 -1
  25. package/dist/cjs/root/ui/common.js +11 -5
  26. package/dist/cjs/root/ui/iconMessage/index.js +16 -7
  27. package/dist/cjs/root/ui/iconWrapper/styled.js +1 -1
  28. package/dist/cjs/root/ui/imageRenderer/imageRenderer.js +34 -124
  29. package/dist/cjs/root/ui/loadingRateLimited/loadingRateLimited.js +6 -4
  30. package/dist/cjs/root/ui/loadingRateLimited/styled.js +1 -1
  31. package/dist/cjs/root/ui/playButton/styled.js +1 -1
  32. package/dist/cjs/root/ui/progressBar/progressBar.js +2 -2
  33. package/dist/cjs/root/ui/progressBar/styled.js +2 -4
  34. package/dist/cjs/root/ui/styled.js +80 -17
  35. package/dist/cjs/root/ui/tickBox/styled.js +1 -1
  36. package/dist/cjs/root/ui/titleBox/failedTitleBox.js +9 -3
  37. package/dist/cjs/root/ui/titleBox/styled.js +2 -4
  38. package/dist/cjs/root/ui/titleBox/titleBox.js +2 -2
  39. package/dist/cjs/styles/index.js +25 -23
  40. package/dist/cjs/styles/mixins.js +1 -1
  41. package/dist/cjs/utils/analytics.js +21 -43
  42. package/dist/cjs/utils/breakpoint.js +1 -1
  43. package/dist/cjs/utils/cardActions/cardActionsDropdownMenu.js +16 -9
  44. package/dist/cjs/utils/cardActions/index.js +10 -10
  45. package/dist/cjs/utils/cardActions/styled.js +1 -1
  46. package/dist/cjs/utils/cardDimensions.js +1 -1
  47. package/dist/cjs/utils/dimensionComparer.js +1 -1
  48. package/dist/cjs/utils/getErrorMessage.js +2 -2
  49. package/dist/cjs/utils/index.js +46 -46
  50. package/dist/cjs/utils/lightCards/styled.js +1 -1
  51. package/dist/cjs/utils/metadata.js +11 -3
  52. package/dist/cjs/utils/objectURLCache.js +7 -1
  53. package/dist/cjs/utils/shouldDisplayImageThumbnail.js +1 -1
  54. package/dist/cjs/utils/viewportDetector.js +1 -1
  55. package/dist/cjs/version.json +1 -1
  56. package/dist/es2019/errors.js +42 -2
  57. package/dist/es2019/files/cardImageView/index.js +8 -61
  58. package/dist/es2019/files/index.js +1 -1
  59. package/dist/es2019/index.js +1 -1
  60. package/dist/es2019/root/card/cardAnalytics.js +7 -15
  61. package/dist/es2019/root/card/cardLoader.js +47 -53
  62. package/dist/es2019/root/card/cardState.js +26 -0
  63. package/dist/es2019/root/card/getCardPreview/cache.js +5 -0
  64. package/dist/es2019/root/card/getCardPreview/filePreviewStatus.js +38 -0
  65. package/dist/es2019/root/card/getCardPreview/helpers.js +2 -12
  66. package/dist/es2019/root/card/getCardPreview/index.js +112 -79
  67. package/dist/es2019/root/card/getCardStatus.js +1 -0
  68. package/dist/es2019/root/card/index.js +285 -190
  69. package/dist/es2019/root/cardView.js +93 -68
  70. package/dist/es2019/root/index.js +2 -1
  71. package/dist/es2019/root/inline/loader.js +16 -15
  72. package/dist/es2019/root/inline/mediaInlineCard.js +143 -0
  73. package/dist/es2019/root/inlinePlayer.js +3 -2
  74. package/dist/es2019/root/styled.js +2 -1
  75. package/dist/es2019/root/ui/common.js +7 -1
  76. package/dist/es2019/root/ui/iconMessage/index.js +8 -5
  77. package/dist/es2019/root/ui/imageRenderer/imageRenderer.js +25 -88
  78. package/dist/es2019/root/ui/loadingRateLimited/loadingRateLimited.js +4 -3
  79. package/dist/es2019/root/ui/progressBar/progressBar.js +1 -1
  80. package/dist/es2019/root/ui/progressBar/styled.js +1 -2
  81. package/dist/es2019/root/ui/styled.js +64 -3
  82. package/dist/es2019/root/ui/titleBox/failedTitleBox.js +6 -3
  83. package/dist/es2019/root/ui/titleBox/styled.js +1 -2
  84. package/dist/es2019/root/ui/titleBox/titleBox.js +1 -1
  85. package/dist/es2019/utils/analytics.js +15 -34
  86. package/dist/es2019/utils/cardActions/cardActionsDropdownMenu.js +8 -4
  87. package/dist/es2019/utils/dimensionComparer.js +1 -1
  88. package/dist/es2019/utils/getErrorMessage.js +1 -1
  89. package/dist/es2019/utils/metadata.js +12 -4
  90. package/dist/es2019/utils/objectURLCache.js +5 -0
  91. package/dist/es2019/utils/shouldDisplayImageThumbnail.js +1 -1
  92. package/dist/es2019/version.json +1 -1
  93. package/dist/esm/errors.js +60 -1
  94. package/dist/esm/files/cardImageView/index.js +51 -102
  95. package/dist/esm/files/index.js +1 -1
  96. package/dist/esm/index.js +1 -1
  97. package/dist/esm/root/card/cardAnalytics.js +7 -16
  98. package/dist/esm/root/card/cardLoader.js +66 -126
  99. package/dist/esm/root/card/cardState.js +32 -0
  100. package/dist/esm/root/card/getCardPreview/cache.js +6 -0
  101. package/dist/esm/root/card/getCardPreview/filePreviewStatus.js +38 -0
  102. package/dist/esm/root/card/getCardPreview/helpers.js +13 -21
  103. package/dist/esm/root/card/getCardPreview/index.js +142 -95
  104. package/dist/esm/root/card/getCardStatus.js +3 -0
  105. package/dist/esm/root/card/index.js +370 -284
  106. package/dist/esm/root/cardView.js +109 -84
  107. package/dist/esm/root/index.js +2 -1
  108. package/dist/esm/root/inline/loader.js +23 -22
  109. package/dist/esm/root/inline/mediaInlineCard.js +156 -0
  110. package/dist/esm/root/inlinePlayer.js +3 -2
  111. package/dist/esm/root/styled.js +3 -2
  112. package/dist/esm/root/ui/common.js +7 -1
  113. package/dist/esm/root/ui/iconMessage/index.js +10 -5
  114. package/dist/esm/root/ui/imageRenderer/imageRenderer.js +27 -118
  115. package/dist/esm/root/ui/loadingRateLimited/loadingRateLimited.js +4 -3
  116. package/dist/esm/root/ui/progressBar/progressBar.js +1 -1
  117. package/dist/esm/root/ui/progressBar/styled.js +1 -2
  118. package/dist/esm/root/ui/styled.js +61 -13
  119. package/dist/esm/root/ui/titleBox/failedTitleBox.js +7 -3
  120. package/dist/esm/root/ui/titleBox/styled.js +1 -2
  121. package/dist/esm/root/ui/titleBox/titleBox.js +1 -1
  122. package/dist/esm/utils/analytics.js +16 -35
  123. package/dist/esm/utils/cardActions/cardActionsDropdownMenu.js +16 -9
  124. package/dist/esm/utils/dimensionComparer.js +1 -1
  125. package/dist/esm/utils/getErrorMessage.js +1 -1
  126. package/dist/esm/utils/metadata.js +12 -4
  127. package/dist/esm/utils/objectURLCache.js +6 -0
  128. package/dist/esm/utils/shouldDisplayImageThumbnail.js +1 -1
  129. package/dist/esm/version.json +1 -1
  130. package/dist/types/errors.d.ts +15 -1
  131. package/dist/types/files/cardImageView/index.d.ts +4 -13
  132. package/dist/types/files/cardImageView/styled.d.ts +1 -1
  133. package/dist/types/files/index.d.ts +1 -1
  134. package/dist/types/index.d.ts +7 -5
  135. package/dist/types/root/card/cardAnalytics.d.ts +2 -6
  136. package/dist/types/root/card/cardLoader.d.ts +5 -19
  137. package/dist/types/root/card/cardState.d.ts +5 -0
  138. package/dist/types/root/card/getCardPreview/cache.d.ts +3 -1
  139. package/dist/types/root/card/getCardPreview/filePreviewStatus.d.ts +5 -0
  140. package/dist/types/root/card/getCardPreview/helpers.d.ts +3 -4
  141. package/dist/types/root/card/getCardPreview/index.d.ts +24 -14
  142. package/dist/types/root/card/getCardStatus.d.ts +1 -0
  143. package/dist/types/root/card/index.d.ts +19 -18
  144. package/dist/types/root/cardView.d.ts +13 -8
  145. package/dist/types/root/index.d.ts +1 -0
  146. package/dist/types/root/inline/loader.d.ts +8 -8
  147. package/dist/types/root/inline/{inlineMediaCard.d.ts → mediaInlineCard.d.ts} +4 -6
  148. package/dist/types/root/inlinePlayer.d.ts +1 -1
  149. package/dist/types/root/styled.d.ts +1 -0
  150. package/dist/types/root/ui/common.d.ts +4 -1
  151. package/dist/types/root/ui/iconMessage/index.d.ts +4 -3
  152. package/dist/types/root/ui/iconWrapper/styled.d.ts +1 -1
  153. package/dist/types/root/ui/imageRenderer/imageRenderer.d.ts +5 -15
  154. package/dist/types/root/ui/loadingRateLimited/loadingRateLimited.d.ts +2 -1
  155. package/dist/types/root/ui/loadingRateLimited/styled.d.ts +1 -1
  156. package/dist/types/root/ui/playButton/playButton.d.ts +1 -0
  157. package/dist/types/root/ui/progressBar/progressBar.d.ts +2 -1
  158. package/dist/types/root/ui/progressBar/styled.d.ts +1 -1
  159. package/dist/types/root/ui/styled.d.ts +10 -3
  160. package/dist/types/root/ui/tickBox/tickBox.d.ts +1 -0
  161. package/dist/types/root/ui/titleBox/failedTitleBox.d.ts +3 -1
  162. package/dist/types/root/ui/titleBox/styled.d.ts +1 -1
  163. package/dist/types/root/ui/titleBox/titleBox.d.ts +2 -10
  164. package/dist/types/styles/mixins.d.ts +1 -1
  165. package/dist/types/types.d.ts +7 -1
  166. package/dist/types/utils/analytics.d.ts +14 -15
  167. package/dist/types/utils/cardDimensions.d.ts +4 -4
  168. package/dist/types/utils/dimensionComparer.d.ts +1 -1
  169. package/dist/types/utils/getErrorMessage.d.ts +1 -0
  170. package/dist/types/utils/metadata.d.ts +2 -2
  171. package/dist/types/utils/objectURLCache.d.ts +2 -1
  172. package/example-helpers/developmentUseMessage.tsx +14 -0
  173. package/example-helpers/index.tsx +55 -4
  174. package/example-helpers/selectableCard.tsx +2 -1
  175. package/package.json +20 -16
  176. package/dist/cjs/root/card/cardSSRView.js +0 -99
  177. package/dist/cjs/root/card/getCardPreview/types.js +0 -5
  178. package/dist/cjs/root/ui/Breakpoint.js +0 -13
  179. package/dist/cjs/root/ui/styledSSR.js +0 -108
  180. package/dist/cjs/utils/fileAttributesContext.js +0 -40
  181. package/dist/es2019/root/card/cardSSRView.js +0 -79
  182. package/dist/es2019/root/card/getCardPreview/types.js +0 -1
  183. package/dist/es2019/root/inline/inlineMediaCard.js +0 -92
  184. package/dist/es2019/root/ui/Breakpoint.js +0 -6
  185. package/dist/es2019/root/ui/styledSSR.js +0 -93
  186. package/dist/es2019/utils/fileAttributesContext.js +0 -19
  187. package/dist/esm/root/card/cardSSRView.js +0 -78
  188. package/dist/esm/root/card/getCardPreview/types.js +0 -1
  189. package/dist/esm/root/inline/inlineMediaCard.js +0 -100
  190. package/dist/esm/root/ui/Breakpoint.js +0 -6
  191. package/dist/esm/root/ui/styledSSR.js +0 -76
  192. package/dist/esm/utils/fileAttributesContext.js +0 -18
  193. package/dist/types/root/card/cardSSRView.d.ts +0 -12
  194. package/dist/types/root/card/getCardPreview/types.d.ts +0 -5
  195. package/dist/types/root/ui/Breakpoint.d.ts +0 -4
  196. package/dist/types/root/ui/styledSSR.d.ts +0 -16
  197. package/dist/types/utils/fileAttributesContext.d.ts +0 -10
@@ -27,9 +27,8 @@ import { Wrapper } from './styled';
27
27
  import { createAndFireMediaCardEvent } from '../utils/analytics';
28
28
  import { attachDetailsToActions } from '../actions';
29
29
  import { getErrorMessage } from '../utils/getErrorMessage';
30
- import { toHumanReadableMediaSize } from '@atlaskit/media-ui';
31
- import { NewFileExperienceWrapper } from './ui/styled';
32
- import { CardImageContainer, calcBreakpointSize } from './ui/styledSSR';
30
+ import { toHumanReadableMediaSize, messages } from '@atlaskit/media-ui';
31
+ import { NewFileExperienceWrapper, CardImageContainer, calcBreakpointSize } from './ui/styled';
33
32
  import { ImageRenderer } from './ui/imageRenderer/imageRenderer';
34
33
  import { TitleBox } from './ui/titleBox/titleBox';
35
34
  import { FailedTitleBox } from './ui/titleBox/failedTitleBox';
@@ -42,10 +41,10 @@ import Tooltip from '@atlaskit/tooltip';
42
41
  import { IconWrapper } from './ui/iconWrapper/styled';
43
42
  import { MimeTypeIcon } from '@atlaskit/media-ui/mime-type-icon';
44
43
  import SpinnerIcon from '@atlaskit/spinner';
45
- import { PreviewUnavailable, CreatingPreview, RateLimited, PreviewCurrentlyUnavailable } from './ui/iconMessage';
46
- import { LoadingRateLimited } from './ui/loadingRateLimited/loadingRateLimited';
44
+ import { PreviewUnavailable, CreatingPreview, FailedToUpload, PreviewCurrentlyUnavailable, FailedToLoad } from './ui/iconMessage';
47
45
  import { isRateLimitedError, isPollingError } from '@atlaskit/media-client';
48
46
  import { newFileExperienceClassName } from './card/cardConstants';
47
+ import { isUploadError } from '../errors';
49
48
 
50
49
  /**
51
50
  * This is classic vanilla CardView class. To create an instance of class one would need to supply
@@ -68,15 +67,36 @@ export var CardViewBase = /*#__PURE__*/function (_React$Component) {
68
67
  _this = _super.call.apply(_super, [this].concat(args));
69
68
 
70
69
  _defineProperty(_assertThisInitialized(_this), "state", {
71
- isImageFailedToLoad: false
70
+ didImageRender: false
72
71
  });
73
72
 
74
73
  _defineProperty(_assertThisInitialized(_this), "divRef", /*#__PURE__*/React.createRef());
75
74
 
76
- _defineProperty(_assertThisInitialized(_this), "onImageLoadError", function () {
75
+ _defineProperty(_assertThisInitialized(_this), "onImageLoad", function () {
76
+ var onImageLoad = _this.props.onImageLoad; // We render the icon & icon message always, even if there is dataURI available.
77
+ // If the image fails to load/render, the icon will remain, i.e. the user won't see a change until
78
+ // the root card decides to chage status to error.
79
+ // If the image renders successfully, we switch this variable to hide the icon & icon message
80
+ // behind the thumbnail in case the image has transparency.
81
+ // It is less likely that root component replaces a suceeded dataURI for a failed one
82
+ // than the opposite case. Therefore we prefer to hide the icon instead show when the image fails,
83
+ // for a smoother transition
84
+
77
85
  _this.setState({
78
- isImageFailedToLoad: true
86
+ didImageRender: true
79
87
  });
88
+
89
+ onImageLoad && onImageLoad();
90
+ });
91
+
92
+ _defineProperty(_assertThisInitialized(_this), "onImageError", function () {
93
+ var onImageError = _this.props.onImageError;
94
+
95
+ _this.setState({
96
+ didImageRender: false
97
+ });
98
+
99
+ onImageError && onImageError();
80
100
  });
81
101
 
82
102
  _defineProperty(_assertThisInitialized(_this), "saveElementWidth", function () {
@@ -115,13 +135,11 @@ export var CardViewBase = /*#__PURE__*/function (_React$Component) {
115
135
  name = _ref.name;
116
136
 
117
137
  var shouldUsePointerCursor = status !== 'error' && status !== 'failed-processing';
118
- var shouldDisplayBackground = !dataURI || !disableOverlay;
138
+ var shouldDisplayBackground = !dataURI || !disableOverlay || status === 'error' || status === 'failed-processing';
119
139
  var isPlayButtonClickable = !!(_this.shouldRenderPlayButton() && disableOverlay);
120
- var isTickBoxSelectable = !disableOverlay && !!selectable && !selected; // Make tooltip optional for media singles - images, videos.
121
- // Intention is to show full file name when it's truncate in titlebox,
122
- // and to hide it when no titlebox exists.
140
+ var isTickBoxSelectable = !disableOverlay && !!selectable && !selected; // Disable tooltip for Media Single
123
141
 
124
- var shouldDisplayTooltip = !!name && !disableOverlay;
142
+ var shouldDisplayTooltip = !disableOverlay;
125
143
  return /*#__PURE__*/React.createElement(NewFileExperienceWrapper, {
126
144
  className: newFileExperienceClassName,
127
145
  "data-testid": testId || 'media-card-view',
@@ -160,8 +178,7 @@ export var CardViewBase = /*#__PURE__*/function (_React$Component) {
160
178
  previewOrientation = _this$props2.previewOrientation,
161
179
  alt = _this$props2.alt,
162
180
  onDisplayImage = _this$props2.onDisplayImage,
163
- actions = _this$props2.actions,
164
- timeElapsedTillCommenced = _this$props2.timeElapsedTillCommenced;
181
+ actions = _this$props2.actions;
165
182
 
166
183
  var _ref2 = metadata || {},
167
184
  name = _ref2.name,
@@ -191,7 +208,8 @@ export var CardViewBase = /*#__PURE__*/function (_React$Component) {
191
208
  disableOverlay: disableOverlay,
192
209
  previewOrientation: previewOrientation,
193
210
  alt: alt,
194
- timeElapsedTillCommenced: timeElapsedTillCommenced
211
+ onImageLoad: _this.onImageLoad,
212
+ onImageError: _this.onImageError
195
213
  });
196
214
  });
197
215
 
@@ -209,15 +227,14 @@ export var CardViewBase = /*#__PURE__*/function (_React$Component) {
209
227
  name = _ref3.name,
210
228
  mediaType = _ref3.mediaType;
211
229
 
212
- var isImageFailedToLoad = _this.state.isImageFailedToLoad;
230
+ var didImageRender = _this.state.didImageRender;
213
231
  var isZeroSize = !!(metadata && metadata.size === 0);
214
232
  var defaultConfig = {
215
- renderTypeIcon: isImageFailedToLoad || !dataURI,
216
- renderImageRenderer: !!dataURI && !isImageFailedToLoad,
233
+ renderTypeIcon: !didImageRender,
234
+ renderImageRenderer: !!dataURI,
217
235
  renderPlayButton: !!dataURI && mediaType === 'video',
218
236
  renderBlanket: !disableOverlay,
219
- renderTitleBox: !!name && !disableOverlay,
220
- renderFailedTitleBox: !!isImageFailedToLoad && !metadata,
237
+ renderTitleBox: !disableOverlay && !!name,
221
238
  renderTickBox: !disableOverlay && !!selectable
222
239
  };
223
240
 
@@ -232,55 +249,60 @@ export var CardViewBase = /*#__PURE__*/function (_React$Component) {
232
249
  case 'processing':
233
250
  case 'loading-preview':
234
251
  return _objectSpread(_objectSpread({}, defaultConfig), {}, {
235
- iconMessage: (isImageFailedToLoad || !dataURI) && !isZeroSize ? /*#__PURE__*/React.createElement(CreatingPreview, {
252
+ iconMessage: !didImageRender && !isZeroSize ? /*#__PURE__*/React.createElement(CreatingPreview, {
236
253
  disableAnimation: disableAnimation
237
254
  }) : undefined
238
255
  });
239
256
 
240
257
  case 'complete':
241
- return _objectSpread(_objectSpread({}, defaultConfig), {}, {
242
- iconMessage: !!isImageFailedToLoad && !!metadata ? /*#__PURE__*/React.createElement(PreviewUnavailable, null) : undefined
243
- });
258
+ return defaultConfig;
244
259
 
245
260
  case 'error':
246
- if (error && isPollingError(error)) {
247
- return _objectSpread(_objectSpread({}, defaultConfig), {}, {
248
- renderTypeIcon: true,
249
- renderImageRenderer: false,
250
- renderTitleBox: !!name,
251
- renderFailedTitleBox: false,
252
- iconMessage: !!metadata && !isZeroSize ? /*#__PURE__*/React.createElement(PreviewCurrentlyUnavailable, null) : undefined
253
- });
254
- } else if (isRateLimitedError(error) && !disableOverlay) {
255
- return {
256
- renderTypeIcon: !!metadata,
257
- renderTitleBox: !!metadata,
258
- iconMessage: !!metadata ? /*#__PURE__*/React.createElement(RateLimited, null) : undefined,
259
- renderLoadingRateLimited: !metadata
260
- };
261
+ case 'failed-processing':
262
+ var baseErrorConfig = _objectSpread(_objectSpread({}, defaultConfig), {}, {
263
+ renderTypeIcon: true,
264
+ renderImageRenderer: false,
265
+ renderTitleBox: false,
266
+ renderPlayButton: false
267
+ });
268
+
269
+ var iconMessage;
270
+ var customTitleMessage;
271
+
272
+ var _ref4 = error || {},
273
+ secondaryError = _ref4.secondaryError;
274
+
275
+ if (isRateLimitedError(secondaryError) || isPollingError(secondaryError)) {
276
+ iconMessage = /*#__PURE__*/React.createElement(PreviewCurrentlyUnavailable, null);
277
+ } else if (isUploadError(error)) {
278
+ iconMessage = /*#__PURE__*/React.createElement(FailedToUpload, null);
279
+ customTitleMessage = messages.failed_to_upload;
280
+ } else if (!metadata) {
281
+ iconMessage = /*#__PURE__*/React.createElement(FailedToLoad, null);
261
282
  } else {
262
- return _objectSpread(_objectSpread({}, defaultConfig), {}, {
263
- renderTypeIcon: true,
264
- renderImageRenderer: false,
265
- renderTitleBox: false,
266
- renderFailedTitleBox: true
283
+ iconMessage = /*#__PURE__*/React.createElement(PreviewUnavailable, null);
284
+ }
285
+
286
+ if (!disableOverlay) {
287
+ var renderFailedTitleBox = !name || !!customTitleMessage;
288
+ return _objectSpread(_objectSpread({}, baseErrorConfig), {}, {
289
+ renderTitleBox: !!name && !customTitleMessage,
290
+ renderFailedTitleBox: renderFailedTitleBox,
291
+ iconMessage: !renderFailedTitleBox ? iconMessage : undefined,
292
+ customTitleMessage: customTitleMessage
267
293
  });
268
294
  }
269
295
 
270
- case 'failed-processing':
271
- return _objectSpread(_objectSpread({}, defaultConfig), {}, {
272
- renderTypeIcon: true,
273
- renderImageRenderer: false,
274
- renderTitleBox: !!name && !disableOverlay,
275
- renderFailedTitleBox: !metadata,
276
- iconMessage: !!metadata && !isZeroSize ? /*#__PURE__*/React.createElement(PreviewUnavailable, null) : undefined
296
+ return _objectSpread(_objectSpread({}, baseErrorConfig), {}, {
297
+ iconMessage: iconMessage
277
298
  });
278
299
 
279
300
  case 'loading':
280
301
  default:
281
302
  return _objectSpread(_objectSpread({}, defaultConfig), {}, {
303
+ renderPlayButton: false,
282
304
  renderTypeIcon: false,
283
- renderSpinner: true
305
+ renderSpinner: !didImageRender
284
306
  });
285
307
  }
286
308
  });
@@ -298,7 +320,7 @@ export var CardViewBase = /*#__PURE__*/function (_React$Component) {
298
320
  renderFailedTitleBox = _this$getRenderConfig.renderFailedTitleBox,
299
321
  renderTickBox = _this$getRenderConfig.renderTickBox,
300
322
  isFixedBlanket = _this$getRenderConfig.isFixedBlanket,
301
- renderLoadingRateLimited = _this$getRenderConfig.renderLoadingRateLimited;
323
+ customTitleMessage = _this$getRenderConfig.customTitleMessage;
302
324
 
303
325
  var _this$props4 = _this.props,
304
326
  progress = _this$props4.progress,
@@ -306,8 +328,8 @@ export var CardViewBase = /*#__PURE__*/function (_React$Component) {
306
328
  status = _this$props4.status,
307
329
  metadata = _this$props4.metadata;
308
330
 
309
- var _ref4 = metadata || {},
310
- name = _ref4.name;
331
+ var _ref5 = metadata || {},
332
+ name = _ref5.name;
311
333
 
312
334
  var hasTitleBox = !!renderTitleBox || !!renderFailedTitleBox;
313
335
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(CardImageContainer, {
@@ -317,7 +339,7 @@ export var CardViewBase = /*#__PURE__*/function (_React$Component) {
317
339
  "data-test-status": status,
318
340
  "data-test-progress": progress,
319
341
  "data-test-selected": selected ? true : undefined
320
- }, 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(!hasTitleBox), renderLoadingRateLimited && /*#__PURE__*/React.createElement(LoadingRateLimited, null), renderTickBox && _this.renderTickBox()), _this.renderActionsBar());
342
+ }, 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());
321
343
  });
322
344
 
323
345
  return _this;
@@ -332,15 +354,16 @@ export var CardViewBase = /*#__PURE__*/function (_React$Component) {
332
354
  }
333
355
  }, {
334
356
  key: "componentDidUpdate",
335
- value: function componentDidUpdate(_ref5) {
336
- var prevDataURI = _ref5.dataURI;
337
- var dataURI = this.props.dataURI;
338
-
339
- if (prevDataURI !== dataURI) {
340
- this.setState({
341
- isImageFailedToLoad: false
342
- });
343
- }
357
+ value: function componentDidUpdate(_ref6) {
358
+ var prevDataURI = _ref6.dataURI;
359
+ var dataURI = this.props.dataURI; // We should only switch didImageRender to false
360
+ // when dataURI goes undefined, not when it is updated.
361
+ // as this method could be triggered after onImageLoad callback,
362
+ // falling on a race condition
363
+
364
+ prevDataURI && !dataURI && this.setState({
365
+ didImageRender: false
366
+ });
344
367
  }
345
368
  }, {
346
369
  key: "width",
@@ -353,10 +376,10 @@ export var CardViewBase = /*#__PURE__*/function (_React$Component) {
353
376
  return elementWidth;
354
377
  }
355
378
 
356
- var _ref6 = this.props.dimensions || {
379
+ var _ref7 = this.props.dimensions || {
357
380
  width: undefined
358
381
  },
359
- width = _ref6.width;
382
+ width = _ref7.width;
360
383
 
361
384
  if (!width) {
362
385
  return defaultImageCardDimensions.width;
@@ -413,8 +436,8 @@ export var CardViewBase = /*#__PURE__*/function (_React$Component) {
413
436
  metadata = _this$props6.metadata,
414
437
  dataURI = _this$props6.dataURI;
415
438
 
416
- var _ref7 = metadata || {},
417
- mediaType = _ref7.mediaType;
439
+ var _ref8 = metadata || {},
440
+ mediaType = _ref8.mediaType;
418
441
 
419
442
  if (mediaType !== 'video' || !dataURI) {
420
443
  return false;
@@ -447,9 +470,9 @@ export var CardViewBase = /*#__PURE__*/function (_React$Component) {
447
470
  titleBoxBgColor = _this$props7.titleBoxBgColor,
448
471
  titleBoxIcon = _this$props7.titleBoxIcon;
449
472
 
450
- var _ref8 = metadata || {},
451
- name = _ref8.name,
452
- createdAt = _ref8.createdAt;
473
+ var _ref9 = metadata || {},
474
+ name = _ref9.name,
475
+ createdAt = _ref9.createdAt;
453
476
 
454
477
  return !!name && /*#__PURE__*/React.createElement(TitleBox, {
455
478
  name: name,
@@ -461,9 +484,10 @@ export var CardViewBase = /*#__PURE__*/function (_React$Component) {
461
484
  }
462
485
  }, {
463
486
  key: "renderFailedTitleBox",
464
- value: function renderFailedTitleBox() {
487
+ value: function renderFailedTitleBox(customMessage) {
465
488
  return /*#__PURE__*/React.createElement(FailedTitleBox, {
466
- breakpoint: this.breakpoint
489
+ breakpoint: this.breakpoint,
490
+ customMessage: customMessage
467
491
  });
468
492
  }
469
493
  }, {
@@ -489,18 +513,19 @@ export var CardViewBase = /*#__PURE__*/function (_React$Component) {
489
513
  alt = _this$props8.alt,
490
514
  resizeMode = _this$props8.resizeMode,
491
515
  onDisplayImage = _this$props8.onDisplayImage,
492
- mediaItemType = _this$props8.mediaItemType,
493
- timeElapsedTillCommenced = _this$props8.timeElapsedTillCommenced;
516
+ nativeLazyLoad = _this$props8.nativeLazyLoad,
517
+ forceSyncDisplay = _this$props8.forceSyncDisplay;
494
518
  return !!dataURI && /*#__PURE__*/React.createElement(ImageRenderer, {
495
519
  dataURI: dataURI,
496
520
  mediaType: mediaType,
497
- mediaItemType: mediaItemType,
498
521
  previewOrientation: previewOrientation,
499
522
  alt: alt,
500
523
  resizeMode: resizeMode,
501
524
  onDisplayImage: onDisplayImage,
502
- onImageError: this.onImageLoadError,
503
- timeElapsedTillCommenced: timeElapsedTillCommenced
525
+ onImageLoad: this.onImageLoad,
526
+ onImageError: this.onImageError,
527
+ nativeLazyLoad: nativeLazyLoad,
528
+ forceSyncDisplay: forceSyncDisplay
504
529
  });
505
530
  }
506
531
  }, {
@@ -516,10 +541,10 @@ export var CardViewBase = /*#__PURE__*/function (_React$Component) {
516
541
  value: function renderMediaTypeIcon(hasTitleBox, iconMessage) {
517
542
  var metadata = this.props.metadata;
518
543
 
519
- var _ref9 = metadata || {},
520
- mediaType = _ref9.mediaType,
521
- mimeType = _ref9.mimeType,
522
- name = _ref9.name;
544
+ var _ref10 = metadata || {},
545
+ mediaType = _ref10.mediaType,
546
+ mimeType = _ref10.mimeType,
547
+ name = _ref10.name;
523
548
 
524
549
  return /*#__PURE__*/React.createElement(IconWrapper, {
525
550
  breakpoint: this.breakpoint,
@@ -1 +1,2 @@
1
- export { default as Card } from './card/cardLoader';
1
+ export { default as Card } from './card/cardLoader';
2
+ export { default as MediaInlineCard } from './inline/loader';
@@ -14,17 +14,17 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
14
14
  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; } }
15
15
 
16
16
  import React from 'react';
17
- import { InlineCardResolvingView } from '@atlaskit/media-ui';
17
+ import { MediaInlineCardLoadingView } from '@atlaskit/media-ui';
18
18
 
19
- var InlineMediaCardLoader = /*#__PURE__*/function (_React$PureComponent) {
20
- _inherits(InlineMediaCardLoader, _React$PureComponent);
19
+ var MediaInlineCardLoader = /*#__PURE__*/function (_React$PureComponent) {
20
+ _inherits(MediaInlineCardLoader, _React$PureComponent);
21
21
 
22
- var _super = _createSuper(InlineMediaCardLoader);
22
+ var _super = _createSuper(MediaInlineCardLoader);
23
23
 
24
- function InlineMediaCardLoader() {
24
+ function MediaInlineCardLoader() {
25
25
  var _this;
26
26
 
27
- _classCallCheck(this, InlineMediaCardLoader);
27
+ _classCallCheck(this, MediaInlineCardLoader);
28
28
 
29
29
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
30
30
  args[_key] = arguments[_key];
@@ -33,13 +33,14 @@ var InlineMediaCardLoader = /*#__PURE__*/function (_React$PureComponent) {
33
33
  _this = _super.call.apply(_super, [this].concat(args));
34
34
 
35
35
  _defineProperty(_assertThisInitialized(_this), "state", {
36
- InlineMediaCard: InlineMediaCardLoader.InlineMediaCard
36
+ MediaInlineCard: MediaInlineCardLoader.MediaInlineCard,
37
+ ErrorBoundary: MediaInlineCardLoader.ErrorBoundary
37
38
  });
38
39
 
39
40
  return _this;
40
41
  }
41
42
 
42
- _createClass(InlineMediaCardLoader, [{
43
+ _createClass(MediaInlineCardLoader, [{
43
44
  key: "componentDidMount",
44
45
  value: function () {
45
46
  var _componentDidMount = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
@@ -49,7 +50,7 @@ var InlineMediaCardLoader = /*#__PURE__*/function (_React$PureComponent) {
49
50
  while (1) {
50
51
  switch (_context.prev = _context.next) {
51
52
  case 0:
52
- if (this.state.InlineMediaCard) {
53
+ if (this.state.MediaInlineCard) {
53
54
  _context.next = 16;
54
55
  break;
55
56
  }
@@ -60,7 +61,7 @@ var InlineMediaCardLoader = /*#__PURE__*/function (_React$PureComponent) {
60
61
  /* webpackChunkName: "@atlaskit-internal_media-client" */
61
62
  '@atlaskit/media-client'), import(
62
63
  /* webpackChunkName: "@atlaskit-internal_inline-media-card" */
63
- './inlineMediaCard'), import(
64
+ './mediaInlineCard'), import(
64
65
  /* webpackChunkName: "@atlaskit-internal_media-card-error-boundary" */
65
66
  '../media-card-analytics-error-boundary')]);
66
67
 
@@ -70,11 +71,11 @@ var InlineMediaCardLoader = /*#__PURE__*/function (_React$PureComponent) {
70
71
  mediaClient = _yield$Promise$all2[0];
71
72
  cardModule = _yield$Promise$all2[1];
72
73
  mediaCardErrorBoundaryModule = _yield$Promise$all2[2];
73
- InlineMediaCardLoader.InlineMediaCard = mediaClient.withMediaClient(cardModule.InlineMediaCard);
74
- InlineMediaCardLoader.ErrorBoundary = mediaCardErrorBoundaryModule.default;
74
+ MediaInlineCardLoader.MediaInlineCard = mediaClient.withMediaClient(cardModule.MediaInlineCard);
75
+ MediaInlineCardLoader.ErrorBoundary = mediaCardErrorBoundaryModule.default;
75
76
  this.setState({
76
- InlineMediaCard: InlineMediaCardLoader.InlineMediaCard,
77
- ErrorBoundary: InlineMediaCardLoader.ErrorBoundary
77
+ MediaInlineCard: MediaInlineCardLoader.MediaInlineCard,
78
+ ErrorBoundary: MediaInlineCardLoader.ErrorBoundary
78
79
  });
79
80
  _context.next = 16;
80
81
  break;
@@ -101,22 +102,22 @@ var InlineMediaCardLoader = /*#__PURE__*/function (_React$PureComponent) {
101
102
  key: "render",
102
103
  value: function render() {
103
104
  var _this$state = this.state,
104
- InlineMediaCard = _this$state.InlineMediaCard,
105
+ MediaInlineCard = _this$state.MediaInlineCard,
105
106
  ErrorBoundary = _this$state.ErrorBoundary;
106
107
 
107
- if (!InlineMediaCard || !ErrorBoundary) {
108
- return /*#__PURE__*/React.createElement(InlineCardResolvingView, {
109
- url: ""
108
+ if (!MediaInlineCard || !ErrorBoundary) {
109
+ return /*#__PURE__*/React.createElement(MediaInlineCardLoadingView, {
110
+ message: ""
110
111
  });
111
112
  }
112
113
 
113
- return /*#__PURE__*/React.createElement(ErrorBoundary, null, /*#__PURE__*/React.createElement(InlineMediaCard, this.props));
114
+ return /*#__PURE__*/React.createElement(ErrorBoundary, null, /*#__PURE__*/React.createElement(MediaInlineCard, this.props));
114
115
  }
115
116
  }]);
116
117
 
117
- return InlineMediaCardLoader;
118
+ return MediaInlineCardLoader;
118
119
  }(React.PureComponent);
119
120
 
120
- _defineProperty(InlineMediaCardLoader, "displayName", 'InlineMediaCardLoader');
121
+ _defineProperty(MediaInlineCardLoader, "displayName", 'MediaInlineCardLoader');
121
122
 
122
- export { InlineMediaCardLoader as default };
123
+ export { MediaInlineCardLoader as default };
@@ -0,0 +1,156 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
+ import React, { useState, useEffect } from 'react';
3
+ import ReactDOM from 'react-dom';
4
+ import { injectIntl, IntlProvider, createIntl } from 'react-intl-next';
5
+ import { MediaInlineCardLoadedView, MediaInlineCardLoadingView, MediaInlineCardErroredView, messages } from '@atlaskit/media-ui';
6
+ import { MediaTypeIcon } from '@atlaskit/media-ui/media-type-icon';
7
+ import { MediaViewer } from '@atlaskit/media-viewer';
8
+ import Tooltip from '@atlaskit/tooltip';
9
+ import { formatDate } from '@atlaskit/media-ui/formatDate';
10
+ // UI component which renders an inline link in the appropiate state based on a media file
11
+ export var MediaInlineCardInternal = function MediaInlineCardInternal(_ref) {
12
+ var mediaClient = _ref.mediaClient,
13
+ identifier = _ref.identifier,
14
+ shouldOpenMediaViewer = _ref.shouldOpenMediaViewer,
15
+ isSelected = _ref.isSelected,
16
+ onClick = _ref.onClick,
17
+ mediaViewerDataSource = _ref.mediaViewerDataSource,
18
+ intl = _ref.intl;
19
+
20
+ var _useState = useState(),
21
+ _useState2 = _slicedToArray(_useState, 2),
22
+ fileState = _useState2[0],
23
+ setFileState = _useState2[1];
24
+
25
+ var _useState3 = useState(false),
26
+ _useState4 = _slicedToArray(_useState3, 2),
27
+ isErrored = _useState4[0],
28
+ setIsErrored = _useState4[1];
29
+
30
+ var _useState5 = useState(false),
31
+ _useState6 = _slicedToArray(_useState5, 2),
32
+ isMediaViewerVisible = _useState6[0],
33
+ setMediaViewerVisible = _useState6[1];
34
+
35
+ var onMediaInlineCardClick = function onMediaInlineCardClick(event) {
36
+ if (shouldOpenMediaViewer) {
37
+ setMediaViewerVisible(true);
38
+ }
39
+
40
+ if (onClick) {
41
+ onClick(event);
42
+ }
43
+ };
44
+
45
+ var onMediaViewerClose = function onMediaViewerClose() {
46
+ return setMediaViewerVisible(false);
47
+ };
48
+
49
+ var renderMediaViewer = function renderMediaViewer() {
50
+ if (isMediaViewerVisible) {
51
+ var dataSource = mediaViewerDataSource || {
52
+ list: []
53
+ };
54
+ return /*#__PURE__*/ReactDOM.createPortal( /*#__PURE__*/React.createElement(MediaViewer, {
55
+ collectionName: identifier.collectionName || '',
56
+ dataSource: dataSource,
57
+ mediaClientConfig: mediaClient.mediaClientConfig,
58
+ selectedItem: identifier,
59
+ onClose: onMediaViewerClose
60
+ }), document.body);
61
+ }
62
+
63
+ return null;
64
+ };
65
+
66
+ var renderContent = function renderContent(children) {
67
+ return intl ? children : /*#__PURE__*/React.createElement(IntlProvider, {
68
+ locale: "en"
69
+ }, children);
70
+ };
71
+
72
+ var defaultIntl = createIntl({
73
+ locale: 'en'
74
+ });
75
+ useEffect(function () {
76
+ mediaClient.file.getFileState(identifier.id, {
77
+ collectionName: identifier.collectionName
78
+ }).subscribe({
79
+ next: function next(fileState) {
80
+ setFileState(fileState);
81
+ },
82
+ error: function error() {
83
+ setIsErrored(true);
84
+ }
85
+ });
86
+ }, [identifier.collectionName, identifier.id, mediaClient.file]);
87
+
88
+ if (!fileState) {
89
+ return /*#__PURE__*/React.createElement(MediaInlineCardLoadingView, {
90
+ message: (intl || defaultIntl).formatMessage(messages.loading_file),
91
+ isSelected: isSelected
92
+ });
93
+ }
94
+
95
+ if (isErrored) {
96
+ return /*#__PURE__*/React.createElement(MediaInlineCardErroredView, {
97
+ message: (intl || defaultIntl).formatMessage(messages.couldnt_load_file),
98
+ isSelected: isSelected
99
+ });
100
+ }
101
+
102
+ if (fileState.status === 'error') {
103
+ return /*#__PURE__*/React.createElement(MediaInlineCardErroredView, {
104
+ message: fileState.message || '',
105
+ isSelected: isSelected
106
+ });
107
+ }
108
+
109
+ if (fileState.status === 'failed-processing') {
110
+ return /*#__PURE__*/React.createElement(MediaInlineCardErroredView, {
111
+ message: (intl || defaultIntl).formatMessage(messages.couldnt_load_file),
112
+ isSelected: isSelected
113
+ });
114
+ }
115
+
116
+ if (fileState.status === 'uploading') {
117
+ return /*#__PURE__*/React.createElement(MediaInlineCardLoadingView, {
118
+ message: fileState.name,
119
+ isSelected: isSelected
120
+ });
121
+ }
122
+
123
+ var mediaType = fileState.mediaType,
124
+ name = fileState.name;
125
+ var linkIcon = /*#__PURE__*/React.createElement(MediaTypeIcon, {
126
+ testId: 'media-inline-card-file-type-icon',
127
+ size: "small",
128
+ type: mediaType
129
+ });
130
+ var mediaViewer = renderMediaViewer();
131
+ var formattedDate;
132
+
133
+ if (fileState.createdAt) {
134
+ var _ref2 = intl || {
135
+ locale: 'en'
136
+ },
137
+ _ref2$locale = _ref2.locale,
138
+ locale = _ref2$locale === void 0 ? 'en' : _ref2$locale;
139
+
140
+ formattedDate = formatDate(fileState.createdAt, locale);
141
+ }
142
+
143
+ return renderContent( /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Tooltip, {
144
+ position: "bottom",
145
+ content: formattedDate,
146
+ tag: "span"
147
+ }, /*#__PURE__*/React.createElement(MediaInlineCardLoadedView, {
148
+ icon: linkIcon,
149
+ title: name,
150
+ onClick: onMediaInlineCardClick,
151
+ isSelected: isSelected
152
+ })), mediaViewer));
153
+ };
154
+ export var MediaInlineCard = injectIntl(MediaInlineCardInternal, {
155
+ enforceContext: false
156
+ });
@@ -276,7 +276,7 @@ export var InlinePlayerBase = /*#__PURE__*/function (_Component) {
276
276
  onClick: onClick,
277
277
  innerRef: forwardRef || undefined,
278
278
  dimensions: dimensions
279
- }, /*#__PURE__*/React.createElement(InactivityDetector, null, function () {
279
+ }, /*#__PURE__*/React.createElement(InactivityDetector, null, function (checkMouseMovement) {
280
280
  return /*#__PURE__*/React.createElement(CustomMediaPlayer, {
281
281
  type: "video",
282
282
  src: fileSrc,
@@ -288,7 +288,8 @@ export var InlinePlayerBase = /*#__PURE__*/function (_Component) {
288
288
  lastWatchTimeConfig: {
289
289
  contentId: identifier.id
290
290
  },
291
- originalDimensions: originalDimensions
291
+ originalDimensions: originalDimensions,
292
+ showControls: checkMouseMovement
292
293
  });
293
294
  }));
294
295
  }
@@ -1,6 +1,6 @@
1
1
  import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral";
2
2
 
3
- var _templateObject, _templateObject2;
3
+ var _templateObject, _templateObject2, _templateObject3;
4
4
 
5
5
  import styled from 'styled-components';
6
6
  import { borderRadius } from '@atlaskit/theme/constants';
@@ -32,4 +32,5 @@ export var InlinePlayerWrapper = styled.div(_templateObject2 || (_templateObject
32
32
  }, function (props) {
33
33
  return getDimensionsWithDefault(props.dimensions).height || 'auto';
34
34
  }, borderRadius(), getSelectedBorderStyle);
35
- InlinePlayerWrapper.displayName = 'InlinePlayerWrapper';
35
+ InlinePlayerWrapper.displayName = 'InlinePlayerWrapper';
36
+ export var FormattedMessageWrapper = styled.span(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral([""])));