@atlaskit/media-file-preview 0.1.0 → 0.2.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,17 @@
1
1
  # @atlaskit/media-file-preview
2
2
 
3
+ ## 0.2.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [#69372](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/69372) [`d719e8e81e2c`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/d719e8e81e2c) - Fixed status for processed files with no preview
8
+
9
+ ## 0.2.0
10
+
11
+ ### Minor Changes
12
+
13
+ - [#65817](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/65817) [`de45ff7a33a9`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/de45ff7a33a9) - Breaking: removed previewDidRender property
14
+
3
15
  ## 0.1.0
4
16
 
5
17
  ### Minor Changes
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.isSSRDataPreview = exports.isSSRClientPreview = exports.isLocalPreview = exports.getSSRPreview = exports.getAndCacheRemotePreview = exports.getAndCacheLocalPreview = void 0;
7
+ exports.isSSRPreview = exports.isSSRDataPreview = exports.isSSRClientPreview = exports.isLocalPreview = exports.getSSRPreview = exports.getAndCacheRemotePreview = exports.getAndCacheLocalPreview = void 0;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
@@ -23,12 +23,6 @@ var extendAndCachePreview = function extendAndCachePreview(id, mode, preview, me
23
23
  case 'remote':
24
24
  source = 'cache-remote';
25
25
  break;
26
- case 'ssr-server':
27
- source = 'cache-ssr-server';
28
- break;
29
- case 'ssr-client':
30
- source = 'cache-ssr-client';
31
- break;
32
26
  default:
33
27
  source = preview.source;
34
28
  }
@@ -65,12 +59,15 @@ var isLocalPreview = exports.isLocalPreview = function isLocalPreview(preview) {
65
59
  return localSources.includes(preview.source);
66
60
  };
67
61
  var isSSRClientPreview = exports.isSSRClientPreview = function isSSRClientPreview(preview) {
68
- var ssrClientSources = ['ssr-client', 'cache-ssr-client'];
69
- return ssrClientSources.includes(preview.source);
62
+ return preview.source === 'ssr-client';
70
63
  };
71
64
  var isSSRDataPreview = exports.isSSRDataPreview = function isSSRDataPreview(preview) {
72
65
  return preview.source === 'ssr-data';
73
66
  };
67
+ var isSSRPreview = exports.isSSRPreview = function isSSRPreview(preview) {
68
+ var ssrClientSources = ['ssr-client', 'ssr-server', 'ssr-data'];
69
+ return ssrClientSources.includes(preview.source);
70
+ };
74
71
  var getAndCacheRemotePreview = exports.getAndCacheRemotePreview = /*#__PURE__*/function () {
75
72
  var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(mediaClient, id, dimensions, params, mediaBlobUrlAttrs, traceContext) {
76
73
  var remotePreview;
@@ -39,6 +39,12 @@ Object.defineProperty(exports, "isSSRDataPreview", {
39
39
  return _getPreview.isSSRDataPreview;
40
40
  }
41
41
  });
42
+ Object.defineProperty(exports, "isSSRPreview", {
43
+ enumerable: true,
44
+ get: function get() {
45
+ return _getPreview.isSSRPreview;
46
+ }
47
+ });
42
48
  Object.defineProperty(exports, "isSupportedLocalPreview", {
43
49
  enumerable: true,
44
50
  get: function get() {
@@ -25,7 +25,6 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
25
25
  ssr = _ref.ssr,
26
26
  dimensions = _ref.dimensions,
27
27
  traceContext = _ref.traceContext,
28
- previewDidRender = _ref.previewDidRender,
29
28
  skipRemote = _ref.skipRemote,
30
29
  mediaBlobUrlAttrs = _ref.mediaBlobUrlAttrs,
31
30
  _ref$allowAnimated = _ref.allowAnimated,
@@ -113,60 +112,15 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
113
112
  (0, _react.useEffect)(function () {
114
113
  setStatus('loading');
115
114
  }, [identifier]);
116
- var updateFileStateRef = (0, _helpers.useCurrentValueRef)(function () {
117
- if (fileState) {
118
- // do not update the status if the status is final
119
- if (['complete', 'error', 'failed-processing'].includes(status)) {
120
- return;
121
- }
122
- if (fileState.status !== 'error') {
123
- var mediaType = 'mediaType' in fileState ? fileState.mediaType : undefined;
124
- var isPreviewable = !!mediaType && ['audio', 'video', 'image', 'doc'].indexOf(mediaType) > -1;
125
- var isPreviewableFileState = !!fileState.preview;
126
- var _isSupportedLocalPreview = mediaType === 'image' || mediaType === 'video';
127
- var hasLocalPreview = !isBannedLocalPreview && isPreviewableFileState && _isSupportedLocalPreview && !!fileState.mimeType && (0, _mediaCommon.isMimeTypeSupportedByBrowser)(fileState.mimeType);
128
- var hasRemotePreview = (0, _mediaClient.isImageRepresentationReady)(fileState);
129
- var hasPreview = hasLocalPreview || hasRemotePreview;
130
- var newStatus;
131
- switch (fileState.status) {
132
- case 'uploading':
133
- case 'failed-processing':
134
- case 'processing':
135
- newStatus = fileState.status;
136
- break;
137
- case 'processed':
138
- if (!isPreviewable || !hasPreview) {
139
- newStatus = 'complete';
140
- break;
141
- }
142
- newStatus = 'loading-preview';
143
- break;
144
- default:
145
- newStatus = 'loading';
146
- }
147
- setStatus(newStatus);
115
+ (0, _react.useEffect)(function () {
116
+ if (status !== 'error') {
117
+ if (!preview && (!fileState || fileState.status === 'processing' || fileState.status === 'uploading')) {
118
+ setStatus('loading');
148
119
  } else {
149
- var e = new _mediaClientReact.MediaFileStateError(fileState.id, fileState.reason, fileState.message, fileState.details);
150
- var errorReason = status === 'uploading' ? 'upload' : 'metadata-fetch';
151
- setError(new _errors.MediaFilePreviewError(errorReason, e));
152
- setStatus('error');
120
+ setStatus('complete');
153
121
  }
154
122
  }
155
- });
156
- (0, _react.useEffect)(function () {
157
- updateFileStateRef.current();
158
- }, [fileState, updateFileStateRef]);
159
- (0, _react.useEffect)(function () {
160
- if (previewDidRender &&
161
- // We should't complete if status is uploading
162
- ['loading-preview', 'processing'].includes(status)) {
163
- setStatus('complete');
164
- // TODO MEX-788: add test for "do not remove the preview when unsubscribing".
165
- setIsBannedLocalPreview(false); // CXP-2723 TODO: we might be able to remove this??
166
- }
167
- }, [previewDidRender, status]);
168
-
169
- // CXP-2723 TODO: Create test cases for banning local preview after status is complete
123
+ }, [preview, status, fileState]);
170
124
 
171
125
  //----------------------------------------------------------------
172
126
  // Preview Fetch Helper
@@ -175,40 +129,14 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
175
129
  return (0, _getPreview.getAndCacheRemotePreview)(mediaClient, identifier.id, requestDimensions || {}, imageURLParams, mediaBlobUrlAttrs, traceContext);
176
130
  });
177
131
 
178
- //----------------------------------------------------------------
179
- // Cache SSR Preview
180
- //----------------------------------------------------------------
181
- (0, _react.useEffect)(function () {
182
- if (!skipRemote && ssr && !!preview && (0, _getPreview.isSSRClientPreview)(preview)) {
183
- // Since the SSR preview brings the token in the query params,
184
- // We need to fetch the remote preview to be able to cache it,
185
- getAndCacheRemotePreviewRef.current().catch(function () {
186
- // No need to log this error.
187
- // If preview fails, it will be refetched later
188
- //TODO: test this catch
189
- // https://product-fabric.atlassian.net/browse/MEX-1071
190
- });
191
- }
192
- }, [getAndCacheRemotePreviewRef, preview, skipRemote, ssr]);
193
-
194
- //----------------------------------------------------------------
195
- // Refetch SRR Preview if dimensions from Server have changed and are bigger,
196
- //----------------------------------------------------------------
197
- (0, _react.useEffect)(function () {
198
- // CXP-2813 TODO: This is called too many times if the refetch failed. Should be called only once
199
- if (preview && !skipRemote && (0, _getPreview.isSSRDataPreview)(preview) && (0, _helpers.isBigger)(preview.dimensions, requestDimensions)) {
200
- getAndCacheRemotePreviewRef.current().then(setPreview).catch(function (e) {
201
- var wrappedError = (0, _errors.ensureMediaFilePreviewError)('remote-preview-fetch-ssr', e, true);
202
- setNonCriticalError(wrappedError);
203
- });
204
- }
205
- }, [getAndCacheRemotePreviewRef, preview, requestDimensions, skipRemote]);
206
-
207
132
  //----------------------------------------------------------------
208
133
  // Upfront Preview
209
134
  //----------------------------------------------------------------
210
135
  (0, _react.useEffect)(function () {
211
- if (!preview && !wasResolvedUpfrontPreviewRef.current && !skipRemote) {
136
+ // Only fetch upfront (no file state) if there is no preview in the state already
137
+ if (preview) {
138
+ wasResolvedUpfrontPreviewRef.current = true;
139
+ } else if (!preview && !wasResolvedUpfrontPreviewRef.current && !skipRemote) {
212
140
  // We block any possible future call to this method regardless of the outcome (success or fail)
213
141
  // If it fails, the normal preview fetch should occur after the file state is fetched anyways
214
142
  wasResolvedUpfrontPreviewRef.current = true;
@@ -249,13 +177,21 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
249
177
  });
250
178
  }
251
179
  // Remote Preview ----------------------------------------------------------------
252
- else if ((!preview || (0, _helpers.isBigger)(preview.dimensions, requestDimensions)) && !skipRemote && wasResolvedUpfrontPreviewRef.current && !!fileState && (0, _mediaClient.isImageRepresentationReady)(fileState)) {
180
+ else if (!error && !nonCriticalError && (!preview || (0, _helpers.isBigger)(preview.dimensions, requestDimensions) ||
181
+ // We always refetch SSR preview to be able to browser-cache a version without the token in the query parameters
182
+ (0, _getPreview.isSSRPreview)(preview)) && !skipRemote && wasResolvedUpfrontPreviewRef.current && !!fileState && (0, _mediaClient.isImageRepresentationReady)(fileState)) {
253
183
  getAndCacheRemotePreviewRef.current().then(setPreview).catch(function (e) {
254
- setStatus('error');
255
- setError((0, _errors.ensureMediaFilePreviewError)('preview-fetch', e));
184
+ var wrappedError = (0, _errors.ensureMediaFilePreviewError)('preview-fetch', e);
185
+ if (!preview) {
186
+ setStatus('error');
187
+ setError(wrappedError);
188
+ } else {
189
+ // If there is already a preview, we consider it a non-critical error
190
+ setNonCriticalError(wrappedError);
191
+ }
256
192
  });
257
193
  }
258
- }, [fileState, getAndCacheRemotePreviewRef, identifier.id, resizeMode, isBannedLocalPreview, mediaBlobUrlAttrs, preview, requestDimensions, skipRemote]);
194
+ }, [error, nonCriticalError, fileState, getAndCacheRemotePreviewRef, identifier.id, resizeMode, isBannedLocalPreview, mediaBlobUrlAttrs, preview, requestDimensions, skipRemote]);
259
195
 
260
196
  //----------------------------------------------------------------
261
197
  // RETURN
@@ -295,12 +231,10 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
295
231
  _getPreview.mediaFilePreviewCache.remove(identifier.id, resizeMode);
296
232
  setPreview(undefined);
297
233
  } else {
298
- if (!['complete', 'error', 'failed-processing'].includes(status)) {
299
- setStatus('error');
300
- setError(error);
301
- }
234
+ setStatus('error');
235
+ setError(error);
302
236
  }
303
- }, [identifier.id, preview === null || preview === void 0 ? void 0 : preview.dataURI, resizeMode, status]);
237
+ }, [identifier.id, preview === null || preview === void 0 ? void 0 : preview.dataURI, resizeMode]);
304
238
  var onImageLoad = (0, _react.useCallback)(function (newPreview) {
305
239
  if (newPreview) {
306
240
  if ((0, _getPreview.isSSRClientPreview)(newPreview) && ssrReliabilityRef.current.client.status === 'unknown') {
@@ -339,6 +273,7 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
339
273
  // we might get rid of ssrReliabiltyRef from our hook
340
274
  return {
341
275
  preview: preview,
276
+ status: status,
342
277
  error: error,
343
278
  nonCriticalError: nonCriticalError,
344
279
  ssrReliabilityRef: ssrReliabilityRef,
@@ -11,12 +11,6 @@ const extendAndCachePreview = (id, mode, preview, mediaBlobUrlAttrs) => {
11
11
  case 'remote':
12
12
  source = 'cache-remote';
13
13
  break;
14
- case 'ssr-server':
15
- source = 'cache-ssr-server';
16
- break;
17
- case 'ssr-client':
18
- source = 'cache-ssr-client';
19
- break;
20
14
  default:
21
15
  source = preview.source;
22
16
  }
@@ -54,11 +48,12 @@ export const isLocalPreview = preview => {
54
48
  const localSources = ['local', 'cache-local'];
55
49
  return localSources.includes(preview.source);
56
50
  };
57
- export const isSSRClientPreview = preview => {
58
- const ssrClientSources = ['ssr-client', 'cache-ssr-client'];
51
+ export const isSSRClientPreview = preview => preview.source === 'ssr-client';
52
+ export const isSSRDataPreview = preview => preview.source === 'ssr-data';
53
+ export const isSSRPreview = preview => {
54
+ const ssrClientSources = ['ssr-client', 'ssr-server', 'ssr-data'];
59
55
  return ssrClientSources.includes(preview.source);
60
56
  };
61
- export const isSSRDataPreview = preview => preview.source === 'ssr-data';
62
57
  export const getAndCacheRemotePreview = async (mediaClient, id, dimensions, params, mediaBlobUrlAttrs, traceContext) => {
63
58
  const remotePreview = await getRemotePreview(mediaClient, id, params, traceContext);
64
59
  return extendAndCachePreview(id, params.mode, {
@@ -1,3 +1,3 @@
1
1
  export { mediaFilePreviewCache } from './cache';
2
- export { getSSRPreview, isLocalPreview, isSSRClientPreview, isSSRDataPreview, getAndCacheRemotePreview, getAndCacheLocalPreview } from './getPreview';
2
+ export { getSSRPreview, isLocalPreview, isSSRPreview, isSSRClientPreview, isSSRDataPreview, getAndCacheRemotePreview, getAndCacheLocalPreview } from './getPreview';
3
3
  export { isSupportedLocalPreview } from './helpers';
@@ -1,10 +1,10 @@
1
1
  import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
2
2
  import { isImageRepresentationReady } from '@atlaskit/media-client';
3
- import { MediaFileStateError, useFileState, useMediaClient } from '@atlaskit/media-client-react';
3
+ import { useFileState, useMediaClient } from '@atlaskit/media-client-react';
4
4
  import { isMimeTypeSupportedByBrowser } from '@atlaskit/media-common';
5
5
  import { extractErrorInfo } from './analytics';
6
- import { ensureMediaFilePreviewError, ImageLoadError, MediaFilePreviewError } from './errors';
7
- import { getAndCacheLocalPreview, getAndCacheRemotePreview, getSSRPreview, isLocalPreview, isSSRClientPreview, isSSRDataPreview, isSupportedLocalPreview, mediaFilePreviewCache } from './getPreview';
6
+ import { ensureMediaFilePreviewError, ImageLoadError } from './errors';
7
+ import { getAndCacheLocalPreview, getAndCacheRemotePreview, getSSRPreview, isLocalPreview, isSSRClientPreview, isSSRDataPreview, isSSRPreview, isSupportedLocalPreview, mediaFilePreviewCache } from './getPreview';
8
8
  import { generateScriptProps, getSSRData } from './globalScope';
9
9
  import { createRequestDimensions, isBigger, useCurrentValueRef } from './helpers';
10
10
  export const useFilePreview = ({
@@ -13,7 +13,6 @@ export const useFilePreview = ({
13
13
  ssr,
14
14
  dimensions,
15
15
  traceContext,
16
- previewDidRender,
17
16
  skipRemote,
18
17
  mediaBlobUrlAttrs,
19
18
  allowAnimated = true,
@@ -89,60 +88,15 @@ export const useFilePreview = ({
89
88
  useEffect(() => {
90
89
  setStatus('loading');
91
90
  }, [identifier]);
92
- const updateFileStateRef = useCurrentValueRef(() => {
93
- if (fileState) {
94
- // do not update the status if the status is final
95
- if (['complete', 'error', 'failed-processing'].includes(status)) {
96
- return;
97
- }
98
- if (fileState.status !== 'error') {
99
- const mediaType = 'mediaType' in fileState ? fileState.mediaType : undefined;
100
- const isPreviewable = !!mediaType && ['audio', 'video', 'image', 'doc'].indexOf(mediaType) > -1;
101
- const isPreviewableFileState = !!fileState.preview;
102
- const isSupportedLocalPreview = mediaType === 'image' || mediaType === 'video';
103
- const hasLocalPreview = !isBannedLocalPreview && isPreviewableFileState && isSupportedLocalPreview && !!fileState.mimeType && isMimeTypeSupportedByBrowser(fileState.mimeType);
104
- const hasRemotePreview = isImageRepresentationReady(fileState);
105
- const hasPreview = hasLocalPreview || hasRemotePreview;
106
- let newStatus;
107
- switch (fileState.status) {
108
- case 'uploading':
109
- case 'failed-processing':
110
- case 'processing':
111
- newStatus = fileState.status;
112
- break;
113
- case 'processed':
114
- if (!isPreviewable || !hasPreview) {
115
- newStatus = 'complete';
116
- break;
117
- }
118
- newStatus = 'loading-preview';
119
- break;
120
- default:
121
- newStatus = 'loading';
122
- }
123
- setStatus(newStatus);
91
+ useEffect(() => {
92
+ if (status !== 'error') {
93
+ if (!preview && (!fileState || fileState.status === 'processing' || fileState.status === 'uploading')) {
94
+ setStatus('loading');
124
95
  } else {
125
- const e = new MediaFileStateError(fileState.id, fileState.reason, fileState.message, fileState.details);
126
- const errorReason = status === 'uploading' ? 'upload' : 'metadata-fetch';
127
- setError(new MediaFilePreviewError(errorReason, e));
128
- setStatus('error');
96
+ setStatus('complete');
129
97
  }
130
98
  }
131
- });
132
- useEffect(() => {
133
- updateFileStateRef.current();
134
- }, [fileState, updateFileStateRef]);
135
- useEffect(() => {
136
- if (previewDidRender &&
137
- // We should't complete if status is uploading
138
- ['loading-preview', 'processing'].includes(status)) {
139
- setStatus('complete');
140
- // TODO MEX-788: add test for "do not remove the preview when unsubscribing".
141
- setIsBannedLocalPreview(false); // CXP-2723 TODO: we might be able to remove this??
142
- }
143
- }, [previewDidRender, status]);
144
-
145
- // CXP-2723 TODO: Create test cases for banning local preview after status is complete
99
+ }, [preview, status, fileState]);
146
100
 
147
101
  //----------------------------------------------------------------
148
102
  // Preview Fetch Helper
@@ -151,40 +105,14 @@ export const useFilePreview = ({
151
105
  return getAndCacheRemotePreview(mediaClient, identifier.id, requestDimensions || {}, imageURLParams, mediaBlobUrlAttrs, traceContext);
152
106
  });
153
107
 
154
- //----------------------------------------------------------------
155
- // Cache SSR Preview
156
- //----------------------------------------------------------------
157
- useEffect(() => {
158
- if (!skipRemote && ssr && !!preview && isSSRClientPreview(preview)) {
159
- // Since the SSR preview brings the token in the query params,
160
- // We need to fetch the remote preview to be able to cache it,
161
- getAndCacheRemotePreviewRef.current().catch(() => {
162
- // No need to log this error.
163
- // If preview fails, it will be refetched later
164
- //TODO: test this catch
165
- // https://product-fabric.atlassian.net/browse/MEX-1071
166
- });
167
- }
168
- }, [getAndCacheRemotePreviewRef, preview, skipRemote, ssr]);
169
-
170
- //----------------------------------------------------------------
171
- // Refetch SRR Preview if dimensions from Server have changed and are bigger,
172
- //----------------------------------------------------------------
173
- useEffect(() => {
174
- // CXP-2813 TODO: This is called too many times if the refetch failed. Should be called only once
175
- if (preview && !skipRemote && isSSRDataPreview(preview) && isBigger(preview.dimensions, requestDimensions)) {
176
- getAndCacheRemotePreviewRef.current().then(setPreview).catch(e => {
177
- const wrappedError = ensureMediaFilePreviewError('remote-preview-fetch-ssr', e, true);
178
- setNonCriticalError(wrappedError);
179
- });
180
- }
181
- }, [getAndCacheRemotePreviewRef, preview, requestDimensions, skipRemote]);
182
-
183
108
  //----------------------------------------------------------------
184
109
  // Upfront Preview
185
110
  //----------------------------------------------------------------
186
111
  useEffect(() => {
187
- if (!preview && !wasResolvedUpfrontPreviewRef.current && !skipRemote) {
112
+ // Only fetch upfront (no file state) if there is no preview in the state already
113
+ if (preview) {
114
+ wasResolvedUpfrontPreviewRef.current = true;
115
+ } else if (!preview && !wasResolvedUpfrontPreviewRef.current && !skipRemote) {
188
116
  // We block any possible future call to this method regardless of the outcome (success or fail)
189
117
  // If it fails, the normal preview fetch should occur after the file state is fetched anyways
190
118
  wasResolvedUpfrontPreviewRef.current = true;
@@ -227,13 +155,21 @@ export const useFilePreview = ({
227
155
  });
228
156
  }
229
157
  // Remote Preview ----------------------------------------------------------------
230
- else if ((!preview || isBigger(preview.dimensions, requestDimensions)) && !skipRemote && wasResolvedUpfrontPreviewRef.current && !!fileState && isImageRepresentationReady(fileState)) {
158
+ else if (!error && !nonCriticalError && (!preview || isBigger(preview.dimensions, requestDimensions) ||
159
+ // We always refetch SSR preview to be able to browser-cache a version without the token in the query parameters
160
+ isSSRPreview(preview)) && !skipRemote && wasResolvedUpfrontPreviewRef.current && !!fileState && isImageRepresentationReady(fileState)) {
231
161
  getAndCacheRemotePreviewRef.current().then(setPreview).catch(e => {
232
- setStatus('error');
233
- setError(ensureMediaFilePreviewError('preview-fetch', e));
162
+ const wrappedError = ensureMediaFilePreviewError('preview-fetch', e);
163
+ if (!preview) {
164
+ setStatus('error');
165
+ setError(wrappedError);
166
+ } else {
167
+ // If there is already a preview, we consider it a non-critical error
168
+ setNonCriticalError(wrappedError);
169
+ }
234
170
  });
235
171
  }
236
- }, [fileState, getAndCacheRemotePreviewRef, identifier.id, resizeMode, isBannedLocalPreview, mediaBlobUrlAttrs, preview, requestDimensions, skipRemote]);
172
+ }, [error, nonCriticalError, fileState, getAndCacheRemotePreviewRef, identifier.id, resizeMode, isBannedLocalPreview, mediaBlobUrlAttrs, preview, requestDimensions, skipRemote]);
237
173
 
238
174
  //----------------------------------------------------------------
239
175
  // RETURN
@@ -274,12 +210,10 @@ export const useFilePreview = ({
274
210
  mediaFilePreviewCache.remove(identifier.id, resizeMode);
275
211
  setPreview(undefined);
276
212
  } else {
277
- if (!['complete', 'error', 'failed-processing'].includes(status)) {
278
- setStatus('error');
279
- setError(error);
280
- }
213
+ setStatus('error');
214
+ setError(error);
281
215
  }
282
- }, [identifier.id, preview === null || preview === void 0 ? void 0 : preview.dataURI, resizeMode, status]);
216
+ }, [identifier.id, preview === null || preview === void 0 ? void 0 : preview.dataURI, resizeMode]);
283
217
  const onImageLoad = useCallback(newPreview => {
284
218
  if (newPreview) {
285
219
  if (isSSRClientPreview(newPreview) && ssrReliabilityRef.current.client.status === 'unknown') {
@@ -318,6 +252,7 @@ export const useFilePreview = ({
318
252
  // we might get rid of ssrReliabiltyRef from our hook
319
253
  return {
320
254
  preview,
255
+ status,
321
256
  error,
322
257
  nonCriticalError,
323
258
  ssrReliabilityRef,
@@ -16,12 +16,6 @@ var extendAndCachePreview = function extendAndCachePreview(id, mode, preview, me
16
16
  case 'remote':
17
17
  source = 'cache-remote';
18
18
  break;
19
- case 'ssr-server':
20
- source = 'cache-ssr-server';
21
- break;
22
- case 'ssr-client':
23
- source = 'cache-ssr-client';
24
- break;
25
19
  default:
26
20
  source = preview.source;
27
21
  }
@@ -58,12 +52,15 @@ export var isLocalPreview = function isLocalPreview(preview) {
58
52
  return localSources.includes(preview.source);
59
53
  };
60
54
  export var isSSRClientPreview = function isSSRClientPreview(preview) {
61
- var ssrClientSources = ['ssr-client', 'cache-ssr-client'];
62
- return ssrClientSources.includes(preview.source);
55
+ return preview.source === 'ssr-client';
63
56
  };
64
57
  export var isSSRDataPreview = function isSSRDataPreview(preview) {
65
58
  return preview.source === 'ssr-data';
66
59
  };
60
+ export var isSSRPreview = function isSSRPreview(preview) {
61
+ var ssrClientSources = ['ssr-client', 'ssr-server', 'ssr-data'];
62
+ return ssrClientSources.includes(preview.source);
63
+ };
67
64
  export var getAndCacheRemotePreview = /*#__PURE__*/function () {
68
65
  var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(mediaClient, id, dimensions, params, mediaBlobUrlAttrs, traceContext) {
69
66
  var remotePreview;
@@ -1,3 +1,3 @@
1
1
  export { mediaFilePreviewCache } from './cache';
2
- export { getSSRPreview, isLocalPreview, isSSRClientPreview, isSSRDataPreview, getAndCacheRemotePreview, getAndCacheLocalPreview } from './getPreview';
2
+ export { getSSRPreview, isLocalPreview, isSSRPreview, isSSRClientPreview, isSSRDataPreview, getAndCacheRemotePreview, getAndCacheLocalPreview } from './getPreview';
3
3
  export { isSupportedLocalPreview } from './helpers';
@@ -4,11 +4,11 @@ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbol
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
5
  import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
6
6
  import { isImageRepresentationReady } from '@atlaskit/media-client';
7
- import { MediaFileStateError, useFileState, useMediaClient } from '@atlaskit/media-client-react';
7
+ import { useFileState, useMediaClient } from '@atlaskit/media-client-react';
8
8
  import { isMimeTypeSupportedByBrowser } from '@atlaskit/media-common';
9
9
  import { extractErrorInfo } from './analytics';
10
- import { ensureMediaFilePreviewError, ImageLoadError, MediaFilePreviewError } from './errors';
11
- import { getAndCacheLocalPreview, getAndCacheRemotePreview, getSSRPreview, isLocalPreview, isSSRClientPreview, isSSRDataPreview, isSupportedLocalPreview, mediaFilePreviewCache } from './getPreview';
10
+ import { ensureMediaFilePreviewError, ImageLoadError } from './errors';
11
+ import { getAndCacheLocalPreview, getAndCacheRemotePreview, getSSRPreview, isLocalPreview, isSSRClientPreview, isSSRDataPreview, isSSRPreview, isSupportedLocalPreview, mediaFilePreviewCache } from './getPreview';
12
12
  import { generateScriptProps, getSSRData } from './globalScope';
13
13
  import { createRequestDimensions, isBigger, useCurrentValueRef } from './helpers';
14
14
  export var useFilePreview = function useFilePreview(_ref) {
@@ -18,7 +18,6 @@ export var useFilePreview = function useFilePreview(_ref) {
18
18
  ssr = _ref.ssr,
19
19
  dimensions = _ref.dimensions,
20
20
  traceContext = _ref.traceContext,
21
- previewDidRender = _ref.previewDidRender,
22
21
  skipRemote = _ref.skipRemote,
23
22
  mediaBlobUrlAttrs = _ref.mediaBlobUrlAttrs,
24
23
  _ref$allowAnimated = _ref.allowAnimated,
@@ -106,60 +105,15 @@ export var useFilePreview = function useFilePreview(_ref) {
106
105
  useEffect(function () {
107
106
  setStatus('loading');
108
107
  }, [identifier]);
109
- var updateFileStateRef = useCurrentValueRef(function () {
110
- if (fileState) {
111
- // do not update the status if the status is final
112
- if (['complete', 'error', 'failed-processing'].includes(status)) {
113
- return;
114
- }
115
- if (fileState.status !== 'error') {
116
- var mediaType = 'mediaType' in fileState ? fileState.mediaType : undefined;
117
- var isPreviewable = !!mediaType && ['audio', 'video', 'image', 'doc'].indexOf(mediaType) > -1;
118
- var isPreviewableFileState = !!fileState.preview;
119
- var _isSupportedLocalPreview = mediaType === 'image' || mediaType === 'video';
120
- var hasLocalPreview = !isBannedLocalPreview && isPreviewableFileState && _isSupportedLocalPreview && !!fileState.mimeType && isMimeTypeSupportedByBrowser(fileState.mimeType);
121
- var hasRemotePreview = isImageRepresentationReady(fileState);
122
- var hasPreview = hasLocalPreview || hasRemotePreview;
123
- var newStatus;
124
- switch (fileState.status) {
125
- case 'uploading':
126
- case 'failed-processing':
127
- case 'processing':
128
- newStatus = fileState.status;
129
- break;
130
- case 'processed':
131
- if (!isPreviewable || !hasPreview) {
132
- newStatus = 'complete';
133
- break;
134
- }
135
- newStatus = 'loading-preview';
136
- break;
137
- default:
138
- newStatus = 'loading';
139
- }
140
- setStatus(newStatus);
108
+ useEffect(function () {
109
+ if (status !== 'error') {
110
+ if (!preview && (!fileState || fileState.status === 'processing' || fileState.status === 'uploading')) {
111
+ setStatus('loading');
141
112
  } else {
142
- var e = new MediaFileStateError(fileState.id, fileState.reason, fileState.message, fileState.details);
143
- var errorReason = status === 'uploading' ? 'upload' : 'metadata-fetch';
144
- setError(new MediaFilePreviewError(errorReason, e));
145
- setStatus('error');
113
+ setStatus('complete');
146
114
  }
147
115
  }
148
- });
149
- useEffect(function () {
150
- updateFileStateRef.current();
151
- }, [fileState, updateFileStateRef]);
152
- useEffect(function () {
153
- if (previewDidRender &&
154
- // We should't complete if status is uploading
155
- ['loading-preview', 'processing'].includes(status)) {
156
- setStatus('complete');
157
- // TODO MEX-788: add test for "do not remove the preview when unsubscribing".
158
- setIsBannedLocalPreview(false); // CXP-2723 TODO: we might be able to remove this??
159
- }
160
- }, [previewDidRender, status]);
161
-
162
- // CXP-2723 TODO: Create test cases for banning local preview after status is complete
116
+ }, [preview, status, fileState]);
163
117
 
164
118
  //----------------------------------------------------------------
165
119
  // Preview Fetch Helper
@@ -168,40 +122,14 @@ export var useFilePreview = function useFilePreview(_ref) {
168
122
  return getAndCacheRemotePreview(mediaClient, identifier.id, requestDimensions || {}, imageURLParams, mediaBlobUrlAttrs, traceContext);
169
123
  });
170
124
 
171
- //----------------------------------------------------------------
172
- // Cache SSR Preview
173
- //----------------------------------------------------------------
174
- useEffect(function () {
175
- if (!skipRemote && ssr && !!preview && isSSRClientPreview(preview)) {
176
- // Since the SSR preview brings the token in the query params,
177
- // We need to fetch the remote preview to be able to cache it,
178
- getAndCacheRemotePreviewRef.current().catch(function () {
179
- // No need to log this error.
180
- // If preview fails, it will be refetched later
181
- //TODO: test this catch
182
- // https://product-fabric.atlassian.net/browse/MEX-1071
183
- });
184
- }
185
- }, [getAndCacheRemotePreviewRef, preview, skipRemote, ssr]);
186
-
187
- //----------------------------------------------------------------
188
- // Refetch SRR Preview if dimensions from Server have changed and are bigger,
189
- //----------------------------------------------------------------
190
- useEffect(function () {
191
- // CXP-2813 TODO: This is called too many times if the refetch failed. Should be called only once
192
- if (preview && !skipRemote && isSSRDataPreview(preview) && isBigger(preview.dimensions, requestDimensions)) {
193
- getAndCacheRemotePreviewRef.current().then(setPreview).catch(function (e) {
194
- var wrappedError = ensureMediaFilePreviewError('remote-preview-fetch-ssr', e, true);
195
- setNonCriticalError(wrappedError);
196
- });
197
- }
198
- }, [getAndCacheRemotePreviewRef, preview, requestDimensions, skipRemote]);
199
-
200
125
  //----------------------------------------------------------------
201
126
  // Upfront Preview
202
127
  //----------------------------------------------------------------
203
128
  useEffect(function () {
204
- if (!preview && !wasResolvedUpfrontPreviewRef.current && !skipRemote) {
129
+ // Only fetch upfront (no file state) if there is no preview in the state already
130
+ if (preview) {
131
+ wasResolvedUpfrontPreviewRef.current = true;
132
+ } else if (!preview && !wasResolvedUpfrontPreviewRef.current && !skipRemote) {
205
133
  // We block any possible future call to this method regardless of the outcome (success or fail)
206
134
  // If it fails, the normal preview fetch should occur after the file state is fetched anyways
207
135
  wasResolvedUpfrontPreviewRef.current = true;
@@ -242,13 +170,21 @@ export var useFilePreview = function useFilePreview(_ref) {
242
170
  });
243
171
  }
244
172
  // Remote Preview ----------------------------------------------------------------
245
- else if ((!preview || isBigger(preview.dimensions, requestDimensions)) && !skipRemote && wasResolvedUpfrontPreviewRef.current && !!fileState && isImageRepresentationReady(fileState)) {
173
+ else if (!error && !nonCriticalError && (!preview || isBigger(preview.dimensions, requestDimensions) ||
174
+ // We always refetch SSR preview to be able to browser-cache a version without the token in the query parameters
175
+ isSSRPreview(preview)) && !skipRemote && wasResolvedUpfrontPreviewRef.current && !!fileState && isImageRepresentationReady(fileState)) {
246
176
  getAndCacheRemotePreviewRef.current().then(setPreview).catch(function (e) {
247
- setStatus('error');
248
- setError(ensureMediaFilePreviewError('preview-fetch', e));
177
+ var wrappedError = ensureMediaFilePreviewError('preview-fetch', e);
178
+ if (!preview) {
179
+ setStatus('error');
180
+ setError(wrappedError);
181
+ } else {
182
+ // If there is already a preview, we consider it a non-critical error
183
+ setNonCriticalError(wrappedError);
184
+ }
249
185
  });
250
186
  }
251
- }, [fileState, getAndCacheRemotePreviewRef, identifier.id, resizeMode, isBannedLocalPreview, mediaBlobUrlAttrs, preview, requestDimensions, skipRemote]);
187
+ }, [error, nonCriticalError, fileState, getAndCacheRemotePreviewRef, identifier.id, resizeMode, isBannedLocalPreview, mediaBlobUrlAttrs, preview, requestDimensions, skipRemote]);
252
188
 
253
189
  //----------------------------------------------------------------
254
190
  // RETURN
@@ -288,12 +224,10 @@ export var useFilePreview = function useFilePreview(_ref) {
288
224
  mediaFilePreviewCache.remove(identifier.id, resizeMode);
289
225
  setPreview(undefined);
290
226
  } else {
291
- if (!['complete', 'error', 'failed-processing'].includes(status)) {
292
- setStatus('error');
293
- setError(error);
294
- }
227
+ setStatus('error');
228
+ setError(error);
295
229
  }
296
- }, [identifier.id, preview === null || preview === void 0 ? void 0 : preview.dataURI, resizeMode, status]);
230
+ }, [identifier.id, preview === null || preview === void 0 ? void 0 : preview.dataURI, resizeMode]);
297
231
  var onImageLoad = useCallback(function (newPreview) {
298
232
  if (newPreview) {
299
233
  if (isSSRClientPreview(newPreview) && ssrReliabilityRef.current.client.status === 'unknown') {
@@ -332,6 +266,7 @@ export var useFilePreview = function useFilePreview(_ref) {
332
266
  // we might get rid of ssrReliabiltyRef from our hook
333
267
  return {
334
268
  preview: preview,
269
+ status: status,
335
270
  error: error,
336
271
  nonCriticalError: nonCriticalError,
337
272
  ssrReliabilityRef: ssrReliabilityRef,
@@ -5,5 +5,6 @@ export declare const getSSRPreview: (ssr: SSR, mediaClient: MediaClient, id: str
5
5
  export declare const isLocalPreview: (preview: MediaFilePreview) => boolean;
6
6
  export declare const isSSRClientPreview: (preview: MediaFilePreview) => boolean;
7
7
  export declare const isSSRDataPreview: (preview: MediaFilePreview) => boolean;
8
+ export declare const isSSRPreview: (preview: MediaFilePreview) => boolean;
8
9
  export declare const getAndCacheRemotePreview: (mediaClient: MediaClient, id: string, dimensions: MediaFilePreviewDimensions, params: MediaStoreGetFileImageParams, mediaBlobUrlAttrs?: MediaBlobUrlAttrs, traceContext?: MediaTraceContext) => Promise<MediaFilePreview>;
9
10
  export declare const getAndCacheLocalPreview: (id: string, filePreview: FilePreview | Promise<FilePreview>, dimensions: MediaFilePreviewDimensions, mode: MediaStoreGetFileImageParams['mode'], mediaBlobUrlAttrs?: MediaBlobUrlAttrs) => Promise<MediaFilePreview>;
@@ -1,3 +1,3 @@
1
1
  export { mediaFilePreviewCache } from './cache';
2
- export { getSSRPreview, isLocalPreview, isSSRClientPreview, isSSRDataPreview, getAndCacheRemotePreview, getAndCacheLocalPreview, } from './getPreview';
2
+ export { getSSRPreview, isLocalPreview, isSSRPreview, isSSRClientPreview, isSSRDataPreview, getAndCacheRemotePreview, getAndCacheLocalPreview, } from './getPreview';
3
3
  export { isSupportedLocalPreview } from './helpers';
@@ -1,4 +1,4 @@
1
- export type MediaFilePreviewSource = 'local' | 'remote' | 'ssr-server' | 'ssr-client' | 'ssr-data' | 'cache-local' | 'cache-remote' | 'cache-ssr-client' | 'cache-ssr-server' | 'external';
1
+ export type MediaFilePreviewSource = 'local' | 'remote' | 'ssr-server' | 'ssr-client' | 'ssr-data' | 'cache-local' | 'cache-remote' | 'external';
2
2
  export type MediaFilePreviewDimensions = {
3
3
  width?: number;
4
4
  height?: number;
@@ -9,4 +9,4 @@ export interface MediaFilePreview {
9
9
  dimensions?: MediaFilePreviewDimensions;
10
10
  source: MediaFilePreviewSource;
11
11
  }
12
- export type MediaFilePreviewStatus = 'uploading' | 'loading' | 'processing' | 'loading-preview' | 'complete' | 'error' | 'failed-processing';
12
+ export type MediaFilePreviewStatus = 'loading' | 'complete' | 'error';
@@ -3,7 +3,7 @@ import { FileIdentifier, MediaBlobUrlAttrs, MediaStoreGetFileImageParams } from
3
3
  import { MediaTraceContext, SSR } from '@atlaskit/media-common';
4
4
  import { SSRStatus } from './analytics';
5
5
  import { MediaFilePreviewError } from './errors';
6
- import { MediaFilePreview, MediaFilePreviewDimensions } from './types';
6
+ import { MediaFilePreview, MediaFilePreviewDimensions, MediaFilePreviewStatus } from './types';
7
7
  export interface UseFilePreviewParams {
8
8
  /** Instance of file identifier. */
9
9
  readonly identifier: FileIdentifier;
@@ -17,8 +17,6 @@ export interface UseFilePreviewParams {
17
17
  readonly mediaBlobUrlAttrs?: MediaBlobUrlAttrs;
18
18
  /** Trace context to be passed to the backend requests */
19
19
  readonly traceContext?: MediaTraceContext;
20
- /** Notify the hook that the preview successfully rendered */
21
- readonly previewDidRender?: boolean;
22
20
  /** Do not fetch a remote preview. Helpful for lazy loading */
23
21
  readonly skipRemote?: boolean;
24
22
  /** Define whether an animated image is acceptable to return */
@@ -29,8 +27,9 @@ export interface UseFilePreviewParams {
29
27
  */
30
28
  readonly maxAge?: number;
31
29
  }
32
- export declare const useFilePreview: ({ resizeMode, identifier, ssr, dimensions, traceContext, previewDidRender, skipRemote, mediaBlobUrlAttrs, allowAnimated, upscale, maxAge, }: UseFilePreviewParams) => {
30
+ export declare const useFilePreview: ({ resizeMode, identifier, ssr, dimensions, traceContext, skipRemote, mediaBlobUrlAttrs, allowAnimated, upscale, maxAge, }: UseFilePreviewParams) => {
33
31
  preview: MediaFilePreview | undefined;
32
+ status: MediaFilePreviewStatus;
34
33
  error: MediaFilePreviewError | undefined;
35
34
  nonCriticalError: MediaFilePreviewError | undefined;
36
35
  ssrReliabilityRef: import("react").MutableRefObject<SSRStatus>;
@@ -5,5 +5,6 @@ export declare const getSSRPreview: (ssr: SSR, mediaClient: MediaClient, id: str
5
5
  export declare const isLocalPreview: (preview: MediaFilePreview) => boolean;
6
6
  export declare const isSSRClientPreview: (preview: MediaFilePreview) => boolean;
7
7
  export declare const isSSRDataPreview: (preview: MediaFilePreview) => boolean;
8
+ export declare const isSSRPreview: (preview: MediaFilePreview) => boolean;
8
9
  export declare const getAndCacheRemotePreview: (mediaClient: MediaClient, id: string, dimensions: MediaFilePreviewDimensions, params: MediaStoreGetFileImageParams, mediaBlobUrlAttrs?: MediaBlobUrlAttrs, traceContext?: MediaTraceContext) => Promise<MediaFilePreview>;
9
10
  export declare const getAndCacheLocalPreview: (id: string, filePreview: FilePreview | Promise<FilePreview>, dimensions: MediaFilePreviewDimensions, mode: MediaStoreGetFileImageParams['mode'], mediaBlobUrlAttrs?: MediaBlobUrlAttrs) => Promise<MediaFilePreview>;
@@ -1,3 +1,3 @@
1
1
  export { mediaFilePreviewCache } from './cache';
2
- export { getSSRPreview, isLocalPreview, isSSRClientPreview, isSSRDataPreview, getAndCacheRemotePreview, getAndCacheLocalPreview, } from './getPreview';
2
+ export { getSSRPreview, isLocalPreview, isSSRPreview, isSSRClientPreview, isSSRDataPreview, getAndCacheRemotePreview, getAndCacheLocalPreview, } from './getPreview';
3
3
  export { isSupportedLocalPreview } from './helpers';
@@ -1,4 +1,4 @@
1
- export type MediaFilePreviewSource = 'local' | 'remote' | 'ssr-server' | 'ssr-client' | 'ssr-data' | 'cache-local' | 'cache-remote' | 'cache-ssr-client' | 'cache-ssr-server' | 'external';
1
+ export type MediaFilePreviewSource = 'local' | 'remote' | 'ssr-server' | 'ssr-client' | 'ssr-data' | 'cache-local' | 'cache-remote' | 'external';
2
2
  export type MediaFilePreviewDimensions = {
3
3
  width?: number;
4
4
  height?: number;
@@ -9,4 +9,4 @@ export interface MediaFilePreview {
9
9
  dimensions?: MediaFilePreviewDimensions;
10
10
  source: MediaFilePreviewSource;
11
11
  }
12
- export type MediaFilePreviewStatus = 'uploading' | 'loading' | 'processing' | 'loading-preview' | 'complete' | 'error' | 'failed-processing';
12
+ export type MediaFilePreviewStatus = 'loading' | 'complete' | 'error';
@@ -3,7 +3,7 @@ import { FileIdentifier, MediaBlobUrlAttrs, MediaStoreGetFileImageParams } from
3
3
  import { MediaTraceContext, SSR } from '@atlaskit/media-common';
4
4
  import { SSRStatus } from './analytics';
5
5
  import { MediaFilePreviewError } from './errors';
6
- import { MediaFilePreview, MediaFilePreviewDimensions } from './types';
6
+ import { MediaFilePreview, MediaFilePreviewDimensions, MediaFilePreviewStatus } from './types';
7
7
  export interface UseFilePreviewParams {
8
8
  /** Instance of file identifier. */
9
9
  readonly identifier: FileIdentifier;
@@ -17,8 +17,6 @@ export interface UseFilePreviewParams {
17
17
  readonly mediaBlobUrlAttrs?: MediaBlobUrlAttrs;
18
18
  /** Trace context to be passed to the backend requests */
19
19
  readonly traceContext?: MediaTraceContext;
20
- /** Notify the hook that the preview successfully rendered */
21
- readonly previewDidRender?: boolean;
22
20
  /** Do not fetch a remote preview. Helpful for lazy loading */
23
21
  readonly skipRemote?: boolean;
24
22
  /** Define whether an animated image is acceptable to return */
@@ -29,8 +27,9 @@ export interface UseFilePreviewParams {
29
27
  */
30
28
  readonly maxAge?: number;
31
29
  }
32
- export declare const useFilePreview: ({ resizeMode, identifier, ssr, dimensions, traceContext, previewDidRender, skipRemote, mediaBlobUrlAttrs, allowAnimated, upscale, maxAge, }: UseFilePreviewParams) => {
30
+ export declare const useFilePreview: ({ resizeMode, identifier, ssr, dimensions, traceContext, skipRemote, mediaBlobUrlAttrs, allowAnimated, upscale, maxAge, }: UseFilePreviewParams) => {
33
31
  preview: MediaFilePreview | undefined;
32
+ status: MediaFilePreviewStatus;
34
33
  error: MediaFilePreviewError | undefined;
35
34
  nonCriticalError: MediaFilePreviewError | undefined;
36
35
  ssrReliabilityRef: import("react").MutableRefObject<SSRStatus>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/media-file-preview",
3
- "version": "0.1.0",
3
+ "version": "0.2.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",
@@ -16,7 +16,7 @@
16
16
  "category": "Components"
17
17
  }
18
18
  },
19
- "repository": "https://bitbucket.org/atlassian/atlassian-frontend",
19
+ "repository": "https://bitbucket.org/atlassian/atlassian-frontend-mirror",
20
20
  "main": "dist/cjs/index.js",
21
21
  "module": "dist/esm/index.js",
22
22
  "module:es2019": "dist/es2019/index.js",
@@ -49,11 +49,14 @@
49
49
  "devDependencies": {
50
50
  "@af/integration-testing": "*",
51
51
  "@af/visual-regression": "*",
52
+ "@atlaskit/media-state": "^1.0.3",
53
+ "@atlaskit/media-test-data": "^1.1.1",
52
54
  "@atlaskit/section-message": "^6.4.17",
53
55
  "@atlaskit/ssr": "*",
54
56
  "@atlaskit/visual-regression": "*",
55
57
  "@atlassian/atlassian-frontend-prettier-config-1.0.0": "npm:@atlassian/atlassian-frontend-prettier-config@1.0.0",
56
58
  "@testing-library/react": "^12.1.5",
59
+ "@testing-library/react-hooks": "^8.0.1",
57
60
  "react-dom": "^16.8.0",
58
61
  "typescript": "~4.9.5",
59
62
  "wait-for-expect": "^1.2.0"