@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
@@ -6,9 +6,9 @@ import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstruct
6
6
  import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
7
7
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
8
8
 
9
- 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; }
9
+ 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; }
10
10
 
11
- 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) { _defineProperty(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; }
11
+ 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) { _defineProperty(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; }
12
12
 
13
13
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
14
14
 
@@ -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,21 @@ 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;
518
+ var didImageRender = this.state.didImageRender;
494
519
  return !!dataURI && /*#__PURE__*/React.createElement(ImageRenderer, {
495
520
  dataURI: dataURI,
496
521
  mediaType: mediaType,
497
- mediaItemType: mediaItemType,
498
522
  previewOrientation: previewOrientation,
499
523
  alt: alt,
500
524
  resizeMode: resizeMode,
501
525
  onDisplayImage: onDisplayImage,
502
- onImageError: this.onImageLoadError,
503
- timeElapsedTillCommenced: timeElapsedTillCommenced
526
+ onImageLoad: this.onImageLoad,
527
+ onImageError: this.onImageError,
528
+ nativeLazyLoad: nativeLazyLoad,
529
+ forceSyncDisplay: forceSyncDisplay,
530
+ isImageVisible: forceSyncDisplay || didImageRender
504
531
  });
505
532
  }
506
533
  }, {
@@ -516,10 +543,10 @@ export var CardViewBase = /*#__PURE__*/function (_React$Component) {
516
543
  value: function renderMediaTypeIcon(hasTitleBox, iconMessage) {
517
544
  var metadata = this.props.metadata;
518
545
 
519
- var _ref9 = metadata || {},
520
- mediaType = _ref9.mediaType,
521
- mimeType = _ref9.mimeType,
522
- name = _ref9.name;
546
+ var _ref10 = metadata || {},
547
+ mediaType = _ref10.mediaType,
548
+ mimeType = _ref10.mimeType,
549
+ name = _ref10.name;
523
550
 
524
551
  return /*#__PURE__*/React.createElement(IconWrapper, {
525
552
  breakpoint: this.breakpoint,
@@ -32,8 +32,11 @@ var MediaInlineCardLoader = /*#__PURE__*/function (_React$PureComponent) {
32
32
 
33
33
  _this = _super.call.apply(_super, [this].concat(args));
34
34
 
35
+ _defineProperty(_assertThisInitialized(_this), "isMounted", false);
36
+
35
37
  _defineProperty(_assertThisInitialized(_this), "state", {
36
- MediaInlineCard: MediaInlineCardLoader.MediaInlineCard
38
+ MediaInlineCard: MediaInlineCardLoader.MediaInlineCard,
39
+ ErrorBoundary: MediaInlineCardLoader.ErrorBoundary
37
40
  });
38
41
 
39
42
  return _this;
@@ -49,13 +52,15 @@ var MediaInlineCardLoader = /*#__PURE__*/function (_React$PureComponent) {
49
52
  while (1) {
50
53
  switch (_context.prev = _context.next) {
51
54
  case 0:
55
+ this.isMounted = true;
56
+
52
57
  if (this.state.MediaInlineCard) {
53
- _context.next = 16;
58
+ _context.next = 17;
54
59
  break;
55
60
  }
56
61
 
57
- _context.prev = 1;
58
- _context.next = 4;
62
+ _context.prev = 2;
63
+ _context.next = 5;
59
64
  return Promise.all([import(
60
65
  /* webpackChunkName: "@atlaskit-internal_media-client" */
61
66
  '@atlaskit/media-client'), import(
@@ -64,7 +69,7 @@ var MediaInlineCardLoader = /*#__PURE__*/function (_React$PureComponent) {
64
69
  /* webpackChunkName: "@atlaskit-internal_media-card-error-boundary" */
65
70
  '../media-card-analytics-error-boundary')]);
66
71
 
67
- case 4:
72
+ case 5:
68
73
  _yield$Promise$all = _context.sent;
69
74
  _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 3);
70
75
  mediaClient = _yield$Promise$all2[0];
@@ -72,23 +77,27 @@ var MediaInlineCardLoader = /*#__PURE__*/function (_React$PureComponent) {
72
77
  mediaCardErrorBoundaryModule = _yield$Promise$all2[2];
73
78
  MediaInlineCardLoader.MediaInlineCard = mediaClient.withMediaClient(cardModule.MediaInlineCard);
74
79
  MediaInlineCardLoader.ErrorBoundary = mediaCardErrorBoundaryModule.default;
75
- this.setState({
76
- MediaInlineCard: MediaInlineCardLoader.MediaInlineCard,
77
- ErrorBoundary: MediaInlineCardLoader.ErrorBoundary
78
- });
79
- _context.next = 16;
80
+
81
+ if (this.isMounted) {
82
+ this.setState({
83
+ MediaInlineCard: MediaInlineCardLoader.MediaInlineCard,
84
+ ErrorBoundary: MediaInlineCardLoader.ErrorBoundary
85
+ });
86
+ }
87
+
88
+ _context.next = 17;
80
89
  break;
81
90
 
82
- case 14:
83
- _context.prev = 14;
84
- _context.t0 = _context["catch"](1);
91
+ case 15:
92
+ _context.prev = 15;
93
+ _context.t0 = _context["catch"](2);
85
94
 
86
- case 16:
95
+ case 17:
87
96
  case "end":
88
97
  return _context.stop();
89
98
  }
90
99
  }
91
- }, _callee, this, [[1, 14]]);
100
+ }, _callee, this, [[2, 15]]);
92
101
  }));
93
102
 
94
103
  function componentDidMount() {
@@ -97,6 +106,30 @@ var MediaInlineCardLoader = /*#__PURE__*/function (_React$PureComponent) {
97
106
 
98
107
  return componentDidMount;
99
108
  }()
109
+ }, {
110
+ key: "componentWillUnmount",
111
+ value: function () {
112
+ var _componentWillUnmount = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
113
+ return _regeneratorRuntime.wrap(function _callee2$(_context2) {
114
+ while (1) {
115
+ switch (_context2.prev = _context2.next) {
116
+ case 0:
117
+ this.isMounted = false;
118
+
119
+ case 1:
120
+ case "end":
121
+ return _context2.stop();
122
+ }
123
+ }
124
+ }, _callee2, this);
125
+ }));
126
+
127
+ function componentWillUnmount() {
128
+ return _componentWillUnmount.apply(this, arguments);
129
+ }
130
+
131
+ return componentWillUnmount;
132
+ }()
100
133
  }, {
101
134
  key: "render",
102
135
  value: function render() {
@@ -1,7 +1,7 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
2
  import React, { useState, useEffect } from 'react';
3
3
  import ReactDOM from 'react-dom';
4
- import { injectIntl } from 'react-intl';
4
+ import { injectIntl, IntlProvider, createIntl } from 'react-intl-next';
5
5
  import { MediaInlineCardLoadedView, MediaInlineCardLoadingView, MediaInlineCardErroredView, messages } from '@atlaskit/media-ui';
6
6
  import { MediaTypeIcon } from '@atlaskit/media-ui/media-type-icon';
7
7
  import { MediaViewer } from '@atlaskit/media-viewer';
@@ -63,46 +63,64 @@ export var MediaInlineCardInternal = function MediaInlineCardInternal(_ref) {
63
63
  return null;
64
64
  };
65
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
+ });
66
75
  useEffect(function () {
67
- mediaClient.file.getFileState(identifier.id, {
76
+ var subscription = mediaClient.file.getFileState(identifier.id, {
68
77
  collectionName: identifier.collectionName
69
78
  }).subscribe({
70
79
  next: function next(fileState) {
71
80
  setFileState(fileState);
81
+ setIsErrored(false);
72
82
  },
73
83
  error: function error() {
74
84
  setIsErrored(true);
75
85
  }
76
86
  });
87
+ return function () {
88
+ subscription.unsubscribe();
89
+ };
77
90
  }, [identifier.collectionName, identifier.id, mediaClient.file]);
78
91
 
79
92
  if (!fileState) {
80
93
  return /*#__PURE__*/React.createElement(MediaInlineCardLoadingView, {
81
- message: intl.formatMessage(messages.loading_file)
94
+ message: (intl || defaultIntl).formatMessage(messages.loading_file),
95
+ isSelected: isSelected
82
96
  });
83
97
  }
84
98
 
85
99
  if (isErrored) {
86
100
  return /*#__PURE__*/React.createElement(MediaInlineCardErroredView, {
87
- message: intl.formatMessage(messages.couldnt_load_file)
101
+ message: (intl || defaultIntl).formatMessage(messages.couldnt_load_file),
102
+ isSelected: isSelected
88
103
  });
89
104
  }
90
105
 
91
106
  if (fileState.status === 'error') {
92
107
  return /*#__PURE__*/React.createElement(MediaInlineCardErroredView, {
93
- message: fileState.message || ''
108
+ message: fileState.message || '',
109
+ isSelected: isSelected
94
110
  });
95
111
  }
96
112
 
97
113
  if (fileState.status === 'failed-processing') {
98
114
  return /*#__PURE__*/React.createElement(MediaInlineCardErroredView, {
99
- message: intl.formatMessage(messages.couldnt_load_file)
115
+ message: (intl || defaultIntl).formatMessage(messages.couldnt_load_file),
116
+ isSelected: isSelected
100
117
  });
101
118
  }
102
119
 
103
120
  if (fileState.status === 'uploading') {
104
121
  return /*#__PURE__*/React.createElement(MediaInlineCardLoadingView, {
105
- message: fileState.name
122
+ message: fileState.name,
123
+ isSelected: isSelected
106
124
  });
107
125
  }
108
126
 
@@ -126,14 +144,17 @@ export var MediaInlineCardInternal = function MediaInlineCardInternal(_ref) {
126
144
  formattedDate = formatDate(fileState.createdAt, locale);
127
145
  }
128
146
 
129
- return /*#__PURE__*/React.createElement(Tooltip, {
147
+ return renderContent( /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Tooltip, {
130
148
  position: "bottom",
131
- content: formattedDate
149
+ content: formattedDate,
150
+ tag: "span"
132
151
  }, /*#__PURE__*/React.createElement(MediaInlineCardLoadedView, {
133
152
  icon: linkIcon,
134
153
  title: name,
135
154
  onClick: onMediaInlineCardClick,
136
155
  isSelected: isSelected
137
- }), mediaViewer);
156
+ })), mediaViewer));
138
157
  };
139
- export var MediaInlineCard = injectIntl(MediaInlineCardInternal);
158
+ export var MediaInlineCard = injectIntl(MediaInlineCardInternal, {
159
+ enforceContext: false
160
+ });