@atlaskit/media-file-preview 0.13.0 → 0.14.0
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/globalScope/globalScope.js +10 -25
- package/dist/cjs/useFilePreview.js +21 -2
- package/dist/es2019/globalScope/globalScope.js +10 -19
- package/dist/es2019/useFilePreview.js +21 -2
- package/dist/esm/globalScope/globalScope.js +10 -24
- package/dist/esm/useFilePreview.js +21 -2
- package/dist/types/globalScope/types.d.ts +1 -0
- package/dist/types-ts4.5/globalScope/types.d.ts +1 -0
- package/package.json +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# @atlaskit/media-file-preview
|
|
2
2
|
|
|
3
|
+
## 0.14.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`0fca09ae4fa6d`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/0fca09ae4fa6d) -
|
|
8
|
+
Removing the blob URL conversion and fixing the unnecessary dual fetching of images when VC fixes
|
|
9
|
+
are active
|
|
10
|
+
|
|
3
11
|
## 0.13.0
|
|
4
12
|
|
|
5
13
|
### Minor Changes
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
@@ -8,10 +7,7 @@ exports.getKey = exports.generateScriptProps = exports.GLOBAL_MEDIA_NAMESPACE =
|
|
|
8
7
|
exports.getMediaCardSSR = getMediaCardSSR;
|
|
9
8
|
exports.getMediaGlobalScope = getMediaGlobalScope;
|
|
10
9
|
exports.storeDataURI = void 0;
|
|
11
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
12
10
|
var _printScript = require("./printScript");
|
|
13
|
-
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; }
|
|
14
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
15
11
|
// ----- WARNING -----
|
|
16
12
|
// This is a very sensitive fraction of code.
|
|
17
13
|
// Any changes to this file must be tested directly in product before merging.
|
|
@@ -65,34 +61,23 @@ var storeDataURI = exports.storeDataURI = function storeDataURI(key, paramDataUR
|
|
|
65
61
|
if (img && srcSet) {
|
|
66
62
|
img.srcset = srcSet;
|
|
67
63
|
}
|
|
64
|
+
var loadPromise = new Promise(function (resolve, reject) {
|
|
65
|
+
// eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
|
|
66
|
+
img === null || img === void 0 || img.addEventListener('load', function () {
|
|
67
|
+
resolve(void 0);
|
|
68
|
+
});
|
|
68
69
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
fetch(img.currentSrc).then(function (res) {
|
|
75
|
-
return res.blob();
|
|
76
|
-
}).then(function (blob) {
|
|
77
|
-
return URL.createObjectURL(blob);
|
|
78
|
-
}).then(function (blobUrl) {
|
|
79
|
-
img.src = blobUrl;
|
|
80
|
-
img.srcset = '';
|
|
81
|
-
mediaCardSsr[key] = _objectSpread(_objectSpread({}, mediaCardSsr[key]), {}, {
|
|
82
|
-
dataURI: blobUrl,
|
|
83
|
-
srcSet: ''
|
|
84
|
-
});
|
|
85
|
-
}).catch(function (err) {
|
|
86
|
-
mediaCardSsr[key] = _objectSpread(_objectSpread({}, mediaCardSsr[key]), {}, {
|
|
87
|
-
error: err
|
|
88
|
-
});
|
|
70
|
+
// eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
|
|
71
|
+
img === null || img === void 0 || img.addEventListener('error', function () {
|
|
72
|
+
reject(new Error('Failed to load image'));
|
|
89
73
|
});
|
|
90
74
|
});
|
|
91
75
|
mediaCardSsr[key] = isPreviousImageLarger ? prevData : {
|
|
92
76
|
dataURI: dataURI,
|
|
93
77
|
dimensions: dimensions,
|
|
94
78
|
error: error,
|
|
95
|
-
srcSet: srcSet
|
|
79
|
+
srcSet: srcSet,
|
|
80
|
+
loadPromise: loadPromise
|
|
96
81
|
};
|
|
97
82
|
} else {
|
|
98
83
|
mediaCardSsr[key] = {
|
|
@@ -184,6 +184,25 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
|
|
|
184
184
|
}
|
|
185
185
|
}, [preview, status, fileState, isBackendPreviewReady, fileStateErrorMessage, upfrontPreviewStatus]);
|
|
186
186
|
|
|
187
|
+
//----------------------------------------------------------------
|
|
188
|
+
// SSR Loading
|
|
189
|
+
//----------------------------------------------------------------
|
|
190
|
+
|
|
191
|
+
(0, _react.useEffect)(function () {
|
|
192
|
+
var _getSSRData;
|
|
193
|
+
if (!(0, _platformFeatureFlags.fg)('media-perf-uplift-mutation-fix')) {
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
var loadPromise = (_getSSRData = (0, _globalScope.getSSRData)(identifier, resizeMode)) === null || _getSSRData === void 0 ? void 0 : _getSSRData.loadPromise;
|
|
197
|
+
if (preview && (0, _getPreview.isSSRDataPreview)(preview) && loadPromise) {
|
|
198
|
+
loadPromise.then(function () {
|
|
199
|
+
setStatus('complete');
|
|
200
|
+
}).catch(function () {
|
|
201
|
+
setPreview(undefined);
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
}, [preview, identifier, resizeMode]);
|
|
205
|
+
|
|
187
206
|
//----------------------------------------------------------------
|
|
188
207
|
// Preview Fetch Helper
|
|
189
208
|
//----------------------------------------------------------------
|
|
@@ -249,8 +268,8 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
|
|
|
249
268
|
else if (!error && !nonCriticalError && (!preview || (0, _helpers.isBigger)(preview.dimensions, requestDimensions) ||
|
|
250
269
|
// We always refetch SSR preview to be able to browser-cache a version without the token in the query parameters
|
|
251
270
|
(0, _getPreview.isSSRPreview)(preview)) && !skipRemote && upfrontPreviewStatus === 'resolved' && isBackendPreviewReady) {
|
|
252
|
-
// If the preview is SSR
|
|
253
|
-
if (preview && (0, _getPreview.isSSRPreview)(preview) &&
|
|
271
|
+
// If the preview is SSR, we can skip the refetch as it will be handled by the global scope promise
|
|
272
|
+
if (preview && (0, _getPreview.isSSRPreview)(preview) && (0, _platformFeatureFlags.fg)('media-perf-uplift-mutation-fix')) {
|
|
254
273
|
return;
|
|
255
274
|
}
|
|
256
275
|
setIsLoading(true);
|
|
@@ -45,32 +45,23 @@ export const storeDataURI = (key, paramDataURI, paramMode, paramSrcSet, dimensio
|
|
|
45
45
|
if (img && srcSet) {
|
|
46
46
|
img.srcset = srcSet;
|
|
47
47
|
}
|
|
48
|
+
const loadPromise = new Promise((resolve, reject) => {
|
|
49
|
+
// eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
|
|
50
|
+
img === null || img === void 0 ? void 0 : img.addEventListener('load', () => {
|
|
51
|
+
resolve(void 0);
|
|
52
|
+
});
|
|
48
53
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
fetch(img.currentSrc).then(res => res.blob()).then(blob => URL.createObjectURL(blob)).then(blobUrl => {
|
|
55
|
-
img.src = blobUrl;
|
|
56
|
-
img.srcset = '';
|
|
57
|
-
mediaCardSsr[key] = {
|
|
58
|
-
...mediaCardSsr[key],
|
|
59
|
-
dataURI: blobUrl,
|
|
60
|
-
srcSet: ''
|
|
61
|
-
};
|
|
62
|
-
}).catch(err => {
|
|
63
|
-
mediaCardSsr[key] = {
|
|
64
|
-
...mediaCardSsr[key],
|
|
65
|
-
error: err
|
|
66
|
-
};
|
|
54
|
+
// eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
|
|
55
|
+
img === null || img === void 0 ? void 0 : img.addEventListener('error', () => {
|
|
56
|
+
reject(new Error('Failed to load image'));
|
|
67
57
|
});
|
|
68
58
|
});
|
|
69
59
|
mediaCardSsr[key] = isPreviousImageLarger ? prevData : {
|
|
70
60
|
dataURI,
|
|
71
61
|
dimensions,
|
|
72
62
|
error,
|
|
73
|
-
srcSet
|
|
63
|
+
srcSet,
|
|
64
|
+
loadPromise
|
|
74
65
|
};
|
|
75
66
|
} else {
|
|
76
67
|
mediaCardSsr[key] = {
|
|
@@ -153,6 +153,25 @@ export const useFilePreview = ({
|
|
|
153
153
|
}
|
|
154
154
|
}, [preview, status, fileState, isBackendPreviewReady, fileStateErrorMessage, upfrontPreviewStatus]);
|
|
155
155
|
|
|
156
|
+
//----------------------------------------------------------------
|
|
157
|
+
// SSR Loading
|
|
158
|
+
//----------------------------------------------------------------
|
|
159
|
+
|
|
160
|
+
useEffect(() => {
|
|
161
|
+
var _getSSRData;
|
|
162
|
+
if (!fg('media-perf-uplift-mutation-fix')) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
const loadPromise = (_getSSRData = getSSRData(identifier, resizeMode)) === null || _getSSRData === void 0 ? void 0 : _getSSRData.loadPromise;
|
|
166
|
+
if (preview && isSSRDataPreview(preview) && loadPromise) {
|
|
167
|
+
loadPromise.then(() => {
|
|
168
|
+
setStatus('complete');
|
|
169
|
+
}).catch(() => {
|
|
170
|
+
setPreview(undefined);
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}, [preview, identifier, resizeMode]);
|
|
174
|
+
|
|
156
175
|
//----------------------------------------------------------------
|
|
157
176
|
// Preview Fetch Helper
|
|
158
177
|
//----------------------------------------------------------------
|
|
@@ -220,8 +239,8 @@ export const useFilePreview = ({
|
|
|
220
239
|
else if (!error && !nonCriticalError && (!preview || isBigger(preview.dimensions, requestDimensions) ||
|
|
221
240
|
// We always refetch SSR preview to be able to browser-cache a version without the token in the query parameters
|
|
222
241
|
isSSRPreview(preview)) && !skipRemote && upfrontPreviewStatus === 'resolved' && isBackendPreviewReady) {
|
|
223
|
-
// If the preview is SSR
|
|
224
|
-
if (preview && isSSRPreview(preview) &&
|
|
242
|
+
// If the preview is SSR, we can skip the refetch as it will be handled by the global scope promise
|
|
243
|
+
if (preview && isSSRPreview(preview) && fg('media-perf-uplift-mutation-fix')) {
|
|
225
244
|
return;
|
|
226
245
|
}
|
|
227
246
|
setIsLoading(true);
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
-
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; }
|
|
3
|
-
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; }
|
|
4
1
|
import { printFunctionCall, printScript } from './printScript';
|
|
5
2
|
// ----- WARNING -----
|
|
6
3
|
// This is a very sensitive fraction of code.
|
|
@@ -55,34 +52,23 @@ export var storeDataURI = function storeDataURI(key, paramDataURI, paramMode, pa
|
|
|
55
52
|
if (img && srcSet) {
|
|
56
53
|
img.srcset = srcSet;
|
|
57
54
|
}
|
|
55
|
+
var loadPromise = new Promise(function (resolve, reject) {
|
|
56
|
+
// eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
|
|
57
|
+
img === null || img === void 0 || img.addEventListener('load', function () {
|
|
58
|
+
resolve(void 0);
|
|
59
|
+
});
|
|
58
60
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
fetch(img.currentSrc).then(function (res) {
|
|
65
|
-
return res.blob();
|
|
66
|
-
}).then(function (blob) {
|
|
67
|
-
return URL.createObjectURL(blob);
|
|
68
|
-
}).then(function (blobUrl) {
|
|
69
|
-
img.src = blobUrl;
|
|
70
|
-
img.srcset = '';
|
|
71
|
-
mediaCardSsr[key] = _objectSpread(_objectSpread({}, mediaCardSsr[key]), {}, {
|
|
72
|
-
dataURI: blobUrl,
|
|
73
|
-
srcSet: ''
|
|
74
|
-
});
|
|
75
|
-
}).catch(function (err) {
|
|
76
|
-
mediaCardSsr[key] = _objectSpread(_objectSpread({}, mediaCardSsr[key]), {}, {
|
|
77
|
-
error: err
|
|
78
|
-
});
|
|
61
|
+
// eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
|
|
62
|
+
img === null || img === void 0 || img.addEventListener('error', function () {
|
|
63
|
+
reject(new Error('Failed to load image'));
|
|
79
64
|
});
|
|
80
65
|
});
|
|
81
66
|
mediaCardSsr[key] = isPreviousImageLarger ? prevData : {
|
|
82
67
|
dataURI: dataURI,
|
|
83
68
|
dimensions: dimensions,
|
|
84
69
|
error: error,
|
|
85
|
-
srcSet: srcSet
|
|
70
|
+
srcSet: srcSet,
|
|
71
|
+
loadPromise: loadPromise
|
|
86
72
|
};
|
|
87
73
|
} else {
|
|
88
74
|
mediaCardSsr[key] = {
|
|
@@ -177,6 +177,25 @@ export var useFilePreview = function useFilePreview(_ref) {
|
|
|
177
177
|
}
|
|
178
178
|
}, [preview, status, fileState, isBackendPreviewReady, fileStateErrorMessage, upfrontPreviewStatus]);
|
|
179
179
|
|
|
180
|
+
//----------------------------------------------------------------
|
|
181
|
+
// SSR Loading
|
|
182
|
+
//----------------------------------------------------------------
|
|
183
|
+
|
|
184
|
+
useEffect(function () {
|
|
185
|
+
var _getSSRData;
|
|
186
|
+
if (!fg('media-perf-uplift-mutation-fix')) {
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
var loadPromise = (_getSSRData = getSSRData(identifier, resizeMode)) === null || _getSSRData === void 0 ? void 0 : _getSSRData.loadPromise;
|
|
190
|
+
if (preview && isSSRDataPreview(preview) && loadPromise) {
|
|
191
|
+
loadPromise.then(function () {
|
|
192
|
+
setStatus('complete');
|
|
193
|
+
}).catch(function () {
|
|
194
|
+
setPreview(undefined);
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
}, [preview, identifier, resizeMode]);
|
|
198
|
+
|
|
180
199
|
//----------------------------------------------------------------
|
|
181
200
|
// Preview Fetch Helper
|
|
182
201
|
//----------------------------------------------------------------
|
|
@@ -242,8 +261,8 @@ export var useFilePreview = function useFilePreview(_ref) {
|
|
|
242
261
|
else if (!error && !nonCriticalError && (!preview || isBigger(preview.dimensions, requestDimensions) ||
|
|
243
262
|
// We always refetch SSR preview to be able to browser-cache a version without the token in the query parameters
|
|
244
263
|
isSSRPreview(preview)) && !skipRemote && upfrontPreviewStatus === 'resolved' && isBackendPreviewReady) {
|
|
245
|
-
// If the preview is SSR
|
|
246
|
-
if (preview && isSSRPreview(preview) &&
|
|
264
|
+
// If the preview is SSR, we can skip the refetch as it will be handled by the global scope promise
|
|
265
|
+
if (preview && isSSRPreview(preview) && fg('media-perf-uplift-mutation-fix')) {
|
|
247
266
|
return;
|
|
248
267
|
}
|
|
249
268
|
setIsLoading(true);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/media-file-preview",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
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",
|
|
@@ -51,6 +51,7 @@
|
|
|
51
51
|
"@atlaskit/media-test-data": "^3.2.0",
|
|
52
52
|
"@atlaskit/section-message": "^8.9.0",
|
|
53
53
|
"@atlaskit/ssr": "workspace:^",
|
|
54
|
+
"@atlassian/feature-flags-test-utils": "^1.0.0",
|
|
54
55
|
"@testing-library/react": "^13.4.0",
|
|
55
56
|
"@testing-library/react-hooks": "^8.0.1",
|
|
56
57
|
"react-dom": "^18.2.0",
|