@atlaskit/media-card 77.5.0 → 77.5.1

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 +6 -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 +1 -1
@@ -0,0 +1,51 @@
1
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
3
+ export var takeSnapshot = /*#__PURE__*/function () {
4
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(blob) {
5
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
6
+ while (1) switch (_context.prev = _context.next) {
7
+ case 0:
8
+ return _context.abrupt("return", new Promise(function (resolve, reject) {
9
+ var url = URL.createObjectURL(blob);
10
+ var video = document.createElement('video');
11
+ video.preload = 'metadata';
12
+ video.src = url;
13
+ video.muted = true;
14
+ video.play().catch(function () {
15
+ return reject(new Error('failed to play video'));
16
+ });
17
+ video.addEventListener('timeupdate', function timeUpdateHandler() {
18
+ video.removeEventListener('timeupdate', timeUpdateHandler);
19
+ video.pause();
20
+ URL.revokeObjectURL(url);
21
+ //create canvas to draw our first frame on.
22
+
23
+ if (!video.videoWidth && !video.videoHeight) {
24
+ return reject(new Error('error retrieving video dimensions'));
25
+ }
26
+ var canvas = document.createElement('canvas');
27
+ canvas.width = video.videoWidth;
28
+ canvas.height = video.videoHeight;
29
+ var context = canvas.getContext('2d');
30
+ if (!context) {
31
+ return reject(new Error('error creating canvas context'));
32
+ }
33
+ context.drawImage(video, 0, 0, canvas.width, canvas.height);
34
+ var dataURL = canvas.toDataURL('image/jpeg', 0.85);
35
+ resolve(dataURL);
36
+ });
37
+ video.addEventListener('error', function () {
38
+ reject(new Error('failed to load video'));
39
+ URL.revokeObjectURL(url);
40
+ });
41
+ }));
42
+ case 1:
43
+ case "end":
44
+ return _context.stop();
45
+ }
46
+ }, _callee);
47
+ }));
48
+ return function takeSnapshot(_x) {
49
+ return _ref.apply(this, arguments);
50
+ };
51
+ }();
@@ -0,0 +1,8 @@
1
+ import { getMediaCardSSR, getKey } from './globalScope';
2
+ export var getSSRData = function getSSRData(identifier) {
3
+ var mediaCardSsr = getMediaCardSSR();
4
+ if (!mediaCardSsr) {
5
+ return;
6
+ }
7
+ return mediaCardSsr[getKey(identifier)];
8
+ };
@@ -0,0 +1,56 @@
1
+ import { printFunctionCall, printScript } from './printScript';
2
+ // ----- WARNING -----
3
+ // This is a very sensitive fraction of code.
4
+ // Any changes to this file must be tested directly in product before merging.
5
+ // The scripts printed here might differ from what we observe in our internal tests
6
+ // due to minimification, for example.
7
+ export var GLOBAL_MEDIA_CARD_SSR = 'mediaCardSsr';
8
+ export var GLOBAL_MEDIA_NAMESPACE = '__MEDIA_INTERNAL';
9
+ export function getMediaGlobalScope() {
10
+ var globalScope = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window;
11
+ // Must match GLOBAL_MEDIA_NAMESPACE. Can't reference the constant from here.
12
+ var namespace = '__MEDIA_INTERNAL';
13
+ if (!globalScope[namespace]) {
14
+ globalScope[namespace] = {};
15
+ }
16
+ return globalScope[namespace];
17
+ }
18
+ export function getMediaCardSSR() {
19
+ var globalScope = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window;
20
+ var globalMedia = getMediaGlobalScope(globalScope);
21
+ // Must match GLOBAL_MEDIA_CARD_SSR. Can't reference the constant from here.
22
+ var key = 'mediaCardSsr';
23
+ if (!globalMedia[key]) {
24
+ globalMedia[key] = {};
25
+ }
26
+ return globalMedia[key];
27
+ }
28
+ var dashed = function dashed(param) {
29
+ return param ? "-".concat(param) : '';
30
+ };
31
+ export var getKey = function getKey(_ref) {
32
+ var id = _ref.id,
33
+ collectionName = _ref.collectionName,
34
+ occurrenceKey = _ref.occurrenceKey;
35
+ return "".concat(id).concat(dashed(collectionName)).concat(dashed(occurrenceKey));
36
+ };
37
+ export var storeDataURI = function storeDataURI(key, dataURI, dimensions, error) {
38
+ var globalScope = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : window;
39
+ var mediaCardSsr = getMediaCardSSR(globalScope);
40
+ mediaCardSsr[key] = {
41
+ dataURI: dataURI,
42
+ dimensions: dimensions,
43
+ error: error
44
+ };
45
+ };
46
+ var generateScript = function generateScript(identifier, dataURI, dimensions, error) {
47
+ var functionCall = printFunctionCall(storeDataURI, getKey(identifier), dataURI, dimensions, error);
48
+ return printScript([getMediaCardSSR.toString(), getMediaGlobalScope.toString(), functionCall]);
49
+ };
50
+ export var generateScriptProps = function generateScriptProps(identifier, dataURI, dimensions, error) {
51
+ return {
52
+ dangerouslySetInnerHTML: {
53
+ __html: generateScript(identifier, dataURI, dimensions, error)
54
+ }
55
+ };
56
+ };
@@ -0,0 +1,2 @@
1
+ export { GLOBAL_MEDIA_NAMESPACE, GLOBAL_MEDIA_CARD_SSR, generateScriptProps, getKey } from './globalScope';
2
+ export { getSSRData } from './getSSRData';
@@ -0,0 +1,25 @@
1
+ import _typeof from "@babel/runtime/helpers/typeof";
2
+ var printParam = function printParam(param) {
3
+ if (typeof param === 'string') {
4
+ return "'".concat(param, "'");
5
+ } else if (_typeof(param) === 'object') {
6
+ return JSON.stringify(param);
7
+ } else if (param === undefined) {
8
+ return 'undefined';
9
+ }
10
+ return param;
11
+ };
12
+ var printParams = function printParams(args) {
13
+ return args.map(function (arg) {
14
+ return printParam(arg);
15
+ }).join(',');
16
+ };
17
+ export var printFunctionCall = function printFunctionCall(fn) {
18
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
19
+ args[_key - 1] = arguments[_key];
20
+ }
21
+ return "(".concat(fn.toString(), ")(").concat(printParams(args), ");");
22
+ };
23
+ export var printScript = function printScript(statements) {
24
+ return "(function(){\n ".concat(statements.join(';'), "\n})();\n");
25
+ };
@@ -0,0 +1,57 @@
1
+ import { useRef, useEffect } from 'react';
2
+
3
+ /**
4
+ * Checks if at least one of next dimensions is bigger than current
5
+ * If a single dimension is undefined, returns false
6
+ */
7
+ export var isBigger = function isBigger(current, next) {
8
+ var _ref = current || {},
9
+ currentWidth = _ref.width,
10
+ currentHeight = _ref.height;
11
+ var _ref2 = next || {},
12
+ nextWidth = _ref2.width,
13
+ nextHeight = _ref2.height;
14
+ if (!!currentWidth && !!currentHeight && !!nextWidth && !!nextHeight) {
15
+ var nextIsWider = currentWidth < nextWidth;
16
+ var nextIsHigher = currentHeight < nextHeight;
17
+ return nextIsHigher || nextIsWider;
18
+ } else {
19
+ return false;
20
+ }
21
+ };
22
+
23
+ /** Verifies if the current screen is retina display */
24
+ function isRetina() {
25
+ var mediaQuery = '(-webkit-min-device-pixel-ratio: 1.5), (min--moz-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3/2), (min-resolution: 1.5dppx)';
26
+ return window.devicePixelRatio > 1 || window.matchMedia && window.matchMedia(mediaQuery).matches;
27
+ }
28
+ export var createRequestDimensions = function createRequestDimensions(dimensions) {
29
+ if (!dimensions) {
30
+ return;
31
+ }
32
+ var retinaFactor = isRetina() ? 2 : 1;
33
+ var width = dimensions.width,
34
+ height = dimensions.height;
35
+ var result = {};
36
+ if (width) {
37
+ result.width = width * retinaFactor;
38
+ }
39
+ if (height) {
40
+ result.height = height * retinaFactor;
41
+ }
42
+ return result;
43
+ };
44
+
45
+ /** Stores the provided value in a */
46
+ export function useCurrentValueRef(value) {
47
+ var ref = useRef(value);
48
+ ref.current = value;
49
+ return ref;
50
+ }
51
+ export function usePrevious(value) {
52
+ var ref = useRef();
53
+ useEffect(function () {
54
+ ref.current = value;
55
+ }, [value]);
56
+ return ref.current;
57
+ }
@@ -0,0 +1 @@
1
+ export { useFilePreview } from './useFilePreview';
@@ -0,0 +1 @@
1
+ export {};
@@ -4,21 +4,15 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
4
  import _regeneratorRuntime from "@babel/runtime/regenerator";
