@atlaskit/media-file-preview 0.11.5 → 0.11.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 +8 -0
- package/dist/cjs/useFilePreview.js +24 -5
- package/dist/es2019/useFilePreview.js +18 -2
- package/dist/esm/useFilePreview.js +25 -6
- package/package.json +7 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# @atlaskit/media-file-preview
|
|
2
2
|
|
|
3
|
+
## 0.11.6
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#187759](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/187759)
|
|
8
|
+
[`cb2080ec93b3c`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/cb2080ec93b3c) -
|
|
9
|
+
Add UFO hold to reduce TTAI blindspot gap
|
|
10
|
+
|
|
3
11
|
## 0.11.5
|
|
4
12
|
|
|
5
13
|
### Patch Changes
|
|
@@ -11,6 +11,8 @@ 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");
|
|
15
|
+
var _interactionContext = require("@atlaskit/react-ufo/interaction-context");
|
|
14
16
|
var _analytics = require("./analytics");
|
|
15
17
|
var _errors = require("./errors");
|
|
16
18
|
var _getPreview = require("./getPreview");
|
|
@@ -61,6 +63,16 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
|
|
|
61
63
|
status: 'unknown'
|
|
62
64
|
}
|
|
63
65
|
});
|
|
66
|
+
var ufoContext = (0, _interactionContext.useInteractionContext)();
|
|
67
|
+
var _useState1 = (0, _react.useState)(false),
|
|
68
|
+
_useState10 = (0, _slicedToArray2.default)(_useState1, 2),
|
|
69
|
+
isLoading = _useState10[0],
|
|
70
|
+
setIsLoading = _useState10[1];
|
|
71
|
+
(0, _react.useLayoutEffect)(function () {
|
|
72
|
+
if (isLoading && (0, _platformFeatureFlags.fg)('platform_close_image_blindspot_2')) {
|
|
73
|
+
return ufoContext === null || ufoContext === void 0 ? void 0 : ufoContext.hold('img-loading');
|
|
74
|
+
}
|
|
75
|
+
}, [ufoContext, isLoading]);
|
|
64
76
|
var requestDimensions = (0, _react.useMemo)(function () {
|
|
65
77
|
return dimensions ? (0, _helpers.createRequestDimensions)(dimensions) : undefined;
|
|
66
78
|
}, [dimensions]);
|
|
@@ -107,10 +119,10 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
|
|
|
107
119
|
}
|
|
108
120
|
}
|
|
109
121
|
};
|
|
110
|
-
var
|
|
111
|
-
|
|
112
|
-
preview =
|
|
113
|
-
setPreview =
|
|
122
|
+
var _useState11 = (0, _react.useState)(previewInitializer),
|
|
123
|
+
_useState12 = (0, _slicedToArray2.default)(_useState11, 2),
|
|
124
|
+
preview = _useState12[0],
|
|
125
|
+
setPreview = _useState12[1];
|
|
114
126
|
|
|
115
127
|
//----------------------------------------------------------------
|
|
116
128
|
// FILE STATE
|
|
@@ -176,6 +188,7 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
|
|
|
176
188
|
// We block any possible future call to this method regardless of the outcome (success or fail)
|
|
177
189
|
// If it fails, the normal preview fetch should occur after the file state is fetched anyways
|
|
178
190
|
setUpfrontPreviewStatus('resolving');
|
|
191
|
+
setIsLoading(true);
|
|
179
192
|
var fetchedDimensions = _objectSpread({}, requestDimensions);
|
|
180
193
|
getAndCacheRemotePreviewRef.current().then(function (newPreview) {
|
|
181
194
|
// If there are new and bigger dimensions in the props, and the upfront preview is still resolving,
|
|
@@ -186,6 +199,7 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
|
|
|
186
199
|
}).catch(function () {
|
|
187
200
|
// NO need to log error. If this call fails, a refetch will happen after
|
|
188
201
|
}).finally(function () {
|
|
202
|
+
setIsLoading(false);
|
|
189
203
|
setUpfrontPreviewStatus('resolved');
|
|
190
204
|
});
|
|
191
205
|
}
|
|
@@ -208,17 +222,20 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
|
|
|
208
222
|
// Local preview is available only if it's supported by browser and supported by Media Card (isSupportedLocalPreview)
|
|
209
223
|
// For example, SVGs are mime type NOT supported by browser but media type supported by Media Card (image)
|
|
210
224
|
// Then, local Preview NOT available
|
|
211
|
-
|
|
225
|
+
setIsLoading(true);
|
|
212
226
|
(0, _getPreview.getAndCacheLocalPreview)(identifier.id, localBinary, requestDimensions || {}, resizeMode, mediaBlobUrlAttrsRef.current).then(setPreview).catch(function (e) {
|
|
213
227
|
setIsBannedLocalPreview(true);
|
|
214
228
|
// CXP-2723 TODO: We might have to wrap this error in MediaCardError
|
|
215
229
|
setNonCriticalError(e);
|
|
230
|
+
}).finally(function () {
|
|
231
|
+
setIsLoading(false);
|
|
216
232
|
});
|
|
217
233
|
}
|
|
218
234
|
// Remote Preview ----------------------------------------------------------------
|
|
219
235
|
else if (!error && !nonCriticalError && (!preview || (0, _helpers.isBigger)(preview.dimensions, requestDimensions) ||
|
|
220
236
|
// We always refetch SSR preview to be able to browser-cache a version without the token in the query parameters
|
|
221
237
|
(0, _getPreview.isSSRPreview)(preview)) && !skipRemote && upfrontPreviewStatus === 'resolved' && isBackendPreviewReady) {
|
|
238
|
+
setIsLoading(true);
|
|
222
239
|
getAndCacheRemotePreviewRef.current().then(setPreview).catch(function (e) {
|
|
223
240
|
var wrappedError = (0, _errors.ensureMediaFilePreviewError)('preview-fetch', e);
|
|
224
241
|
if (!preview) {
|
|
@@ -228,6 +245,8 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
|
|
|
228
245
|
// If there is already a preview, we consider it a non-critical error
|
|
229
246
|
setNonCriticalError(wrappedError);
|
|
230
247
|
}
|
|
248
|
+
}).finally(function () {
|
|
249
|
+
setIsLoading(false);
|
|
231
250
|
});
|
|
232
251
|
}
|
|
233
252
|
}, [error, nonCriticalError, getAndCacheRemotePreviewRef, identifier.id, resizeMode, isBannedLocalPreview, mediaBlobUrlAttrsRef, preview, requestDimensions, skipRemote, isBackendPreviewReady, localBinary, mediaType, mimeType, upfrontPreviewStatus]);
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
1
|
+
import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';
|
|
2
2
|
import { isImageRepresentationReady, toCommonMediaClientError } from '@atlaskit/media-client';
|
|
3
3
|
import { useCopyIntent, useFileState, useMediaClient } from '@atlaskit/media-client-react';
|
|
4
4
|
import { isMimeTypeSupportedByBrowser } from '@atlaskit/media-common';
|
|
5
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
6
|
+
import { useInteractionContext } from '@atlaskit/react-ufo/interaction-context';
|
|
5
7
|
import { createFailedSSRObject, extractErrorInfo } from './analytics';
|
|
6
8
|
import { ensureMediaFilePreviewError, ImageLoadError, MediaFilePreviewError } from './errors';
|
|
7
9
|
import { getAndCacheLocalPreview, getAndCacheRemotePreview, getSSRPreview, isLocalPreview, isRemotePreview, isSSRClientPreview, isSSRDataPreview, isSSRPreview, isSupportedLocalPreview, mediaFilePreviewCache } from './getPreview';
|
|
@@ -35,6 +37,13 @@ export const useFilePreview = ({
|
|
|
35
37
|
status: 'unknown'
|
|
36
38
|
}
|
|
37
39
|
});
|
|
40
|
+
const ufoContext = useInteractionContext();
|
|
41
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
42
|
+
useLayoutEffect(() => {
|
|
43
|
+
if (isLoading && fg('platform_close_image_blindspot_2')) {
|
|
44
|
+
return ufoContext === null || ufoContext === void 0 ? void 0 : ufoContext.hold('img-loading');
|
|
45
|
+
}
|
|
46
|
+
}, [ufoContext, isLoading]);
|
|
38
47
|
const requestDimensions = useMemo(() => dimensions ? createRequestDimensions(dimensions) : undefined, [dimensions]);
|
|
39
48
|
const requestDimensionsRef = useCurrentValueRef(requestDimensions);
|
|
40
49
|
let imageURLParams = {
|
|
@@ -149,6 +158,7 @@ export const useFilePreview = ({
|
|
|
149
158
|
// We block any possible future call to this method regardless of the outcome (success or fail)
|
|
150
159
|
// If it fails, the normal preview fetch should occur after the file state is fetched anyways
|
|
151
160
|
setUpfrontPreviewStatus('resolving');
|
|
161
|
+
setIsLoading(true);
|
|
152
162
|
const fetchedDimensions = {
|
|
153
163
|
...requestDimensions
|
|
154
164
|
};
|
|
@@ -161,6 +171,7 @@ export const useFilePreview = ({
|
|
|
161
171
|
}).catch(() => {
|
|
162
172
|
// NO need to log error. If this call fails, a refetch will happen after
|
|
163
173
|
}).finally(() => {
|
|
174
|
+
setIsLoading(false);
|
|
164
175
|
setUpfrontPreviewStatus('resolved');
|
|
165
176
|
});
|
|
166
177
|
}
|
|
@@ -183,17 +194,20 @@ export const useFilePreview = ({
|
|
|
183
194
|
// Local preview is available only if it's supported by browser and supported by Media Card (isSupportedLocalPreview)
|
|
184
195
|
// For example, SVGs are mime type NOT supported by browser but media type supported by Media Card (image)
|
|
185
196
|
// Then, local Preview NOT available
|
|
186
|
-
|
|
197
|
+
setIsLoading(true);
|
|
187
198
|
getAndCacheLocalPreview(identifier.id, localBinary, requestDimensions || {}, resizeMode, mediaBlobUrlAttrsRef.current).then(setPreview).catch(e => {
|
|
188
199
|
setIsBannedLocalPreview(true);
|
|
189
200
|
// CXP-2723 TODO: We might have to wrap this error in MediaCardError
|
|
190
201
|
setNonCriticalError(e);
|
|
202
|
+
}).finally(() => {
|
|
203
|
+
setIsLoading(false);
|
|
191
204
|
});
|
|
192
205
|
}
|
|
193
206
|
// Remote Preview ----------------------------------------------------------------
|
|
194
207
|
else if (!error && !nonCriticalError && (!preview || isBigger(preview.dimensions, requestDimensions) ||
|
|
195
208
|
// We always refetch SSR preview to be able to browser-cache a version without the token in the query parameters
|
|
196
209
|
isSSRPreview(preview)) && !skipRemote && upfrontPreviewStatus === 'resolved' && isBackendPreviewReady) {
|
|
210
|
+
setIsLoading(true);
|
|
197
211
|
getAndCacheRemotePreviewRef.current().then(setPreview).catch(e => {
|
|
198
212
|
const wrappedError = ensureMediaFilePreviewError('preview-fetch', e);
|
|
199
213
|
if (!preview) {
|
|
@@ -203,6 +217,8 @@ export const useFilePreview = ({
|
|
|
203
217
|
// If there is already a preview, we consider it a non-critical error
|
|
204
218
|
setNonCriticalError(wrappedError);
|
|
205
219
|
}
|
|
220
|
+
}).finally(() => {
|
|
221
|
+
setIsLoading(false);
|
|
206
222
|
});
|
|
207
223
|
}
|
|
208
224
|
}, [error, nonCriticalError, getAndCacheRemotePreviewRef, identifier.id, resizeMode, isBannedLocalPreview, mediaBlobUrlAttrsRef, preview, requestDimensions, skipRemote, isBackendPreviewReady, localBinary, mediaType, mimeType, upfrontPreviewStatus]);
|
|
@@ -2,10 +2,12 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
|
2
2
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
3
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
4
4
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
5
|
-
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
5
|
+
import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';
|
|
6
6
|
import { isImageRepresentationReady, toCommonMediaClientError } from '@atlaskit/media-client';
|
|
7
7
|
import { useCopyIntent, useFileState, useMediaClient } from '@atlaskit/media-client-react';
|
|
8
8
|
import { isMimeTypeSupportedByBrowser } from '@atlaskit/media-common';
|
|
9
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
10
|
+
import { useInteractionContext } from '@atlaskit/react-ufo/interaction-context';
|
|
9
11
|
import { createFailedSSRObject, extractErrorInfo } from './analytics';
|
|
10
12
|
import { ensureMediaFilePreviewError, ImageLoadError, MediaFilePreviewError } from './errors';
|
|
11
13
|
import { getAndCacheLocalPreview, getAndCacheRemotePreview, getSSRPreview, isLocalPreview, isRemotePreview, isSSRClientPreview, isSSRDataPreview, isSSRPreview, isSupportedLocalPreview, mediaFilePreviewCache } from './getPreview';
|
|
@@ -54,6 +56,16 @@ export var useFilePreview = function useFilePreview(_ref) {
|
|
|
54
56
|
status: 'unknown'
|
|
55
57
|
}
|
|
56
58
|
});
|
|
59
|
+
var ufoContext = useInteractionContext();
|
|
60
|
+
var _useState1 = useState(false),
|
|
61
|
+
_useState10 = _slicedToArray(_useState1, 2),
|
|
62
|
+
isLoading = _useState10[0],
|
|
63
|
+
setIsLoading = _useState10[1];
|
|
64
|
+
useLayoutEffect(function () {
|
|
65
|
+
if (isLoading && fg('platform_close_image_blindspot_2')) {
|
|
66
|
+
return ufoContext === null || ufoContext === void 0 ? void 0 : ufoContext.hold('img-loading');
|
|
67
|
+
}
|
|
68
|
+
}, [ufoContext, isLoading]);
|
|
57
69
|
var requestDimensions = useMemo(function () {
|
|
58
70
|
return dimensions ? createRequestDimensions(dimensions) : undefined;
|
|
59
71
|
}, [dimensions]);
|
|
@@ -100,10 +112,10 @@ export var useFilePreview = function useFilePreview(_ref) {
|
|
|
100
112
|
}
|
|
101
113
|
}
|
|
102
114
|
};
|
|
103
|
-
var
|
|
104
|
-
|
|
105
|
-
preview =
|
|
106
|
-
setPreview =
|
|
115
|
+
var _useState11 = useState(previewInitializer),
|
|
116
|
+
_useState12 = _slicedToArray(_useState11, 2),
|
|
117
|
+
preview = _useState12[0],
|
|
118
|
+
setPreview = _useState12[1];
|
|
107
119
|
|
|
108
120
|
//----------------------------------------------------------------
|
|
109
121
|
// FILE STATE
|
|
@@ -169,6 +181,7 @@ export var useFilePreview = function useFilePreview(_ref) {
|
|
|
169
181
|
// We block any possible future call to this method regardless of the outcome (success or fail)
|
|
170
182
|
// If it fails, the normal preview fetch should occur after the file state is fetched anyways
|
|
171
183
|
setUpfrontPreviewStatus('resolving');
|
|
184
|
+
setIsLoading(true);
|
|
172
185
|
var fetchedDimensions = _objectSpread({}, requestDimensions);
|
|
173
186
|
getAndCacheRemotePreviewRef.current().then(function (newPreview) {
|
|
174
187
|
// If there are new and bigger dimensions in the props, and the upfront preview is still resolving,
|
|
@@ -179,6 +192,7 @@ export var useFilePreview = function useFilePreview(_ref) {
|
|
|
179
192
|
}).catch(function () {
|
|
180
193
|
// NO need to log error. If this call fails, a refetch will happen after
|
|
181
194
|
}).finally(function () {
|
|
195
|
+
setIsLoading(false);
|
|
182
196
|
setUpfrontPreviewStatus('resolved');
|
|
183
197
|
});
|
|
184
198
|
}
|
|
@@ -201,17 +215,20 @@ export var useFilePreview = function useFilePreview(_ref) {
|
|
|
201
215
|
// Local preview is available only if it's supported by browser and supported by Media Card (isSupportedLocalPreview)
|
|
202
216
|
// For example, SVGs are mime type NOT supported by browser but media type supported by Media Card (image)
|
|
203
217
|
// Then, local Preview NOT available
|
|
204
|
-
|
|
218
|
+
setIsLoading(true);
|
|
205
219
|
getAndCacheLocalPreview(identifier.id, localBinary, requestDimensions || {}, resizeMode, mediaBlobUrlAttrsRef.current).then(setPreview).catch(function (e) {
|
|
206
220
|
setIsBannedLocalPreview(true);
|
|
207
221
|
// CXP-2723 TODO: We might have to wrap this error in MediaCardError
|
|
208
222
|
setNonCriticalError(e);
|
|
223
|
+
}).finally(function () {
|
|
224
|
+
setIsLoading(false);
|
|
209
225
|
});
|
|
210
226
|
}
|
|
211
227
|
// Remote Preview ----------------------------------------------------------------
|
|
212
228
|
else if (!error && !nonCriticalError && (!preview || isBigger(preview.dimensions, requestDimensions) ||
|
|
213
229
|
// We always refetch SSR preview to be able to browser-cache a version without the token in the query parameters
|
|
214
230
|
isSSRPreview(preview)) && !skipRemote && upfrontPreviewStatus === 'resolved' && isBackendPreviewReady) {
|
|
231
|
+
setIsLoading(true);
|
|
215
232
|
getAndCacheRemotePreviewRef.current().then(setPreview).catch(function (e) {
|
|
216
233
|
var wrappedError = ensureMediaFilePreviewError('preview-fetch', e);
|
|
217
234
|
if (!preview) {
|
|
@@ -221,6 +238,8 @@ export var useFilePreview = function useFilePreview(_ref) {
|
|
|
221
238
|
// If there is already a preview, we consider it a non-critical error
|
|
222
239
|
setNonCriticalError(wrappedError);
|
|
223
240
|
}
|
|
241
|
+
}).finally(function () {
|
|
242
|
+
setIsLoading(false);
|
|
224
243
|
});
|
|
225
244
|
}
|
|
226
245
|
}, [error, nonCriticalError, getAndCacheRemotePreviewRef, identifier.id, resizeMode, isBannedLocalPreview, mediaBlobUrlAttrsRef, preview, requestDimensions, skipRemote, isBackendPreviewReady, localBinary, mediaType, mimeType, upfrontPreviewStatus]);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/media-file-preview",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.6",
|
|
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",
|
|
@@ -38,6 +38,7 @@
|
|
|
38
38
|
"@atlaskit/media-common": "^12.3.0",
|
|
39
39
|
"@atlaskit/media-ui": "^28.6.0",
|
|
40
40
|
"@atlaskit/platform-feature-flags": "^1.1.0",
|
|
41
|
+
"@atlaskit/react-ufo": "^4.0.0",
|
|
41
42
|
"@babel/runtime": "^7.0.0",
|
|
42
43
|
"eventemitter2": "^4.1.0",
|
|
43
44
|
"lru_map": "^0.4.1"
|
|
@@ -95,5 +96,9 @@
|
|
|
95
96
|
]
|
|
96
97
|
}
|
|
97
98
|
},
|
|
98
|
-
"platform-feature-flags": {
|
|
99
|
+
"platform-feature-flags": {
|
|
100
|
+
"platform_close_image_blindspot_2": {
|
|
101
|
+
"type": "boolean"
|
|
102
|
+
}
|
|
103
|
+
}
|
|
99
104
|
}
|