@atlaskit/media-card 77.6.4 → 77.6.6

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 (116) 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/fileCard.js +8 -4
  6. package/dist/cjs/inline/loader.js +1 -1
  7. package/dist/cjs/utils/ufoExperiences.js +1 -1
  8. package/dist/es2019/card/card.js +1 -1
  9. package/dist/es2019/card/media-card-analytics-error-boundary.js +1 -1
  10. package/dist/es2019/card/v2/cardV2.js +1 -1
  11. package/dist/es2019/card/v2/fileCard.js +7 -3
  12. package/dist/es2019/inline/loader.js +1 -1
  13. package/dist/es2019/utils/ufoExperiences.js +1 -1
  14. package/dist/esm/card/card.js +1 -1
  15. package/dist/esm/card/media-card-analytics-error-boundary.js +1 -1
  16. package/dist/esm/card/v2/cardV2.js +1 -1
  17. package/dist/esm/card/v2/fileCard.js +7 -3
  18. package/dist/esm/inline/loader.js +1 -1
  19. package/dist/esm/utils/ufoExperiences.js +1 -1
  20. package/dist/types/card/v2/cardViewV2.d.ts +1 -1
  21. package/dist/types/card/v2/cardviews/cardViewWrapper.d.ts +1 -1
  22. package/dist/types/card/v2/cardviews/index.d.ts +1 -1
  23. package/dist/types-ts4.5/card/v2/cardViewV2.d.ts +1 -1
  24. package/dist/types-ts4.5/card/v2/cardviews/cardViewWrapper.d.ts +1 -1
  25. package/dist/types-ts4.5/card/v2/cardviews/index.d.ts +1 -1
  26. package/package.json +4 -3
  27. package/dist/cjs/card/v2/useFilePreview/analytics.js +0 -50
  28. package/dist/cjs/card/v2/useFilePreview/errors.js +0 -143
  29. package/dist/cjs/card/v2/useFilePreview/getPreview/cache.js +0 -39
  30. package/dist/cjs/card/v2/useFilePreview/getPreview/filePreviewStatus.js +0 -45
  31. package/dist/cjs/card/v2/useFilePreview/getPreview/getPreview.js +0 -119
  32. package/dist/cjs/card/v2/useFilePreview/getPreview/helpers.js +0 -167
  33. package/dist/cjs/card/v2/useFilePreview/getPreview/index.js +0 -62
  34. package/dist/cjs/card/v2/useFilePreview/getPreview/objectURLCache.js +0 -85
  35. package/dist/cjs/card/v2/useFilePreview/getPreview/videoSnapshot.js +0 -58
  36. package/dist/cjs/card/v2/useFilePreview/globalScope/getSSRData.js +0 -14
  37. package/dist/cjs/card/v2/useFilePreview/globalScope/globalScope.js +0 -66
  38. package/dist/cjs/card/v2/useFilePreview/globalScope/index.js +0 -37
  39. package/dist/cjs/card/v2/useFilePreview/globalScope/printScript.js +0 -32
  40. package/dist/cjs/card/v2/useFilePreview/globalScope/types.js +0 -5
  41. package/dist/cjs/card/v2/useFilePreview/helpers.js +0 -64
  42. package/dist/cjs/card/v2/useFilePreview/index.js +0 -12
  43. package/dist/cjs/card/v2/useFilePreview/types.js +0 -5
  44. package/dist/cjs/card/v2/useFilePreview/useFilePreview.js +0 -460
  45. package/dist/es2019/card/v2/useFilePreview/analytics.js +0 -44
  46. package/dist/es2019/card/v2/useFilePreview/errors.js +0 -90
  47. package/dist/es2019/card/v2/useFilePreview/getPreview/cache.js +0 -30
  48. package/dist/es2019/card/v2/useFilePreview/getPreview/filePreviewStatus.js +0 -43
  49. package/dist/es2019/card/v2/useFilePreview/getPreview/getPreview.js +0 -75
  50. package/dist/es2019/card/v2/useFilePreview/getPreview/helpers.js +0 -76
  51. package/dist/es2019/card/v2/useFilePreview/getPreview/index.js +0 -3
  52. package/dist/es2019/card/v2/useFilePreview/getPreview/objectURLCache.js +0 -44
  53. package/dist/es2019/card/v2/useFilePreview/getPreview/videoSnapshot.js +0 -36
  54. package/dist/es2019/card/v2/useFilePreview/globalScope/getSSRData.js +0 -8
  55. package/dist/es2019/card/v2/useFilePreview/globalScope/globalScope.js +0 -48
  56. package/dist/es2019/card/v2/useFilePreview/globalScope/index.js +0 -2
  57. package/dist/es2019/card/v2/useFilePreview/globalScope/printScript.js +0 -16
  58. package/dist/es2019/card/v2/useFilePreview/globalScope/types.js +0 -1
  59. package/dist/es2019/card/v2/useFilePreview/helpers.js +0 -61
  60. package/dist/es2019/card/v2/useFilePreview/index.js +0 -1
  61. package/dist/es2019/card/v2/useFilePreview/types.js +0 -1
  62. package/dist/es2019/card/v2/useFilePreview/useFilePreview.js +0 -390
  63. package/dist/esm/card/v2/useFilePreview/analytics.js +0 -44
  64. package/dist/esm/card/v2/useFilePreview/errors.js +0 -133
  65. package/dist/esm/card/v2/useFilePreview/getPreview/cache.js +0 -32
  66. package/dist/esm/card/v2/useFilePreview/getPreview/filePreviewStatus.js +0 -40
  67. package/dist/esm/card/v2/useFilePreview/getPreview/getPreview.js +0 -112
  68. package/dist/esm/card/v2/useFilePreview/getPreview/helpers.js +0 -160
  69. package/dist/esm/card/v2/useFilePreview/getPreview/index.js +0 -3
  70. package/dist/esm/card/v2/useFilePreview/getPreview/objectURLCache.js +0 -78
  71. package/dist/esm/card/v2/useFilePreview/getPreview/videoSnapshot.js +0 -51
  72. package/dist/esm/card/v2/useFilePreview/globalScope/getSSRData.js +0 -8
  73. package/dist/esm/card/v2/useFilePreview/globalScope/globalScope.js +0 -56
  74. package/dist/esm/card/v2/useFilePreview/globalScope/index.js +0 -2
  75. package/dist/esm/card/v2/useFilePreview/globalScope/printScript.js +0 -25
  76. package/dist/esm/card/v2/useFilePreview/globalScope/types.js +0 -1
  77. package/dist/esm/card/v2/useFilePreview/helpers.js +0 -57
  78. package/dist/esm/card/v2/useFilePreview/index.js +0 -1
  79. package/dist/esm/card/v2/useFilePreview/types.js +0 -1
  80. package/dist/esm/card/v2/useFilePreview/useFilePreview.js +0 -453
  81. package/dist/types/card/v2/useFilePreview/analytics.d.ts +0 -28
  82. package/dist/types/card/v2/useFilePreview/errors.d.ts +0 -42
  83. package/dist/types/card/v2/useFilePreview/getPreview/cache.d.ts +0 -21
  84. package/dist/types/card/v2/useFilePreview/getPreview/filePreviewStatus.d.ts +0 -4
  85. package/dist/types/card/v2/useFilePreview/getPreview/getPreview.d.ts +0 -9
  86. package/dist/types/card/v2/useFilePreview/getPreview/helpers.d.ts +0 -10
  87. package/dist/types/card/v2/useFilePreview/getPreview/index.d.ts +0 -3
  88. package/dist/types/card/v2/useFilePreview/getPreview/objectURLCache.d.ts +0 -12
  89. package/dist/types/card/v2/useFilePreview/getPreview/videoSnapshot.d.ts +0 -1
  90. package/dist/types/card/v2/useFilePreview/globalScope/getSSRData.d.ts +0 -3
  91. package/dist/types/card/v2/useFilePreview/globalScope/globalScope.d.ts +0 -15
  92. package/dist/types/card/v2/useFilePreview/globalScope/index.d.ts +0 -4
  93. package/dist/types/card/v2/useFilePreview/globalScope/printScript.d.ts +0 -2
  94. package/dist/types/card/v2/useFilePreview/globalScope/types.d.ts +0 -8
  95. package/dist/types/card/v2/useFilePreview/helpers.d.ts +0 -11
  96. package/dist/types/card/v2/useFilePreview/index.d.ts +0 -2
  97. package/dist/types/card/v2/useFilePreview/types.d.ts +0 -18
  98. package/dist/types/card/v2/useFilePreview/useFilePreview.d.ts +0 -33
  99. package/dist/types-ts4.5/card/v2/useFilePreview/analytics.d.ts +0 -28
  100. package/dist/types-ts4.5/card/v2/useFilePreview/errors.d.ts +0 -42
  101. package/dist/types-ts4.5/card/v2/useFilePreview/getPreview/cache.d.ts +0 -21
  102. package/dist/types-ts4.5/card/v2/useFilePreview/getPreview/filePreviewStatus.d.ts +0 -4
  103. package/dist/types-ts4.5/card/v2/useFilePreview/getPreview/getPreview.d.ts +0 -9
  104. package/dist/types-ts4.5/card/v2/useFilePreview/getPreview/helpers.d.ts +0 -10
  105. package/dist/types-ts4.5/card/v2/useFilePreview/getPreview/index.d.ts +0 -3
  106. package/dist/types-ts4.5/card/v2/useFilePreview/getPreview/objectURLCache.d.ts +0 -12
  107. package/dist/types-ts4.5/card/v2/useFilePreview/getPreview/videoSnapshot.d.ts +0 -1
  108. package/dist/types-ts4.5/card/v2/useFilePreview/globalScope/getSSRData.d.ts +0 -3
  109. package/dist/types-ts4.5/card/v2/useFilePreview/globalScope/globalScope.d.ts +0 -15
  110. package/dist/types-ts4.5/card/v2/useFilePreview/globalScope/index.d.ts +0 -4
  111. package/dist/types-ts4.5/card/v2/useFilePreview/globalScope/printScript.d.ts +0 -2
  112. package/dist/types-ts4.5/card/v2/useFilePreview/globalScope/types.d.ts +0 -8
  113. package/dist/types-ts4.5/card/v2/useFilePreview/helpers.d.ts +0 -11
  114. package/dist/types-ts4.5/card/v2/useFilePreview/index.d.ts +0 -2
  115. package/dist/types-ts4.5/card/v2/useFilePreview/types.d.ts +0 -18
  116. package/dist/types-ts4.5/card/v2/useFilePreview/useFilePreview.d.ts +0 -33
