@atlaskit/media-card 77.5.0 → 77.5.2

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 (107) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cjs/card/card.js +1 -1
  3. package/dist/cjs/card/media-card-analytics-error-boundary.js +1 -1
  4. package/dist/cjs/card/v2/cardV2.js +1 -1
  5. package/dist/cjs/card/v2/cardViewV2.js +7 -6
  6. package/dist/cjs/card/v2/useFilePreview/errors.js +132 -0
  7. package/dist/cjs/card/v2/useFilePreview/getPreview/cache.js +39 -0
  8. package/dist/cjs/card/v2/useFilePreview/getPreview/filePreviewStatus.js +45 -0
  9. package/dist/cjs/card/v2/useFilePreview/getPreview/getPreview.js +119 -0
  10. package/dist/cjs/card/v2/useFilePreview/getPreview/helpers.js +167 -0
  11. package/dist/cjs/card/v2/useFilePreview/getPreview/index.js +62 -0
  12. package/dist/cjs/card/v2/useFilePreview/getPreview/objectURLCache.js +85 -0
  13. package/dist/cjs/card/v2/useFilePreview/getPreview/videoSnapshot.js +58 -0
  14. package/dist/cjs/card/v2/useFilePreview/globalScope/getSSRData.js +14 -0
  15. package/dist/cjs/card/v2/useFilePreview/globalScope/globalScope.js +66 -0
  16. package/dist/cjs/card/v2/useFilePreview/globalScope/index.js +37 -0
  17. package/dist/cjs/card/v2/useFilePreview/globalScope/printScript.js +32 -0
  18. package/dist/cjs/card/v2/useFilePreview/globalScope/types.js +5 -0
  19. package/dist/cjs/card/v2/useFilePreview/helpers.js +64 -0
  20. package/dist/cjs/card/v2/useFilePreview/index.js +12 -0
  21. package/dist/cjs/card/v2/useFilePreview/types.js +5 -0
  22. package/dist/cjs/card/v2/{useFilePreview.js → useFilePreview/useFilePreview.js} +58 -194
  23. package/dist/cjs/inline/loader.js +1 -1
  24. package/dist/cjs/utils/ufoExperiences.js +1 -1
  25. package/dist/es2019/card/card.js +1 -1
  26. package/dist/es2019/card/media-card-analytics-error-boundary.js +1 -1
  27. package/dist/es2019/card/v2/cardV2.js +1 -1
  28. package/dist/es2019/card/v2/cardViewV2.js +7 -6
  29. package/dist/es2019/card/v2/useFilePreview/errors.js +81 -0
  30. package/dist/es2019/card/v2/useFilePreview/getPreview/cache.js +30 -0
  31. package/dist/es2019/card/v2/useFilePreview/getPreview/filePreviewStatus.js +43 -0
  32. package/dist/es2019/card/v2/useFilePreview/getPreview/getPreview.js +75 -0
  33. package/dist/es2019/card/v2/useFilePreview/getPreview/helpers.js +76 -0
  34. package/dist/es2019/card/v2/useFilePreview/getPreview/index.js +3 -0
  35. package/dist/es2019/card/v2/useFilePreview/getPreview/objectURLCache.js +44 -0
  36. package/dist/es2019/card/v2/useFilePreview/getPreview/videoSnapshot.js +36 -0
  37. package/dist/es2019/card/v2/useFilePreview/globalScope/getSSRData.js +8 -0
  38. package/dist/es2019/card/v2/useFilePreview/globalScope/globalScope.js +48 -0
  39. package/dist/es2019/card/v2/useFilePreview/globalScope/index.js +2 -0
  40. package/dist/es2019/card/v2/useFilePreview/globalScope/printScript.js +16 -0
  41. package/dist/es2019/card/v2/useFilePreview/globalScope/types.js +1 -0
  42. package/dist/es2019/card/v2/useFilePreview/helpers.js +61 -0
  43. package/dist/es2019/card/v2/useFilePreview/index.js +1 -0
  44. package/dist/es2019/card/v2/useFilePreview/types.js +1 -0
  45. package/dist/es2019/card/v2/{useFilePreview.js → useFilePreview/useFilePreview.js} +18 -132
  46. package/dist/es2019/inline/loader.js +1 -1
  47. package/dist/es2019/utils/ufoExperiences.js +1 -1
  48. package/dist/esm/card/card.js +1 -1
  49. package/dist/esm/card/media-card-analytics-error-boundary.js +1 -1
  50. package/dist/esm/card/v2/cardV2.js +1 -1
  51. package/dist/esm/card/v2/cardViewV2.js +7 -6
  52. package/dist/esm/card/v2/useFilePreview/errors.js +124 -0
  53. package/dist/esm/card/v2/useFilePreview/getPreview/cache.js +32 -0
  54. package/dist/esm/card/v2/useFilePreview/getPreview/filePreviewStatus.js +40 -0
  55. package/dist/esm/card/v2/useFilePreview/getPreview/getPreview.js +112 -0
  56. package/dist/esm/card/v2/useFilePreview/getPreview/helpers.js +160 -0
  57. package/dist/esm/card/v2/useFilePreview/getPreview/index.js +3 -0
  58. package/dist/esm/card/v2/useFilePreview/getPreview/objectURLCache.js +78 -0
  59. package/dist/esm/card/v2/useFilePreview/getPreview/videoSnapshot.js +51 -0
  60. package/dist/esm/card/v2/useFilePreview/globalScope/getSSRData.js +8 -0
  61. package/dist/esm/card/v2/useFilePreview/globalScope/globalScope.js +56 -0
  62. package/dist/esm/card/v2/useFilePreview/globalScope/index.js +2 -0
  63. package/dist/esm/card/v2/useFilePreview/globalScope/printScript.js +25 -0
  64. package/dist/esm/card/v2/useFilePreview/globalScope/types.js +1 -0
  65. package/dist/esm/card/v2/useFilePreview/helpers.js +57 -0
  66. package/dist/esm/card/v2/useFilePreview/index.js +1 -0
  67. package/dist/esm/card/v2/useFilePreview/types.js +1 -0
  68. package/dist/esm/card/v2/{useFilePreview.js → useFilePreview/useFilePreview.js} +41 -177
  69. package/dist/esm/inline/loader.js +1 -1
  70. package/dist/esm/utils/ufoExperiences.js +1 -1
  71. package/dist/types/card/v2/cardViewV2.d.ts +5 -4
  72. package/dist/types/card/v2/useFilePreview/errors.d.ts +38 -0
  73. package/dist/types/card/v2/useFilePreview/getPreview/cache.d.ts +21 -0
  74. package/dist/types/card/v2/useFilePreview/getPreview/filePreviewStatus.d.ts +4 -0
  75. package/dist/types/card/v2/useFilePreview/getPreview/getPreview.d.ts +9 -0
  76. package/dist/types/card/v2/useFilePreview/getPreview/helpers.d.ts +10 -0
  77. package/dist/types/card/v2/useFilePreview/getPreview/index.d.ts +3 -0
  78. package/dist/types/card/v2/useFilePreview/getPreview/objectURLCache.d.ts +12 -0
  79. package/dist/types/card/v2/useFilePreview/getPreview/videoSnapshot.d.ts +1 -0
  80. package/dist/types/card/v2/useFilePreview/globalScope/getSSRData.d.ts +3 -0
  81. package/dist/types/card/v2/useFilePreview/globalScope/globalScope.d.ts +15 -0
  82. package/dist/types/card/v2/useFilePreview/globalScope/index.d.ts +4 -0
  83. package/dist/types/card/v2/useFilePreview/globalScope/printScript.d.ts +2 -0
  84. package/dist/types/card/v2/useFilePreview/globalScope/types.d.ts +8 -0
  85. package/dist/types/card/v2/useFilePreview/helpers.d.ts +11 -0
  86. package/dist/types/card/v2/useFilePreview/index.d.ts +2 -0
  87. package/dist/types/card/v2/useFilePreview/types.d.ts +18 -0
  88. package/dist/{types-ts4.5/card/v2 → types/card/v2/useFilePreview}/useFilePreview.d.ts +8 -8
  89. package/dist/types-ts4.5/card/v2/cardViewV2.d.ts +5 -4
  90. package/dist/types-ts4.5/card/v2/useFilePreview/errors.d.ts +38 -0
  91. package/dist/types-ts4.5/card/v2/useFilePreview/getPreview/cache.d.ts +21 -0
  92. package/dist/types-ts4.5/card/v2/useFilePreview/getPreview/filePreviewStatus.d.ts +4 -0
  93. package/dist/types-ts4.5/card/v2/useFilePreview/getPreview/getPreview.d.ts +9 -0
  94. package/dist/types-ts4.5/card/v2/useFilePreview/getPreview/helpers.d.ts +10 -0
  95. package/dist/types-ts4.5/card/v2/useFilePreview/getPreview/index.d.ts +3 -0
  96. package/dist/types-ts4.5/card/v2/useFilePreview/getPreview/objectURLCache.d.ts +12 -0
  97. package/dist/types-ts4.5/card/v2/useFilePreview/getPreview/videoSnapshot.d.ts +1 -0
  98. package/dist/types-ts4.5/card/v2/useFilePreview/globalScope/getSSRData.d.ts +3 -0
  99. package/dist/types-ts4.5/card/v2/useFilePreview/globalScope/globalScope.d.ts +15 -0
  100. package/dist/types-ts4.5/card/v2/useFilePreview/globalScope/index.d.ts +4 -0
  101. package/dist/types-ts4.5/card/v2/useFilePreview/globalScope/printScript.d.ts +2 -0
  102. package/dist/types-ts4.5/card/v2/useFilePreview/globalScope/types.d.ts +8 -0
  103. package/dist/types-ts4.5/card/v2/useFilePreview/helpers.d.ts +11 -0
  104. package/dist/types-ts4.5/card/v2/useFilePreview/index.d.ts +2 -0
  105. package/dist/types-ts4.5/card/v2/useFilePreview/types.d.ts +18 -0
  106. package/dist/{types/card/v2 → types-ts4.5/card/v2/useFilePreview}/useFilePreview.d.ts +8 -8
  107. package/package.json +2 -2
