@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.
- package/CHANGELOG.md +12 -0
- package/dist/cjs/card/card.js +1 -1
- package/dist/cjs/card/media-card-analytics-error-boundary.js +1 -1
- package/dist/cjs/card/v2/cardV2.js +1 -1
- package/dist/cjs/card/v2/fileCard.js +8 -4
- package/dist/cjs/inline/loader.js +1 -1
- package/dist/cjs/utils/ufoExperiences.js +1 -1
- package/dist/es2019/card/card.js +1 -1
- package/dist/es2019/card/media-card-analytics-error-boundary.js +1 -1
- package/dist/es2019/card/v2/cardV2.js +1 -1
- package/dist/es2019/card/v2/fileCard.js +7 -3
- package/dist/es2019/inline/loader.js +1 -1
- package/dist/es2019/utils/ufoExperiences.js +1 -1
- package/dist/esm/card/card.js +1 -1
- package/dist/esm/card/media-card-analytics-error-boundary.js +1 -1
- package/dist/esm/card/v2/cardV2.js +1 -1
- package/dist/esm/card/v2/fileCard.js +7 -3
- package/dist/esm/inline/loader.js +1 -1
- package/dist/esm/utils/ufoExperiences.js +1 -1
- package/dist/types/card/v2/cardViewV2.d.ts +1 -1
- package/dist/types/card/v2/cardviews/cardViewWrapper.d.ts +1 -1
- package/dist/types/card/v2/cardviews/index.d.ts +1 -1
- package/dist/types-ts4.5/card/v2/cardViewV2.d.ts +1 -1
- package/dist/types-ts4.5/card/v2/cardviews/cardViewWrapper.d.ts +1 -1
- package/dist/types-ts4.5/card/v2/cardviews/index.d.ts +1 -1
- package/package.json +4 -3
- package/dist/cjs/card/v2/useFilePreview/analytics.js +0 -50
- package/dist/cjs/card/v2/useFilePreview/errors.js +0 -143
- package/dist/cjs/card/v2/useFilePreview/getPreview/cache.js +0 -39
- package/dist/cjs/card/v2/useFilePreview/getPreview/filePreviewStatus.js +0 -45
- package/dist/cjs/card/v2/useFilePreview/getPreview/getPreview.js +0 -119
- package/dist/cjs/card/v2/useFilePreview/getPreview/helpers.js +0 -167
- package/dist/cjs/card/v2/useFilePreview/getPreview/index.js +0 -62
- package/dist/cjs/card/v2/useFilePreview/getPreview/objectURLCache.js +0 -85
- package/dist/cjs/card/v2/useFilePreview/getPreview/videoSnapshot.js +0 -58
- package/dist/cjs/card/v2/useFilePreview/globalScope/getSSRData.js +0 -14
- package/dist/cjs/card/v2/useFilePreview/globalScope/globalScope.js +0 -66
- package/dist/cjs/card/v2/useFilePreview/globalScope/index.js +0 -37
- package/dist/cjs/card/v2/useFilePreview/globalScope/printScript.js +0 -32
- package/dist/cjs/card/v2/useFilePreview/globalScope/types.js +0 -5
- package/dist/cjs/card/v2/useFilePreview/helpers.js +0 -64
- package/dist/cjs/card/v2/useFilePreview/index.js +0 -12
- package/dist/cjs/card/v2/useFilePreview/types.js +0 -5
- package/dist/cjs/card/v2/useFilePreview/useFilePreview.js +0 -460
- package/dist/es2019/card/v2/useFilePreview/analytics.js +0 -44
- package/dist/es2019/card/v2/useFilePreview/errors.js +0 -90
- package/dist/es2019/card/v2/useFilePreview/getPreview/cache.js +0 -30
- package/dist/es2019/card/v2/useFilePreview/getPreview/filePreviewStatus.js +0 -43
- package/dist/es2019/card/v2/useFilePreview/getPreview/getPreview.js +0 -75
- package/dist/es2019/card/v2/useFilePreview/getPreview/helpers.js +0 -76
- package/dist/es2019/card/v2/useFilePreview/getPreview/index.js +0 -3
- package/dist/es2019/card/v2/useFilePreview/getPreview/objectURLCache.js +0 -44
- package/dist/es2019/card/v2/useFilePreview/getPreview/videoSnapshot.js +0 -36
- package/dist/es2019/card/v2/useFilePreview/globalScope/getSSRData.js +0 -8
- package/dist/es2019/card/v2/useFilePreview/globalScope/globalScope.js +0 -48
- package/dist/es2019/card/v2/useFilePreview/globalScope/index.js +0 -2
- package/dist/es2019/card/v2/useFilePreview/globalScope/printScript.js +0 -16
- package/dist/es2019/card/v2/useFilePreview/globalScope/types.js +0 -1
- package/dist/es2019/card/v2/useFilePreview/helpers.js +0 -61
- package/dist/es2019/card/v2/useFilePreview/index.js +0 -1
- package/dist/es2019/card/v2/useFilePreview/types.js +0 -1
- package/dist/es2019/card/v2/useFilePreview/useFilePreview.js +0 -390
- package/dist/esm/card/v2/useFilePreview/analytics.js +0 -44
- package/dist/esm/card/v2/useFilePreview/errors.js +0 -133
- package/dist/esm/card/v2/useFilePreview/getPreview/cache.js +0 -32
- package/dist/esm/card/v2/useFilePreview/getPreview/filePreviewStatus.js +0 -40
- package/dist/esm/card/v2/useFilePreview/getPreview/getPreview.js +0 -112
- package/dist/esm/card/v2/useFilePreview/getPreview/helpers.js +0 -160
- package/dist/esm/card/v2/useFilePreview/getPreview/index.js +0 -3
- package/dist/esm/card/v2/useFilePreview/getPreview/objectURLCache.js +0 -78
- package/dist/esm/card/v2/useFilePreview/getPreview/videoSnapshot.js +0 -51
- package/dist/esm/card/v2/useFilePreview/globalScope/getSSRData.js +0 -8
- package/dist/esm/card/v2/useFilePreview/globalScope/globalScope.js +0 -56
- package/dist/esm/card/v2/useFilePreview/globalScope/index.js +0 -2
- package/dist/esm/card/v2/useFilePreview/globalScope/printScript.js +0 -25
- package/dist/esm/card/v2/useFilePreview/globalScope/types.js +0 -1
- package/dist/esm/card/v2/useFilePreview/helpers.js +0 -57
- package/dist/esm/card/v2/useFilePreview/index.js +0 -1
- package/dist/esm/card/v2/useFilePreview/types.js +0 -1
- package/dist/esm/card/v2/useFilePreview/useFilePreview.js +0 -453
- package/dist/types/card/v2/useFilePreview/analytics.d.ts +0 -28
- package/dist/types/card/v2/useFilePreview/errors.d.ts +0 -42
- package/dist/types/card/v2/useFilePreview/getPreview/cache.d.ts +0 -21
- package/dist/types/card/v2/useFilePreview/getPreview/filePreviewStatus.d.ts +0 -4
- package/dist/types/card/v2/useFilePreview/getPreview/getPreview.d.ts +0 -9
- package/dist/types/card/v2/useFilePreview/getPreview/helpers.d.ts +0 -10
- package/dist/types/card/v2/useFilePreview/getPreview/index.d.ts +0 -3
- package/dist/types/card/v2/useFilePreview/getPreview/objectURLCache.d.ts +0 -12
- package/dist/types/card/v2/useFilePreview/getPreview/videoSnapshot.d.ts +0 -1
- package/dist/types/card/v2/useFilePreview/globalScope/getSSRData.d.ts +0 -3
- package/dist/types/card/v2/useFilePreview/globalScope/globalScope.d.ts +0 -15
- package/dist/types/card/v2/useFilePreview/globalScope/index.d.ts +0 -4
- package/dist/types/card/v2/useFilePreview/globalScope/printScript.d.ts +0 -2
- package/dist/types/card/v2/useFilePreview/globalScope/types.d.ts +0 -8
- package/dist/types/card/v2/useFilePreview/helpers.d.ts +0 -11
- package/dist/types/card/v2/useFilePreview/index.d.ts +0 -2
- package/dist/types/card/v2/useFilePreview/types.d.ts +0 -18
- package/dist/types/card/v2/useFilePreview/useFilePreview.d.ts +0 -33
- package/dist/types-ts4.5/card/v2/useFilePreview/analytics.d.ts +0 -28
- package/dist/types-ts4.5/card/v2/useFilePreview/errors.d.ts +0 -42
- package/dist/types-ts4.5/card/v2/useFilePreview/getPreview/cache.d.ts +0 -21
- package/dist/types-ts4.5/card/v2/useFilePreview/getPreview/filePreviewStatus.d.ts +0 -4
- package/dist/types-ts4.5/card/v2/useFilePreview/getPreview/getPreview.d.ts +0 -9
- package/dist/types-ts4.5/card/v2/useFilePreview/getPreview/helpers.d.ts +0 -10
- package/dist/types-ts4.5/card/v2/useFilePreview/getPreview/index.d.ts +0 -3
- package/dist/types-ts4.5/card/v2/useFilePreview/getPreview/objectURLCache.d.ts +0 -12
- package/dist/types-ts4.5/card/v2/useFilePreview/getPreview/videoSnapshot.d.ts +0 -1
- package/dist/types-ts4.5/card/v2/useFilePreview/globalScope/getSSRData.d.ts +0 -3
- package/dist/types-ts4.5/card/v2/useFilePreview/globalScope/globalScope.d.ts +0 -15
- package/dist/types-ts4.5/card/v2/useFilePreview/globalScope/index.d.ts +0 -4
- package/dist/types-ts4.5/card/v2/useFilePreview/globalScope/printScript.d.ts +0 -2
- package/dist/types-ts4.5/card/v2/useFilePreview/globalScope/types.d.ts +0 -8
- package/dist/types-ts4.5/card/v2/useFilePreview/helpers.d.ts +0 -11
- package/dist/types-ts4.5/card/v2/useFilePreview/index.d.ts +0 -2
- package/dist/types-ts4.5/card/v2/useFilePreview/types.d.ts +0 -18
- 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
|
-
};
|