5
5
  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; }
6
6
  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) { _defineProperty(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; }
7
- import { addFileAttrsToUrl, imageResizeModeToFileImageMode, isImageRepresentationReady } from '@atlaskit/media-client';
7
+ import { imageResizeModeToFileImageMode, isImageRepresentationReady } from '@atlaskit/media-client';
8
8
  import { MediaFileStateError, useFileState, useMediaClient } from '@atlaskit/media-client-react';
9
- import { getMediaTypeFromMimeType, isMimeTypeSupportedByBrowser } from '@atlaskit/media-common';
10
- import { getOrientation } from '@atlaskit/media-ui';
9
+ import { isMimeTypeSupportedByBrowser } from '@atlaskit/media-common';
11
10
  import { useEffect, useMemo, useRef, useState } from 'react';
12
- import { ensureMediaCardError, ImageLoadError, isLocalPreviewError, isUnsupportedLocalPreviewError, LocalPreviewError, MediaCardError } from '../../errors';
13
- import { extractErrorInfo } from '../../utils/analytics';
14
- import { isBigger } from '../../utils/dimensionComparer';
15
- import { isRetina } from '../../utils/isRetina';
16
- import { generateScriptProps, getSSRData } from '../../utils/globalScope';
17
- import { useCurrentValueRef } from '../../utils/useCurrentValueRef';
18
- import { usePrevious } from '../../utils/usePrevious';
19
- import { takeSnapshot } from '../../utils/videoSnapshot';
20
- import { fetchAndCacheRemotePreview, getCardPreviewFromCache, getSSRCardPreview, isLocalPreview, isSSRClientPreview, isSSRDataPreview, removeCardPreviewFromCache, shouldResolvePreview } from '../getCardPreview';
21
- import cardPreviewCache from '../getCardPreview/cache';
11
+ import { ensureMediaFilePreviewError, ImageLoadError, isLocalPreviewError, isUnsupportedLocalPreviewError, MediaFilePreviewError } from './errors';
12
+ import { extractErrorInfo } from '../../../utils/analytics';
13
+ import { isBigger, createRequestDimensions, useCurrentValueRef, usePrevious } from './helpers';
14
+ import { generateScriptProps, getSSRData } from './globalScope';
15
+ import { getAndCacheRemotePreview, getSSRCardPreview, isLocalPreview, isSSRClientPreview, isSSRDataPreview, isPreviewableStatus, extractFilePreviewStatus, mediaFilePreviewCache, getAndCacheLocalPreview } from './getPreview';
22
16
  export var useFilePreview = function useFilePreview(_ref) {
23
17
  var _ref$resizeMode = _ref.resizeMode,
24
18
  resizeMode = _ref$resizeMode === void 0 ? 'crop' : _ref$resizeMode,
@@ -88,7 +82,7 @@ export var useFilePreview = function useFilePreview(_ref) {
88
82
  var cardPreview;
89
83
  var id = identifier.id;
90
84
  var fileImageMode = imageResizeModeToFileImageMode(resizeMode);
91
- cardPreview = getCardPreviewFromCache(id, fileImageMode);
85
+ cardPreview = mediaFilePreviewCache.get(id, fileImageMode);
92
86
  if (!cardPreview && ssr) {
93
87
  cardPreview = getSSRPreview(ssr, identifier, mediaClient);
94
88
  }
@@ -113,11 +107,11 @@ export var useFilePreview = function useFilePreview(_ref) {
113
107
  //----------------------------------------------------------------//
114
108
 
115
109
  var fetchRemotePreviewRef = useCurrentValueRef(function (identifier) {
116
- return fetchAndCacheRemotePreview(mediaClient, identifier.id, requestDimensions || {}, imageURLParams, mediaBlobUrlAttrs, traceContext);
110
+ return getAndCacheRemotePreview(mediaClient, identifier.id, requestDimensions || {}, imageURLParams, mediaBlobUrlAttrs, traceContext);
117
111
  });
118
112
  var resolvePreviewRef = useCurrentValueRef( /*#__PURE__*/function () {
119
113
  var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(identifier, fileState) {
120
- var filePreview, isRemotePreviewReady, mode, cachedPreview, dimensionsAreBigger, localPreview, value, resolvedFilePreview, _value, type, mediaType, orientation, _dataURI, _dataURI2, preview, source, dataURI, remotePreview, wrappedError;
114
+ var filePreview, isRemotePreviewReady, mode, cachedPreview, dimensionsAreBigger, localPreview, remotePreview, wrappedError;
121
115
  return _regeneratorRuntime.wrap(function _callee$(_context) {
122
116
  while (1) switch (_context.prev = _context.next) {
123
117
  case 0:
@@ -125,7 +119,7 @@ export var useFilePreview = function useFilePreview(_ref) {
125
119
  isRemotePreviewReady = isImageRepresentationReady(fileState);
126
120
  _context.prev = 2;
127
121
  mode = imageURLParams.mode;
128
- cachedPreview = cardPreviewCache.get(identifier.id, mode);
122
+ cachedPreview = mediaFilePreviewCache.get(identifier.id, mode);
129
123
  dimensionsAreBigger = isBigger(cachedPreview === null || cachedPreview === void 0 ? void 0 : cachedPreview.dimensions, requestDimensions);
130
124
  if (!(cachedPreview && !dimensionsAreBigger)) {
131
125
  _context.next = 8;
@@ -135,127 +129,21 @@ export var useFilePreview = function useFilePreview(_ref) {
135
129
  case 8:
136
130
  _context.prev = 8;
137
131
  if (!filePreview) {
138
- _context.next = 74;
132
+ _context.next = 15;
139
133
  break;
140
134
  }
141
- _context.prev = 10;
142
- _context.next = 13;
143
- return filePreview;
144
- case 13:
145
- resolvedFilePreview = _context.sent;
146
- value = resolvedFilePreview.value;
147
- _context.next = 20;
135
+ _context.next = 12;
136
+ return getAndCacheLocalPreview(identifier.id, filePreview, requestDimensions || {}, mode, mediaBlobUrlAttrs);
137
+ case 12:
138
+ localPreview = _context.sent;
139
+ setCardPreview(localPreview);
140
+ return _context.abrupt("return");
141
+ case 15:
142
+ _context.next = 22;
148
143
  break;
149
144
  case 17:
150
145
  _context.prev = 17;
151
- _context.t0 = _context["catch"](10);
152
- throw new LocalPreviewError('local-preview-rejected', _context.t0 instanceof Error ? _context.t0 : undefined);
153
- case 20:
154
- if (!(typeof value === 'string')) {
155
- _context.next = 24;
156
- break;
157
- }
158
- localPreview = {
159
- dataURI: value,
160
- orientation: 1,
161
- source: 'local'
162
- };
163
- _context.next = 57;
164
- break;
165
- case 24:
166
- if (!(value instanceof Blob)) {
167
- _context.next = 56;
168
- break;
169
- }
170
- _value = value, type = _value.type;
171
- mediaType = getMediaTypeFromMimeType(type);
172
- _context.t1 = mediaType;
173
- _context.next = _context.t1 === 'image' ? 30 : _context.t1 === 'video' ? 42 : 53;
174
- break;
175
- case 30:
176
- _context.prev = 30;
177
- _context.next = 33;
178
- return getOrientation(value);
179
- case 33:
180
- orientation = _context.sent;
181
- _dataURI = URL.createObjectURL(value);
182
- localPreview = {
183
- dataURI: _dataURI,
184
- orientation: orientation,
185
- source: 'local'
186
- };
187
- _context.next = 41;
188
- break;
189
- case 38:
190
- _context.prev = 38;
191
- _context.t2 = _context["catch"](30);
192
- throw new LocalPreviewError('local-preview-image', _context.t2 instanceof Error ? _context.t2 : undefined);
193
- case 41:
194
- return _context.abrupt("break", 54);
195
- case 42:
196
- _context.prev = 42;
197
- _context.next = 45;
198
- return takeSnapshot(value);
199
- case 45:
200
- _dataURI2 = _context.sent;
201
- localPreview = {
202
- dataURI: _dataURI2,
203
- orientation: 1,
204
- source: 'local'
205
- };
206
- _context.next = 52;
207
- break;
208
- case 49:
209
- _context.prev = 49;
210
- _context.t3 = _context["catch"](42);
211
- throw new LocalPreviewError('local-preview-video', _context.t3 instanceof Error ? _context.t3 : undefined);
212
- case 52:
213
- return _context.abrupt("break", 54);
214
- case 53:
215
- throw new LocalPreviewError('local-preview-unsupported');
216
- case 54:
217
- _context.next = 57;
218
- break;
219
- case 56:
220
- throw new LocalPreviewError('local-preview-unsupported');
221
- case 57:
222
- preview = _objectSpread(_objectSpread({}, localPreview), {}, {
223
- dimensions: requestDimensions
224
- });
225
- _context.t4 = preview.source;
226
- _context.next = _context.t4 === 'local' ? 61 : _context.t4 === 'remote' ? 63 : _context.t4 === 'ssr-server' ? 65 : _context.t4 === 'ssr-client' ? 67 : 69;
227
- break;
228
- case 61:
229
- source = 'cache-local';
230
- return _context.abrupt("break", 70);
231
- case 63:
232
- source = 'cache-remote';
233
- return _context.abrupt("break", 70);
234
- case 65:
235
- source = 'cache-ssr-server';
236
- return _context.abrupt("break", 70);
237
- case 67:
238
- source = 'cache-ssr-client';
239
- return _context.abrupt("break", 70);
240
- case 69:
241
- source = preview.source;
242
- case 70:
243
- // We want to embed some meta context into dataURI for Copy/Paste to work.
244
- dataURI = mediaBlobUrlAttrs ? addFileAttrsToUrl(preview.dataURI, mediaBlobUrlAttrs) : preview.dataURI; // We store new cardPreview into cache
245
- cardPreviewCache.set(identifier.id, mode, _objectSpread(_objectSpread({}, preview), {}, {
246
- source: source,
247
- dataURI: dataURI
248
- }));
249
- setCardPreview(_objectSpread(_objectSpread({}, preview), {}, {
250
- dataURI: dataURI
251
- }));
252
- return _context.abrupt("return");
253
- case 74:
254
- _context.next = 81;
255
- break;
256
- case 76:
257
- _context.prev = 76;
258
- _context.t5 = _context["catch"](8);
146
+ _context.t0 = _context["catch"](8);
259
147
  /**
260
148
  * We report the error if:
261
149
  * - local preview is supported and fails
@@ -266,36 +154,36 @@ export var useFilePreview = function useFilePreview(_ref) {
266
154
  * i.e. local preview is available and not supported,
267
155
  * but we are after the remote preview instead.
268
156
  */
269
- if (!isUnsupportedLocalPreviewError(_context.t5) || isUnsupportedLocalPreviewError(_context.t5) && !isRemotePreviewReady) {
157
+ if (!isUnsupportedLocalPreviewError(_context.t0) || isUnsupportedLocalPreviewError(_context.t0) && !isRemotePreviewReady) {
270
158
  // CXP-2723 TODO: We might have to wrap this error in MediaCardError
271
- setNonCriticalError(_context.t5);
159
+ setNonCriticalError(_context.t0);
272
160
  }
273
161
  /**
274
162
  * No matter the reason why the local preview failed, we break the process
275
163
  * if there is no remote preview available
276
164
  */
277
165
  if (isRemotePreviewReady) {
278
- _context.next = 81;
166
+ _context.next = 22;
279
167
  break;
280
168
  }
281
- throw _context.t5;
282
- case 81:
169
+ throw _context.t0;
170
+ case 22:
283
171
  if (isRemotePreviewReady) {
284
- _context.next = 83;
172
+ _context.next = 24;
285
173
  break;
286
174
  }
287
- throw new MediaCardError('remote-preview-not-ready');
288
- case 83:
289
- _context.next = 85;
175
+ throw new MediaFilePreviewError('remote-preview-not-ready');
176
+ case 24:
177
+ _context.next = 26;
290
178
  return fetchRemotePreviewRef.current(identifier);
291
- case 85:
179
+ case 26:
292
180
  remotePreview = _context.sent;
293
181
  setCardPreview(remotePreview);
294
182
  return _context.abrupt("return");
295
- case 90:
296
- _context.prev = 90;
297
- _context.t6 = _context["catch"](2);
298
- wrappedError = ensureMediaCardError('preview-fetch', _context.t6); // If remote preview fails, we set status 'error'
183
+ case 31:
184
+ _context.prev = 31;
185
+ _context.t1 = _context["catch"](2);
186
+ wrappedError = ensureMediaFilePreviewError('preview-fetch', _context.t1); // If remote preview fails, we set status 'error'
299
187
  // If local preview fails (i.e, no remote preview available),
300
188
  // we can stay in the same status until there is a remote preview available
301
189
  // If it's any other error we set status 'error'
@@ -308,11 +196,11 @@ export var useFilePreview = function useFilePreview(_ref) {
308
196
  setError(wrappedError);
309
197
  }
310
198
  }
311
- case 94:
199
+ case 35:
312
200
  case "end":
313
201
  return _context.stop();
314
202
  }
315
- }, _callee, null, [[2, 90], [8, 76], [10, 17], [30, 38], [42, 49]]);
203
+ }, _callee, null, [[2, 31], [8, 17]]);
316
204
  }));
317
205
  return function (_x, _x2) {
318
206
  return _ref2.apply(this, arguments);
@@ -379,7 +267,7 @@ export var useFilePreview = function useFilePreview(_ref) {
379
267
  // refetchSRRPreview: If dimensions from Server have changed and are bigger,
380
268
  // we need to refetch
381
269
  fetchRemotePreviewRef.current(identifier).then(setCardPreview).catch(function (e) {
382
- var wrappedError = ensureMediaCardError('remote-preview-fetch-ssr', e, true);
270
+ var wrappedError = ensureMediaFilePreviewError('remote-preview-fetch-ssr', e, true);
383
271
  setNonCriticalError(wrappedError);
384
272
  });
385
273
  }
@@ -387,15 +275,7 @@ export var useFilePreview = function useFilePreview(_ref) {
387
275
  // Both compare dimensions, but the above is only for SSR in order to refetchSRRPreview and
388
276
  // will swallow any errors. Below logic only applies when there is no card preview or the dimensions
389
277
  // are bigger.
390
- if (fileState && shouldResolvePreview({
391
- status: status,
392
- fileState: fileState,
393
- prevDimensions: prevRequestDimensions,
394
- dimensions: requestDimensions,
395
- hasCardPreview: !!cardPreview,
396
- isBannedLocalPreview: isBannedLocalPreview,
397
- wasResolvedUpfrontPreview: wasResolvedUpfrontPreviewRef.current
398
- })) {
278
+ if (fileState && wasResolvedUpfrontPreviewRef.current && isPreviewableStatus(status, extractFilePreviewStatus(fileState, isBannedLocalPreview)) && (!cardPreview || isBigger(prevRequestDimensions, requestDimensions))) {
399
279
  resolvePreviewRef.current(identifier, fileState);
400
280
  }
401
281
  if (!skipRemote && ssr && !!cardPreview && isSSRClientPreview(cardPreview)) {
@@ -465,7 +345,7 @@ export var useFilePreview = function useFilePreview(_ref) {
465
345
  } else {
466
346
  var e = new MediaFileStateError(fileState.id, fileState.reason, fileState.message, fileState.details);
467
347
  var errorReason = status === 'uploading' ? 'upload' : 'metadata-fetch';
468
- setError(new MediaCardError(errorReason, e));
348
+ setError(new MediaFilePreviewError(errorReason, e));
469
349
  setStatus('error');
470
350
  }
471
351
  }
@@ -505,7 +385,7 @@ export var useFilePreview = function useFilePreview(_ref) {
505
385
  setNonCriticalError(error);
506
386
  }
507
387
  var fileImageMode = imageResizeModeToFileImageMode(resizeMode);
508
- removeCardPreviewFromCache(identifier.id, fileImageMode);
388
+ mediaFilePreviewCache.remove(identifier.id, fileImageMode);
509
389
  setCardPreview(undefined);
510
390
  } else {
511
391
  if (!['complete', 'error', 'failed-processing'].includes(status)) {
@@ -564,22 +444,6 @@ export var useFilePreview = function useFilePreview(_ref) {
564
444
  getScriptProps: getScriptProps
565
445
  };
566
446
  };
567
- var createRequestDimensions = function createRequestDimensions(dimensions) {
568
- if (!dimensions) {
569
- return;
570
- }
571
- var retinaFactor = isRetina() ? 2 : 1;
572
- var width = dimensions.width,
573
- height = dimensions.height;
574
- var result = {};
575
- if (width) {
576
- result.width = width * retinaFactor;
577
- }
578
- if (height) {
579
- result.height = height * retinaFactor;
580
- }
581
- return result;
582
- };
583
447
  var initialSsrReliability = {
584
448
  server: {
585
449
  status: 'unknown'
@@ -103,7 +103,7 @@ var MediaInlineCardLoader = /*#__PURE__*/function (_React$PureComponent) {
103
103
  ErrorBoundary = _this$state.ErrorBoundary;
104
104
  var analyticsContext = {
105
105
  packageVersion: "@atlaskit/media-card",
106
- packageName: "77.5.0",
106
+ packageName: "77.5.1",
107
107
  componentName: 'mediaInlineCard',
108
108
  component: 'mediaInlineCard'
109
109
  };
@@ -7,7 +7,7 @@ import { extractErrorInfo, getRenderErrorRequestMetadata } from './analytics';
7
7
  import { MediaCardError } from '../errors';
8
8
  import { getMediaEnvironment, getMediaRegion } from '@atlaskit/media-client';
9
9
  var packageName = "@atlaskit/media-card";
10
- var packageVersion = "77.5.0";
10
+ var packageVersion = "77.5.1";
11
11
  var concurrentExperience;
12
12
  var getExperience = function getExperience(id) {
13
13
  if (!concurrentExperience) {
@@ -4,7 +4,8 @@ import React, { MouseEvent } from 'react';
4
4
  import { MessageDescriptor } from 'react-intl-next';
5
5
  import { MediaItemType, FileDetails, ImageResizeMode } from '@atlaskit/media-client';
6
6
  import { WithAnalyticsEventsProps, UIAnalyticsEvent } from '@atlaskit/analytics-next';
7
- import { CardStatus, CardPreview, MediaCardCursor, CardDimensions, TitleBoxIcon } from '../../types';
7
+ import { CardStatus, MediaCardCursor, CardDimensions, TitleBoxIcon } from '../../types';
8
+ import { MediaFilePreview } from './useFilePreview';
8
9
  import { CardAction } from '../actions';
9
10
  import { MediaCardError } from '../../errors';
10
11
  export interface CardViewV2Props {
@@ -26,11 +27,11 @@ export interface CardViewV2Props {
26
27
  readonly onClick?: (event: React.MouseEvent<HTMLDivElement>, analyticsEvent?: UIAnalyticsEvent) => void;
27
28
  readonly onMouseEnter?: (event: MouseEvent<HTMLDivElement>) => void;
28
29
  readonly onDisplayImage?: () => void;
29
- readonly cardPreview?: CardPreview;
30
+ readonly cardPreview?: MediaFilePreview;
30
31
  readonly progress?: number;
31
32
  readonly innerRef?: (instance: HTMLDivElement | null) => void;
32
- readonly onImageLoad?: (cardPreview: CardPreview) => void;
33
- readonly onImageError?: (cardPreview: CardPreview) => void;
33
+ readonly onImageLoad?: (cardPreview: MediaFilePreview) => void;
34
+ readonly onImageError?: (cardPreview: MediaFilePreview) => void;
34
35
  readonly nativeLazyLoad?: boolean;
35
36
  readonly forceSyncDisplay?: boolean;
36
37
  disableAnimation?: boolean;
@@ -0,0 +1,38 @@
1
+ import { MediaFilePreview } from './types';
2
+ /**
3
+ * Primary reason is logged through Data Portal.
4
+ * Make sure all the values are whitelisted in Measure -> Event Regitry -> "mediaCardRender failed" event
5
+ */
6
+ export type MediaFilePreviewErrorPrimaryReason = 'upload' | 'metadata-fetch' | 'error-file-state' | RemotePreviewPrimaryReason | LocalPreviewPrimaryReason | ImageLoadPrimaryReason | SsrPreviewPrimaryReason | 'missing-error-data' | 'preview-fetch';
7
+ export type ImageLoadPrimaryReason = 'cache-remote-uri' | 'cache-local-uri' | 'local-uri' | 'remote-uri' | 'external-uri' | 'unknown-uri';
8
+ export type RemotePreviewPrimaryReason = 'remote-preview-fetch' | 'remote-preview-not-ready' | 'remote-preview-fetch-ssr';
9
+ export type LocalPreviewPrimaryReason = 'local-preview-get' | 'local-preview-unsupported' | 'local-preview-rejected' | 'local-preview-image' | 'local-preview-video';
10
+ export type SsrPreviewPrimaryReason = 'ssr-client-uri' | 'ssr-client-load' | 'ssr-server-uri' | 'ssr-server-load';
11
+ export declare class MediaFilePreviewError extends Error {
12
+ readonly primaryReason: MediaFilePreviewErrorPrimaryReason;
13
+ readonly secondaryError?: Error | undefined;
14
+ constructor(primaryReason: MediaFilePreviewErrorPrimaryReason, secondaryError?: Error | undefined);
15
+ }
16
+ export declare class LocalPreviewError extends MediaFilePreviewError {
17
+ readonly primaryReason: LocalPreviewPrimaryReason;
18
+ readonly secondaryError?: Error | undefined;
19
+ constructor(primaryReason: LocalPreviewPrimaryReason, secondaryError?: Error | undefined);
20
+ }
21
+ export declare class RemotePreviewError extends MediaFilePreviewError {
22
+ readonly primaryReason: RemotePreviewPrimaryReason;
23
+ readonly secondaryError?: Error | undefined;
24
+ constructor(primaryReason: RemotePreviewPrimaryReason, secondaryError?: Error | undefined);
25
+ }
26
+ export declare class SsrPreviewError extends MediaFilePreviewError {
27
+ readonly primaryReason: SsrPreviewPrimaryReason;
28
+ readonly secondaryError?: Error | undefined;
29
+ constructor(primaryReason: SsrPreviewPrimaryReason, secondaryError?: Error | undefined);
30
+ }
31
+ export declare class ImageLoadError extends MediaFilePreviewError {
32
+ constructor(source?: MediaFilePreview['source']);
33
+ }
34
+ export declare function isMediaFilePreviewError(err: Error): err is MediaFilePreviewError;
35
+ export declare const isLocalPreviewError: (err: Error) => err is LocalPreviewError;
36
+ export declare const isRemotePreviewError: (err: Error) => err is RemotePreviewError;
37
+ export declare const isUnsupportedLocalPreviewError: (err: Error) => boolean;
38
+ export declare const ensureMediaFilePreviewError: (primaryReason: MediaFilePreviewErrorPrimaryReason, error: Error, updatePrimaryReason?: boolean) => MediaFilePreviewError;
@@ -0,0 +1,21 @@
1
+ import { ImageResizeMode } from '@atlaskit/media-client';
2
+ import { ObjectURLCache } from './objectURLCache';
3
+ import { MediaFilePreview } from '../types';
4
+ type Mode = ImageResizeMode | undefined;
5
+ export declare const getCacheKey: (id: string, mode: Mode) => string;
6
+ export interface MediaFilePreviewCache {
7
+ get(id: string, mode: Mode): MediaFilePreview | undefined;
8
+ set(id: string, mode: Mode, cardPreview: MediaFilePreview): void;
9
+ remove(id: string, mode: Mode): void;
10
+ clear(): void;
11
+ }
12
+ export declare class CardPreviewCacheImpl implements MediaFilePreviewCache {
13
+ private previewCache;
14
+ constructor(previewCache: ObjectURLCache);
15
+ get: (id: string, mode: Mode) => MediaFilePreview | undefined;
16
+ set: (id: string, mode: Mode, cardPreview: MediaFilePreview) => void;
17
+ remove: (id: string, mode: Mode) => void;
18
+ clear: () => void;
19
+ }
20
+ export declare const mediaFilePreviewCache: CardPreviewCacheImpl;
21
+ export {};
@@ -0,0 +1,4 @@
1
+ import { MediaFilePreviewStatus, FilePreviewStatus } from '../types';
2
+ import { FileState } from '@atlaskit/media-client';
3
+ export declare const extractFilePreviewStatus: (fileState: FileState, isBannedLocalPreview: boolean) => FilePreviewStatus;
4
+ export declare const isPreviewableStatus: (cardStatus: MediaFilePreviewStatus, { isPreviewable, hasPreview, isSupportedByBrowser }: FilePreviewStatus) => boolean;