@@ -1,64 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.isBigger = exports.createRequestDimensions = void 0;
7
- exports.useCurrentValueRef = useCurrentValueRef;
8
- exports.usePrevious = usePrevious;
9
- var _react = require("react");
10
- /**
11
- * Checks if at least one of next dimensions is bigger than current
12
- * If a single dimension is undefined, returns false
13
- */
14
- var isBigger = exports.isBigger = function isBigger(current, next) {
15
- var _ref = current || {},
16
- currentWidth = _ref.width,
17
- currentHeight = _ref.height;
18
- var _ref2 = next || {},
19
- nextWidth = _ref2.width,
20
- nextHeight = _ref2.height;
21
- if (!!currentWidth && !!currentHeight && !!nextWidth && !!nextHeight) {
22
- var nextIsWider = currentWidth < nextWidth;
23
- var nextIsHigher = currentHeight < nextHeight;
24
- return nextIsHigher || nextIsWider;
25
- } else {
26
- return false;
27
- }
28
- };
29
-
30
- /** Verifies if the current screen is retina display */
31
- function isRetina() {
32
- 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)';
33
- return window.devicePixelRatio > 1 || window.matchMedia && window.matchMedia(mediaQuery).matches;
34
- }
35
- var createRequestDimensions = exports.createRequestDimensions = function createRequestDimensions(dimensions) {
36
- if (!dimensions) {
37
- return;
38
- }
39
- var retinaFactor = isRetina() ? 2 : 1;
40
- var width = dimensions.width,
41
- height = dimensions.height;
42
- var result = {};
43
- if (width) {
44
- result.width = width * retinaFactor;
45
- }
46
- if (height) {
47
- result.height = height * retinaFactor;
48
- }
49
- return result;
50
- };
51
-
52
- /** Stores the provided value in a ref object to avoid "component rerenders" when the value is used as a hook dependency */
53
- function useCurrentValueRef(value) {
54
- var ref = (0, _react.useRef)(value);
55
- ref.current = value;
56
- return ref;
57
- }
58
- function usePrevious(value) {
59
- var ref = (0, _react.useRef)();
60
- (0, _react.useEffect)(function () {
61
- ref.current = value;
62
- }, [value]);
63
- return ref.current;
64
- }
@@ -1,12 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "useFilePreview", {
7
- enumerable: true,
8
- get: function get() {
9
- return _useFilePreview.useFilePreview;
10
- }
11
- });
12
- var _useFilePreview = require("./useFilePreview");
@@ -1,5 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
@@ -1,460 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.useFilePreview = void 0;
8
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
- var _mediaClient = require("@atlaskit/media-client");
13
- var _mediaClientReact = require("@atlaskit/media-client-react");
14
- var _mediaCommon = require("@atlaskit/media-common");
15
- var _react = require("react");
16
- var _errors = require("./errors");
17
- var _analytics = require("./analytics");
18
- var _helpers = require("./helpers");
19
- var _globalScope = require("./globalScope");
20
- var _getPreview = require("./getPreview");
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; }
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; }
23
- var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
24
- var _ref$resizeMode = _ref.resizeMode,
25
- resizeMode = _ref$resizeMode === void 0 ? 'crop' : _ref$resizeMode,
26
- identifier = _ref.identifier,
27
- ssr = _ref.ssr,
28
- dimensions = _ref.dimensions,
29
- traceContext = _ref.traceContext,
30
- previewDidRender = _ref.previewDidRender,
31
- skipRemote = _ref.skipRemote,
32
- mediaBlobUrlAttrs = _ref.mediaBlobUrlAttrs;
33
- var mediaClient = (0, _mediaClientReact.useMediaClient)();
34
- var _useState = (0, _react.useState)('loading'),
35
- _useState2 = (0, _slicedToArray2.default)(_useState, 2),
36
- status = _useState2[0],
37
- setStatus = _useState2[1];
38
- var _useState3 = (0, _react.useState)(),
39
- _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
40
- error = _useState4[0],
41
- setError = _useState4[1];
42
- var _useState5 = (0, _react.useState)(),
43
- _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
44
- nonCriticalError = _useState6[0],
45
- setNonCriticalError = _useState6[1];
46
- var _useState7 = (0, _react.useState)(false),
47
- _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
48
- isBannedLocalPreview = _useState8[0],
49
- setIsBannedLocalPreview = _useState8[1];
50
- var wasResolvedUpfrontPreviewRef = (0, _react.useRef)(false);
51
- var ssrReliabilityRef = (0, _react.useRef)(initialSsrReliability);
52
- var requestDimensions = (0, _react.useMemo)(function () {
53
- return dimensions ? (0, _helpers.createRequestDimensions)(dimensions) : undefined;
54
- }, [dimensions]);
55
- var requestDimensionsRef = (0, _helpers.useCurrentValueRef)(requestDimensions);
56
- var prevRequestDimensions = (0, _helpers.usePrevious)(requestDimensions);
57
- var imageURLParams = (0, _react.useMemo)(function () {
58
- return _objectSpread(_objectSpread({
59
- collection: identifier.collectionName,
60
- mode: resizeMode === 'stretchy-fit' ? 'full-fit' : resizeMode
61
- }, requestDimensions), {}, {
62
- allowAnimated: true
63
- });
64
- }, [requestDimensions, identifier.collectionName, resizeMode]);
65
- var previewInitializer = function previewInitializer() {
66
- var fileImageMode = (0, _mediaClient.imageResizeModeToFileImageMode)(resizeMode);
67
- var preview = _getPreview.mediaFilePreviewCache.get(identifier.id, fileImageMode);
68
- if (preview) {
69
- return preview;
70
- }
71
- if (ssr) {
72
- var ssrData = (0, _globalScope.getSSRData)(identifier);
73
- if (ssrData !== null && ssrData !== void 0 && ssrData.error) {
74
- ssrReliabilityRef.current.server = _objectSpread({
75
- status: 'fail'
76
- }, ssrData.error);
77
- }
78
- if (!(ssrData !== null && ssrData !== void 0 && ssrData.dataURI)) {
79
- try {
80
- return (0, _getPreview.getSSRPreview)(ssr, mediaClient, identifier.id, imageURLParams, mediaBlobUrlAttrs);
81
- } catch (e) {
82
- ssrReliabilityRef.current[ssr] = _objectSpread({
83
- status: 'fail'
84
- }, (0, _analytics.extractErrorInfo)(e));
85
- }
86
- } else {
87
- var _dimensions = ssrData.dimensions,
88
- dataURI = ssrData.dataURI;
89
- return {
90
- dataURI: dataURI,
91
- dimensions: _dimensions,
92
- source: 'ssr-data'
93
- };
94
- }
95
- }
96
- };
97
- var _useState9 = (0, _react.useState)(previewInitializer),
98
- _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
99
- preview = _useState10[0],
100
- setPreview = _useState10[1];
101
- var prevPreview = (0, _helpers.usePrevious)(preview);
102
- var _useFileState = (0, _mediaClientReact.useFileState)(identifier.id, {
103
- skipRemote: skipRemote,
104
- collectionName: identifier.collectionName,
105
- occurrenceKey: identifier.occurrenceKey
106
- }),
107
- fileState = _useFileState.fileState;
108
-
109
- //----------------------------------------------------------------
110
- // Update status
111
- //----------------------------------------------------------------
112
-
113
- // TOOD: make a full hook reset (remount) on New identifier or client
114
- (0, _react.useEffect)(function () {
115
- setStatus('loading');
116
- }, [identifier]);
117
- var updateFileStateRef = (0, _helpers.useCurrentValueRef)(function () {
118
- if (fileState) {
119
- // do not update the status if the status is final
120
- if (['complete', 'error', 'failed-processing'].includes(status)) {
121
- return;
122
- }
123
- if (fileState.status !== 'error') {
124
- var mediaType = 'mediaType' in fileState ? fileState.mediaType : undefined;
125
- var isPreviewable = !!mediaType && ['audio', 'video', 'image', 'doc'].indexOf(mediaType) > -1;
126
- var isPreviewableFileState = !!fileState.preview;
127
- var isSupportedLocalPreview = mediaType === 'image' || mediaType === 'video';
128
- var hasLocalPreview = !isBannedLocalPreview && isPreviewableFileState && isSupportedLocalPreview && !!fileState.mimeType && (0, _mediaCommon.isMimeTypeSupportedByBrowser)(fileState.mimeType);
129
- var hasRemotePreview = (0, _mediaClient.isImageRepresentationReady)(fileState);
130
- var hasPreview = hasLocalPreview || hasRemotePreview;
131
- var newStatus;
132
- switch (fileState.status) {
133
- case 'uploading':
134
- case 'failed-processing':
135
- case 'processing':
136
- newStatus = fileState.status;
137
- break;
138
- case 'processed':
139
- if (!isPreviewable || !hasPreview) {
140
- newStatus = 'complete';
141
- break;
142
- }
143
- newStatus = 'loading-preview';
144
- break;
145
- default:
146
- newStatus = 'loading';
147
- }
148
- setStatus(newStatus);
149
- } else {
150
- var e = new _mediaClientReact.MediaFileStateError(fileState.id, fileState.reason, fileState.message, fileState.details);
151
- var errorReason = status === 'uploading' ? 'upload' : 'metadata-fetch';
152
- setError(new _errors.MediaFilePreviewError(errorReason, e));
153
- setStatus('error');
154
- }
155
- }
156
- });
157
- (0, _react.useEffect)(function () {
158
- updateFileStateRef.current();
159
- }, [fileState, updateFileStateRef]);
160
- (0, _react.useEffect)(function () {
161
- if (previewDidRender &&
162
- // We should't complete if status is uploading
163
- ['loading-preview', 'processing'].includes(status)) {
164
- setStatus('complete');
165
- // TODO MEX-788: add test for "do not remove the preview when unsubscribing".
166
- setIsBannedLocalPreview(false); // CXP-2723 TODO: we might be able to remove this??
167
- }
168
- }, [previewDidRender, status]);
169
-
170
- // CXP-2723 TODO: Create test cases for banning local preview after status is complete
171
-
172
- //----------------------------------------------------------------
173
- // Preview Fetch Helper
174
- //----------------------------------------------------------------
175
- var getAndCacheRemotePreviewRef = (0, _helpers.useCurrentValueRef)(function () {
176
- return (0, _getPreview.getAndCacheRemotePreview)(mediaClient, identifier.id, requestDimensions || {}, imageURLParams, mediaBlobUrlAttrs, traceContext);
177
- });
178
-
179
- //----------------------------------------------------------------
180
- // Cache SSR Preview
181
- //----------------------------------------------------------------
182
- (0, _react.useEffect)(function () {
183
- if (!skipRemote && ssr && !!preview && (0, _getPreview.isSSRClientPreview)(preview)) {
184
- // Since the SSR preview brings the token in the query params,
185
- // We need to fetch the remote preview to be able to cache it,
186
- getAndCacheRemotePreviewRef.current().catch(function () {
187
- // No need to log this error.
188
- // If preview fails, it will be refetched later
189
- //TODO: test this catch
190
- // https://product-fabric.atlassian.net/browse/MEX-1071
191
- });
192
- }
193
- }, [preview, identifier, skipRemote, ssr, getAndCacheRemotePreviewRef]);
194
-
195
- //----------------------------------------------------------------
196
- // Refetch SRR Preview if dimensions from Server have changed and are bigger,
197
- //----------------------------------------------------------------
198
- (0, _react.useEffect)(function () {
199
- // CXP-2813 TODO: This is called too many times if the refetch failed. Should be called only once
200
- if (preview && !skipRemote && (0, _getPreview.isSSRDataPreview)(preview) && (0, _helpers.isBigger)(preview.dimensions, requestDimensions)) {
201
- getAndCacheRemotePreviewRef.current().then(setPreview).catch(function (e) {
202
- var wrappedError = (0, _errors.ensureMediaFilePreviewError)('remote-preview-fetch-ssr', e, true);
203
- setNonCriticalError(wrappedError);
204
- });
205
- }
206
- }, [getAndCacheRemotePreviewRef, identifier, preview, requestDimensions, skipRemote]);
207
-
208
- //----------------------------------------------------------------
209
- // Upfront Preview
210
- //----------------------------------------------------------------
211
- (0, _react.useEffect)(function () {
212
- var resolveUpfrontPreview = /*#__PURE__*/function () {
213
- var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
214
- var fetchedDimensions, newPreview, areValidFetchedDimensions;
215
- return _regenerator.default.wrap(function _callee$(_context) {
216
- while (1) switch (_context.prev = _context.next) {
217
- case 0:
218
- // We block any possible future call to this method regardless of the outcome (success or fail)
219
- // If it fails, the normal preview fetch should occur after the file state is fetched anyways
220
- wasResolvedUpfrontPreviewRef.current = true;
221
- _context.prev = 1;
222
- fetchedDimensions = _objectSpread({}, requestDimensions);
223
- _context.next = 5;
224
- return getAndCacheRemotePreviewRef.current();
225
- case 5:
226
- newPreview = _context.sent;
227
- areValidFetchedDimensions = !(0, _helpers.isBigger)(fetchedDimensions, requestDimensionsRef.current); // If there are new and bigger dimensions in the props, and the upfront preview is still resolving,
228
- // the fetched preview is no longer valid, and thus, we dismiss it
229
- if (areValidFetchedDimensions) {
230
- setPreview(newPreview);
231
- }
232
- _context.next = 12;
233
- break;
234
- case 10:
235
- _context.prev = 10;
236
- _context.t0 = _context["catch"](1);
237
- case 12:
238
- case "end":
239
- return _context.stop();
240
- }
241
- }, _callee, null, [[1, 10]]);
242
- }));
243
- return function resolveUpfrontPreview() {
244
- return _ref2.apply(this, arguments);
245
- };
246
- }();
247
-
248
- // CXP-2723 TODO: `hadSSRPreview` is most likely redundant
249
- var hadSSRPreview = ssr === 'client' && !!prevPreview && (0, _getPreview.isSSRClientPreview)(prevPreview);
250
- if (!preview && !wasResolvedUpfrontPreviewRef.current && (!skipRemote || hadSSRPreview)) {
251
- resolveUpfrontPreview();
252
- }
253
- }, [preview, requestDimensions, requestDimensionsRef, getAndCacheRemotePreviewRef, identifier, skipRemote, prevPreview, ssr]);
254
-
255
- //----------------------------------------------------------------
256
- // Fetch Preview
257
- //----------------------------------------------------------------
258
-
259
- var resolvePreviewRef = (0, _helpers.useCurrentValueRef)( /*#__PURE__*/function () {
260
- var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(identifier, fileState) {
261
- var filePreview, isRemotePreviewReady, mode, cachedPreview, dimensionsAreBigger, localPreview, remotePreview, wrappedError;
262
- return _regenerator.default.wrap(function _callee2$(_context2) {
263
- while (1) switch (_context2.prev = _context2.next) {
264
- case 0:
265
- filePreview = isBannedLocalPreview ? undefined : fileState.status !== 'error' && 'mimeType' in fileState && (0, _mediaCommon.isMimeTypeSupportedByBrowser)(fileState.mimeType) ? fileState.preview : undefined;
266
- isRemotePreviewReady = (0, _mediaClient.isImageRepresentationReady)(fileState);
267
- _context2.prev = 2;
268
- mode = imageURLParams.mode;
269
- cachedPreview = _getPreview.mediaFilePreviewCache.get(identifier.id, mode);
270
- dimensionsAreBigger = (0, _helpers.isBigger)(cachedPreview === null || cachedPreview === void 0 ? void 0 : cachedPreview.dimensions, requestDimensions);
271
- if (!(cachedPreview && !dimensionsAreBigger)) {
272
- _context2.next = 8;
273
- break;
274
- }
275
- return _context2.abrupt("return", cachedPreview);
276
- case 8:
277
- _context2.prev = 8;
278
- if (!filePreview) {
279
- _context2.next = 15;
280
- break;
281
- }
282
- _context2.next = 12;
283
- return (0, _getPreview.getAndCacheLocalPreview)(identifier.id, filePreview, requestDimensions || {}, mode, mediaBlobUrlAttrs);
284
- case 12:
285
- localPreview = _context2.sent;
286
- setPreview(localPreview);
287
- return _context2.abrupt("return");
288
- case 15:
289
- _context2.next = 22;
290
- break;
291
- case 17:
292
- _context2.prev = 17;
293
- _context2.t0 = _context2["catch"](8);
294
- /**
295
- * We report the error if:
296
- * - local preview is supported and fails
297
- * - local preview is unsupported and remote preview is NOT READY
298
- * i.e. the function was called for "no reason".
299
- * We DON'T report the error if:
300
- * - local preview is unsupported and remote preview IS READY
301
- * i.e. local preview is available and not supported,
302
- * but we are after the remote preview instead.
303
- */
304
- if (!(0, _errors.isUnsupportedLocalPreviewError)(_context2.t0) || (0, _errors.isUnsupportedLocalPreviewError)(_context2.t0) && !isRemotePreviewReady) {
305
- // CXP-2723 TODO: We might have to wrap this error in MediaCardError
306
- setNonCriticalError(_context2.t0);
307
- }
308
- /**
309
- * No matter the reason why the local preview failed, we break the process
310
- * if there is no remote preview available
311
- */
312
- if (isRemotePreviewReady) {
313
- _context2.next = 22;
314
- break;
315
- }
316
- throw _context2.t0;
317
- case 22:
318
- if (isRemotePreviewReady) {
319
- _context2.next = 24;
320
- break;
321
- }
322
- throw new _errors.MediaFilePreviewError('remote-preview-not-ready');
323
- case 24:
324
- _context2.next = 26;
325
- return getAndCacheRemotePreviewRef.current();
326
- case 26:
327
- remotePreview = _context2.sent;
328
- setPreview(remotePreview);
329
- return _context2.abrupt("return");
330
- case 31:
331
- _context2.prev = 31;
332
- _context2.t1 = _context2["catch"](2);
333
- wrappedError = (0, _errors.ensureMediaFilePreviewError)('preview-fetch', _context2.t1); // If remote preview fails, we set status 'error'
334
- // If local preview fails (i.e, no remote preview available),
335
- // we can stay in the same status until there is a remote preview available
336
- // If it's any other error we set status 'error'
337
- if ((0, _errors.isLocalPreviewError)(wrappedError)) {
338
- // This error should already been logged inside the getCardPreview. No need to log it here.
339
- setIsBannedLocalPreview(true);
340
- } else {
341
- if (!['complete', 'error', 'failed-processing'].includes(status)) {
342
- setStatus('error');
343
- setError(wrappedError);
344
- }
345
- }
346
- case 35:
347
- case "end":
348
- return _context2.stop();
349
- }
350
- }, _callee2, null, [[2, 31], [8, 17]]);
351
- }));
352
- return function (_x, _x2) {
353
- return _ref3.apply(this, arguments);
354
- };
355
- }());
356
- (0, _react.useEffect)(function () {
357
- if (fileState && wasResolvedUpfrontPreviewRef.current && (0, _getPreview.isPreviewableStatus)(status, (0, _getPreview.extractFilePreviewStatus)(fileState, isBannedLocalPreview)) && (!preview || (0, _helpers.isBigger)(prevRequestDimensions, requestDimensions))) {
358
- resolvePreviewRef.current(identifier, fileState);
359
- }
360
- }, [fileState, identifier, isBannedLocalPreview, prevRequestDimensions, preview, requestDimensions, resolvePreviewRef, status]);
361
-
362
- //----------------------------------------------------------------
363
- // RETURN
364
- //----------------------------------------------------------------
365
-
366
- var onImageError = (0, _react.useCallback)(function (newPreview) {
367
- if (newPreview) {
368
- var failedSSRObject = _objectSpread({
369
- status: 'fail'
370
- }, (0, _analytics.extractErrorInfo)(new _errors.ImageLoadError(newPreview.source)));
371
- if ((0, _getPreview.isSSRClientPreview)(newPreview)) {
372
- ssrReliabilityRef.current.client = failedSSRObject;
373
- }
374
-
375
- /*
376
- If the preview 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.
377
- */
378
-
379
- if ((0, _getPreview.isSSRDataPreview)(newPreview)) {
380
- ssrReliabilityRef.current.server = failedSSRObject;
381
- ssrReliabilityRef.current.client = failedSSRObject;
382
- }
383
- }
384
-
385
- // If the dataURI has been replaced, we can dismiss this error
386
- if ((newPreview === null || newPreview === void 0 ? void 0 : newPreview.dataURI) !== (preview === null || preview === void 0 ? void 0 : preview.dataURI)) {
387
- return;
388
- }
389
- var error = new _errors.ImageLoadError(newPreview === null || newPreview === void 0 ? void 0 : newPreview.source);
390
- var isLocal = newPreview && (0, _getPreview.isLocalPreview)(newPreview);
391
- var isSSR = newPreview && ((0, _getPreview.isSSRClientPreview)(newPreview) || (0, _getPreview.isSSRDataPreview)(newPreview));
392
- if (isLocal || isSSR) {
393
- if (isLocal) {
394
- setIsBannedLocalPreview(true);
395
- setNonCriticalError(error);
396
- }
397
- var fileImageMode = (0, _mediaClient.imageResizeModeToFileImageMode)(resizeMode);
398
- _getPreview.mediaFilePreviewCache.remove(identifier.id, fileImageMode);
399
- setPreview(undefined);
400
- } else {
401
- if (!['complete', 'error', 'failed-processing'].includes(status)) {
402
- setStatus('error');
403
- setError(error);
404
- }
405
- }
406
- }, [identifier.id, preview === null || preview === void 0 ? void 0 : preview.dataURI, resizeMode, status]);
407
- var onImageLoad = (0, _react.useCallback)(function (newPreview) {
408
- if (newPreview) {
409
- if ((0, _getPreview.isSSRClientPreview)(newPreview) && ssrReliabilityRef.current.client.status === 'unknown') {
410
- ssrReliabilityRef.current.client = {
411
- status: 'success'
412
- };
413
- }
414
-
415
- /*
416
- 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.
417
- */
418
-
419
- if ((0, _getPreview.isSSRDataPreview)(newPreview) && ssrReliabilityRef.current.server.status === 'unknown') {
420
- ssrReliabilityRef.current.server = {
421
- status: 'success'
422
- };
423
- ssrReliabilityRef.current.client = {
424
- status: 'success'
425
- };
426
- }
427
- }
428
-
429
- // If the dataURI has been replaced, we can dismiss this callback
430
- if ((newPreview === null || newPreview === void 0 ? void 0 : newPreview.dataURI) !== (preview === null || preview === void 0 ? void 0 : preview.dataURI)) {
431
- return;
432
- }
433
- }, [preview === null || preview === void 0 ? void 0 : preview.dataURI]);
434
-
435
- // FOR SSR
436
- var getScriptProps = function getScriptProps() {
437
- var _ssrReliabilityRef$cu;
438
- return (0, _globalScope.generateScriptProps)(identifier, preview === null || preview === void 0 ? void 0 : preview.dataURI, requestDimensions, ((_ssrReliabilityRef$cu = ssrReliabilityRef.current.server) === null || _ssrReliabilityRef$cu === void 0 ? void 0 : _ssrReliabilityRef$cu.status) === 'fail' ? ssrReliabilityRef.current.server : undefined);
439
- };
440
-
441
- // CXP-2723 TODO: should consider simplifying our analytics, and how
442
- // we might get rid of ssrReliabiltyRef from our hook
443
- return {
444
- preview: preview,
445
- error: error,
446
- nonCriticalError: nonCriticalError,
447
- ssrReliabilityRef: ssrReliabilityRef,
448
- onImageError: onImageError,
449
- onImageLoad: onImageLoad,
450
- getScriptProps: getScriptProps
451
- };
452
- };
453
- var initialSsrReliability = {
454
- server: {
455
- status: 'unknown'
456
- },
457
- client: {
458
- status: 'unknown'
459
- }
460
- };
@@ -1,44 +0,0 @@
1
- import { getMediaClientErrorReason, isRequestError } from '@atlaskit/media-client';
2
- import { isMediaFilePreviewError, getFileStateErrorReason, isMediaFileStateError } from './errors';
3
- export const getErrorTraceContext = error => {
4
- if (isMediaFilePreviewError(error) && !!error.secondaryError) {
5
- if (isRequestError(error.secondaryError)) {
6
- var _error$secondaryError;
7
- return (_error$secondaryError = error.secondaryError.metadata) === null || _error$secondaryError === void 0 ? void 0 : _error$secondaryError.traceContext;
8
- } else if (isMediaFileStateError(error.secondaryError)) {
9
- var _error$secondaryError2, _error$secondaryError3;
10
- return (_error$secondaryError2 = error.secondaryError.details) === null || _error$secondaryError2 === void 0 ? void 0 : (_error$secondaryError3 = _error$secondaryError2.metadata) === null || _error$secondaryError3 === void 0 ? void 0 : _error$secondaryError3.traceContext;
11
- }
12
- }
13
- };
14
- export const getRenderErrorFailReason = error => {
15
- if (isMediaFilePreviewError(error)) {
16
- return error.primaryReason;
17
- } else {
18
- return 'nativeError';
19
- }
20
- };
21
- export const getRenderErrorErrorReason = error => {
22
- if (isMediaFilePreviewError(error) && error.secondaryError) {
23
- const mediaClientReason = isMediaFileStateError(error.secondaryError) ? getFileStateErrorReason(error.secondaryError) : getMediaClientErrorReason(error.secondaryError);
24
- if (mediaClientReason !== 'unknown') {
25
- return mediaClientReason;
26
- }
27
- }
28
- return 'nativeError';
29
- };
30
- export const getRenderErrorErrorDetail = error => {
31
- if (isMediaFilePreviewError(error) && error.secondaryError) {
32
- return error.secondaryError.message;
33
- } else {
34
- return error.message;
35
- }
36
- };
37
- export const extractErrorInfo = (error, metadataTraceContext) => {
38
- return {
39
- failReason: getRenderErrorFailReason(error),
40
- error: getRenderErrorErrorReason(error),
41
- errorDetail: getRenderErrorErrorDetail(error),
42
- metadataTraceContext: metadataTraceContext !== null && metadataTraceContext !== void 0 ? metadataTraceContext : getErrorTraceContext(error)
43
- };
44
- };
@@ -1,90 +0,0 @@
1
- import { MediaFileStateError } from '@atlaskit/media-client-react';
2
-
3
- /**
4
- * Primary reason is logged through Data Portal.
5
- * Make sure all the values are whitelisted in Measure -> Event Regitry -> "mediaCardRender failed" event
6
- */
7
-
8
- export class MediaFilePreviewError extends Error {
9
- constructor(primaryReason, secondaryError) {
10
- super(primaryReason);
11
- // https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-2.html#support-for-newtarget
12
- this.primaryReason = primaryReason;
13
- this.secondaryError = secondaryError;
14
- Object.setPrototypeOf(this, new.target.prototype);
15
-
16
- // https://v8.dev/docs/stack-trace-api
17
- if ('captureStackTrace' in Error) {
18
- Error.captureStackTrace(this, new.target);
19
- }
20
- }
21
- }
22
- export class LocalPreviewError extends MediaFilePreviewError {
23
- constructor(primaryReason, secondaryError) {
24
- super(primaryReason, secondaryError);
25
- this.primaryReason = primaryReason;
26
- this.secondaryError = secondaryError;
27
- }
28
- }
29
- export class RemotePreviewError extends MediaFilePreviewError {
30
- constructor(primaryReason, secondaryError) {
31
- super(primaryReason, secondaryError);
32
- this.primaryReason = primaryReason;
33
- this.secondaryError = secondaryError;
34
- }
35
- }
36
- export class SsrPreviewError extends MediaFilePreviewError {
37
- constructor(primaryReason, secondaryError) {
38
- super(primaryReason, secondaryError);
39
- this.primaryReason = primaryReason;
40
- this.secondaryError = secondaryError;
41
- }
42
- }
43
- const getImageLoadPrimaryReason = source => {
44
- switch (source) {
45
- case 'cache-remote':
46
- return 'cache-remote-uri';
47
- case 'cache-local':
48
- return 'cache-local-uri';
49
- case 'external':
50
- return 'external-uri';
51
- case 'local':
52
- return 'local-uri';
53
- case 'remote':
54
- return 'remote-uri';
55
- // This fail reason will come from a bug, most likely.
56
- default:
57
- return `unknown-uri`;
58
- }
59
- };
60
- export class ImageLoadError extends MediaFilePreviewError {
61
- constructor(source) {
62
- super(getImageLoadPrimaryReason(source));
63
- }
64
- }
65
- export function isMediaFilePreviewError(err) {
66
- return err instanceof MediaFilePreviewError;
67
- }
68
- export const isLocalPreviewError = err => err instanceof LocalPreviewError;
69
- export const isRemotePreviewError = err => err instanceof RemotePreviewError;
70
- export const isUnsupportedLocalPreviewError = err => isMediaFilePreviewError(err) && err.primaryReason === 'local-preview-unsupported';
71
-
72
- // In a try/catch statement, the error caught is the type of unknown.
73
- // We can use this helper to ensure that the error handled is the type of MediaFilePreviewError if unsure
74
- // If updatePrimaryReason is true, if it's a MediaFilePreviewError already, it will update it's primary reason
75
- export const ensureMediaFilePreviewError = (primaryReason, error, updatePrimaryReason) => {
76
- if (isMediaFilePreviewError(error)) {
77
- if (updatePrimaryReason && error.primaryReason !== primaryReason) {
78
- return new MediaFilePreviewError(primaryReason, error.secondaryError);
79
- }
80
- return error;
81
- }
82
- return new MediaFilePreviewError(primaryReason, error);
83
- };
84
- export function isMediaFileStateError(err) {
85
- return err instanceof MediaFileStateError;
86
- }
87
- export function getFileStateErrorReason(err) {
88
- var _err$details$reason, _err$details;
89
- return (_err$details$reason = (_err$details = err.details) === null || _err$details === void 0 ? void 0 : _err$details.reason) !== null && _err$details$reason !== void 0 ? _err$details$reason : 'unknown';
90
- }