@atlaskit/media-file-preview 0.7.0 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# @atlaskit/media-file-preview
|
|
2
2
|
|
|
3
|
+
## 0.8.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#132551](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/132551)
|
|
8
|
+
[`19eb1d802c7f9`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/19eb1d802c7f9) -
|
|
9
|
+
Fixed the dual fetching of image when medaiBlobUrlAttributes change
|
|
10
|
+
|
|
11
|
+
## 0.8.0
|
|
12
|
+
|
|
13
|
+
### Minor Changes
|
|
14
|
+
|
|
15
|
+
- [#130787](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/130787)
|
|
16
|
+
[`64a680780dc57`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/64a680780dc57) -
|
|
17
|
+
Add performance observer metrics for Media Card to assist investigation into hot-110955
|
|
18
|
+
|
|
19
|
+
### Patch Changes
|
|
20
|
+
|
|
21
|
+
- [#131947](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/131947)
|
|
22
|
+
[`871136a343690`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/871136a343690) -
|
|
23
|
+
Fixed issue with images being refetched if the items responded before upfront preview resolved
|
|
24
|
+
- Updated dependencies
|
|
25
|
+
|
|
3
26
|
## 0.7.0
|
|
4
27
|
|
|
5
28
|
### Minor Changes
|
|
@@ -11,6 +11,7 @@ var _react = require("react");
|
|
|
11
11
|
var _mediaClient = require("@atlaskit/media-client");
|
|
12
12
|
var _mediaClientReact = require("@atlaskit/media-client-react");
|
|
13
13
|
var _mediaCommon = require("@atlaskit/media-common");
|
|
14
|
+
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
14
15
|
var _analytics = require("./analytics");
|
|
15
16
|
var _errors = require("./errors");
|
|
16
17
|
var _getPreview = require("./getPreview");
|
|
@@ -30,7 +31,8 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
|
|
|
30
31
|
_ref$allowAnimated = _ref.allowAnimated,
|
|
31
32
|
allowAnimated = _ref$allowAnimated === void 0 ? true : _ref$allowAnimated,
|
|
32
33
|
upscale = _ref.upscale,
|
|
33
|
-
maxAge = _ref.maxAge
|
|
34
|
+
maxAge = _ref.maxAge,
|
|
35
|
+
source = _ref.source;
|
|
34
36
|
var mediaClient = (0, _mediaClientReact.useMediaClient)();
|
|
35
37
|
var _useState = (0, _react.useState)('loading'),
|
|
36
38
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
@@ -72,6 +74,12 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
|
|
|
72
74
|
upscale: upscale,
|
|
73
75
|
'max-age': maxAge
|
|
74
76
|
});
|
|
77
|
+
if ((0, _platformFeatureFlags.fg)('platform.media-card-performance-observer_lgc7b')) {
|
|
78
|
+
imageURLParams = _objectSpread(_objectSpread({}, imageURLParams), {}, {
|
|
79
|
+
source: source,
|
|
80
|
+
ssr: ssr
|
|
81
|
+
});
|
|
82
|
+
}
|
|
75
83
|
var previewInitializer = function previewInitializer() {
|
|
76
84
|
var preview = _getPreview.mediaFilePreviewCache.get(identifier.id, resizeMode);
|
|
77
85
|
if (preview) {
|
|
@@ -192,6 +200,7 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
|
|
|
192
200
|
// Cache, Local & Remote Preview
|
|
193
201
|
//----------------------------------------------------------------
|
|
194
202
|
|
|
203
|
+
var mediaBlobUrlAttrsRef = (0, _helpers.useCurrentValueRef)(mediaBlobUrlAttrs);
|
|
195
204
|
(0, _react.useEffect)(function () {
|
|
196
205
|
var cachedPreview = _getPreview.mediaFilePreviewCache.get(identifier.id, resizeMode);
|
|
197
206
|
|
|
@@ -205,7 +214,7 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
|
|
|
205
214
|
// For example, SVGs are mime type NOT supported by browser but media type supported by Media Card (image)
|
|
206
215
|
// Then, local Preview NOT available
|
|
207
216
|
|
|
208
|
-
(0, _getPreview.getAndCacheLocalPreview)(identifier.id, localBinary, requestDimensions || {}, resizeMode,
|
|
217
|
+
(0, _getPreview.getAndCacheLocalPreview)(identifier.id, localBinary, requestDimensions || {}, resizeMode, mediaBlobUrlAttrsRef.current).then(setPreview).catch(function (e) {
|
|
209
218
|
setIsBannedLocalPreview(true);
|
|
210
219
|
// CXP-2723 TODO: We might have to wrap this error in MediaCardError
|
|
211
220
|
setNonCriticalError(e);
|
|
@@ -214,7 +223,7 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
|
|
|
214
223
|
// Remote Preview ----------------------------------------------------------------
|
|
215
224
|
else if (!error && !nonCriticalError && (!preview || (0, _helpers.isBigger)(preview.dimensions, requestDimensions) ||
|
|
216
225
|
// We always refetch SSR preview to be able to browser-cache a version without the token in the query parameters
|
|
217
|
-
(0, _getPreview.isSSRPreview)(preview)) && !skipRemote && upfrontPreviewStatus
|
|
226
|
+
(0, _getPreview.isSSRPreview)(preview)) && !skipRemote && upfrontPreviewStatus === 'resolved' && isBackendPreviewReady) {
|
|
218
227
|
getAndCacheRemotePreviewRef.current().then(setPreview).catch(function (e) {
|
|
219
228
|
var wrappedError = (0, _errors.ensureMediaFilePreviewError)('preview-fetch', e);
|
|
220
229
|
if (!preview) {
|
|
@@ -226,7 +235,7 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
|
|
|
226
235
|
}
|
|
227
236
|
});
|
|
228
237
|
}
|
|
229
|
-
}, [error, nonCriticalError, getAndCacheRemotePreviewRef, identifier.id, resizeMode, isBannedLocalPreview,
|
|
238
|
+
}, [error, nonCriticalError, getAndCacheRemotePreviewRef, identifier.id, resizeMode, isBannedLocalPreview, mediaBlobUrlAttrsRef, preview, requestDimensions, skipRemote, isBackendPreviewReady, localBinary, mediaType, mimeType, upfrontPreviewStatus]);
|
|
230
239
|
|
|
231
240
|
//----------------------------------------------------------------
|
|
232
241
|
// RETURN
|
|
@@ -2,6 +2,7 @@ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
|
2
2
|
import { isImageRepresentationReady } from '@atlaskit/media-client';
|
|
3
3
|
import { useFileState, useMediaClient } from '@atlaskit/media-client-react';
|
|
4
4
|
import { isMimeTypeSupportedByBrowser } from '@atlaskit/media-common';
|
|
5
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
5
6
|
import { createFailedSSRObject, extractErrorInfo } from './analytics';
|
|
6
7
|
import { ensureMediaFilePreviewError, ImageLoadError, MediaFilePreviewError } from './errors';
|
|
7
8
|
import { getAndCacheLocalPreview, getAndCacheRemotePreview, getSSRPreview, isLocalPreview, isRemotePreview, isSSRClientPreview, isSSRDataPreview, isSSRPreview, isSupportedLocalPreview, mediaFilePreviewCache } from './getPreview';
|
|
@@ -18,7 +19,8 @@ export const useFilePreview = ({
|
|
|
18
19
|
// TODO: mediaBlobUrlAttrs can be missing several values contained in the file details. The preview hook is not updating the params in the preview after the file details are available.
|
|
19
20
|
allowAnimated = true,
|
|
20
21
|
upscale,
|
|
21
|
-
maxAge
|
|
22
|
+
maxAge,
|
|
23
|
+
source
|
|
22
24
|
}) => {
|
|
23
25
|
const mediaClient = useMediaClient();
|
|
24
26
|
const [status, setStatus] = useState('loading');
|
|
@@ -36,7 +38,7 @@ export const useFilePreview = ({
|
|
|
36
38
|
});
|
|
37
39
|
const requestDimensions = useMemo(() => dimensions ? createRequestDimensions(dimensions) : undefined, [dimensions]);
|
|
38
40
|
const requestDimensionsRef = useCurrentValueRef(requestDimensions);
|
|
39
|
-
|
|
41
|
+
let imageURLParams = {
|
|
40
42
|
collection: identifier.collectionName,
|
|
41
43
|
mode: resizeMode,
|
|
42
44
|
...requestDimensions,
|
|
@@ -44,6 +46,13 @@ export const useFilePreview = ({
|
|
|
44
46
|
upscale,
|
|
45
47
|
'max-age': maxAge
|
|
46
48
|
};
|
|
49
|
+
if (fg('platform.media-card-performance-observer_lgc7b')) {
|
|
50
|
+
imageURLParams = {
|
|
51
|
+
...imageURLParams,
|
|
52
|
+
source,
|
|
53
|
+
ssr
|
|
54
|
+
};
|
|
55
|
+
}
|
|
47
56
|
const previewInitializer = () => {
|
|
48
57
|
const preview = mediaFilePreviewCache.get(identifier.id, resizeMode);
|
|
49
58
|
if (preview) {
|
|
@@ -166,6 +175,7 @@ export const useFilePreview = ({
|
|
|
166
175
|
// Cache, Local & Remote Preview
|
|
167
176
|
//----------------------------------------------------------------
|
|
168
177
|
|
|
178
|
+
const mediaBlobUrlAttrsRef = useCurrentValueRef(mediaBlobUrlAttrs);
|
|
169
179
|
useEffect(() => {
|
|
170
180
|
const cachedPreview = mediaFilePreviewCache.get(identifier.id, resizeMode);
|
|
171
181
|
|
|
@@ -179,7 +189,7 @@ export const useFilePreview = ({
|
|
|
179
189
|
// For example, SVGs are mime type NOT supported by browser but media type supported by Media Card (image)
|
|
180
190
|
// Then, local Preview NOT available
|
|
181
191
|
|
|
182
|
-
getAndCacheLocalPreview(identifier.id, localBinary, requestDimensions || {}, resizeMode,
|
|
192
|
+
getAndCacheLocalPreview(identifier.id, localBinary, requestDimensions || {}, resizeMode, mediaBlobUrlAttrsRef.current).then(setPreview).catch(e => {
|
|
183
193
|
setIsBannedLocalPreview(true);
|
|
184
194
|
// CXP-2723 TODO: We might have to wrap this error in MediaCardError
|
|
185
195
|
setNonCriticalError(e);
|
|
@@ -188,7 +198,7 @@ export const useFilePreview = ({
|
|
|
188
198
|
// Remote Preview ----------------------------------------------------------------
|
|
189
199
|
else if (!error && !nonCriticalError && (!preview || isBigger(preview.dimensions, requestDimensions) ||
|
|
190
200
|
// We always refetch SSR preview to be able to browser-cache a version without the token in the query parameters
|
|
191
|
-
isSSRPreview(preview)) && !skipRemote && upfrontPreviewStatus
|
|
201
|
+
isSSRPreview(preview)) && !skipRemote && upfrontPreviewStatus === 'resolved' && isBackendPreviewReady) {
|
|
192
202
|
getAndCacheRemotePreviewRef.current().then(setPreview).catch(e => {
|
|
193
203
|
const wrappedError = ensureMediaFilePreviewError('preview-fetch', e);
|
|
194
204
|
if (!preview) {
|
|
@@ -200,7 +210,7 @@ export const useFilePreview = ({
|
|
|
200
210
|
}
|
|
201
211
|
});
|
|
202
212
|
}
|
|
203
|
-
}, [error, nonCriticalError, getAndCacheRemotePreviewRef, identifier.id, resizeMode, isBannedLocalPreview,
|
|
213
|
+
}, [error, nonCriticalError, getAndCacheRemotePreviewRef, identifier.id, resizeMode, isBannedLocalPreview, mediaBlobUrlAttrsRef, preview, requestDimensions, skipRemote, isBackendPreviewReady, localBinary, mediaType, mimeType, upfrontPreviewStatus]);
|
|
204
214
|
|
|
205
215
|
//----------------------------------------------------------------
|
|
206
216
|
// RETURN
|
|
@@ -6,6 +6,7 @@ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
|
6
6
|
import { isImageRepresentationReady } from '@atlaskit/media-client';
|
|
7
7
|
import { useFileState, useMediaClient } from '@atlaskit/media-client-react';
|
|
8
8
|
import { isMimeTypeSupportedByBrowser } from '@atlaskit/media-common';
|
|
9
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
9
10
|
import { createFailedSSRObject, extractErrorInfo } from './analytics';
|
|
10
11
|
import { ensureMediaFilePreviewError, ImageLoadError, MediaFilePreviewError } from './errors';
|
|
11
12
|
import { getAndCacheLocalPreview, getAndCacheRemotePreview, getSSRPreview, isLocalPreview, isRemotePreview, isSSRClientPreview, isSSRDataPreview, isSSRPreview, isSupportedLocalPreview, mediaFilePreviewCache } from './getPreview';
|
|
@@ -23,7 +24,8 @@ export var useFilePreview = function useFilePreview(_ref) {
|
|
|
23
24
|
_ref$allowAnimated = _ref.allowAnimated,
|
|
24
25
|
allowAnimated = _ref$allowAnimated === void 0 ? true : _ref$allowAnimated,
|
|
25
26
|
upscale = _ref.upscale,
|
|
26
|
-
maxAge = _ref.maxAge
|
|
27
|
+
maxAge = _ref.maxAge,
|
|
28
|
+
source = _ref.source;
|
|
27
29
|
var mediaClient = useMediaClient();
|
|
28
30
|
var _useState = useState('loading'),
|
|
29
31
|
_useState2 = _slicedToArray(_useState, 2),
|
|
@@ -65,6 +67,12 @@ export var useFilePreview = function useFilePreview(_ref) {
|
|
|
65
67
|
upscale: upscale,
|
|
66
68
|
'max-age': maxAge
|
|
67
69
|
});
|
|
70
|
+
if (fg('platform.media-card-performance-observer_lgc7b')) {
|
|
71
|
+
imageURLParams = _objectSpread(_objectSpread({}, imageURLParams), {}, {
|
|
72
|
+
source: source,
|
|
73
|
+
ssr: ssr
|
|
74
|
+
});
|
|
75
|
+
}
|
|
68
76
|
var previewInitializer = function previewInitializer() {
|
|
69
77
|
var preview = mediaFilePreviewCache.get(identifier.id, resizeMode);
|
|
70
78
|
if (preview) {
|
|
@@ -185,6 +193,7 @@ export var useFilePreview = function useFilePreview(_ref) {
|
|
|
185
193
|
// Cache, Local & Remote Preview
|
|
186
194
|
//----------------------------------------------------------------
|
|
187
195
|
|
|
196
|
+
var mediaBlobUrlAttrsRef = useCurrentValueRef(mediaBlobUrlAttrs);
|
|
188
197
|
useEffect(function () {
|
|
189
198
|
var cachedPreview = mediaFilePreviewCache.get(identifier.id, resizeMode);
|
|
190
199
|
|
|
@@ -198,7 +207,7 @@ export var useFilePreview = function useFilePreview(_ref) {
|
|
|
198
207
|
// For example, SVGs are mime type NOT supported by browser but media type supported by Media Card (image)
|
|
199
208
|
// Then, local Preview NOT available
|
|
200
209
|
|
|
201
|
-
getAndCacheLocalPreview(identifier.id, localBinary, requestDimensions || {}, resizeMode,
|
|
210
|
+
getAndCacheLocalPreview(identifier.id, localBinary, requestDimensions || {}, resizeMode, mediaBlobUrlAttrsRef.current).then(setPreview).catch(function (e) {
|
|
202
211
|
setIsBannedLocalPreview(true);
|
|
203
212
|
// CXP-2723 TODO: We might have to wrap this error in MediaCardError
|
|
204
213
|
setNonCriticalError(e);
|
|
@@ -207,7 +216,7 @@ export var useFilePreview = function useFilePreview(_ref) {
|
|
|
207
216
|
// Remote Preview ----------------------------------------------------------------
|
|
208
217
|
else if (!error && !nonCriticalError && (!preview || isBigger(preview.dimensions, requestDimensions) ||
|
|
209
218
|
// We always refetch SSR preview to be able to browser-cache a version without the token in the query parameters
|
|
210
|
-
isSSRPreview(preview)) && !skipRemote && upfrontPreviewStatus
|
|
219
|
+
isSSRPreview(preview)) && !skipRemote && upfrontPreviewStatus === 'resolved' && isBackendPreviewReady) {
|
|
211
220
|
getAndCacheRemotePreviewRef.current().then(setPreview).catch(function (e) {
|
|
212
221
|
var wrappedError = ensureMediaFilePreviewError('preview-fetch', e);
|
|
213
222
|
if (!preview) {
|
|
@@ -219,7 +228,7 @@ export var useFilePreview = function useFilePreview(_ref) {
|
|
|
219
228
|
}
|
|
220
229
|
});
|
|
221
230
|
}
|
|
222
|
-
}, [error, nonCriticalError, getAndCacheRemotePreviewRef, identifier.id, resizeMode, isBannedLocalPreview,
|
|
231
|
+
}, [error, nonCriticalError, getAndCacheRemotePreviewRef, identifier.id, resizeMode, isBannedLocalPreview, mediaBlobUrlAttrsRef, preview, requestDimensions, skipRemote, isBackendPreviewReady, localBinary, mediaType, mimeType, upfrontPreviewStatus]);
|
|
223
232
|
|
|
224
233
|
//----------------------------------------------------------------
|
|
225
234
|
// RETURN
|
|
@@ -26,8 +26,10 @@ export interface UseFilePreviewParams {
|
|
|
26
26
|
/** Make the client receive the response with the given max-age cache control header. Minimum: 0, maximum: 9223372036854776000.
|
|
27
27
|
*/
|
|
28
28
|
readonly maxAge?: number;
|
|
29
|
+
/** Defines the source component */
|
|
30
|
+
readonly source?: string;
|
|
29
31
|
}
|
|
30
|
-
export declare const useFilePreview: ({ resizeMode, identifier, ssr, dimensions, traceContext, skipRemote, mediaBlobUrlAttrs, allowAnimated, upscale, maxAge, }: UseFilePreviewParams) => {
|
|
32
|
+
export declare const useFilePreview: ({ resizeMode, identifier, ssr, dimensions, traceContext, skipRemote, mediaBlobUrlAttrs, allowAnimated, upscale, maxAge, source, }: UseFilePreviewParams) => {
|
|
31
33
|
preview: MediaFilePreview | undefined;
|
|
32
34
|
status: MediaFilePreviewStatus;
|
|
33
35
|
error: MediaFilePreviewError | undefined;
|
|
@@ -26,8 +26,10 @@ export interface UseFilePreviewParams {
|
|
|
26
26
|
/** Make the client receive the response with the given max-age cache control header. Minimum: 0, maximum: 9223372036854776000.
|
|
27
27
|
*/
|
|
28
28
|
readonly maxAge?: number;
|
|
29
|
+
/** Defines the source component */
|
|
30
|
+
readonly source?: string;
|
|
29
31
|
}
|
|
30
|
-
export declare const useFilePreview: ({ resizeMode, identifier, ssr, dimensions, traceContext, skipRemote, mediaBlobUrlAttrs, allowAnimated, upscale, maxAge, }: UseFilePreviewParams) => {
|
|
32
|
+
export declare const useFilePreview: ({ resizeMode, identifier, ssr, dimensions, traceContext, skipRemote, mediaBlobUrlAttrs, allowAnimated, upscale, maxAge, source, }: UseFilePreviewParams) => {
|
|
31
33
|
preview: MediaFilePreview | undefined;
|
|
32
34
|
status: MediaFilePreviewStatus;
|
|
33
35
|
error: MediaFilePreviewError | undefined;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/media-file-preview",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.1",
|
|
4
4
|
"description": "A React Hook to fetch and render file previews. It's overloaded with fancy features like SSR, lazy loading, memory cache and local preview.",
|
|
5
5
|
"author": "Atlassian Pty Ltd",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -36,10 +36,11 @@
|
|
|
36
36
|
".": "./src/index.ts"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@atlaskit/media-client": "^27.
|
|
40
|
-
"@atlaskit/media-client-react": "^2.0
|
|
41
|
-
"@atlaskit/media-common": "^11.
|
|
39
|
+
"@atlaskit/media-client": "^27.4.0",
|
|
40
|
+
"@atlaskit/media-client-react": "^2.1.0",
|
|
41
|
+
"@atlaskit/media-common": "^11.4.0",
|
|
42
42
|
"@atlaskit/media-ui": "^25.11.0",
|
|
43
|
+
"@atlaskit/platform-feature-flags": "^0.3.0",
|
|
43
44
|
"@babel/runtime": "^7.0.0",
|
|
44
45
|
"eventemitter2": "^4.1.0",
|
|
45
46
|
"lru_map": "^0.4.1"
|
|
@@ -52,7 +53,7 @@
|
|
|
52
53
|
"@af/integration-testing": "*",
|
|
53
54
|
"@af/visual-regression": "*",
|
|
54
55
|
"@atlaskit/media-state": "^1.1.0",
|
|
55
|
-
"@atlaskit/media-test-data": "^2.
|
|
56
|
+
"@atlaskit/media-test-data": "^2.6.0",
|
|
56
57
|
"@atlaskit/section-message": "^6.6.0",
|
|
57
58
|
"@atlaskit/ssr": "*",
|
|
58
59
|
"@atlaskit/visual-regression": "*",
|
|
@@ -96,5 +97,10 @@
|
|
|
96
97
|
"import-no-extraneous-disable-for-examples-and-docs"
|
|
97
98
|
]
|
|
98
99
|
}
|
|
100
|
+
},
|
|
101
|
+
"platform-feature-flags": {
|
|
102
|
+
"platform.media-card-performance-observer_lgc7b": {
|
|
103
|
+
"type": "boolean"
|
|
104
|
+
}
|
|
99
105
|
}
|
|
100
106
|
}
|