@@ -12,18 +12,12 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
12
12
  var _mediaClient = require("@atlaskit/media-client");
13
13
  var _mediaClientReact = require("@atlaskit/media-client-react");
14
14
  var _mediaCommon = require("@atlaskit/media-common");
15
- var _mediaUi = require("@atlaskit/media-ui");
16
15
  var _react = require("react");
17
- var _errors = require("../../errors");
18
- var _analytics = require("../../utils/analytics");
19
- var _dimensionComparer = require("../../utils/dimensionComparer");
20
- var _isRetina = require("../../utils/isRetina");
21
- var _globalScope = require("../../utils/globalScope");
22
- var _useCurrentValueRef = require("../../utils/useCurrentValueRef");
23
- var _usePrevious = require("../../utils/usePrevious");
24
- var _videoSnapshot = require("../../utils/videoSnapshot");
25
- var _getCardPreview = require("../getCardPreview");
26
- var _cache = _interopRequireDefault(require("../getCardPreview/cache"));
16
+ var _errors = require("./errors");
17
+ var _analytics = require("../../../utils/analytics");
18
+ var _helpers = require("./helpers");
19
+ var _globalScope = require("./globalScope");
20
+ var _getPreview = require("./getPreview");
27
21
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
28
22
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
29
23
  var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
