@atlaskit/media-card 77.4.4 → 77.4.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 +13 -0
- package/dist/cjs/card/card.js +42 -38
- package/dist/cjs/card/getCardPreview/filePreviewStatus.js +2 -0
- package/dist/cjs/card/media-card-analytics-error-boundary.js +1 -1
- package/dist/cjs/card/v2/cardV2.js +1 -1
- package/dist/cjs/card/v2/fileCard.js +120 -521
- package/dist/cjs/card/v2/useFilePreview.js +592 -0
- package/dist/cjs/inline/loader.js +1 -1
- package/dist/cjs/utils/ufoExperiences.js +1 -1
- package/dist/es2019/card/card.js +7 -4
- package/dist/es2019/card/getCardPreview/filePreviewStatus.js +2 -0
- package/dist/es2019/card/media-card-analytics-error-boundary.js +1 -1
- package/dist/es2019/card/v2/cardV2.js +1 -1
- package/dist/es2019/card/v2/fileCard.js +105 -436
- package/dist/es2019/card/v2/useFilePreview.js +499 -0
- package/dist/es2019/inline/loader.js +1 -1
- package/dist/es2019/utils/ufoExperiences.js +1 -1
- package/dist/esm/card/card.js +42 -38
- package/dist/esm/card/getCardPreview/filePreviewStatus.js +2 -0
- package/dist/esm/card/media-card-analytics-error-boundary.js +1 -1
- package/dist/esm/card/v2/cardV2.js +1 -1
- package/dist/esm/card/v2/fileCard.js +125 -526
- package/dist/esm/card/v2/useFilePreview.js +584 -0
- package/dist/esm/inline/loader.js +1 -1
- package/dist/esm/utils/ufoExperiences.js +1 -1
- package/dist/types/card/card.d.ts +1 -1
- package/dist/types/card/v2/useFilePreview.d.ts +38 -0
- package/dist/types-ts4.5/card/card.d.ts +1 -1
- package/dist/types-ts4.5/card/v2/useFilePreview.d.ts +38 -0
- package/package.json +4 -4
- package/tmp/api-report-tmp.d.ts +0 -345
|
@@ -6,8 +6,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
8
|
exports.FileCard = void 0;
|
|
9
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
10
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
11
9
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
12
10
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
11
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
@@ -15,36 +13,30 @@ var _download = _interopRequireDefault(require("@atlaskit/icon/glyph/download"))
|
|
|
15
13
|
var _mediaClient = require("@atlaskit/media-client");
|
|
16
14
|
var _mediaClientReact = require("@atlaskit/media-client-react");
|
|
17
15
|
var _mediaCommon = require("@atlaskit/media-common");
|
|
18
|
-
var _mediaUi = require("@atlaskit/media-ui");
|
|
19
16
|
var _mediaViewer = require("@atlaskit/media-viewer");
|
|
20
17
|
var _react = _interopRequireWildcard(require("react"));
|
|
21
18
|
var _reactDom = _interopRequireDefault(require("react-dom"));
|
|
22
19
|
var _errors = require("../../errors");
|
|
23
|
-
var _analytics = require("../../utils/analytics");
|
|
24
|
-
var _dimensionComparer = require("../../utils/dimensionComparer");
|
|
25
20
|
var _document = _interopRequireDefault(require("../../utils/document"));
|
|
26
21
|
var _generateUniqueId = require("../../utils/generateUniqueId");
|
|
27
22
|
var _getDataURIDimension = require("../../utils/getDataURIDimension");
|
|
28
23
|
var _getMediaCardCursor = require("../../utils/getMediaCardCursor");
|
|
29
|
-
var _globalScope = require("../../utils/globalScope");
|
|
30
24
|
var _metadata = require("../../utils/metadata");
|
|
31
25
|
var _ufoExperiences = require("../../utils/ufoExperiences");
|
|
32
26
|
var _useCurrentValueRef = require("../../utils/useCurrentValueRef");
|
|
33
27
|
var _usePrevious = require("../../utils/usePrevious");
|
|
34
28
|
var _videoIsPlayable = require("../../utils/videoIsPlayable");
|
|
35
|
-
var _videoSnapshot = require("../../utils/videoSnapshot");
|
|
36
29
|
var _viewportDetector = require("../../utils/viewportDetector");
|
|
37
30
|
var _cardAnalytics = require("../cardAnalytics");
|
|
38
31
|
var _getCardPreview = require("../getCardPreview");
|
|
39
|
-
var _cache = _interopRequireDefault(require("../getCardPreview/cache"));
|
|
40
32
|
var _cardViewV = require("./cardViewV2");
|
|
41
33
|
var _inlinePlayerLazyV = require("./inlinePlayerLazyV2");
|
|
34
|
+
var _useFilePreview2 = require("./useFilePreview");
|
|
42
35
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
43
36
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
44
37
|
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; }
|
|
45
38
|
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; }
|
|
46
39
|
var FileCard = exports.FileCard = function FileCard(_ref) {
|
|
47
|
-
var _ssrReliabilityRef$cu;
|
|
48
40
|
var _ref$appearance = _ref.appearance,
|
|
49
41
|
appearance = _ref$appearance === void 0 ? 'auto' : _ref$appearance,
|
|
50
42
|
_ref$resizeMode = _ref.resizeMode,
|
|
@@ -78,102 +70,26 @@ var FileCard = exports.FileCard = function FileCard(_ref) {
|
|
|
78
70
|
onMouseEnter = _ref.onMouseEnter,
|
|
79
71
|
createAnalyticsEvent = _ref.createAnalyticsEvent;
|
|
80
72
|
//----------------------------------------------------------------//
|
|
81
|
-
|
|
73
|
+
//------------ State, Refs & Initial Values ----------------------//
|
|
82
74
|
//----------------------------------------------------------------//
|
|
83
75
|
|
|
84
|
-
var ssrDataRef = (0, _react.useRef)();
|
|
85
|
-
var ssrReliabilityRef = (0, _react.useRef)({
|
|
86
|
-
server: {
|
|
87
|
-
status: 'unknown'
|
|
88
|
-
},
|
|
89
|
-
client: {
|
|
90
|
-
status: 'unknown'
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
76
|
var _useState = (0, _react.useState)(null),
|
|
94
77
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
95
78
|
cardElement = _useState2[0],
|
|
96
79
|
setCardElement = _useState2[1];
|
|
97
|
-
var
|
|
98
|
-
return
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
}, [cardElement, dimensions, identifier.collectionName, resizeMode]);
|
|
108
|
-
var getMediaBlobUrlAttrs = (0, _react.useCallback)(function (fileState) {
|
|
109
|
-
var id = identifier.id,
|
|
110
|
-
collection = identifier.collectionName;
|
|
111
|
-
var _getFileDetails = (0, _metadata.getFileDetails)(identifier, fileState),
|
|
112
|
-
mimeType = _getFileDetails.mimeType,
|
|
113
|
-
name = _getFileDetails.name,
|
|
114
|
-
size = _getFileDetails.size;
|
|
115
|
-
return contextId ? _objectSpread(_objectSpread({
|
|
116
|
-
id: id,
|
|
117
|
-
collection: collection,
|
|
118
|
-
contextId: contextId,
|
|
119
|
-
mimeType: mimeType,
|
|
120
|
-
name: name,
|
|
121
|
-
size: size
|
|
122
|
-
}, originalDimensions || (0, _getDataURIDimension.getRequestedDimensions)({
|
|
123
|
-
dimensions: dimensions,
|
|
124
|
-
element: cardElement
|
|
125
|
-
})), {}, {
|
|
126
|
-
alt: alt
|
|
127
|
-
}) : undefined;
|
|
128
|
-
}, [alt, cardElement, contextId, dimensions, identifier, originalDimensions]);
|
|
129
|
-
var getSSRPreview = function getSSRPreview(ssr, identifier, mediaClient) {
|
|
130
|
-
var _ssrDataRef$current, _ssrDataRef$current2;
|
|
131
|
-
ssrDataRef.current = (0, _globalScope.getSSRData)(identifier);
|
|
132
|
-
if ((_ssrDataRef$current = ssrDataRef.current) !== null && _ssrDataRef$current !== void 0 && _ssrDataRef$current.error) {
|
|
133
|
-
ssrReliabilityRef.current.server = _objectSpread({
|
|
134
|
-
status: 'fail'
|
|
135
|
-
}, ssrDataRef.current.error);
|
|
136
|
-
}
|
|
137
|
-
if (!((_ssrDataRef$current2 = ssrDataRef.current) !== null && _ssrDataRef$current2 !== void 0 && _ssrDataRef$current2.dataURI)) {
|
|
138
|
-
try {
|
|
139
|
-
return (0, _getCardPreview.getSSRCardPreview)(ssr, mediaClient, identifier.id, imageURLParams, getMediaBlobUrlAttrs(fileStateValue));
|
|
140
|
-
} catch (e) {
|
|
141
|
-
ssrReliabilityRef.current[ssr] = _objectSpread({
|
|
142
|
-
status: 'fail'
|
|
143
|
-
}, (0, _analytics.extractErrorInfo)(e));
|
|
144
|
-
}
|
|
145
|
-
} else {
|
|
146
|
-
return {
|
|
147
|
-
dataURI: ssrDataRef.current.dataURI,
|
|
148
|
-
source: 'ssr-data'
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
};
|
|
152
|
-
var cardPreviewInitializer = function cardPreviewInitializer() {
|
|
153
|
-
var cardPreview;
|
|
154
|
-
var id = identifier.id;
|
|
155
|
-
var fileImageMode = (0, _mediaClient.imageResizeModeToFileImageMode)(resizeMode);
|
|
156
|
-
cardPreview = (0, _getCardPreview.getCardPreviewFromCache)(id, fileImageMode);
|
|
157
|
-
if (!cardPreview && ssr) {
|
|
158
|
-
cardPreview = getSSRPreview(ssr, identifier, mediaClient);
|
|
159
|
-
}
|
|
160
|
-
return cardPreview;
|
|
161
|
-
};
|
|
162
|
-
var _useState3 = (0, _react.useState)(cardPreviewInitializer),
|
|
80
|
+
var requestedDimensions = (0, _react.useMemo)(function () {
|
|
81
|
+
return (
|
|
82
|
+
// requested dimensions is eventually an expensive operation if the dimensions are a percentage
|
|
83
|
+
(0, _getDataURIDimension.getRequestedDimensions)({
|
|
84
|
+
dimensions: dimensions,
|
|
85
|
+
element: cardElement
|
|
86
|
+
})
|
|
87
|
+
);
|
|
88
|
+
}, [dimensions, cardElement]);
|
|
89
|
+
var _useState3 = (0, _react.useState)(!isLazy),
|
|
163
90
|
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
// If cardPreview is available from local cache or external, `isCardVisible`
|
|
168
|
-
// should be true to avoid flickers during re-mount of the component
|
|
169
|
-
// should not be visible for SSR preview, otherwise we'll fire the metadata fetch from
|
|
170
|
-
// outside the viewport
|
|
171
|
-
var _useState5 = (0, _react.useState)(function () {
|
|
172
|
-
return !isLazy || cardPreview && !(0, _getCardPreview.isSSRPreview)(cardPreview);
|
|
173
|
-
}),
|
|
174
|
-
_useState6 = (0, _slicedToArray2.default)(_useState5, 2),
|
|
175
|
-
isCardVisible = _useState6[0],
|
|
176
|
-
setIsCardVisible = _useState6[1];
|
|
91
|
+
isCardVisible = _useState4[0],
|
|
92
|
+
setIsCardVisible = _useState4[1];
|
|
177
93
|
var _useFileState = (0, _mediaClientReact.useFileState)(identifier.id, {
|
|
178
94
|
skipRemote: !isCardVisible,
|
|
179
95
|
collectionName: identifier.collectionName,
|
|
@@ -210,35 +126,79 @@ var FileCard = exports.FileCard = function FileCard(_ref) {
|
|
|
210
126
|
traceId: (0, _mediaCommon.getRandomHex)(8)
|
|
211
127
|
};
|
|
212
128
|
}, []);
|
|
213
|
-
var
|
|
129
|
+
var _useState5 = (0, _react.useState)('loading'),
|
|
130
|
+
_useState6 = (0, _slicedToArray2.default)(_useState5, 2),
|
|
131
|
+
status = _useState6[0],
|
|
132
|
+
setStatus = _useState6[1];
|
|
133
|
+
var _useState7 = (0, _react.useState)(false),
|
|
214
134
|
_useState8 = (0, _slicedToArray2.default)(_useState7, 2),
|
|
215
|
-
|
|
216
|
-
|
|
135
|
+
isPlayingFile = _useState8[0],
|
|
136
|
+
setIsPlayingFile = _useState8[1];
|
|
217
137
|
var _useState9 = (0, _react.useState)(false),
|
|
218
138
|
_useState10 = (0, _slicedToArray2.default)(_useState9, 2),
|
|
219
|
-
|
|
220
|
-
|
|
139
|
+
shouldAutoplay = _useState10[0],
|
|
140
|
+
setShouldAutoplay = _useState10[1];
|
|
141
|
+
|
|
142
|
+
// CXP-2723 TODO: remove isBannedLocalPreview
|
|
221
143
|
var _useState11 = (0, _react.useState)(false),
|
|
222
144
|
_useState12 = (0, _slicedToArray2.default)(_useState11, 2),
|
|
223
|
-
|
|
224
|
-
|
|
145
|
+
isBannedLocalPreview = _useState12[0],
|
|
146
|
+
setIsBannedLocalPreview = _useState12[1];
|
|
225
147
|
var _useState13 = (0, _react.useState)(false),
|
|
226
148
|
_useState14 = (0, _slicedToArray2.default)(_useState13, 2),
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
149
|
+
previewDidRender = _useState14[0],
|
|
150
|
+
setPreviewDidRender = _useState14[1];
|
|
151
|
+
|
|
152
|
+
// CXP-2723 TODO: Do we have tests to validate the use of the below attributes
|
|
153
|
+
var mediaBlobUrlAttrs = (0, _react.useMemo)(function () {
|
|
154
|
+
var id = identifier.id,
|
|
155
|
+
collection = identifier.collectionName;
|
|
156
|
+
var _getFileDetails = (0, _metadata.getFileDetails)(identifier, fileStateValue),
|
|
157
|
+
mimeType = _getFileDetails.mimeType,
|
|
158
|
+
name = _getFileDetails.name,
|
|
159
|
+
size = _getFileDetails.size;
|
|
160
|
+
return contextId ? _objectSpread(_objectSpread({
|
|
161
|
+
id: id,
|
|
162
|
+
collection: collection,
|
|
163
|
+
contextId: contextId,
|
|
164
|
+
mimeType: mimeType,
|
|
165
|
+
name: name,
|
|
166
|
+
size: size
|
|
167
|
+
}, originalDimensions || requestedDimensions), {}, {
|
|
168
|
+
alt: alt
|
|
169
|
+
}) : undefined;
|
|
170
|
+
}, [alt, requestedDimensions, contextId, fileStateValue, identifier, originalDimensions]);
|
|
171
|
+
var _useFilePreview = (0, _useFilePreview2.useFilePreview)({
|
|
172
|
+
mediaBlobUrlAttrs: mediaBlobUrlAttrs,
|
|
173
|
+
resizeMode: resizeMode,
|
|
174
|
+
identifier: identifier,
|
|
175
|
+
ssr: ssr,
|
|
176
|
+
mediaClient: mediaClient,
|
|
177
|
+
dimensions: dimensions,
|
|
178
|
+
requestedDimensions: requestedDimensions,
|
|
179
|
+
traceContext: traceContext,
|
|
180
|
+
previewDidRender: previewDidRender,
|
|
181
|
+
skipRemote: !isCardVisible
|
|
182
|
+
}),
|
|
183
|
+
cardPreview = _useFilePreview.cardPreview,
|
|
184
|
+
previewError = _useFilePreview.error,
|
|
185
|
+
nonCriticalError = _useFilePreview.nonCriticalError,
|
|
186
|
+
ssrReliabilityRef = _useFilePreview.ssrReliabilityRef,
|
|
187
|
+
onImageErrorBase = _useFilePreview.onImageError,
|
|
188
|
+
onImageLoadBase = _useFilePreview.onImageLoad,
|
|
189
|
+
StoreSSRDataScript = _useFilePreview.StoreSSRDataScript;
|
|
190
|
+
var _useState15 = (0, _react.useState)(),
|
|
230
191
|
_useState16 = (0, _slicedToArray2.default)(_useState15, 2),
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
192
|
+
error = _useState16[0],
|
|
193
|
+
setError = _useState16[1];
|
|
194
|
+
|
|
195
|
+
// CXP-2723 TODO: TEMPORARY VARIABLES
|
|
196
|
+
var finalError = error || previewError;
|
|
197
|
+
var finalStatus = finalError ? 'error' : status;
|
|
198
|
+
var _useState17 = (0, _react.useState)(null),
|
|
234
199
|
_useState18 = (0, _slicedToArray2.default)(_useState17, 2),
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
var wasResolvedUpfrontPreviewRef = (0, _react.useRef)(false);
|
|
238
|
-
var _useState19 = (0, _react.useState)(null),
|
|
239
|
-
_useState20 = (0, _slicedToArray2.default)(_useState19, 2),
|
|
240
|
-
mediaViewerSelectedItem = _useState20[0],
|
|
241
|
-
setMediaViewerSelectedItem = _useState20[1];
|
|
200
|
+
mediaViewerSelectedItem = _useState18[0],
|
|
201
|
+
setMediaViewerSelectedItem = _useState18[1];
|
|
242
202
|
var uploadProgressRef = (0, _react.useRef)();
|
|
243
203
|
var metadata = (0, _react.useMemo)(function () {
|
|
244
204
|
var getProcessingStatusFromFileState = function getProcessingStatusFromFileState(status) {
|
|
@@ -277,7 +237,7 @@ var FileCard = exports.FileCard = function FileCard(_ref) {
|
|
|
277
237
|
};
|
|
278
238
|
}, [fileStateValue === null || fileStateValue === void 0 ? void 0 : fileStateValue.status, metadata.id, metadata.mediaType, metadata.mimeType, metadata.size]);
|
|
279
239
|
var computedActions = (0, _react.useMemo)(function () {
|
|
280
|
-
if (
|
|
240
|
+
if (finalStatus === 'failed-processing' || shouldEnableDownloadButton) {
|
|
281
241
|
var downloadAction = {
|
|
282
242
|
label: 'Download',
|
|
283
243
|
icon: /*#__PURE__*/_react.default.createElement(_download.default, {
|
|
@@ -291,7 +251,7 @@ var FileCard = exports.FileCard = function FileCard(_ref) {
|
|
|
291
251
|
} else {
|
|
292
252
|
return actions;
|
|
293
253
|
}
|
|
294
|
-
}, [actions, identifier.collectionName, identifier.id, mediaClient.file, metadata.name, shouldEnableDownloadButton,
|
|
254
|
+
}, [actions, identifier.collectionName, identifier.id, mediaClient.file, metadata.name, shouldEnableDownloadButton, finalStatus]);
|
|
295
255
|
|
|
296
256
|
//----------------------------------------------------------------//
|
|
297
257
|
//---------------------- Analytics ------------------------------//
|
|
@@ -306,12 +266,17 @@ var FileCard = exports.FileCard = function FileCard(_ref) {
|
|
|
306
266
|
durationSinceCommenced: durationSinceCommenced
|
|
307
267
|
}
|
|
308
268
|
};
|
|
309
|
-
createAnalyticsEvent && (0, _cardAnalytics.fireOperationalEvent)(createAnalyticsEvent,
|
|
310
|
-
(0, _ufoExperiences.completeUfoExperience)(internalOccurrenceKey,
|
|
269
|
+
createAnalyticsEvent && (0, _cardAnalytics.fireOperationalEvent)(createAnalyticsEvent, finalStatus, fileAttributes, performanceAttributes, ssrReliabilityRef.current, finalError, traceContext, fileStateValue === null || fileStateValue === void 0 ? void 0 : fileStateValue.metadataTraceContext);
|
|
270
|
+
(0, _ufoExperiences.completeUfoExperience)(internalOccurrenceKey, finalStatus, fileAttributes, fileStateFlagsRef.current, ssrReliabilityRef.current, finalError);
|
|
311
271
|
});
|
|
312
272
|
var fireNonCriticalErrorEventRef = (0, _useCurrentValueRef.useCurrentValueRef)(function (error) {
|
|
313
|
-
createAnalyticsEvent && (0, _cardAnalytics.fireNonCriticalErrorEvent)(createAnalyticsEvent,
|
|
273
|
+
createAnalyticsEvent && (0, _cardAnalytics.fireNonCriticalErrorEvent)(createAnalyticsEvent, finalStatus, fileAttributes, ssrReliabilityRef.current, error, traceContext, fileStateValue === null || fileStateValue === void 0 ? void 0 : fileStateValue.metadataTraceContext);
|
|
314
274
|
});
|
|
275
|
+
(0, _react.useEffect)(function () {
|
|
276
|
+
if (nonCriticalError) {
|
|
277
|
+
fireNonCriticalErrorEventRef.current(nonCriticalError);
|
|
278
|
+
}
|
|
279
|
+
}, [nonCriticalError, fireNonCriticalErrorEventRef]);
|
|
315
280
|
var fireScreenEventRef = (0, _useCurrentValueRef.useCurrentValueRef)(function () {
|
|
316
281
|
createAnalyticsEvent && (0, _cardAnalytics.fireScreenEvent)(createAnalyticsEvent, fileAttributes);
|
|
317
282
|
});
|
|
@@ -337,72 +302,10 @@ var FileCard = exports.FileCard = function FileCard(_ref) {
|
|
|
337
302
|
//----------------------------------------------------------------//
|
|
338
303
|
|
|
339
304
|
var onImageError = function onImageError(newCardPreview) {
|
|
340
|
-
|
|
341
|
-
var failedSSRObject = _objectSpread({
|
|
342
|
-
status: 'fail'
|
|
343
|
-
}, (0, _analytics.extractErrorInfo)(new _errors.ImageLoadError(newCardPreview.source)));
|
|
344
|
-
if ((0, _getCardPreview.isSSRClientPreview)(newCardPreview)) {
|
|
345
|
-
ssrReliabilityRef.current.client = failedSSRObject;
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
/*
|
|
349
|
-
If the cardPreview failed and it comes from server (global scope / ssrData), it means that we have reused it in client and the error counts for both: server & client.
|
|
350
|
-
*/
|
|
351
|
-
|
|
352
|
-
if ((0, _getCardPreview.isSSRDataPreview)(newCardPreview)) {
|
|
353
|
-
ssrReliabilityRef.current.server = failedSSRObject;
|
|
354
|
-
ssrReliabilityRef.current.client = failedSSRObject;
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
// If the dataURI has been replaced, we can dismiss this error
|
|
359
|
-
if ((newCardPreview === null || newCardPreview === void 0 ? void 0 : newCardPreview.dataURI) !== (cardPreview === null || cardPreview === void 0 ? void 0 : cardPreview.dataURI)) {
|
|
360
|
-
return;
|
|
361
|
-
}
|
|
362
|
-
var error = new _errors.ImageLoadError(newCardPreview === null || newCardPreview === void 0 ? void 0 : newCardPreview.source);
|
|
363
|
-
var isLocal = newCardPreview && (0, _getCardPreview.isLocalPreview)(newCardPreview);
|
|
364
|
-
var isSSR = newCardPreview && ((0, _getCardPreview.isSSRClientPreview)(newCardPreview) || (0, _getCardPreview.isSSRDataPreview)(newCardPreview));
|
|
365
|
-
if (isLocal || isSSR) {
|
|
366
|
-
if (isLocal) {
|
|
367
|
-
setIsBannedLocalPreview(true);
|
|
368
|
-
fireNonCriticalErrorEventRef.current && fireNonCriticalErrorEventRef.current(error);
|
|
369
|
-
}
|
|
370
|
-
var fileImageMode = (0, _mediaClient.imageResizeModeToFileImageMode)(resizeMode);
|
|
371
|
-
(0, _mediaClient.isFileIdentifier)(identifier) && (0, _getCardPreview.removeCardPreviewFromCache)(identifier.id, fileImageMode);
|
|
372
|
-
setCardPreview(undefined);
|
|
373
|
-
} else {
|
|
374
|
-
if (!['complete', 'error', 'failed-processing'].includes(status)) {
|
|
375
|
-
setStatus('error');
|
|
376
|
-
setError(error);
|
|
377
|
-
}
|
|
378
|
-
}
|
|
305
|
+
onImageErrorBase(newCardPreview);
|
|
379
306
|
};
|
|
380
307
|
var onImageLoad = function onImageLoad(newCardPreview) {
|
|
381
|
-
|
|
382
|
-
if ((0, _getCardPreview.isSSRClientPreview)(newCardPreview) && ssrReliabilityRef.current.client.status === 'unknown') {
|
|
383
|
-
ssrReliabilityRef.current.client = {
|
|
384
|
-
status: 'success'
|
|
385
|
-
};
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
/*
|
|
389
|
-
If the image loads successfully and it comes from server (global scope / ssrData), it means that we have reused it in client and the success counts for both: server & client.
|
|
390
|
-
*/
|
|
391
|
-
|
|
392
|
-
if ((0, _getCardPreview.isSSRDataPreview)(newCardPreview) && ssrReliabilityRef.current.server.status === 'unknown') {
|
|
393
|
-
ssrReliabilityRef.current.server = {
|
|
394
|
-
status: 'success'
|
|
395
|
-
};
|
|
396
|
-
ssrReliabilityRef.current.client = {
|
|
397
|
-
status: 'success'
|
|
398
|
-
};
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
|
|
402
|
-
// If the dataURI has been replaced, we can dismiss this callback
|
|
403
|
-
if ((newCardPreview === null || newCardPreview === void 0 ? void 0 : newCardPreview.dataURI) !== (cardPreview === null || cardPreview === void 0 ? void 0 : cardPreview.dataURI)) {
|
|
404
|
-
return;
|
|
405
|
-
}
|
|
308
|
+
onImageLoadBase(newCardPreview);
|
|
406
309
|
setPreviewDidRender(true);
|
|
407
310
|
};
|
|
408
311
|
var onCardClick = function onCardClick(event, analyticsEvent) {
|
|
@@ -420,7 +323,7 @@ var FileCard = exports.FileCard = function FileCard(_ref) {
|
|
|
420
323
|
return;
|
|
421
324
|
}
|
|
422
325
|
var isVideo = metadata && metadata.mediaType === 'video';
|
|
423
|
-
if (useInlinePlayer && isVideo && !!cardPreview) {
|
|
326
|
+
if (useInlinePlayer && isVideo && !!cardPreview && finalStatus !== 'error') {
|
|
424
327
|
setIsPlayingFile(true);
|
|
425
328
|
setShouldAutoplay(true);
|
|
426
329
|
} else if (shouldOpenMediaViewer) {
|
|
@@ -433,264 +336,6 @@ var FileCard = exports.FileCard = function FileCard(_ref) {
|
|
|
433
336
|
}
|
|
434
337
|
};
|
|
435
338
|
|
|
436
|
-
//----------------------------------------------------------------//
|
|
437
|
-
//---------------------- Helper Functions -----------------------//
|
|
438
|
-
//----------------------------------------------------------------//
|
|
439
|
-
|
|
440
|
-
var fetchRemotePreviewRef = (0, _useCurrentValueRef.useCurrentValueRef)(function (identifier) {
|
|
441
|
-
return (0, _getCardPreview.fetchAndCacheRemotePreview)(mediaClient, identifier.id, dimensions !== null && dimensions !== void 0 ? dimensions : {}, imageURLParams, getMediaBlobUrlAttrs(fileStateValue));
|
|
442
|
-
});
|
|
443
|
-
var resolvePreviewRef = (0, _useCurrentValueRef.useCurrentValueRef)( /*#__PURE__*/function () {
|
|
444
|
-
var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(identifier, fileState) {
|
|
445
|
-
var filePreview, isRemotePreviewReady, mode, cachedPreview, dimensionsAreBigger, localPreview, value, resolvedFilePreview, _value, type, mediaType, orientation, _dataURI, _dataURI2, preview, source, mediaBlobUrlAttrs, dataURI, remotePreview, wrappedError;
|
|
446
|
-
return _regenerator.default.wrap(function _callee$(_context) {
|
|
447
|
-
while (1) switch (_context.prev = _context.next) {
|
|
448
|
-
case 0:
|
|
449
|
-
filePreview = isBannedLocalPreview ? undefined : fileState.status !== 'error' && 'mimeType' in fileState && (0, _mediaCommon.isMimeTypeSupportedByBrowser)(fileState.mimeType) ? fileState.preview : undefined;
|
|
450
|
-
isRemotePreviewReady = (0, _mediaClient.isImageRepresentationReady)(fileState);
|
|
451
|
-
_context.prev = 2;
|
|
452
|
-
mode = imageURLParams.mode;
|
|
453
|
-
cachedPreview = _cache.default.get(identifier.id, mode);
|
|
454
|
-
dimensionsAreBigger = (0, _dimensionComparer.isBigger)(cachedPreview === null || cachedPreview === void 0 ? void 0 : cachedPreview.dimensions, dimensions);
|
|
455
|
-
if (!(cachedPreview && !dimensionsAreBigger)) {
|
|
456
|
-
_context.next = 8;
|
|
457
|
-
break;
|
|
458
|
-
}
|
|
459
|
-
return _context.abrupt("return", cachedPreview);
|
|
460
|
-
case 8:
|
|
461
|
-
_context.prev = 8;
|
|
462
|
-
if (!filePreview) {
|
|
463
|
-
_context.next = 75;
|
|
464
|
-
break;
|
|
465
|
-
}
|
|
466
|
-
_context.prev = 10;
|
|
467
|
-
_context.next = 13;
|
|
468
|
-
return filePreview;
|
|
469
|
-
case 13:
|
|
470
|
-
resolvedFilePreview = _context.sent;
|
|
471
|
-
value = resolvedFilePreview.value;
|
|
472
|
-
_context.next = 20;
|
|
473
|
-
break;
|
|
474
|
-
case 17:
|
|
475
|
-
_context.prev = 17;
|
|
476
|
-
_context.t0 = _context["catch"](10);
|
|
477
|
-
throw new _errors.LocalPreviewError('local-preview-rejected', _context.t0 instanceof Error ? _context.t0 : undefined);
|
|
478
|
-
case 20:
|
|
479
|
-
if (!(typeof value === 'string')) {
|
|
480
|
-
_context.next = 24;
|
|
481
|
-
break;
|
|
482
|
-
}
|
|
483
|
-
localPreview = {
|
|
484
|
-
dataURI: value,
|
|
485
|
-
orientation: 1,
|
|
486
|
-
source: 'local'
|
|
487
|
-
};
|
|
488
|
-
_context.next = 57;
|
|
489
|
-
break;
|
|
490
|
-
case 24:
|
|
491
|
-
if (!(value instanceof Blob)) {
|
|
492
|
-
_context.next = 56;
|
|
493
|
-
break;
|
|
494
|
-
}
|
|
495
|
-
_value = value, type = _value.type;
|
|
496
|
-
mediaType = (0, _mediaCommon.getMediaTypeFromMimeType)(type);
|
|
497
|
-
_context.t1 = mediaType;
|
|
498
|
-
_context.next = _context.t1 === 'image' ? 30 : _context.t1 === 'video' ? 42 : 53;
|
|
499
|
-
break;
|
|
500
|
-
case 30:
|
|
501
|
-
_context.prev = 30;
|
|
502
|
-
_context.next = 33;
|
|
503
|
-
return (0, _mediaUi.getOrientation)(value);
|
|
504
|
-
case 33:
|
|
505
|
-
orientation = _context.sent;
|
|
506
|
-
_dataURI = URL.createObjectURL(value);
|
|
507
|
-
localPreview = {
|
|
508
|
-
dataURI: _dataURI,
|
|
509
|
-
orientation: orientation,
|
|
510
|
-
source: 'local'
|
|
511
|
-
};
|
|
512
|
-
_context.next = 41;
|
|
513
|
-
break;
|
|
514
|
-
case 38:
|
|
515
|
-
_context.prev = 38;
|
|
516
|
-
_context.t2 = _context["catch"](30);
|
|
517
|
-
throw new _errors.LocalPreviewError('local-preview-image', _context.t2 instanceof Error ? _context.t2 : undefined);
|
|
518
|
-
case 41:
|
|
519
|
-
return _context.abrupt("break", 54);
|
|
520
|
-
case 42:
|
|
521
|
-
_context.prev = 42;
|
|
522
|
-
_context.next = 45;
|
|
523
|
-
return (0, _videoSnapshot.takeSnapshot)(value);
|
|
524
|
-
case 45:
|
|
525
|
-
_dataURI2 = _context.sent;
|
|
526
|
-
localPreview = {
|
|
527
|
-
dataURI: _dataURI2,
|
|
528
|
-
orientation: 1,
|
|
529
|
-
source: 'local'
|
|
530
|
-
};
|
|
531
|
-
_context.next = 52;
|
|
532
|
-
break;
|
|
533
|
-
case 49:
|
|
534
|
-
_context.prev = 49;
|
|
535
|
-
_context.t3 = _context["catch"](42);
|
|
536
|
-
throw new _errors.LocalPreviewError('local-preview-video', _context.t3 instanceof Error ? _context.t3 : undefined);
|
|
537
|
-
case 52:
|
|
538
|
-
return _context.abrupt("break", 54);
|
|
539
|
-
case 53:
|
|
540
|
-
throw new _errors.LocalPreviewError('local-preview-unsupported');
|
|
541
|
-
case 54:
|
|
542
|
-
_context.next = 57;
|
|
543
|
-
break;
|
|
544
|
-
case 56:
|
|
545
|
-
throw new _errors.LocalPreviewError('local-preview-unsupported');
|
|
546
|
-
case 57:
|
|
547
|
-
preview = _objectSpread(_objectSpread({}, localPreview), {}, {
|
|
548
|
-
dimensions: dimensions
|
|
549
|
-
});
|
|
550
|
-
_context.t4 = preview.source;
|
|
551
|
-
_context.next = _context.t4 === 'local' ? 61 : _context.t4 === 'remote' ? 63 : _context.t4 === 'ssr-server' ? 65 : _context.t4 === 'ssr-client' ? 67 : 69;
|
|
552
|
-
break;
|
|
553
|
-
case 61:
|
|
554
|
-
source = 'cache-local';
|
|
555
|
-
return _context.abrupt("break", 70);
|
|
556
|
-
case 63:
|
|
557
|
-
source = 'cache-remote';
|
|
558
|
-
return _context.abrupt("break", 70);
|
|
559
|
-
case 65:
|
|
560
|
-
source = 'cache-ssr-server';
|
|
561
|
-
return _context.abrupt("break", 70);
|
|
562
|
-
case 67:
|
|
563
|
-
source = 'cache-ssr-client';
|
|
564
|
-
return _context.abrupt("break", 70);
|
|
565
|
-
case 69:
|
|
566
|
-
source = preview.source;
|
|
567
|
-
case 70:
|
|
568
|
-
// We want to embed some meta context into dataURI for Copy/Paste to work.
|
|
569
|
-
mediaBlobUrlAttrs = getMediaBlobUrlAttrs(fileStateValue);
|
|
570
|
-
dataURI = mediaBlobUrlAttrs ? (0, _mediaClient.addFileAttrsToUrl)(preview.dataURI, mediaBlobUrlAttrs) : preview.dataURI; // We store new cardPreview into cache
|
|
571
|
-
_cache.default.set(identifier.id, mode, _objectSpread(_objectSpread({}, preview), {}, {
|
|
572
|
-
source: source,
|
|
573
|
-
dataURI: dataURI
|
|
574
|
-
}));
|
|
575
|
-
setCardPreview(_objectSpread(_objectSpread({}, preview), {}, {
|
|
576
|
-
dataURI: dataURI
|
|
577
|
-
}));
|
|
578
|
-
return _context.abrupt("return");
|
|
579
|
-
case 75:
|
|
580
|
-
_context.next = 82;
|
|
581
|
-
break;
|
|
582
|
-
case 77:
|
|
583
|
-
_context.prev = 77;
|
|
584
|
-
_context.t5 = _context["catch"](8);
|
|
585
|
-
/**
|
|
586
|
-
* We report the error if:
|
|
587
|
-
* - local preview is supported and fails
|
|
588
|
-
* - local preview is unsupported and remote preview is NOT READY
|
|
589
|
-
* i.e. the function was called for "no reason".
|
|
590
|
-
* We DON'T report the error if:
|
|
591
|
-
* - local preview is unsupported and remote preview IS READY
|
|
592
|
-
* i.e. local preview is available and not supported,
|
|
593
|
-
* but we are after the remote preview instead.
|
|
594
|
-
*/
|
|
595
|
-
if (!(0, _errors.isUnsupportedLocalPreviewError)(_context.t5) || (0, _errors.isUnsupportedLocalPreviewError)(_context.t5) && !isRemotePreviewReady) {
|
|
596
|
-
fireNonCriticalErrorEventRef.current && fireNonCriticalErrorEventRef.current(_context.t5);
|
|
597
|
-
}
|
|
598
|
-
/**
|
|
599
|
-
* No matter the reason why the local preview failed, we break the process
|
|
600
|
-
* if there is no remote preview available
|
|
601
|
-
*/
|
|
602
|
-
if (isRemotePreviewReady) {
|
|
603
|
-
_context.next = 82;
|
|
604
|
-
break;
|
|
605
|
-
}
|
|
606
|
-
throw _context.t5;
|
|
607
|
-
case 82:
|
|
608
|
-
if (isRemotePreviewReady) {
|
|
609
|
-
_context.next = 84;
|
|
610
|
-
break;
|
|
611
|
-
}
|
|
612
|
-
throw new _errors.MediaCardError('remote-preview-not-ready');
|
|
613
|
-
case 84:
|
|
614
|
-
_context.next = 86;
|
|
615
|
-
return (0, _getCardPreview.fetchAndCacheRemotePreview)(mediaClient, identifier.id, dimensions !== null && dimensions !== void 0 ? dimensions : {}, imageURLParams, getMediaBlobUrlAttrs(fileStateValue), traceContext);
|
|
616
|
-
case 86:
|
|
617
|
-
remotePreview = _context.sent;
|
|
618
|
-
setCardPreview(remotePreview);
|
|
619
|
-
return _context.abrupt("return");
|
|
620
|
-
case 91:
|
|
621
|
-
_context.prev = 91;
|
|
622
|
-
_context.t6 = _context["catch"](2);
|
|
623
|
-
wrappedError = (0, _errors.ensureMediaCardError)('preview-fetch', _context.t6); // If remote preview fails, we set status 'error'
|
|
624
|
-
// If local preview fails (i.e, no remote preview available),
|
|
625
|
-
// we can stay in the same status until there is a remote preview available
|
|
626
|
-
// If it's any other error we set status 'error'
|
|
627
|
-
if ((0, _errors.isLocalPreviewError)(wrappedError)) {
|
|
628
|
-
// This error should already been logged inside the getCardPreview. No need to log it here.
|
|
629
|
-
setIsBannedLocalPreview(true);
|
|
630
|
-
} else {
|
|
631
|
-
if (!['complete', 'error', 'failed-processing'].includes(status)) {
|
|
632
|
-
setStatus('error');
|
|
633
|
-
setError(wrappedError);
|
|
634
|
-
}
|
|
635
|
-
}
|
|
636
|
-
case 95:
|
|
637
|
-
case "end":
|
|
638
|
-
return _context.stop();
|
|
639
|
-
}
|
|
640
|
-
}, _callee, null, [[2, 91], [8, 77], [10, 17], [30, 38], [42, 49]]);
|
|
641
|
-
}));
|
|
642
|
-
return function (_x, _x2) {
|
|
643
|
-
return _ref2.apply(this, arguments);
|
|
644
|
-
};
|
|
645
|
-
}());
|
|
646
|
-
|
|
647
|
-
//----------------------------------------------------------------//
|
|
648
|
-
//------------ resolveUpfrontPreview useEffect -------------------//
|
|
649
|
-
//----------------------------------------------------------------//
|
|
650
|
-
var prevCardPreview = (0, _usePrevious.usePrevious)(cardPreview);
|
|
651
|
-
var dimensionsRef = (0, _useCurrentValueRef.useCurrentValueRef)(dimensions);
|
|
652
|
-
(0, _react.useEffect)(function () {
|
|
653
|
-
var resolveUpfrontPreview = /*#__PURE__*/function () {
|
|
654
|
-
var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(identifier) {
|
|
655
|
-
var requestedDimensions, newCardPreview, areValidRequestedDimensions;
|
|
656
|
-
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
657
|
-
while (1) switch (_context2.prev = _context2.next) {
|
|
658
|
-
case 0:
|
|
659
|
-
// We block any possible future call to this method regardless of the outcome (success or fail)
|
|
660
|
-
// If it fails, the normal preview fetch should occur after the file state is fetched anyways
|
|
661
|
-
wasResolvedUpfrontPreviewRef.current = true;
|
|
662
|
-
_context2.prev = 1;
|
|
663
|
-
requestedDimensions = _objectSpread({}, dimensions);
|
|
664
|
-
_context2.next = 5;
|
|
665
|
-
return fetchRemotePreviewRef.current(identifier);
|
|
666
|
-
case 5:
|
|
667
|
-
newCardPreview = _context2.sent;
|
|
668
|
-
areValidRequestedDimensions = !(0, _dimensionComparer.isBigger)(requestedDimensions, dimensionsRef.current); // If there are new and bigger dimensions in the props, and the upfront preview is still resolving,
|
|
669
|
-
// the fetched preview is no longer valid, and thus, we dismiss it
|
|
670
|
-
if (areValidRequestedDimensions) {
|
|
671
|
-
setCardPreview(newCardPreview);
|
|
672
|
-
}
|
|
673
|
-
_context2.next = 12;
|
|
674
|
-
break;
|
|
675
|
-
case 10:
|
|
676
|
-
_context2.prev = 10;
|
|
677
|
-
_context2.t0 = _context2["catch"](1);
|
|
678
|
-
case 12:
|
|
679
|
-
case "end":
|
|
680
|
-
return _context2.stop();
|
|
681
|
-
}
|
|
682
|
-
}, _callee2, null, [[1, 10]]);
|
|
683
|
-
}));
|
|
684
|
-
return function resolveUpfrontPreview(_x3) {
|
|
685
|
-
return _ref3.apply(this, arguments);
|
|
686
|
-
};
|
|
687
|
-
}();
|
|
688
|
-
var hadSSRCardPreview = ssr === 'client' && !!prevCardPreview && (0, _getCardPreview.isSSRClientPreview)(prevCardPreview);
|
|
689
|
-
if ((isCardVisible || hadSSRCardPreview) && !cardPreview && !wasResolvedUpfrontPreviewRef.current) {
|
|
690
|
-
resolveUpfrontPreview(identifier);
|
|
691
|
-
}
|
|
692
|
-
}, [cardPreview, dimensions, dimensionsRef, fetchRemotePreviewRef, identifier, isCardVisible, prevCardPreview, ssr]);
|
|
693
|
-
|
|
694
339
|
//----------------------------------------------------------------//
|
|
695
340
|
//------------------------ handle fireCopiedEvent --------------//
|
|
696
341
|
//----------------------------------------------------------------//
|
|
@@ -728,64 +373,19 @@ var FileCard = exports.FileCard = function FileCard(_ref) {
|
|
|
728
373
|
//---------------- fetch and resolve card preview ----------------//
|
|
729
374
|
//----------------------------------------------------------------//
|
|
730
375
|
|
|
731
|
-
var
|
|
376
|
+
var prevStatus = (0, _usePrevious.usePrevious)(finalStatus);
|
|
732
377
|
var prevIsCardVisible = (0, _usePrevious.usePrevious)(isCardVisible);
|
|
733
|
-
var prevStatus = (0, _usePrevious.usePrevious)(status);
|
|
734
378
|
(0, _react.useEffect)(function () {
|
|
735
|
-
if (prevStatus !== undefined &&
|
|
379
|
+
if (prevStatus !== undefined && finalStatus !== prevStatus) {
|
|
736
380
|
fireOperationalEventRef.current();
|
|
737
381
|
}
|
|
738
|
-
}, [fireOperationalEventRef, prevStatus,
|
|
382
|
+
}, [fireOperationalEventRef, prevStatus, finalStatus]);
|
|
739
383
|
(0, _react.useEffect)(function () {
|
|
740
|
-
var _ssrDataRef$current3;
|
|
741
|
-
/**
|
|
742
|
-
* Variable turnedVisible should only be true when media card
|
|
743
|
-
* was invisible in the previous state and is visible in the current one
|
|
744
|
-
*
|
|
745
|
-
* prevIsCardVisible | isCardVisible | turnedVisible
|
|
746
|
-
* ----------------------------------------------------
|
|
747
|
-
* false | false | false
|
|
748
|
-
* false | true | true
|
|
749
|
-
* true | true | false
|
|
750
|
-
* true | false | false (unreachable case)
|
|
751
|
-
* ----------------------------------------------------
|
|
752
|
-
*/
|
|
753
|
-
|
|
754
384
|
var turnedVisible = !prevIsCardVisible && isCardVisible;
|
|
755
385
|
if (turnedVisible) {
|
|
756
386
|
fireCommencedEventRef.current();
|
|
757
387
|
}
|
|
758
|
-
|
|
759
|
-
// If dimensions from Server have changed and are bigger,
|
|
760
|
-
// we need to refetch
|
|
761
|
-
// refetchSRRPreview
|
|
762
|
-
fetchRemotePreviewRef.current(identifier).then(setCardPreview).catch(function (e) {
|
|
763
|
-
var wrappedError = (0, _errors.ensureMediaCardError)('remote-preview-fetch-ssr', e, true);
|
|
764
|
-
fireNonCriticalErrorEventRef.current(wrappedError);
|
|
765
|
-
});
|
|
766
|
-
}
|
|
767
|
-
if (fileStateValue && (0, _getCardPreview.shouldResolvePreview)({
|
|
768
|
-
status: status,
|
|
769
|
-
fileState: fileStateValue,
|
|
770
|
-
prevDimensions: prevDimensions,
|
|
771
|
-
dimensions: dimensions,
|
|
772
|
-
hasCardPreview: !!cardPreview,
|
|
773
|
-
isBannedLocalPreview: isBannedLocalPreview,
|
|
774
|
-
wasResolvedUpfrontPreview: wasResolvedUpfrontPreviewRef.current
|
|
775
|
-
})) {
|
|
776
|
-
resolvePreviewRef.current(identifier, fileStateValue);
|
|
777
|
-
}
|
|
778
|
-
if (turnedVisible && ssr && !!cardPreview && (0, _getCardPreview.isSSRClientPreview)(cardPreview)) {
|
|
779
|
-
// Since the SSR preview brings the token in the query params,
|
|
780
|
-
// We need to fetch the remote preview to be able to cache it,
|
|
781
|
-
fetchRemotePreviewRef.current(identifier).catch(function () {
|
|
782
|
-
// No need to log this error.
|
|
783
|
-
// If preview fails, it will be refetched later
|
|
784
|
-
//TODO: test this catch
|
|
785
|
-
// https://product-fabric.atlassian.net/browse/MEX-1071
|
|
786
|
-
});
|
|
787
|
-
}
|
|
788
|
-
}, [cardPreview, dimensions, fetchRemotePreviewRef, fileStateValue, fireCommencedEventRef, fireNonCriticalErrorEventRef, identifier, isBannedLocalPreview, isCardVisible, prevDimensions, prevIsCardVisible, resolvePreviewRef, ssr, status]);
|
|
388
|
+
}, [fireCommencedEventRef, isCardVisible, prevIsCardVisible]);
|
|
789
389
|
|
|
790
390
|
//----------------------------------------------------------------//
|
|
791
391
|
//----------------- set complete status --------------------------//
|
|
@@ -794,12 +394,12 @@ var FileCard = exports.FileCard = function FileCard(_ref) {
|
|
|
794
394
|
(0, _react.useEffect)(function () {
|
|
795
395
|
if (previewDidRender &&
|
|
796
396
|
// We should't complete if status is uploading
|
|
797
|
-
['loading-preview', 'processing'].includes(
|
|
397
|
+
['loading-preview', 'processing'].includes(finalStatus)) {
|
|
798
398
|
setStatus('complete');
|
|
799
399
|
// TODO MEX-788: add test for "do not remove the card preview when unsubscribing".
|
|
800
400
|
setIsBannedLocalPreview(false);
|
|
801
401
|
}
|
|
802
|
-
}, [previewDidRender,
|
|
402
|
+
}, [previewDidRender, finalStatus]);
|
|
803
403
|
|
|
804
404
|
//----------------------------------------------------------------//
|
|
805
405
|
//----------------- set isPlayingFile state ----------------------//
|
|
@@ -816,22 +416,22 @@ var FileCard = exports.FileCard = function FileCard(_ref) {
|
|
|
816
416
|
* in order to avoid race conditions of the ViewportDector being unmounted before
|
|
817
417
|
* it is able to set isCardVisible to true.
|
|
818
418
|
*/
|
|
819
|
-
isCardVisible && isVideo && !isPlayingFile && disableOverlay && useInlinePlayer && isVideoPlayable) {
|
|
419
|
+
isCardVisible && isVideo && !isPlayingFile && disableOverlay && useInlinePlayer && isVideoPlayable && finalStatus !== 'error') {
|
|
820
420
|
setIsPlayingFile(true);
|
|
821
421
|
}
|
|
822
|
-
}, [isCardVisible, disableOverlay, fileAttributes.fileMediatype, fileStateValue, identifier, isBannedLocalPreview, isPlayingFile, useInlinePlayer]);
|
|
422
|
+
}, [isCardVisible, disableOverlay, fileAttributes.fileMediatype, fileStateValue, identifier, isBannedLocalPreview, isPlayingFile, finalStatus, useInlinePlayer]);
|
|
823
423
|
|
|
824
424
|
//----------------------------------------------------------------//
|
|
825
425
|
//----------------- fireScreenEvent ------------------------------//
|
|
826
426
|
//----------------------------------------------------------------//
|
|
827
427
|
|
|
828
428
|
(0, _react.useEffect)(function () {
|
|
829
|
-
if (prevStatus !== undefined &&
|
|
830
|
-
if (
|
|
429
|
+
if (prevStatus !== undefined && finalStatus !== prevStatus) {
|
|
430
|
+
if (finalStatus === 'complete' || fileAttributes.fileMediatype === 'video' && !!cardPreview && finalStatus === 'processing') {
|
|
831
431
|
fireScreenEventRef.current();
|
|
832
432
|
}
|
|
833
433
|
}
|
|
834
|
-
}, [
|
|
434
|
+
}, [finalStatus, prevStatus, fileAttributes, cardPreview, fireScreenEventRef]);
|
|
835
435
|
|
|
836
436
|
//----------------------------------------------------------------//
|
|
837
437
|
//----------------- abort UFO experience -------------------------//
|
|
@@ -851,7 +451,7 @@ var FileCard = exports.FileCard = function FileCard(_ref) {
|
|
|
851
451
|
var updateFileStateRef = (0, _useCurrentValueRef.useCurrentValueRef)(function () {
|
|
852
452
|
if (fileState) {
|
|
853
453
|
// do not update the card status if the status is final
|
|
854
|
-
if (['complete', 'error', 'failed-processing'].includes(
|
|
454
|
+
if (['complete', 'error', 'failed-processing'].includes(finalStatus)) {
|
|
855
455
|
return;
|
|
856
456
|
}
|
|
857
457
|
if (fileState.status !== 'error') {
|
|
@@ -859,7 +459,9 @@ var FileCard = exports.FileCard = function FileCard(_ref) {
|
|
|
859
459
|
var isPreviewable = !!mediaType && ['audio', 'video', 'image', 'doc'].indexOf(mediaType) > -1;
|
|
860
460
|
var isPreviewableFileState = !!fileState.preview;
|
|
861
461
|
var isSupportedLocalPreview = mediaType === 'image' || mediaType === 'video';
|
|
862
|
-
var hasLocalPreview = !isBannedLocalPreview && isPreviewableFileState &&
|
|
462
|
+
var hasLocalPreview = !isBannedLocalPreview && isPreviewableFileState &&
|
|
463
|
+
// CXP-2723 TODO: isPreviewableFileState is most likely redundant
|
|
464
|
+
isSupportedLocalPreview && !!fileState.mimeType && (0, _mediaCommon.isMimeTypeSupportedByBrowser)(fileState.mimeType);
|
|
863
465
|
var hasRemotePreview = (0, _mediaClient.isImageRepresentationReady)(fileState);
|
|
864
466
|
var hasPreview = hasLocalPreview || hasRemotePreview;
|
|
865
467
|
var newStatus;
|
|
@@ -884,7 +486,7 @@ var FileCard = exports.FileCard = function FileCard(_ref) {
|
|
|
884
486
|
uploadProgressRef.current = newProgress;
|
|
885
487
|
} else {
|
|
886
488
|
var e = new _mediaClientReact.MediaFileStateError(fileState.id, fileState.reason, fileState.message, fileState.details);
|
|
887
|
-
var errorReason =
|
|
489
|
+
var errorReason = finalStatus === 'uploading' ? 'upload' : 'metadata-fetch';
|
|
888
490
|
setError(new _errors.MediaCardError(errorReason, e));
|
|
889
491
|
setStatus('error');
|
|
890
492
|
}
|
|
@@ -905,15 +507,18 @@ var FileCard = exports.FileCard = function FileCard(_ref) {
|
|
|
905
507
|
var mediaItemType = identifier.mediaItemType;
|
|
906
508
|
var isLazyWithOverride = izLazyOverride === undefined ? isLazy : izLazyOverride;
|
|
907
509
|
|
|
908
|
-
//
|
|
909
|
-
//
|
|
910
|
-
|
|
510
|
+
// We should natively lazy load an SSR preview when card is not visible,
|
|
511
|
+
// otherwise we'll fire the metadata fetch from outside the viewport
|
|
512
|
+
// Side note: We should not lazy load if the cardPreview is available from local cache,
|
|
513
|
+
// in order to avoid flickers during re-mount of the component
|
|
514
|
+
// CXP-2723 TODO: Create test cases for the above scenarios
|
|
515
|
+
var nativeLazyLoad = isLazyWithOverride && !isCardVisible && cardPreview && (0, _getCardPreview.isSSRPreview)(cardPreview);
|
|
911
516
|
// Force Media Image to always display img for SSR
|
|
912
517
|
var forceSyncDisplay = !!ssr;
|
|
913
|
-
var mediaCardCursor = (0, _getMediaCardCursor.getMediaCardCursor)(!!useInlinePlayer, !!shouldOpenMediaViewer,
|
|
518
|
+
var mediaCardCursor = (0, _getMediaCardCursor.getMediaCardCursor)(!!useInlinePlayer, !!shouldOpenMediaViewer, finalStatus === 'error' || finalStatus === 'failed-processing', !!cardPreview, metadata.mediaType);
|
|
914
519
|
var card = /*#__PURE__*/_react.default.createElement(_cardViewV.CardViewV2, {
|
|
915
|
-
status: cardStatusOverride ||
|
|
916
|
-
error:
|
|
520
|
+
status: cardStatusOverride || finalStatus,
|
|
521
|
+
error: finalError,
|
|
917
522
|
mediaItemType: mediaItemType,
|
|
918
523
|
metadata: metadata,
|
|
919
524
|
cardPreview: cardPreview,
|
|
@@ -976,7 +581,9 @@ var FileCard = exports.FileCard = function FileCard(_ref) {
|
|
|
976
581
|
identifier: identifier,
|
|
977
582
|
autoplay: !!shouldAutoplay,
|
|
978
583
|
onFullscreenChange: onFullscreenChange,
|
|
979
|
-
onError: function onError() {
|
|
584
|
+
onError: function onError(e) {
|
|
585
|
+
setError(new _errors.MediaCardError('error-file-state', e));
|
|
586
|
+
setStatus('error');
|
|
980
587
|
setIsPlayingFile(false);
|
|
981
588
|
},
|
|
982
589
|
onClick: onCardClick,
|
|
@@ -994,13 +601,5 @@ var FileCard = exports.FileCard = function FileCard(_ref) {
|
|
|
994
601
|
},
|
|
995
602
|
contextId: contextId,
|
|
996
603
|
featureFlags: featureFlags
|
|
997
|
-
}), document.body) : null, ssr === 'server' && /*#__PURE__*/_react.default.createElement(
|
|
998
|
-
identifier: identifier,
|
|
999
|
-
dataURI: cardPreview === null || cardPreview === void 0 ? void 0 : cardPreview.dataURI,
|
|
1000
|
-
dimensions: (0, _getDataURIDimension.getRequestedDimensions)({
|
|
1001
|
-
dimensions: dimensions,
|
|
1002
|
-
element: cardElement
|
|
1003
|
-
}),
|
|
1004
|
-
error: ((_ssrReliabilityRef$cu = ssrReliabilityRef.current.server) === null || _ssrReliabilityRef$cu === void 0 ? void 0 : _ssrReliabilityRef$cu.status) === 'fail' ? ssrReliabilityRef.current.server : undefined
|
|
1005
|
-
}));
|
|
604
|
+
}), document.body) : null, ssr === 'server' && /*#__PURE__*/_react.default.createElement(StoreSSRDataScript, null));
|
|
1006
605
|
};
|