@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,390 +0,0 @@
1
- import { imageResizeModeToFileImageMode, isImageRepresentationReady } from '@atlaskit/media-client';
2
- import { MediaFileStateError, useFileState, useMediaClient } from '@atlaskit/media-client-react';
3
- import { isMimeTypeSupportedByBrowser } from '@atlaskit/media-common';
4
- import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
5
- import { ensureMediaFilePreviewError, ImageLoadError, isLocalPreviewError, isUnsupportedLocalPreviewError, MediaFilePreviewError } from './errors';
6
- import { extractErrorInfo } from './analytics';
7
- import { isBigger, createRequestDimensions, useCurrentValueRef, usePrevious } from './helpers';
8
- import { generateScriptProps, getSSRData } from './globalScope';
9
- import { getAndCacheRemotePreview, getSSRPreview, isLocalPreview, isSSRClientPreview, isSSRDataPreview, isPreviewableStatus, extractFilePreviewStatus, mediaFilePreviewCache, getAndCacheLocalPreview } from './getPreview';
10
- export const useFilePreview = ({
11
- resizeMode = 'crop',
12
- identifier,
13
- ssr,
14
- dimensions,
15
- traceContext,
16
- previewDidRender,
17
- skipRemote,
18
- mediaBlobUrlAttrs
19
- }) => {
20
- const mediaClient = useMediaClient();
21
- const [status, setStatus] = useState('loading');
22
- const [error, setError] = useState();
23
- const [nonCriticalError, setNonCriticalError] = useState();
24
- const [isBannedLocalPreview, setIsBannedLocalPreview] = useState(false);
25
- const wasResolvedUpfrontPreviewRef = useRef(false);
26
- const ssrReliabilityRef = useRef(initialSsrReliability);
27
- const requestDimensions = useMemo(() => dimensions ? createRequestDimensions(dimensions) : undefined, [dimensions]);
28
- const requestDimensionsRef = useCurrentValueRef(requestDimensions);
29
- const prevRequestDimensions = usePrevious(requestDimensions);
30
- const imageURLParams = useMemo(() => ({
31
- collection: identifier.collectionName,
32
- mode: resizeMode === 'stretchy-fit' ? 'full-fit' : resizeMode,
33
- ...requestDimensions,
34
- allowAnimated: true
35
- }), [requestDimensions, identifier.collectionName, resizeMode]);
36
- const previewInitializer = () => {
37
- const fileImageMode = imageResizeModeToFileImageMode(resizeMode);
38
- const preview = mediaFilePreviewCache.get(identifier.id, fileImageMode);
39
- if (preview) {
40
- return preview;
41
- }
42
- if (ssr) {
43
- const ssrData = getSSRData(identifier);
44
- if (ssrData !== null && ssrData !== void 0 && ssrData.error) {
45
- ssrReliabilityRef.current.server = {
46
- status: 'fail',
47
- ...ssrData.error
48
- };
49
- }
50
- if (!(ssrData !== null && ssrData !== void 0 && ssrData.dataURI)) {
51
- try {
52
- return getSSRPreview(ssr, mediaClient, identifier.id, imageURLParams, mediaBlobUrlAttrs);
53
- } catch (e) {
54
- ssrReliabilityRef.current[ssr] = {
55
- status: 'fail',
56
- ...extractErrorInfo(e)
57
- };
58
- }
59
- } else {
60
- const {
61
- dimensions,
62
- dataURI
63
- } = ssrData;
64
- return {
65
- dataURI,
66
- dimensions,
67
- source: 'ssr-data'
68
- };
69
- }
70
- }
71
- };
72
- const [preview, setPreview] = useState(previewInitializer);
73
- const prevPreview = usePrevious(preview);
74
- const {
75
- fileState
76
- } = useFileState(identifier.id, {
77
- skipRemote,
78
- collectionName: identifier.collectionName,
79
- occurrenceKey: identifier.occurrenceKey
80
- });
81
-
82
- //----------------------------------------------------------------
83
- // Update status
84
- //----------------------------------------------------------------
85
-
86
- // TOOD: make a full hook reset (remount) on New identifier or client
87
- useEffect(() => {
88
- setStatus('loading');
89
- }, [identifier]);
90
- const updateFileStateRef = useCurrentValueRef(() => {
91
- if (fileState) {
92
- // do not update the status if the status is final
93
- if (['complete', 'error', 'failed-processing'].includes(status)) {
94
- return;
95
- }
96
- if (fileState.status !== 'error') {
97
- const mediaType = 'mediaType' in fileState ? fileState.mediaType : undefined;
98
- const isPreviewable = !!mediaType && ['audio', 'video', 'image', 'doc'].indexOf(mediaType) > -1;
99
- const isPreviewableFileState = !!fileState.preview;
100
- const isSupportedLocalPreview = mediaType === 'image' || mediaType === 'video';
101
- const hasLocalPreview = !isBannedLocalPreview && isPreviewableFileState && isSupportedLocalPreview && !!fileState.mimeType && isMimeTypeSupportedByBrowser(fileState.mimeType);
102
- const hasRemotePreview = isImageRepresentationReady(fileState);
103
- const hasPreview = hasLocalPreview || hasRemotePreview;
104
- let newStatus;
105
- switch (fileState.status) {
106
- case 'uploading':
107
- case 'failed-processing':
108
- case 'processing':
109
- newStatus = fileState.status;
110
- break;
111
- case 'processed':
112
- if (!isPreviewable || !hasPreview) {
113
- newStatus = 'complete';
114
- break;
115
- }
116
- newStatus = 'loading-preview';
117
- break;
118
- default:
119
- newStatus = 'loading';
120
- }
121
- setStatus(newStatus);
122
- } else {
123
- const e = new MediaFileStateError(fileState.id, fileState.reason, fileState.message, fileState.details);
124
- const errorReason = status === 'uploading' ? 'upload' : 'metadata-fetch';
125
- setError(new MediaFilePreviewError(errorReason, e));
126
- setStatus('error');
127
- }
128
- }
129
- });
130
- useEffect(() => {
131
- updateFileStateRef.current();
132
- }, [fileState, updateFileStateRef]);
133
- useEffect(() => {
134
- if (previewDidRender &&
135
- // We should't complete if status is uploading
136
- ['loading-preview', 'processing'].includes(status)) {
137
- setStatus('complete');
138
- // TODO MEX-788: add test for "do not remove the preview when unsubscribing".
139
- setIsBannedLocalPreview(false); // CXP-2723 TODO: we might be able to remove this??
140
- }
141
- }, [previewDidRender, status]);
142
-
143
- // CXP-2723 TODO: Create test cases for banning local preview after status is complete
144
-
145
- //----------------------------------------------------------------
146
- // Preview Fetch Helper
147
- //----------------------------------------------------------------
148
- const getAndCacheRemotePreviewRef = useCurrentValueRef(() => {
149
- return getAndCacheRemotePreview(mediaClient, identifier.id, requestDimensions || {}, imageURLParams, mediaBlobUrlAttrs, traceContext);
150
- });
151
-
152
- //----------------------------------------------------------------
153
- // Cache SSR Preview
154
- //----------------------------------------------------------------
155
- useEffect(() => {
156
- if (!skipRemote && ssr && !!preview && isSSRClientPreview(preview)) {
157
- // Since the SSR preview brings the token in the query params,
158
- // We need to fetch the remote preview to be able to cache it,
159
- getAndCacheRemotePreviewRef.current().catch(() => {
160
- // No need to log this error.
161
- // If preview fails, it will be refetched later
162
- //TODO: test this catch
163
- // https://product-fabric.atlassian.net/browse/MEX-1071
164
- });
165
- }
166
- }, [preview, identifier, skipRemote, ssr, getAndCacheRemotePreviewRef]);
167
-
168
- //----------------------------------------------------------------
169
- // Refetch SRR Preview if dimensions from Server have changed and are bigger,
170
- //----------------------------------------------------------------
171
- useEffect(() => {
172
- // CXP-2813 TODO: This is called too many times if the refetch failed. Should be called only once
173
- if (preview && !skipRemote && isSSRDataPreview(preview) && isBigger(preview.dimensions, requestDimensions)) {
174
- getAndCacheRemotePreviewRef.current().then(setPreview).catch(e => {
175
- const wrappedError = ensureMediaFilePreviewError('remote-preview-fetch-ssr', e, true);
176
- setNonCriticalError(wrappedError);
177
- });
178
- }
179
- }, [getAndCacheRemotePreviewRef, identifier, preview, requestDimensions, skipRemote]);
180
-
181
- //----------------------------------------------------------------
182
- // Upfront Preview
183
- //----------------------------------------------------------------
184
- useEffect(() => {
185
- const resolveUpfrontPreview = async () => {
186
- // We block any possible future call to this method regardless of the outcome (success or fail)
187
- // If it fails, the normal preview fetch should occur after the file state is fetched anyways
188
- wasResolvedUpfrontPreviewRef.current = true;
189
- try {
190
- const fetchedDimensions = {
191
- ...requestDimensions
192
- };
193
- const newPreview = await getAndCacheRemotePreviewRef.current();
194
- const areValidFetchedDimensions = !isBigger(fetchedDimensions, requestDimensionsRef.current);
195
-
196
- // If there are new and bigger dimensions in the props, and the upfront preview is still resolving,
197
- // the fetched preview is no longer valid, and thus, we dismiss it
198
- if (areValidFetchedDimensions) {
199
- setPreview(newPreview);
200
- }
201
- } catch (e) {
202
- // NO need to log error. If this call fails, a refetch will happen after
203
- }
204
- };
205
-
206
- // CXP-2723 TODO: `hadSSRPreview` is most likely redundant
207
- const hadSSRPreview = ssr === 'client' && !!prevPreview && isSSRClientPreview(prevPreview);
208
- if (!preview && !wasResolvedUpfrontPreviewRef.current && (!skipRemote || hadSSRPreview)) {
209
- resolveUpfrontPreview();
210
- }
211
- }, [preview, requestDimensions, requestDimensionsRef, getAndCacheRemotePreviewRef, identifier, skipRemote, prevPreview, ssr]);
212
-
213
- //----------------------------------------------------------------
214
- // Fetch Preview
215
- //----------------------------------------------------------------
216
-
217
- const resolvePreviewRef = useCurrentValueRef(async (identifier, fileState) => {
218
- const filePreview = isBannedLocalPreview ? undefined : fileState.status !== 'error' && 'mimeType' in fileState && isMimeTypeSupportedByBrowser(fileState.mimeType) ? fileState.preview : undefined;
219
- const isRemotePreviewReady = isImageRepresentationReady(fileState);
220
- try {
221
- const mode = imageURLParams.mode;
222
- const cachedPreview = mediaFilePreviewCache.get(identifier.id, mode);
223
- const dimensionsAreBigger = isBigger(cachedPreview === null || cachedPreview === void 0 ? void 0 : cachedPreview.dimensions, requestDimensions);
224
- if (cachedPreview && !dimensionsAreBigger) {
225
- return cachedPreview;
226
- }
227
- try {
228
- if (filePreview) {
229
- const localPreview = await getAndCacheLocalPreview(identifier.id, filePreview, requestDimensions || {}, mode, mediaBlobUrlAttrs);
230
- setPreview(localPreview);
231
- return;
232
- }
233
- } catch (e) {
234
- /**
235
- * We report the error if:
236
- * - local preview is supported and fails
237
- * - local preview is unsupported and remote preview is NOT READY
238
- * i.e. the function was called for "no reason".
239
- * We DON'T report the error if:
240
- * - local preview is unsupported and remote preview IS READY
241
- * i.e. local preview is available and not supported,
242
- * but we are after the remote preview instead.
243
- */
244
- if (!isUnsupportedLocalPreviewError(e) || isUnsupportedLocalPreviewError(e) && !isRemotePreviewReady) {
245
- // CXP-2723 TODO: We might have to wrap this error in MediaCardError
246
- setNonCriticalError(e);
247
- }
248
- /**
249
- * No matter the reason why the local preview failed, we break the process
250
- * if there is no remote preview available
251
- */
252
- if (!isRemotePreviewReady) {
253
- throw e;
254
- }
255
- }
256
- if (!isRemotePreviewReady) {
257
- /**
258
- * We throw this in case this function has been called
259
- * without checking isRemotePreviewReady first.
260
- * If remote preview is not ready, the call to getCardPreviewFromBackend
261
- * will generate a console error due to a 404 code
262
- */
263
- throw new MediaFilePreviewError('remote-preview-not-ready');
264
- }
265
- const remotePreview = await getAndCacheRemotePreviewRef.current();
266
- setPreview(remotePreview);
267
- return;
268
- } catch (e) {
269
- const wrappedError = ensureMediaFilePreviewError('preview-fetch', e);
270
- // If remote preview fails, we set status 'error'
271
- // If local preview fails (i.e, no remote preview available),
272
- // we can stay in the same status until there is a remote preview available
273
- // If it's any other error we set status 'error'
274
- if (isLocalPreviewError(wrappedError)) {
275
- // This error should already been logged inside the getCardPreview. No need to log it here.
276
- setIsBannedLocalPreview(true);
277
- } else {
278
- if (!['complete', 'error', 'failed-processing'].includes(status)) {
279
- setStatus('error');
280
- setError(wrappedError);
281
- }
282
- }
283
- }
284
- });
285
- useEffect(() => {
286
- if (fileState && wasResolvedUpfrontPreviewRef.current && isPreviewableStatus(status, extractFilePreviewStatus(fileState, isBannedLocalPreview)) && (!preview || isBigger(prevRequestDimensions, requestDimensions))) {
287
- resolvePreviewRef.current(identifier, fileState);
288
- }
289
- }, [fileState, identifier, isBannedLocalPreview, prevRequestDimensions, preview, requestDimensions, resolvePreviewRef, status]);
290
-
291
- //----------------------------------------------------------------
292
- // RETURN
293
- //----------------------------------------------------------------
294
-
295
- const onImageError = useCallback(newPreview => {
296
- if (newPreview) {
297
- const failedSSRObject = {
298
- status: 'fail',
299
- ...extractErrorInfo(new ImageLoadError(newPreview.source))
300
- };
301
- if (isSSRClientPreview(newPreview)) {
302
- ssrReliabilityRef.current.client = failedSSRObject;
303
- }
304
-
305
- /*
306
- 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.
307
- */
308
-
309
- if (isSSRDataPreview(newPreview)) {
310
- ssrReliabilityRef.current.server = failedSSRObject;
311
- ssrReliabilityRef.current.client = failedSSRObject;
312
- }
313
- }
314
-
315
- // If the dataURI has been replaced, we can dismiss this error
316
- if ((newPreview === null || newPreview === void 0 ? void 0 : newPreview.dataURI) !== (preview === null || preview === void 0 ? void 0 : preview.dataURI)) {
317
- return;
318
- }
319
- const error = new ImageLoadError(newPreview === null || newPreview === void 0 ? void 0 : newPreview.source);
320
- const isLocal = newPreview && isLocalPreview(newPreview);
321
- const isSSR = newPreview && (isSSRClientPreview(newPreview) || isSSRDataPreview(newPreview));
322
- if (isLocal || isSSR) {
323
- if (isLocal) {
324
- setIsBannedLocalPreview(true);
325
- setNonCriticalError(error);
326
- }
327
- const fileImageMode = imageResizeModeToFileImageMode(resizeMode);
328
- mediaFilePreviewCache.remove(identifier.id, fileImageMode);
329
- setPreview(undefined);
330
- } else {
331
- if (!['complete', 'error', 'failed-processing'].includes(status)) {
332
- setStatus('error');
333
- setError(error);
334
- }
335
- }
336
- }, [identifier.id, preview === null || preview === void 0 ? void 0 : preview.dataURI, resizeMode, status]);
337
- const onImageLoad = useCallback(newPreview => {
338
- if (newPreview) {
339
- if (isSSRClientPreview(newPreview) && ssrReliabilityRef.current.client.status === 'unknown') {
340
- ssrReliabilityRef.current.client = {
341
- status: 'success'
342
- };
343
- }
344
-
345
- /*
346
- 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.
347
- */
348
-
349
- if (isSSRDataPreview(newPreview) && ssrReliabilityRef.current.server.status === 'unknown') {
350
- ssrReliabilityRef.current.server = {
351
- status: 'success'
352
- };
353
- ssrReliabilityRef.current.client = {
354
- status: 'success'
355
- };
356
- }
357
- }
358
-
359
- // If the dataURI has been replaced, we can dismiss this callback
360
- if ((newPreview === null || newPreview === void 0 ? void 0 : newPreview.dataURI) !== (preview === null || preview === void 0 ? void 0 : preview.dataURI)) {
361
- return;
362
- }
363
- }, [preview === null || preview === void 0 ? void 0 : preview.dataURI]);
364
-
365
- // FOR SSR
366
- const getScriptProps = () => {
367
- var _ssrReliabilityRef$cu;
368
- return 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);
369
- };
370
-
371
- // CXP-2723 TODO: should consider simplifying our analytics, and how
372
- // we might get rid of ssrReliabiltyRef from our hook
373
- return {
374
- preview,
375
- error,
376
- nonCriticalError,
377
- ssrReliabilityRef,
378
- onImageError,
379
- onImageLoad,
380
- getScriptProps
381
- };
382
- };
383
- const initialSsrReliability = {
384
- server: {
385
- status: 'unknown'
386
- },
387
- client: {
388
- status: 'unknown'
389
- }
390
- };
@@ -1,44 +0,0 @@
1
- import { getMediaClientErrorReason, isRequestError } from '@atlaskit/media-client';
2
- import { isMediaFilePreviewError, getFileStateErrorReason, isMediaFileStateError } from './errors';
3
- export var getErrorTraceContext = function 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;
10
- return (_error$secondaryError2 = error.secondaryError.details) === null || _error$secondaryError2 === void 0 || (_error$secondaryError2 = _error$secondaryError2.metadata) === null || _error$secondaryError2 === void 0 ? void 0 : _error$secondaryError2.traceContext;
11
- }
12
- }
13
- };
14
- export var getRenderErrorFailReason = function getRenderErrorFailReason(error) {
15
- if (isMediaFilePreviewError(error)) {
16
- return error.primaryReason;
17
- } else {
18
- return 'nativeError';
19
- }
20
- };
21
- export var getRenderErrorErrorReason = function getRenderErrorErrorReason(error) {
22
- if (isMediaFilePreviewError(error) && error.secondaryError) {
23
- var 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 var getRenderErrorErrorDetail = function getRenderErrorErrorDetail(error) {
31
- if (isMediaFilePreviewError(error) && error.secondaryError) {
32
- return error.secondaryError.message;
33
- } else {
34
- return error.message;
35
- }
36
- };
37
- export var extractErrorInfo = function 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,133 +0,0 @@
1
- import _createClass from "@babel/runtime/helpers/createClass";
2
- import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
3
- import _assertThisInitialized from "@babel/runtime/helpers/assertThisInitialized";
4
- import _inherits from "@babel/runtime/helpers/inherits";
5
- import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
6
- import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
7
- import _wrapNativeSuper from "@babel/runtime/helpers/wrapNativeSuper";
8
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
9
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
10
- import { MediaFileStateError } from '@atlaskit/media-client-react';
11
-
12
- /**
13
- * Primary reason is logged through Data Portal.
14
- * Make sure all the values are whitelisted in Measure -> Event Regitry -> "mediaCardRender failed" event
15
- */
16
-
17
- export var MediaFilePreviewError = /*#__PURE__*/function (_Error) {
18
- _inherits(MediaFilePreviewError, _Error);
19
- var _super = _createSuper(MediaFilePreviewError);
20
- function MediaFilePreviewError(primaryReason, secondaryError) {
21
- var _this;
22
- _classCallCheck(this, MediaFilePreviewError);
23
- _this = _super.call(this, primaryReason);
24
- // https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-2.html#support-for-newtarget
25
- _this.primaryReason = primaryReason;
26
- _this.secondaryError = secondaryError;
27
- Object.setPrototypeOf(_assertThisInitialized(_this), (this instanceof MediaFilePreviewError ? this.constructor : void 0).prototype);
28
-
29
- // https://v8.dev/docs/stack-trace-api
30
- if ('captureStackTrace' in Error) {
31
- Error.captureStackTrace(_assertThisInitialized(_this), this instanceof MediaFilePreviewError ? this.constructor : void 0);
32
- }
33
- return _this;
34
- }
35
- return _createClass(MediaFilePreviewError);
36
- }( /*#__PURE__*/_wrapNativeSuper(Error));
37
- export var LocalPreviewError = /*#__PURE__*/function (_MediaFilePreviewErro) {
38
- _inherits(LocalPreviewError, _MediaFilePreviewErro);
39
- var _super2 = _createSuper(LocalPreviewError);
40
- function LocalPreviewError(primaryReason, secondaryError) {
41
- var _this2;
42
- _classCallCheck(this, LocalPreviewError);
43
- _this2 = _super2.call(this, primaryReason, secondaryError);
44
- _this2.primaryReason = primaryReason;
45
- _this2.secondaryError = secondaryError;
46
- return _this2;
47
- }
48
- return _createClass(LocalPreviewError);
49
- }(MediaFilePreviewError);
50
- export var RemotePreviewError = /*#__PURE__*/function (_MediaFilePreviewErro2) {
51
- _inherits(RemotePreviewError, _MediaFilePreviewErro2);
52
- var _super3 = _createSuper(RemotePreviewError);
53
- function RemotePreviewError(primaryReason, secondaryError) {
54
- var _this3;
55
- _classCallCheck(this, RemotePreviewError);
56
- _this3 = _super3.call(this, primaryReason, secondaryError);
57
- _this3.primaryReason = primaryReason;
58
- _this3.secondaryError = secondaryError;
59
- return _this3;
60
- }
61
- return _createClass(RemotePreviewError);
62
- }(MediaFilePreviewError);
63
- export var SsrPreviewError = /*#__PURE__*/function (_MediaFilePreviewErro3) {
64
- _inherits(SsrPreviewError, _MediaFilePreviewErro3);
65
- var _super4 = _createSuper(SsrPreviewError);
66
- function SsrPreviewError(primaryReason, secondaryError) {
67
- var _this4;
68
- _classCallCheck(this, SsrPreviewError);
69
- _this4 = _super4.call(this, primaryReason, secondaryError);
70
- _this4.primaryReason = primaryReason;
71
- _this4.secondaryError = secondaryError;
72
- return _this4;
73
- }
74
- return _createClass(SsrPreviewError);
75
- }(MediaFilePreviewError);
76
- var getImageLoadPrimaryReason = function getImageLoadPrimaryReason(source) {
77
- switch (source) {
78
- case 'cache-remote':
79
- return 'cache-remote-uri';
80
- case 'cache-local':
81
- return 'cache-local-uri';
82
- case 'external':
83
- return 'external-uri';
84
- case 'local':
85
- return 'local-uri';
86
- case 'remote':
87
- return 'remote-uri';
88
- // This fail reason will come from a bug, most likely.
89
- default:
90
- return "unknown-uri";
91
- }
92
- };
93
- export var ImageLoadError = /*#__PURE__*/function (_MediaFilePreviewErro4) {
94
- _inherits(ImageLoadError, _MediaFilePreviewErro4);
95
- var _super5 = _createSuper(ImageLoadError);
96
- function ImageLoadError(source) {
97
- _classCallCheck(this, ImageLoadError);
98
- return _super5.call(this, getImageLoadPrimaryReason(source));
99
- }
100
- return _createClass(ImageLoadError);
101
- }(MediaFilePreviewError);
102
- export function isMediaFilePreviewError(err) {
103
- return err instanceof MediaFilePreviewError;
104
- }
105
- export var isLocalPreviewError = function isLocalPreviewError(err) {
106
- return err instanceof LocalPreviewError;
107
- };
108
- export var isRemotePreviewError = function isRemotePreviewError(err) {
109
- return err instanceof RemotePreviewError;
110
- };
111
- export var isUnsupportedLocalPreviewError = function isUnsupportedLocalPreviewError(err) {
112
- return isMediaFilePreviewError(err) && err.primaryReason === 'local-preview-unsupported';
113
- };
114
-
115
- // In a try/catch statement, the error caught is the type of unknown.
116
- // We can use this helper to ensure that the error handled is the type of MediaFilePreviewError if unsure
117
- // If updatePrimaryReason is true, if it's a MediaFilePreviewError already, it will update it's primary reason
118
- export var ensureMediaFilePreviewError = function ensureMediaFilePreviewError(primaryReason, error, updatePrimaryReason) {
119
- if (isMediaFilePreviewError(error)) {
120
- if (updatePrimaryReason && error.primaryReason !== primaryReason) {
121
- return new MediaFilePreviewError(primaryReason, error.secondaryError);
122
- }
123
- return error;
124
- }
125
- return new MediaFilePreviewError(primaryReason, error);
126
- };
127
- export function isMediaFileStateError(err) {
128
- return err instanceof MediaFileStateError;
129
- }
130
- export function getFileStateErrorReason(err) {
131
- var _err$details$reason, _err$details;
132
- 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';
133
- }
@@ -1,32 +0,0 @@
1
- import _createClass from "@babel/runtime/helpers/createClass";
2
- import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
3
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
4
- import { createObjectURLCache } from './objectURLCache';
5
-
6
- // Dimensions are used to create a key.
7
- // Cache is invalidated when different dimensions are provided.
8
- export var getCacheKey = function getCacheKey(id, mode) {
9
- var resizeMode = mode || 'crop';
10
- return [id, resizeMode].join('-');
11
- };
12
- export var CardPreviewCacheImpl = /*#__PURE__*/_createClass(function CardPreviewCacheImpl(previewCache) {
13
- var _this = this;
14
- _classCallCheck(this, CardPreviewCacheImpl);
15
- _defineProperty(this, "get", function (id, mode) {
16
- var cacheKey = getCacheKey(id, mode);
17
- return _this.previewCache.get(cacheKey);
18
- });
19
- _defineProperty(this, "set", function (id, mode, cardPreview) {
20
- var cacheKey = getCacheKey(id, mode);
21
- _this.previewCache.set(cacheKey, cardPreview);
22
- });
23
- _defineProperty(this, "remove", function (id, mode) {
24
- var cacheKey = getCacheKey(id, mode);
25
- _this.previewCache.remove(cacheKey);
26
- });
27
- _defineProperty(this, "clear", function () {
28
- _this.previewCache.clear();
29
- });
30
- this.previewCache = previewCache;
31
- });
32
- export var mediaFilePreviewCache = new CardPreviewCacheImpl(createObjectURLCache());
@@ -1,40 +0,0 @@
1
- import { isMimeTypeSupportedByBrowser } from '@atlaskit/media-common';
2
- import { isPreviewableFileState, isPreviewableType, isImageRepresentationReady } from '@atlaskit/media-client';
3
- import { isSupportedLocalPreview } from './helpers';
4
-
5
- // TODO: align these checks with helpers from Media Client
6
- // https://product-fabric.atlassian.net/browse/BMPT-1300
7
- export var extractFilePreviewStatus = function extractFilePreviewStatus(fileState, isBannedLocalPreview) {
8
- var hasFilesize = 'size' in fileState && !!fileState.size;
9
- var _ref = 'mediaType' in fileState && fileState || {},
10
- mediaType = _ref.mediaType;
11
- var _ref2 = 'mimeType' in fileState && fileState || {},
12
- mimeType = _ref2.mimeType;
13
- var isPreviewable = !!mediaType && isPreviewableType(mediaType);
14
-
15
- // Local preview is available only if it's supported by browser and supported by Media Card (isSupportedLocalPreview)
16
- // For example, SVGs are mime type NOT supported by browser but media type supported by Media Card (image)
17
- // Then, local Preview NOT available
18
- var hasLocalPreview = !isBannedLocalPreview && isPreviewableFileState(fileState) && isSupportedLocalPreview(mediaType) && !!mimeType && isMimeTypeSupportedByBrowser(mimeType);
19
- var hasRemotePreview = isImageRepresentationReady(fileState);
20
- var hasPreview = hasLocalPreview || hasRemotePreview;
21
- var isSupportedByBrowser = !!mimeType && isMimeTypeSupportedByBrowser(mimeType);
22
- return {
23
- hasFilesize: hasFilesize,
24
- isPreviewable: isPreviewable,
25
- hasPreview: hasPreview,
26
- isSupportedByBrowser: isSupportedByBrowser
27
- };
28
- };
29
-
30
- // CXP-2723 TODO: Review this in relation to removing status from the hook
31
- export var isPreviewableStatus = function isPreviewableStatus(cardStatus, _ref3) {
32
- var isPreviewable = _ref3.isPreviewable,
33
- hasPreview = _ref3.hasPreview,
34
- isSupportedByBrowser = _ref3.isSupportedByBrowser;
35
- return hasPreview && isPreviewable && (cardStatus === 'complete' || cardStatus === 'loading-preview' || cardStatus === 'uploading' ||
36
- // For Video, we can have local or remote preview while processing.
37
- // Then, we only want to show the thumbnail if the file is supported by the browser,
38
- // this way we prevent playing unsupported videos that are not procesed
39
- cardStatus === 'processing' && isSupportedByBrowser);
40
- };