@@ -56,7 +50,7 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
56
50
  var wasResolvedUpfrontPreviewRef = (0, _react.useRef)(false);
57
51
  var ssrReliabilityRef = (0, _react.useRef)(initialSsrReliability);
58
52
  var requestDimensions = (0, _react.useMemo)(function () {
59
- return dimensions ? createRequestDimensions(dimensions) : undefined;
53
+ return dimensions ? (0, _helpers.createRequestDimensions)(dimensions) : undefined;
60
54
  }, [dimensions]);
61
55
  var imageURLParams = (0, _react.useMemo)(function () {
62
56
  return _objectSpread(_objectSpread({
@@ -75,7 +69,7 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
75
69
  }
76
70
  if (!(ssrData !== null && ssrData !== void 0 && ssrData.dataURI)) {
77
71
  try {
78
- return (0, _getCardPreview.getSSRCardPreview)(ssr, mediaClient, identifier.id, imageURLParams, mediaBlobUrlAttrs);
72
+ return (0, _getPreview.getSSRCardPreview)(ssr, mediaClient, identifier.id, imageURLParams, mediaBlobUrlAttrs);
79
73
  } catch (e) {
80
74
  ssrReliabilityRef.current[ssr] = _objectSpread({
81
75
  status: 'fail'
@@ -95,7 +89,7 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
95
89
  var cardPreview;
96
90
  var id = identifier.id;
97
91
  var fileImageMode = (0, _mediaClient.imageResizeModeToFileImageMode)(resizeMode);
98
- cardPreview = (0, _getCardPreview.getCardPreviewFromCache)(id, fileImageMode);
92
+ cardPreview = _getPreview.mediaFilePreviewCache.get(id, fileImageMode);
99
93
  if (!cardPreview && ssr) {
100
94
  cardPreview = getSSRPreview(ssr, identifier, mediaClient);
101
95
  }
@@ -119,12 +113,12 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
119
113
  //---------------------- Helper Functions -----------------------//
120
114
  //----------------------------------------------------------------//
121
115
 
122
- var fetchRemotePreviewRef = (0, _useCurrentValueRef.useCurrentValueRef)(function (identifier) {
123
- return (0, _getCardPreview.fetchAndCacheRemotePreview)(mediaClient, identifier.id, requestDimensions || {}, imageURLParams, mediaBlobUrlAttrs, traceContext);
116
+ var fetchRemotePreviewRef = (0, _helpers.useCurrentValueRef)(function (identifier) {
117
+ return (0, _getPreview.getAndCacheRemotePreview)(mediaClient, identifier.id, requestDimensions || {}, imageURLParams, mediaBlobUrlAttrs, traceContext);
124
118
  });
125
- var resolvePreviewRef = (0, _useCurrentValueRef.useCurrentValueRef)( /*#__PURE__*/function () {
119
+ var resolvePreviewRef = (0, _helpers.useCurrentValueRef)( /*#__PURE__*/function () {
126
120
  var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(identifier, fileState) {
127
- var filePreview, isRemotePreviewReady, mode, cachedPreview, dimensionsAreBigger, localPreview, value, resolvedFilePreview, _value, type, mediaType, orientation, _dataURI, _dataURI2, preview, source, dataURI, remotePreview, wrappedError;
121
+ var filePreview, isRemotePreviewReady, mode, cachedPreview, dimensionsAreBigger, localPreview, remotePreview, wrappedError;
128
122
  return _regenerator.default.wrap(function _callee$(_context) {
129
123
  while (1) switch (_context.prev = _context.next) {
130
124
  case 0:
@@ -132,8 +126,8 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
132
126
  isRemotePreviewReady = (0, _mediaClient.isImageRepresentationReady)(fileState);
133
127
  _context.prev = 2;
134
128
  mode = imageURLParams.mode;
135
- cachedPreview = _cache.default.get(identifier.id, mode);
136
- dimensionsAreBigger = (0, _dimensionComparer.isBigger)(cachedPreview === null || cachedPreview === void 0 ? void 0 : cachedPreview.dimensions, requestDimensions);
129
+ cachedPreview = _getPreview.mediaFilePreviewCache.get(identifier.id, mode);
130
+ dimensionsAreBigger = (0, _helpers.isBigger)(cachedPreview === null || cachedPreview === void 0 ? void 0 : cachedPreview.dimensions, requestDimensions);
137
131
  if (!(cachedPreview && !dimensionsAreBigger)) {
138
132
  _context.next = 8;
139
133
  break;
@@ -142,127 +136,21 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
142
136
  case 8:
143
137
  _context.prev = 8;
144
138
  if (!filePreview) {
145
- _context.next = 74;
139
+ _context.next = 15;
146
140
  break;
147
141
  }
148
- _context.prev = 10;
149
- _context.next = 13;
150
- return filePreview;
151
- case 13:
152
- resolvedFilePreview = _context.sent;
153
- value = resolvedFilePreview.value;
154
- _context.next = 20;
142
+ _context.next = 12;
143
+ return (0, _getPreview.getAndCacheLocalPreview)(identifier.id, filePreview, requestDimensions || {}, mode, mediaBlobUrlAttrs);
144
+ case 12:
145
+ localPreview = _context.sent;
146
+ setCardPreview(localPreview);
147
+ return _context.abrupt("return");
148
+ case 15:
149
+ _context.next = 22;
155
150
  break;
156
151
  case 17:
157
152
  _context.prev = 17;
158
- _context.t0 = _context["catch"](10);
159
- throw new _errors.LocalPreviewError('local-preview-rejected', _context.t0 instanceof Error ? _context.t0 : undefined);
160
- case 20:
161
- if (!(typeof value === 'string')) {
162
- _context.next = 24;
163
- break;
164
- }
165
- localPreview = {
166
- dataURI: value,
167
- orientation: 1,
168
- source: 'local'
169
- };
170
- _context.next = 57;
171
- break;
172
- case 24:
173
- if (!(value instanceof Blob)) {
174
- _context.next = 56;
175
- break;
176
- }
177
- _value = value, type = _value.type;
178
- mediaType = (0, _mediaCommon.getMediaTypeFromMimeType)(type);
179
- _context.t1 = mediaType;
180
- _context.next = _context.t1 === 'image' ? 30 : _context.t1 === 'video' ? 42 : 53;
181
- break;
182
- case 30:
183
- _context.prev = 30;
184
- _context.next = 33;
185
- return (0, _mediaUi.getOrientation)(value);
186
- case 33:
187
- orientation = _context.sent;
188
- _dataURI = URL.createObjectURL(value);
189
- localPreview = {
190
- dataURI: _dataURI,
191
- orientation: orientation,
192
- source: 'local'
193
- };
194
- _context.next = 41;
195
- break;
196
- case 38:
197
- _context.prev = 38;
198
- _context.t2 = _context["catch"](30);
199
- throw new _errors.LocalPreviewError('local-preview-image', _context.t2 instanceof Error ? _context.t2 : undefined);
200
- case 41:
201
- return _context.abrupt("break", 54);
202
- case 42:
203
- _context.prev = 42;
204
- _context.next = 45;
205
- return (0, _videoSnapshot.takeSnapshot)(value);
206
- case 45:
207
- _dataURI2 = _context.sent;
208
- localPreview = {
209
- dataURI: _dataURI2,
210
- orientation: 1,
211
- source: 'local'
212
- };
213
- _context.next = 52;
214
- break;
215
- case 49:
216
- _context.prev = 49;
217
- _context.t3 = _context["catch"](42);
218
- throw new _errors.LocalPreviewError('local-preview-video', _context.t3 instanceof Error ? _context.t3 : undefined);
219
- case 52:
220
- return _context.abrupt("break", 54);
221
- case 53:
222
- throw new _errors.LocalPreviewError('local-preview-unsupported');
223
- case 54:
224
- _context.next = 57;
225
- break;
226
- case 56:
227
- throw new _errors.LocalPreviewError('local-preview-unsupported');
228
- case 57:
229
- preview = _objectSpread(_objectSpread({}, localPreview), {}, {
230
- dimensions: requestDimensions
231
- });
232
- _context.t4 = preview.source;
233
- _context.next = _context.t4 === 'local' ? 61 : _context.t4 === 'remote' ? 63 : _context.t4 === 'ssr-server' ? 65 : _context.t4 === 'ssr-client' ? 67 : 69;
234
- break;
235
- case 61:
236
- source = 'cache-local';
237
- return _context.abrupt("break", 70);
238
- case 63:
239
- source = 'cache-remote';
240
- return _context.abrupt("break", 70);
241
- case 65:
242
- source = 'cache-ssr-server';
243
- return _context.abrupt("break", 70);
244
- case 67:
245
- source = 'cache-ssr-client';
246
- return _context.abrupt("break", 70);
247
- case 69:
248
- source = preview.source;
249
- case 70:
250
- // We want to embed some meta context into dataURI for Copy/Paste to work.
251
- dataURI = mediaBlobUrlAttrs ? (0, _mediaClient.addFileAttrsToUrl)(preview.dataURI, mediaBlobUrlAttrs) : preview.dataURI; // We store new cardPreview into cache
252
- _cache.default.set(identifier.id, mode, _objectSpread(_objectSpread({}, preview), {}, {
253
- source: source,
254
- dataURI: dataURI
255
- }));
256
- setCardPreview(_objectSpread(_objectSpread({}, preview), {}, {
257
- dataURI: dataURI
258
- }));
259
- return _context.abrupt("return");
260
- case 74:
261
- _context.next = 81;
262
- break;
263
- case 76:
264
- _context.prev = 76;
265
- _context.t5 = _context["catch"](8);
153
+ _context.t0 = _context["catch"](8);
266
154
  /**
267
155
  * We report the error if:
268
156
  * - local preview is supported and fails
@@ -273,36 +161,36 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
273
161
  * i.e. local preview is available and not supported,
274
162
  * but we are after the remote preview instead.
275
163
  */
276
- if (!(0, _errors.isUnsupportedLocalPreviewError)(_context.t5) || (0, _errors.isUnsupportedLocalPreviewError)(_context.t5) && !isRemotePreviewReady) {
164
+ if (!(0, _errors.isUnsupportedLocalPreviewError)(_context.t0) || (0, _errors.isUnsupportedLocalPreviewError)(_context.t0) && !isRemotePreviewReady) {
277
165
  // CXP-2723 TODO: We might have to wrap this error in MediaCardError
278
- setNonCriticalError(_context.t5);
166
+ setNonCriticalError(_context.t0);
279
167
  }
280
168
  /**
281
169
  * No matter the reason why the local preview failed, we break the process
282
170
  * if there is no remote preview available
283
171
  */
284
172
  if (isRemotePreviewReady) {
285
- _context.next = 81;
173
+ _context.next = 22;
286
174
  break;
287
175
  }
288
- throw _context.t5;
289
- case 81:
176
+ throw _context.t0;
177
+ case 22:
290
178
  if (isRemotePreviewReady) {
291
- _context.next = 83;
179
+ _context.next = 24;
292
180
  break;
293
181
  }
294
- throw new _errors.MediaCardError('remote-preview-not-ready');
295
- case 83:
296
- _context.next = 85;
182
+ throw new _errors.MediaFilePreviewError('remote-preview-not-ready');
183
+ case 24:
184
+ _context.next = 26;
297
185
  return fetchRemotePreviewRef.current(identifier);
298
- case 85:
186
+ case 26:
299
187
  remotePreview = _context.sent;
300
188
  setCardPreview(remotePreview);
301
189
  return _context.abrupt("return");
302
- case 90:
303
- _context.prev = 90;
304
- _context.t6 = _context["catch"](2);
305
- wrappedError = (0, _errors.ensureMediaCardError)('preview-fetch', _context.t6); // If remote preview fails, we set status 'error'
190
+ case 31:
191
+ _context.prev = 31;
192
+ _context.t1 = _context["catch"](2);
193
+ wrappedError = (0, _errors.ensureMediaFilePreviewError)('preview-fetch', _context.t1); // If remote preview fails, we set status 'error'
306
194
  // If local preview fails (i.e, no remote preview available),
307
195
  // we can stay in the same status until there is a remote preview available
308
196
  // If it's any other error we set status 'error'
@@ -315,11 +203,11 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
315
203
  setError(wrappedError);
316
204
  }
317
205
  }
318
- case 94:
206
+ case 35:
319
207
  case "end":
320
208
  return _context.stop();
321
209
  }
322
- }, _callee, null, [[2, 90], [8, 76], [10, 17], [30, 38], [42, 49]]);
210
+ }, _callee, null, [[2, 31], [8, 17]]);
323
211
  }));
324
212
  return function (_x, _x2) {
325
213
  return _ref2.apply(this, arguments);
@@ -329,8 +217,8 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
329
217
  //----------------------------------------------------------------//
330
218
  //------------ resolveUpfrontPreview useEffect -------------------//
331
219
  //----------------------------------------------------------------//
332
- var prevCardPreview = (0, _usePrevious.usePrevious)(cardPreview);
333
- var requestDimensionsRef = (0, _useCurrentValueRef.useCurrentValueRef)(requestDimensions);
220
+ var prevCardPreview = (0, _helpers.usePrevious)(cardPreview);
221
+ var requestDimensionsRef = (0, _helpers.useCurrentValueRef)(requestDimensions);
334
222
  (0, _react.useEffect)(function () {
335
223
  var resolveUpfrontPreview = /*#__PURE__*/function () {
336
224
  var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(identifier) {
@@ -347,7 +235,7 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
347
235
  return fetchRemotePreviewRef.current(identifier);
348
236
  case 5:
349
237
  newCardPreview = _context2.sent;
350
- areValidFetchedDimensions = !(0, _dimensionComparer.isBigger)(fetchedDimensions, requestDimensionsRef.current); // If there are new and bigger dimensions in the props, and the upfront preview is still resolving,
238
+ areValidFetchedDimensions = !(0, _helpers.isBigger)(fetchedDimensions, requestDimensionsRef.current); // If there are new and bigger dimensions in the props, and the upfront preview is still resolving,
351
239
  // the fetched preview is no longer valid, and thus, we dismiss it
352
240
  if (areValidFetchedDimensions) {
353
241
  setCardPreview(newCardPreview);
@@ -367,7 +255,7 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
367
255
  return _ref3.apply(this, arguments);
368
256
  };
369
257
  }();
370
- var hadSSRCardPreview = ssr === 'client' && !!prevCardPreview && (0, _getCardPreview.isSSRClientPreview)(prevCardPreview);
258
+ var hadSSRCardPreview = ssr === 'client' && !!prevCardPreview && (0, _getPreview.isSSRClientPreview)(prevCardPreview);
371
259
 
372
260
  // CXP-2723 TODO: `hadSSRCardPreview` is most likely redundant
373
261
  if (!wasResolvedUpfrontPreviewRef.current && (!skipRemote || hadSSRCardPreview) && !cardPreview) {
@@ -379,14 +267,14 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
379
267
  //---------------- fetch and resolve card preview ----------------//
380
268
  //----------------------------------------------------------------//
381
269
 
382
- var prevRequestDimensions = (0, _usePrevious.usePrevious)(requestDimensions);
270
+ var prevRequestDimensions = (0, _helpers.usePrevious)(requestDimensions);
383
271
  (0, _react.useEffect)(function () {
384
272
  // CXP-2813 TODO: This is called too many times if the refetch failed. Should be called only once
385
- if (cardPreview && !skipRemote && (0, _getCardPreview.isSSRDataPreview)(cardPreview) && (0, _dimensionComparer.isBigger)(cardPreview.dimensions, requestDimensions)) {
273
+ if (cardPreview && !skipRemote && (0, _getPreview.isSSRDataPreview)(cardPreview) && (0, _helpers.isBigger)(cardPreview.dimensions, requestDimensions)) {
386
274
  // refetchSRRPreview: If dimensions from Server have changed and are bigger,
387
275
  // we need to refetch
388
276
  fetchRemotePreviewRef.current(identifier).then(setCardPreview).catch(function (e) {
389
- var wrappedError = (0, _errors.ensureMediaCardError)('remote-preview-fetch-ssr', e, true);
277
+ var wrappedError = (0, _errors.ensureMediaFilePreviewError)('remote-preview-fetch-ssr', e, true);
390
278
  setNonCriticalError(wrappedError);
391
279
  });
392
280
  }
@@ -394,18 +282,10 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
394
282
  // Both compare dimensions, but the above is only for SSR in order to refetchSRRPreview and
395
283
  // will swallow any errors. Below logic only applies when there is no card preview or the dimensions
396
284
  // are bigger.
397
- if (fileState && (0, _getCardPreview.shouldResolvePreview)({
398
- status: status,
399
- fileState: fileState,
400
- prevDimensions: prevRequestDimensions,
401
- dimensions: requestDimensions,
402
- hasCardPreview: !!cardPreview,
403
- isBannedLocalPreview: isBannedLocalPreview,
404
- wasResolvedUpfrontPreview: wasResolvedUpfrontPreviewRef.current
405
- })) {
285
+ if (fileState && wasResolvedUpfrontPreviewRef.current && (0, _getPreview.isPreviewableStatus)(status, (0, _getPreview.extractFilePreviewStatus)(fileState, isBannedLocalPreview)) && (!cardPreview || (0, _helpers.isBigger)(prevRequestDimensions, requestDimensions))) {
406
286
  resolvePreviewRef.current(identifier, fileState);
407
287
  }
408
- if (!skipRemote && ssr && !!cardPreview && (0, _getCardPreview.isSSRClientPreview)(cardPreview)) {
288
+ if (!skipRemote && ssr && !!cardPreview && (0, _getPreview.isSSRClientPreview)(cardPreview)) {
409
289
  // Since the SSR preview brings the token in the query params,
410
290
  // We need to fetch the remote preview to be able to cache it,
411
291
  fetchRemotePreviewRef.current(identifier).catch(function () {
@@ -437,7 +317,7 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
437
317
  //------------------ Subscribe to file state ---------------------//
438
318
  //----------------------------------------------------------------//
439
319
 
440
- var updateFileStateRef = (0, _useCurrentValueRef.useCurrentValueRef)(function () {
320
+ var updateFileStateRef = (0, _helpers.useCurrentValueRef)(function () {
441
321
  if (fileState) {
442
322
  // do not update the card status if the status is final
443
323
  if (['complete', 'error', 'failed-processing'].includes(status)) {
@@ -472,7 +352,7 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
472
352
  } else {
473
353
  var e = new _mediaClientReact.MediaFileStateError(fileState.id, fileState.reason, fileState.message, fileState.details);
474
354
  var errorReason = status === 'uploading' ? 'upload' : 'metadata-fetch';
475
- setError(new _errors.MediaCardError(errorReason, e));
355
+ setError(new _errors.MediaFilePreviewError(errorReason, e));
476
356
  setStatus('error');
477
357
  }
478
358
  }
@@ -485,7 +365,7 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
485
365
  var failedSSRObject = _objectSpread({
486
366
  status: 'fail'
487
367
  }, (0, _analytics.extractErrorInfo)(new _errors.ImageLoadError(newCardPreview.source)));
488
- if ((0, _getCardPreview.isSSRClientPreview)(newCardPreview)) {
368
+ if ((0, _getPreview.isSSRClientPreview)(newCardPreview)) {
489
369
  ssrReliabilityRef.current.client = failedSSRObject;
490
370
  }
491
371
 
@@ -493,7 +373,7 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
493
373
  If the cardPreview failed and it comes from server (global scope / ssrData), it means that we have reused it in client and the error counts for both: server & client.
494
374
  */
495
375
 
496
- if ((0, _getCardPreview.isSSRDataPreview)(newCardPreview)) {
376
+ if ((0, _getPreview.isSSRDataPreview)(newCardPreview)) {
497
377
  ssrReliabilityRef.current.server = failedSSRObject;
498
378
  ssrReliabilityRef.current.client = failedSSRObject;
499
379
  }
@@ -504,15 +384,15 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
504
384
  return;
505
385
  }
506
386
  var error = new _errors.ImageLoadError(newCardPreview === null || newCardPreview === void 0 ? void 0 : newCardPreview.source);
507
- var isLocal = newCardPreview && (0, _getCardPreview.isLocalPreview)(newCardPreview);
508
- var isSSR = newCardPreview && ((0, _getCardPreview.isSSRClientPreview)(newCardPreview) || (0, _getCardPreview.isSSRDataPreview)(newCardPreview));
387
+ var isLocal = newCardPreview && (0, _getPreview.isLocalPreview)(newCardPreview);
388
+ var isSSR = newCardPreview && ((0, _getPreview.isSSRClientPreview)(newCardPreview) || (0, _getPreview.isSSRDataPreview)(newCardPreview));
509
389
  if (isLocal || isSSR) {
510
390
  if (isLocal) {
511
391
  setIsBannedLocalPreview(true);
512
392
  setNonCriticalError(error);
513
393
  }
514
394
  var fileImageMode = (0, _mediaClient.imageResizeModeToFileImageMode)(resizeMode);
515
- (0, _getCardPreview.removeCardPreviewFromCache)(identifier.id, fileImageMode);
395
+ _getPreview.mediaFilePreviewCache.remove(identifier.id, fileImageMode);
516
396
  setCardPreview(undefined);
517
397
  } else {
518
398
  if (!['complete', 'error', 'failed-processing'].includes(status)) {
@@ -523,7 +403,7 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
523
403
  };
524
404
  var onImageLoad = function onImageLoad(newCardPreview) {
525
405
  if (newCardPreview) {
526
- if ((0, _getCardPreview.isSSRClientPreview)(newCardPreview) && ssrReliabilityRef.current.client.status === 'unknown') {
406
+ if ((0, _getPreview.isSSRClientPreview)(newCardPreview) && ssrReliabilityRef.current.client.status === 'unknown') {
527
407
  ssrReliabilityRef.current.client = {
528
408
  status: 'success'
529
409
  };
@@ -533,7 +413,7 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
533
413
  If the image loads successfully and it comes from server (global scope / ssrData), it means that we have reused it in client and the success counts for both: server & client.
534
414
  */
535
415
 
536
- if ((0, _getCardPreview.isSSRDataPreview)(newCardPreview) && ssrReliabilityRef.current.server.status === 'unknown') {
416
+ if ((0, _getPreview.isSSRDataPreview)(newCardPreview) && ssrReliabilityRef.current.server.status === 'unknown') {
537
417
  ssrReliabilityRef.current.server = {
538
418
  status: 'success'
539
419
  };
@@ -571,22 +451,6 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
571
451
  getScriptProps: getScriptProps
572
452
  };
573
453
  };
574
- var createRequestDimensions = function createRequestDimensions(dimensions) {
575
- if (!dimensions) {
576
- return;
577
- }
578
- var retinaFactor = (0, _isRetina.isRetina)() ? 2 : 1;
579
- var width = dimensions.width,
580
- height = dimensions.height;
581
- var result = {};
582
- if (width) {
583
- result.width = width * retinaFactor;
584
- }
585
- if (height) {
586
- result.height = height * retinaFactor;
587
- }
588
- return result;
589
- };
590
454
  var initialSsrReliability = {
591
455
  server: {
592
456
  status: 'unknown'
@@ -119,7 +119,7 @@ var MediaInlineCardLoader = exports.default = /*#__PURE__*/function (_React$Pure
119
119
  ErrorBoundary = _this$state.ErrorBoundary;
120
120
  var analyticsContext = {
121
121
  packageVersion: "@atlaskit/media-card",
122
- packageName: "77.5.0",
122
+ packageName: "77.5.2",
123
123
  componentName: 'mediaInlineCard',
124
124
  component: 'mediaInlineCard'
125
125
  };
@@ -14,7 +14,7 @@ var _mediaClient = require("@atlaskit/media-client");
14
14
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
15
15
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
16
16
  var packageName = "@atlaskit/media-card";
17
- var packageVersion = "77.5.0";
17
+ var packageVersion = "77.5.2";
18
18
  var concurrentExperience;
19
19
  var getExperience = function getExperience(id) {
20
20
  if (!concurrentExperience) {
@@ -27,7 +27,7 @@ import { getMediaCardCursor } from '../utils/getMediaCardCursor';
27
27
  import { completeUfoExperience, startUfoExperience, abortUfoExperience } from '../utils/ufoExperiences';
28
28
  import { generateUniqueId } from '../utils/generateUniqueId';
29
29
  const packageName = "@atlaskit/media-card";
30
- const packageVersion = "77.5.0";
30
+ const packageVersion = "77.5.2";
31
31
  export class CardBase extends Component {
32
32
  constructor(props) {
33
33
  super(props);
@@ -66,7 +66,7 @@ class WrappedMediaCardAnalyticsErrorBoundary extends React.Component {
66
66
  }
67
67
  _defineProperty(WrappedMediaCardAnalyticsErrorBoundary, "displayName", 'MediaCardAnalyticsErrorBoundary');
68
68
  const packageName = "@atlaskit/media-card";
69
- const packageVersion = "77.5.0";
69
+ const packageVersion = "77.5.2";
70
70
  const MediaCardAnalyticsErrorBoundary = withMediaAnalyticsContext({
71
71
  packageVersion,
72
72
  packageName,
@@ -7,7 +7,7 @@ import { IntlProvider, injectIntl } from 'react-intl-next';
7
7
  import { ExternalImageCard } from './externalImageCard';
8
8
  import { FileCard } from './fileCard';
9
9
  const packageName = "@atlaskit/media-card";
10
- const packageVersion = "77.5.0";
10
+ const packageVersion = "77.5.2";
11
11
  export const CardV2Base = ({
12
12
  identifier,
13
13
  ...otherProps
@@ -69,18 +69,19 @@ export const CardViewV2Base = ({
69
69
  if (prevCardPreview.dataURI !== (cardPreview === null || cardPreview === void 0 ? void 0 : cardPreview.dataURI)) {
70
70
  return;
71
71
  }
72
-
73
72
  /*
74
73
  We render the icon & icon message always, even if there is cardPreview available.
75
- If the image fails to load/render, the icon will remain, i.e. the user won't see a change until the root card decides to chage status to error.
76
- If the image renders successfully, we switch this variable to hide the icon & icon message behind the thumbnail in case the image has transparency.
77
- It is less likely that root component replaces a suceeded cardPreview for a failed one than the opposite case. Therefore we prefer to hide the icon instead show when the image fails, for a smoother transition
74
+ If the image fails to load/render, the icon will remain, i.e. the user won't see a change until the root card decides to chage status to error.
75
+ If the image renders successfully, we switch this variable to hide the icon & icon message behind the thumbnail in case the image has transparency.
76
+ It is less likely that root component replaces a suceeded cardPreview for a failed one than the opposite case. Therefore we prefer to hide the icon instead show when the image fails, for a smoother transition
78
77
  */
79
-
80
78
  setDidImageRender(true);
81
79
  onImageLoad === null || onImageLoad === void 0 ? void 0 : onImageLoad(cardPreview);
82
80
  };
83
- const handleOnImageError = cardPreview => {
81
+ const handleOnImageError = prevCardPreview => {
82
+ if (prevCardPreview.dataURI !== (cardPreview === null || cardPreview === void 0 ? void 0 : cardPreview.dataURI)) {
83
+ return;
84
+ }
84
85
  setDidImageRender(false);
85
86
  onImageError === null || onImageError === void 0 ? void 0 : onImageError(cardPreview);
86
87
  };
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Primary reason is logged through Data Portal.
3
+ * Make sure all the values are whitelisted in Measure -> Event Regitry -> "mediaCardRender failed" event
4
+ */
5
+
6
+ export class MediaFilePreviewError extends Error {
7
+ constructor(primaryReason, secondaryError) {
8
+ super(primaryReason);
9
+ // https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-2.html#support-for-newtarget
10
+ this.primaryReason = primaryReason;
11
+ this.secondaryError = secondaryError;
12
+ Object.setPrototypeOf(this, new.target.prototype);
13
+
14
+ // https://v8.dev/docs/stack-trace-api
15
+ if ('captureStackTrace' in Error) {
16
+ Error.captureStackTrace(this, new.target);
17
+ }
18
+ }
19
+ }
20
+ export class LocalPreviewError extends MediaFilePreviewError {
21
+ constructor(primaryReason, secondaryError) {
22
+ super(primaryReason, secondaryError);
23
+ this.primaryReason = primaryReason;
24
+ this.secondaryError = secondaryError;
25
+ }
26
+ }
27
+ export class RemotePreviewError extends MediaFilePreviewError {
28
+ constructor(primaryReason, secondaryError) {
29
+ super(primaryReason, secondaryError);
30
+ this.primaryReason = primaryReason;
31
+ this.secondaryError = secondaryError;
32
+ }
33
+ }
34
+ export class SsrPreviewError extends MediaFilePreviewError {
35
+ constructor(primaryReason, secondaryError) {
36
+ super(primaryReason, secondaryError);
37
+ this.primaryReason = primaryReason;
38
+ this.secondaryError = secondaryError;
39
+ }
40
+ }
41
+ const getImageLoadPrimaryReason = source => {
42
+ switch (source) {
43
+ case 'cache-remote':
44
+ return 'cache-remote-uri';
45
+ case 'cache-local':
46
+ return 'cache-local-uri';
47
+ case 'external':
48
+ return 'external-uri';
49
+ case 'local':
50
+ return 'local-uri';
51
+ case 'remote':
52
+ return 'remote-uri';
53
+ // This fail reason will come from a bug, most likely.
54
+ default:
55
+ return `unknown-uri`;
56
+ }
57
+ };
58
+ export class ImageLoadError extends MediaFilePreviewError {
59
+ constructor(source) {
60
+ super(getImageLoadPrimaryReason(source));
61
+ }
62
+ }
63
+ export function isMediaFilePreviewError(err) {
64
+ return err instanceof MediaFilePreviewError;
65
+ }
66
+ export const isLocalPreviewError = err => err instanceof LocalPreviewError;
67
+ export const isRemotePreviewError = err => err instanceof RemotePreviewError;
68
+ export const isUnsupportedLocalPreviewError = err => isMediaFilePreviewError(err) && err.primaryReason === 'local-preview-unsupported';
69
+
70
+ // In a try/catch statement, the error caught is the type of unknown.
71
+ // We can use this helper to ensure that the error handled is the type of MediaFilePreviewError if unsure
72
+ // If updatePrimaryReason is true, if it's a MediaFilePreviewError already, it will update it's primary reason
73
+ export const ensureMediaFilePreviewError = (primaryReason, error, updatePrimaryReason) => {
74
+ if (isMediaFilePreviewError(error)) {
75
+ if (updatePrimaryReason && error.primaryReason !== primaryReason) {
76
+ return new MediaFilePreviewError(primaryReason, error.secondaryError);
77
+ }
78
+ return error;
79
+ }
80
+ return new MediaFilePreviewError(primaryReason, error);
81
+ };
@@ -0,0 +1,30 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import { createObjectURLCache } from './objectURLCache';
3
+
4
+ // Dimensions are used to create a key.
5
+ // Cache is invalidated when different dimensions are provided.
6
+ export const getCacheKey = (id, mode) => {
7
+ const resizeMode = mode || 'crop';
8
+ return [id, resizeMode].join('-');
9
+ };
10
+ export class CardPreviewCacheImpl {
11
+ constructor(previewCache) {
12
+ _defineProperty(this, "get", (id, mode) => {
13
+ const cacheKey = getCacheKey(id, mode);
14
+ return this.previewCache.get(cacheKey);
15
+ });
16
+ _defineProperty(this, "set", (id, mode, cardPreview) => {
17
+ const cacheKey = getCacheKey(id, mode);
18
+ this.previewCache.set(cacheKey, cardPreview);
19
+ });
20
+ _defineProperty(this, "remove", (id, mode) => {
21
+ const cacheKey = getCacheKey(id, mode);
22
+ this.previewCache.remove(cacheKey);
23
+ });
24
+ _defineProperty(this, "clear", () => {
25
+ this.previewCache.clear();
26
+ });
27
+ this.previewCache = previewCache;
28
+ }
29
+ }
30
+ export const mediaFilePreviewCache = new CardPreviewCacheImpl(createObjectURLCache());