@atlaskit/media-card 77.6.4 → 77.6.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 +12 -0
- package/dist/cjs/card/card.js +1 -1
- 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 +8 -4
- package/dist/cjs/inline/loader.js +1 -1
- package/dist/cjs/utils/ufoExperiences.js +1 -1
- package/dist/es2019/card/card.js +1 -1
- 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 +7 -3
- package/dist/es2019/inline/loader.js +1 -1
- package/dist/es2019/utils/ufoExperiences.js +1 -1
- package/dist/esm/card/card.js +1 -1
- 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 +7 -3
- package/dist/esm/inline/loader.js +1 -1
- package/dist/esm/utils/ufoExperiences.js +1 -1
- package/dist/types/card/v2/cardViewV2.d.ts +1 -1
- package/dist/types/card/v2/cardviews/cardViewWrapper.d.ts +1 -1
- package/dist/types/card/v2/cardviews/index.d.ts +1 -1
- package/dist/types-ts4.5/card/v2/cardViewV2.d.ts +1 -1
- package/dist/types-ts4.5/card/v2/cardviews/cardViewWrapper.d.ts +1 -1
- package/dist/types-ts4.5/card/v2/cardviews/index.d.ts +1 -1
- package/package.json +4 -3
- package/dist/cjs/card/v2/useFilePreview/analytics.js +0 -50
- package/dist/cjs/card/v2/useFilePreview/errors.js +0 -143
- package/dist/cjs/card/v2/useFilePreview/getPreview/cache.js +0 -39
- package/dist/cjs/card/v2/useFilePreview/getPreview/filePreviewStatus.js +0 -45
- package/dist/cjs/card/v2/useFilePreview/getPreview/getPreview.js +0 -119
- package/dist/cjs/card/v2/useFilePreview/getPreview/helpers.js +0 -167
- package/dist/cjs/card/v2/useFilePreview/getPreview/index.js +0 -62
- package/dist/cjs/card/v2/useFilePreview/getPreview/objectURLCache.js +0 -85
- package/dist/cjs/card/v2/useFilePreview/getPreview/videoSnapshot.js +0 -58
- package/dist/cjs/card/v2/useFilePreview/globalScope/getSSRData.js +0 -14
- package/dist/cjs/card/v2/useFilePreview/globalScope/globalScope.js +0 -66
- package/dist/cjs/card/v2/useFilePreview/globalScope/index.js +0 -37
- package/dist/cjs/card/v2/useFilePreview/globalScope/printScript.js +0 -32
- package/dist/cjs/card/v2/useFilePreview/globalScope/types.js +0 -5
- package/dist/cjs/card/v2/useFilePreview/helpers.js +0 -64
- package/dist/cjs/card/v2/useFilePreview/index.js +0 -12
- package/dist/cjs/card/v2/useFilePreview/types.js +0 -5
- package/dist/cjs/card/v2/useFilePreview/useFilePreview.js +0 -460
- package/dist/es2019/card/v2/useFilePreview/analytics.js +0 -44
- package/dist/es2019/card/v2/useFilePreview/errors.js +0 -90
- package/dist/es2019/card/v2/useFilePreview/getPreview/cache.js +0 -30
- package/dist/es2019/card/v2/useFilePreview/getPreview/filePreviewStatus.js +0 -43
- package/dist/es2019/card/v2/useFilePreview/getPreview/getPreview.js +0 -75
- package/dist/es2019/card/v2/useFilePreview/getPreview/helpers.js +0 -76
- package/dist/es2019/card/v2/useFilePreview/getPreview/index.js +0 -3
- package/dist/es2019/card/v2/useFilePreview/getPreview/objectURLCache.js +0 -44
- package/dist/es2019/card/v2/useFilePreview/getPreview/videoSnapshot.js +0 -36
- package/dist/es2019/card/v2/useFilePreview/globalScope/getSSRData.js +0 -8
- package/dist/es2019/card/v2/useFilePreview/globalScope/globalScope.js +0 -48
- package/dist/es2019/card/v2/useFilePreview/globalScope/index.js +0 -2
- package/dist/es2019/card/v2/useFilePreview/globalScope/printScript.js +0 -16
- package/dist/es2019/card/v2/useFilePreview/globalScope/types.js +0 -1
- package/dist/es2019/card/v2/useFilePreview/helpers.js +0 -61
- package/dist/es2019/card/v2/useFilePreview/index.js +0 -1
- package/dist/es2019/card/v2/useFilePreview/types.js +0 -1
- package/dist/es2019/card/v2/useFilePreview/useFilePreview.js +0 -390
- package/dist/esm/card/v2/useFilePreview/analytics.js +0 -44
- package/dist/esm/card/v2/useFilePreview/errors.js +0 -133
- package/dist/esm/card/v2/useFilePreview/getPreview/cache.js +0 -32
- package/dist/esm/card/v2/useFilePreview/getPreview/filePreviewStatus.js +0 -40
- package/dist/esm/card/v2/useFilePreview/getPreview/getPreview.js +0 -112
- package/dist/esm/card/v2/useFilePreview/getPreview/helpers.js +0 -160
- package/dist/esm/card/v2/useFilePreview/getPreview/index.js +0 -3
- package/dist/esm/card/v2/useFilePreview/getPreview/objectURLCache.js +0 -78
- package/dist/esm/card/v2/useFilePreview/getPreview/videoSnapshot.js +0 -51
- package/dist/esm/card/v2/useFilePreview/globalScope/getSSRData.js +0 -8
- package/dist/esm/card/v2/useFilePreview/globalScope/globalScope.js +0 -56
- package/dist/esm/card/v2/useFilePreview/globalScope/index.js +0 -2
- package/dist/esm/card/v2/useFilePreview/globalScope/printScript.js +0 -25
- package/dist/esm/card/v2/useFilePreview/globalScope/types.js +0 -1
- package/dist/esm/card/v2/useFilePreview/helpers.js +0 -57
- package/dist/esm/card/v2/useFilePreview/index.js +0 -1
- package/dist/esm/card/v2/useFilePreview/types.js +0 -1
- package/dist/esm/card/v2/useFilePreview/useFilePreview.js +0 -453
- package/dist/types/card/v2/useFilePreview/analytics.d.ts +0 -28
- package/dist/types/card/v2/useFilePreview/errors.d.ts +0 -42
- package/dist/types/card/v2/useFilePreview/getPreview/cache.d.ts +0 -21
- package/dist/types/card/v2/useFilePreview/getPreview/filePreviewStatus.d.ts +0 -4
- package/dist/types/card/v2/useFilePreview/getPreview/getPreview.d.ts +0 -9
- package/dist/types/card/v2/useFilePreview/getPreview/helpers.d.ts +0 -10
- package/dist/types/card/v2/useFilePreview/getPreview/index.d.ts +0 -3
- package/dist/types/card/v2/useFilePreview/getPreview/objectURLCache.d.ts +0 -12
- package/dist/types/card/v2/useFilePreview/getPreview/videoSnapshot.d.ts +0 -1
- package/dist/types/card/v2/useFilePreview/globalScope/getSSRData.d.ts +0 -3
- package/dist/types/card/v2/useFilePreview/globalScope/globalScope.d.ts +0 -15
- package/dist/types/card/v2/useFilePreview/globalScope/index.d.ts +0 -4
- package/dist/types/card/v2/useFilePreview/globalScope/printScript.d.ts +0 -2
- package/dist/types/card/v2/useFilePreview/globalScope/types.d.ts +0 -8
- package/dist/types/card/v2/useFilePreview/helpers.d.ts +0 -11
- package/dist/types/card/v2/useFilePreview/index.d.ts +0 -2
- package/dist/types/card/v2/useFilePreview/types.d.ts +0 -18
- package/dist/types/card/v2/useFilePreview/useFilePreview.d.ts +0 -33
- package/dist/types-ts4.5/card/v2/useFilePreview/analytics.d.ts +0 -28
- package/dist/types-ts4.5/card/v2/useFilePreview/errors.d.ts +0 -42
- package/dist/types-ts4.5/card/v2/useFilePreview/getPreview/cache.d.ts +0 -21
- package/dist/types-ts4.5/card/v2/useFilePreview/getPreview/filePreviewStatus.d.ts +0 -4
- package/dist/types-ts4.5/card/v2/useFilePreview/getPreview/getPreview.d.ts +0 -9
- package/dist/types-ts4.5/card/v2/useFilePreview/getPreview/helpers.d.ts +0 -10
- package/dist/types-ts4.5/card/v2/useFilePreview/getPreview/index.d.ts +0 -3
- package/dist/types-ts4.5/card/v2/useFilePreview/getPreview/objectURLCache.d.ts +0 -12
- package/dist/types-ts4.5/card/v2/useFilePreview/getPreview/videoSnapshot.d.ts +0 -1
- package/dist/types-ts4.5/card/v2/useFilePreview/globalScope/getSSRData.d.ts +0 -3
- package/dist/types-ts4.5/card/v2/useFilePreview/globalScope/globalScope.d.ts +0 -15
- package/dist/types-ts4.5/card/v2/useFilePreview/globalScope/index.d.ts +0 -4
- package/dist/types-ts4.5/card/v2/useFilePreview/globalScope/printScript.d.ts +0 -2
- package/dist/types-ts4.5/card/v2/useFilePreview/globalScope/types.d.ts +0 -8
- package/dist/types-ts4.5/card/v2/useFilePreview/helpers.d.ts +0 -11
- package/dist/types-ts4.5/card/v2/useFilePreview/index.d.ts +0 -2
- package/dist/types-ts4.5/card/v2/useFilePreview/types.d.ts +0 -18
- package/dist/types-ts4.5/card/v2/useFilePreview/useFilePreview.d.ts +0 -33
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.isBigger = exports.createRequestDimensions = void 0;
|
|
7
|
-
exports.useCurrentValueRef = useCurrentValueRef;
|
|
8
|
-
exports.usePrevious = usePrevious;
|
|
9
|
-
var _react = require("react");
|
|
10
|
-
/**
|
|
11
|
-
* Checks if at least one of next dimensions is bigger than current
|
|
12
|
-
* If a single dimension is undefined, returns false
|
|
13
|
-
*/
|
|
14
|
-
var isBigger = exports.isBigger = function isBigger(current, next) {
|
|
15
|
-
var _ref = current || {},
|
|
16
|
-
currentWidth = _ref.width,
|
|
17
|
-
currentHeight = _ref.height;
|
|
18
|
-
var _ref2 = next || {},
|
|
19
|
-
nextWidth = _ref2.width,
|
|
20
|
-
nextHeight = _ref2.height;
|
|
21
|
-
if (!!currentWidth && !!currentHeight && !!nextWidth && !!nextHeight) {
|
|
22
|
-
var nextIsWider = currentWidth < nextWidth;
|
|
23
|
-
var nextIsHigher = currentHeight < nextHeight;
|
|
24
|
-
return nextIsHigher || nextIsWider;
|
|
25
|
-
} else {
|
|
26
|
-
return false;
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
/** Verifies if the current screen is retina display */
|
|
31
|
-
function isRetina() {
|
|
32
|
-
var mediaQuery = '(-webkit-min-device-pixel-ratio: 1.5), (min--moz-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3/2), (min-resolution: 1.5dppx)';
|
|
33
|
-
return window.devicePixelRatio > 1 || window.matchMedia && window.matchMedia(mediaQuery).matches;
|
|
34
|
-
}
|
|
35
|
-
var createRequestDimensions = exports.createRequestDimensions = function createRequestDimensions(dimensions) {
|
|
36
|
-
if (!dimensions) {
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
var retinaFactor = isRetina() ? 2 : 1;
|
|
40
|
-
var width = dimensions.width,
|
|
41
|
-
height = dimensions.height;
|
|
42
|
-
var result = {};
|
|
43
|
-
if (width) {
|
|
44
|
-
result.width = width * retinaFactor;
|
|
45
|
-
}
|
|
46
|
-
if (height) {
|
|
47
|
-
result.height = height * retinaFactor;
|
|
48
|
-
}
|
|
49
|
-
return result;
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
/** Stores the provided value in a ref object to avoid "component rerenders" when the value is used as a hook dependency */
|
|
53
|
-
function useCurrentValueRef(value) {
|
|
54
|
-
var ref = (0, _react.useRef)(value);
|
|
55
|
-
ref.current = value;
|
|
56
|
-
return ref;
|
|
57
|
-
}
|
|
58
|
-
function usePrevious(value) {
|
|
59
|
-
var ref = (0, _react.useRef)();
|
|
60
|
-
(0, _react.useEffect)(function () {
|
|
61
|
-
ref.current = value;
|
|
62
|
-
}, [value]);
|
|
63
|
-
return ref.current;
|
|
64
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
Object.defineProperty(exports, "useFilePreview", {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: function get() {
|
|
9
|
-
return _useFilePreview.useFilePreview;
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
var _useFilePreview = require("./useFilePreview");
|
|
@@ -1,460 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.useFilePreview = void 0;
|
|
8
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
10
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
12
|
-
var _mediaClient = require("@atlaskit/media-client");
|
|
13
|
-
var _mediaClientReact = require("@atlaskit/media-client-react");
|
|
14
|
-
var _mediaCommon = require("@atlaskit/media-common");
|
|
15
|
-
var _react = require("react");
|
|
16
|
-
var _errors = require("./errors");
|
|
17
|
-
var _analytics = require("./analytics");
|
|
18
|
-
var _helpers = require("./helpers");
|
|
19
|
-
var _globalScope = require("./globalScope");
|
|
20
|
-
var _getPreview = require("./getPreview");
|
|
21
|
-
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; }
|
|
22
|
-
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; }
|
|
23
|
-
var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
|
|
24
|
-
var _ref$resizeMode = _ref.resizeMode,
|
|
25
|
-
resizeMode = _ref$resizeMode === void 0 ? 'crop' : _ref$resizeMode,
|
|
26
|
-
identifier = _ref.identifier,
|
|
27
|
-
ssr = _ref.ssr,
|
|
28
|
-
dimensions = _ref.dimensions,
|
|
29
|
-
traceContext = _ref.traceContext,
|
|
30
|
-
previewDidRender = _ref.previewDidRender,
|
|
31
|
-
skipRemote = _ref.skipRemote,
|
|
32
|
-
mediaBlobUrlAttrs = _ref.mediaBlobUrlAttrs;
|
|
33
|
-
var mediaClient = (0, _mediaClientReact.useMediaClient)();
|
|
34
|
-
var _useState = (0, _react.useState)('loading'),
|
|
35
|
-
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
36
|
-
status = _useState2[0],
|
|
37
|
-
setStatus = _useState2[1];
|
|
38
|
-
var _useState3 = (0, _react.useState)(),
|
|
39
|
-
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
40
|
-
error = _useState4[0],
|
|
41
|
-
setError = _useState4[1];
|
|
42
|
-
var _useState5 = (0, _react.useState)(),
|
|
43
|
-
_useState6 = (0, _slicedToArray2.default)(_useState5, 2),
|
|
44
|
-
nonCriticalError = _useState6[0],
|
|
45
|
-
setNonCriticalError = _useState6[1];
|
|
46
|
-
var _useState7 = (0, _react.useState)(false),
|
|
47
|
-
_useState8 = (0, _slicedToArray2.default)(_useState7, 2),
|
|
48
|
-
isBannedLocalPreview = _useState8[0],
|
|
49
|
-
setIsBannedLocalPreview = _useState8[1];
|
|
50
|
-
var wasResolvedUpfrontPreviewRef = (0, _react.useRef)(false);
|
|
51
|
-
var ssrReliabilityRef = (0, _react.useRef)(initialSsrReliability);
|
|
52
|
-
var requestDimensions = (0, _react.useMemo)(function () {
|
|
53
|
-
return dimensions ? (0, _helpers.createRequestDimensions)(dimensions) : undefined;
|
|
54
|
-
}, [dimensions]);
|
|
55
|
-
var requestDimensionsRef = (0, _helpers.useCurrentValueRef)(requestDimensions);
|
|
56
|
-
var prevRequestDimensions = (0, _helpers.usePrevious)(requestDimensions);
|
|
57
|
-
var imageURLParams = (0, _react.useMemo)(function () {
|
|
58
|
-
return _objectSpread(_objectSpread({
|
|
59
|
-
collection: identifier.collectionName,
|
|
60
|
-
mode: resizeMode === 'stretchy-fit' ? 'full-fit' : resizeMode
|
|
61
|
-
}, requestDimensions), {}, {
|
|
62
|
-
allowAnimated: true
|
|
63
|
-
});
|
|
64
|
-
}, [requestDimensions, identifier.collectionName, resizeMode]);
|
|
65
|
-
var previewInitializer = function previewInitializer() {
|
|
66
|
-
var fileImageMode = (0, _mediaClient.imageResizeModeToFileImageMode)(resizeMode);
|
|
67
|
-
var preview = _getPreview.mediaFilePreviewCache.get(identifier.id, fileImageMode);
|
|
68
|
-
if (preview) {
|
|
69
|
-
return preview;
|
|
70
|
-
}
|
|
71
|
-
if (ssr) {
|
|
72
|
-
var ssrData = (0, _globalScope.getSSRData)(identifier);
|
|
73
|
-
if (ssrData !== null && ssrData !== void 0 && ssrData.error) {
|
|
74
|
-
ssrReliabilityRef.current.server = _objectSpread({
|
|
75
|
-
status: 'fail'
|
|
76
|
-
}, ssrData.error);
|
|
77
|
-
}
|
|
78
|
-
if (!(ssrData !== null && ssrData !== void 0 && ssrData.dataURI)) {
|
|
79
|
-
try {
|
|
80
|
-
return (0, _getPreview.getSSRPreview)(ssr, mediaClient, identifier.id, imageURLParams, mediaBlobUrlAttrs);
|
|
81
|
-
} catch (e) {
|
|
82
|
-
ssrReliabilityRef.current[ssr] = _objectSpread({
|
|
83
|
-
status: 'fail'
|
|
84
|
-
}, (0, _analytics.extractErrorInfo)(e));
|
|
85
|
-
}
|
|
86
|
-
} else {
|
|
87
|
-
var _dimensions = ssrData.dimensions,
|
|
88
|
-
dataURI = ssrData.dataURI;
|
|
89
|
-
return {
|
|
90
|
-
dataURI: dataURI,
|
|
91
|
-
dimensions: _dimensions,
|
|
92
|
-
source: 'ssr-data'
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
};
|
|
97
|
-
var _useState9 = (0, _react.useState)(previewInitializer),
|
|
98
|
-
_useState10 = (0, _slicedToArray2.default)(_useState9, 2),
|
|
99
|
-
preview = _useState10[0],
|
|
100
|
-
setPreview = _useState10[1];
|
|
101
|
-
var prevPreview = (0, _helpers.usePrevious)(preview);
|
|
102
|
-
var _useFileState = (0, _mediaClientReact.useFileState)(identifier.id, {
|
|
103
|
-
skipRemote: skipRemote,
|
|
104
|
-
collectionName: identifier.collectionName,
|
|
105
|
-
occurrenceKey: identifier.occurrenceKey
|
|
106
|
-
}),
|
|
107
|
-
fileState = _useFileState.fileState;
|
|
108
|
-
|
|
109
|
-
//----------------------------------------------------------------
|
|
110
|
-
// Update status
|
|
111
|
-
//----------------------------------------------------------------
|
|
112
|
-
|
|
113
|
-
// TOOD: make a full hook reset (remount) on New identifier or client
|
|
114
|
-
(0, _react.useEffect)(function () {
|
|
115
|
-
setStatus('loading');
|
|
116
|
-
}, [identifier]);
|
|
117
|
-
var updateFileStateRef = (0, _helpers.useCurrentValueRef)(function () {
|
|
118
|
-
if (fileState) {
|
|
119
|
-
// do not update the status if the status is final
|
|
120
|
-
if (['complete', 'error', 'failed-processing'].includes(status)) {
|
|
121
|
-
return;
|
|
122
|
-
}
|
|
123
|
-
if (fileState.status !== 'error') {
|
|
124
|
-
var mediaType = 'mediaType' in fileState ? fileState.mediaType : undefined;
|
|
125
|
-
var isPreviewable = !!mediaType && ['audio', 'video', 'image', 'doc'].indexOf(mediaType) > -1;
|
|
126
|
-
var isPreviewableFileState = !!fileState.preview;
|
|
127
|
-
var isSupportedLocalPreview = mediaType === 'image' || mediaType === 'video';
|
|
128
|
-
var hasLocalPreview = !isBannedLocalPreview && isPreviewableFileState && isSupportedLocalPreview && !!fileState.mimeType && (0, _mediaCommon.isMimeTypeSupportedByBrowser)(fileState.mimeType);
|
|
129
|
-
var hasRemotePreview = (0, _mediaClient.isImageRepresentationReady)(fileState);
|
|
130
|
-
var hasPreview = hasLocalPreview || hasRemotePreview;
|
|
131
|
-
var newStatus;
|
|
132
|
-
switch (fileState.status) {
|
|
133
|
-
case 'uploading':
|
|
134
|
-
case 'failed-processing':
|
|
135
|
-
case 'processing':
|
|
136
|
-
newStatus = fileState.status;
|
|
137
|
-
break;
|
|
138
|
-
case 'processed':
|
|
139
|
-
if (!isPreviewable || !hasPreview) {
|
|
140
|
-
newStatus = 'complete';
|
|
141
|
-
break;
|
|
142
|
-
}
|
|
143
|
-
newStatus = 'loading-preview';
|
|
144
|
-
break;
|
|
145
|
-
default:
|
|
146
|
-
newStatus = 'loading';
|
|
147
|
-
}
|
|
148
|
-
setStatus(newStatus);
|
|
149
|
-
} else {
|
|
150
|
-
var e = new _mediaClientReact.MediaFileStateError(fileState.id, fileState.reason, fileState.message, fileState.details);
|
|
151
|
-
var errorReason = status === 'uploading' ? 'upload' : 'metadata-fetch';
|
|
152
|
-
setError(new _errors.MediaFilePreviewError(errorReason, e));
|
|
153
|
-
setStatus('error');
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
});
|
|
157
|
-
(0, _react.useEffect)(function () {
|
|
158
|
-
updateFileStateRef.current();
|
|
159
|
-
}, [fileState, updateFileStateRef]);
|
|
160
|
-
(0, _react.useEffect)(function () {
|
|
161
|
-
if (previewDidRender &&
|
|
162
|
-
// We should't complete if status is uploading
|
|
163
|
-
['loading-preview', 'processing'].includes(status)) {
|
|
164
|
-
setStatus('complete');
|
|
165
|
-
// TODO MEX-788: add test for "do not remove the preview when unsubscribing".
|
|
166
|
-
setIsBannedLocalPreview(false); // CXP-2723 TODO: we might be able to remove this??
|
|
167
|
-
}
|
|
168
|
-
}, [previewDidRender, status]);
|
|
169
|
-
|
|
170
|
-
// CXP-2723 TODO: Create test cases for banning local preview after status is complete
|
|
171
|
-
|
|
172
|
-
//----------------------------------------------------------------
|
|
173
|
-
// Preview Fetch Helper
|
|
174
|
-
//----------------------------------------------------------------
|
|
175
|
-
var getAndCacheRemotePreviewRef = (0, _helpers.useCurrentValueRef)(function () {
|
|
176
|
-
return (0, _getPreview.getAndCacheRemotePreview)(mediaClient, identifier.id, requestDimensions || {}, imageURLParams, mediaBlobUrlAttrs, traceContext);
|
|
177
|
-
});
|
|
178
|
-
|
|
179
|
-
//----------------------------------------------------------------
|
|
180
|
-
// Cache SSR Preview
|
|
181
|
-
//----------------------------------------------------------------
|
|
182
|
-
(0, _react.useEffect)(function () {
|
|
183
|
-
if (!skipRemote && ssr && !!preview && (0, _getPreview.isSSRClientPreview)(preview)) {
|
|
184
|
-
// Since the SSR preview brings the token in the query params,
|
|
185
|
-
// We need to fetch the remote preview to be able to cache it,
|
|
186
|
-
getAndCacheRemotePreviewRef.current().catch(function () {
|
|
187
|
-
// No need to log this error.
|
|
188
|
-
// If preview fails, it will be refetched later
|
|
189
|
-
//TODO: test this catch
|
|
190
|
-
// https://product-fabric.atlassian.net/browse/MEX-1071
|
|
191
|
-
});
|
|
192
|
-
}
|
|
193
|
-
}, [preview, identifier, skipRemote, ssr, getAndCacheRemotePreviewRef]);
|
|
194
|
-
|
|
195
|
-
//----------------------------------------------------------------
|
|
196
|
-
// Refetch SRR Preview if dimensions from Server have changed and are bigger,
|
|
197
|
-
//----------------------------------------------------------------
|
|
198
|
-
(0, _react.useEffect)(function () {
|
|
199
|
-
// CXP-2813 TODO: This is called too many times if the refetch failed. Should be called only once
|
|
200
|
-
if (preview && !skipRemote && (0, _getPreview.isSSRDataPreview)(preview) && (0, _helpers.isBigger)(preview.dimensions, requestDimensions)) {
|
|
201
|
-
getAndCacheRemotePreviewRef.current().then(setPreview).catch(function (e) {
|
|
202
|
-
var wrappedError = (0, _errors.ensureMediaFilePreviewError)('remote-preview-fetch-ssr', e, true);
|
|
203
|
-
setNonCriticalError(wrappedError);
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
}, [getAndCacheRemotePreviewRef, identifier, preview, requestDimensions, skipRemote]);
|
|
207
|
-
|
|
208
|
-
//----------------------------------------------------------------
|
|
209
|
-
// Upfront Preview
|
|
210
|
-
//----------------------------------------------------------------
|
|
211
|
-
(0, _react.useEffect)(function () {
|
|
212
|
-
var resolveUpfrontPreview = /*#__PURE__*/function () {
|
|
213
|
-
var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
214
|
-
var fetchedDimensions, newPreview, areValidFetchedDimensions;
|
|
215
|
-
return _regenerator.default.wrap(function _callee$(_context) {
|
|
216
|
-
while (1) switch (_context.prev = _context.next) {
|
|
217
|
-
case 0:
|
|
218
|
-
// We block any possible future call to this method regardless of the outcome (success or fail)
|
|
219
|
-
// If it fails, the normal preview fetch should occur after the file state is fetched anyways
|
|
220
|
-
wasResolvedUpfrontPreviewRef.current = true;
|
|
221
|
-
_context.prev = 1;
|
|
222
|
-
fetchedDimensions = _objectSpread({}, requestDimensions);
|
|
223
|
-
_context.next = 5;
|
|
224
|
-
return getAndCacheRemotePreviewRef.current();
|
|
225
|
-
case 5:
|
|
226
|
-
newPreview = _context.sent;
|
|
227
|
-
areValidFetchedDimensions = !(0, _helpers.isBigger)(fetchedDimensions, requestDimensionsRef.current); // If there are new and bigger dimensions in the props, and the upfront preview is still resolving,
|
|
228
|
-
// the fetched preview is no longer valid, and thus, we dismiss it
|
|
229
|
-
if (areValidFetchedDimensions) {
|
|
230
|
-
setPreview(newPreview);
|
|
231
|
-
}
|
|
232
|
-
_context.next = 12;
|
|
233
|
-
break;
|
|
234
|
-
case 10:
|
|
235
|
-
_context.prev = 10;
|
|
236
|
-
_context.t0 = _context["catch"](1);
|
|
237
|
-
case 12:
|
|
238
|
-
case "end":
|
|
239
|
-
return _context.stop();
|
|
240
|
-
}
|
|
241
|
-
}, _callee, null, [[1, 10]]);
|
|
242
|
-
}));
|
|
243
|
-
return function resolveUpfrontPreview() {
|
|
244
|
-
return _ref2.apply(this, arguments);
|
|
245
|
-
};
|
|
246
|
-
}();
|
|
247
|
-
|
|
248
|
-
// CXP-2723 TODO: `hadSSRPreview` is most likely redundant
|
|
249
|
-
var hadSSRPreview = ssr === 'client' && !!prevPreview && (0, _getPreview.isSSRClientPreview)(prevPreview);
|
|
250
|
-
if (!preview && !wasResolvedUpfrontPreviewRef.current && (!skipRemote || hadSSRPreview)) {
|
|
251
|
-
resolveUpfrontPreview();
|
|
252
|
-
}
|
|
253
|
-
}, [preview, requestDimensions, requestDimensionsRef, getAndCacheRemotePreviewRef, identifier, skipRemote, prevPreview, ssr]);
|
|
254
|
-
|
|
255
|
-
//----------------------------------------------------------------
|
|
256
|
-
// Fetch Preview
|
|
257
|
-
//----------------------------------------------------------------
|
|
258
|
-
|
|
259
|
-
var resolvePreviewRef = (0, _helpers.useCurrentValueRef)( /*#__PURE__*/function () {
|
|
260
|
-
var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(identifier, fileState) {
|
|
261
|
-
var filePreview, isRemotePreviewReady, mode, cachedPreview, dimensionsAreBigger, localPreview, remotePreview, wrappedError;
|
|
262
|
-
return _regenerator.default.wrap(function _callee2$(_context2) {
|
|
263
|
-
while (1) switch (_context2.prev = _context2.next) {
|
|
264
|
-
case 0:
|
|
265
|
-
filePreview = isBannedLocalPreview ? undefined : fileState.status !== 'error' && 'mimeType' in fileState && (0, _mediaCommon.isMimeTypeSupportedByBrowser)(fileState.mimeType) ? fileState.preview : undefined;
|
|
266
|
-
isRemotePreviewReady = (0, _mediaClient.isImageRepresentationReady)(fileState);
|
|
267
|
-
_context2.prev = 2;
|
|
268
|
-
mode = imageURLParams.mode;
|
|
269
|
-
cachedPreview = _getPreview.mediaFilePreviewCache.get(identifier.id, mode);
|
|
270
|
-
dimensionsAreBigger = (0, _helpers.isBigger)(cachedPreview === null || cachedPreview === void 0 ? void 0 : cachedPreview.dimensions, requestDimensions);
|
|
271
|
-
if (!(cachedPreview && !dimensionsAreBigger)) {
|
|
272
|
-
_context2.next = 8;
|
|
273
|
-
break;
|
|
274
|
-
}
|
|
275
|
-
return _context2.abrupt("return", cachedPreview);
|
|
276
|
-
case 8:
|
|
277
|
-
_context2.prev = 8;
|
|
278
|
-
if (!filePreview) {
|
|
279
|
-
_context2.next = 15;
|
|
280
|
-
break;
|
|
281
|
-
}
|
|
282
|
-
_context2.next = 12;
|
|
283
|
-
return (0, _getPreview.getAndCacheLocalPreview)(identifier.id, filePreview, requestDimensions || {}, mode, mediaBlobUrlAttrs);
|
|
284
|
-
case 12:
|
|
285
|
-
localPreview = _context2.sent;
|
|
286
|
-
setPreview(localPreview);
|
|
287
|
-
return _context2.abrupt("return");
|
|
288
|
-
case 15:
|
|
289
|
-
_context2.next = 22;
|
|
290
|
-
break;
|
|
291
|
-
case 17:
|
|
292
|
-
_context2.prev = 17;
|
|
293
|
-
_context2.t0 = _context2["catch"](8);
|
|
294
|
-
/**
|
|
295
|
-
* We report the error if:
|
|
296
|
-
* - local preview is supported and fails
|
|
297
|
-
* - local preview is unsupported and remote preview is NOT READY
|
|
298
|
-
* i.e. the function was called for "no reason".
|
|
299
|
-
* We DON'T report the error if:
|
|
300
|
-
* - local preview is unsupported and remote preview IS READY
|
|
301
|
-
* i.e. local preview is available and not supported,
|
|
302
|
-
* but we are after the remote preview instead.
|
|
303
|
-
*/
|
|
304
|
-
if (!(0, _errors.isUnsupportedLocalPreviewError)(_context2.t0) || (0, _errors.isUnsupportedLocalPreviewError)(_context2.t0) && !isRemotePreviewReady) {
|
|
305
|
-
// CXP-2723 TODO: We might have to wrap this error in MediaCardError
|
|
306
|
-
setNonCriticalError(_context2.t0);
|
|
307
|
-
}
|
|
308
|
-
/**
|
|
309
|
-
* No matter the reason why the local preview failed, we break the process
|
|
310
|
-
* if there is no remote preview available
|
|
311
|
-
*/
|
|
312
|
-
if (isRemotePreviewReady) {
|
|
313
|
-
_context2.next = 22;
|
|
314
|
-
break;
|
|
315
|
-
}
|
|
316
|
-
throw _context2.t0;
|
|
317
|
-
case 22:
|
|
318
|
-
if (isRemotePreviewReady) {
|
|
319
|
-
_context2.next = 24;
|
|
320
|
-
break;
|
|
321
|
-
}
|
|
322
|
-
throw new _errors.MediaFilePreviewError('remote-preview-not-ready');
|
|
323
|
-
case 24:
|
|
324
|
-
_context2.next = 26;
|
|
325
|
-
return getAndCacheRemotePreviewRef.current();
|
|
326
|
-
case 26:
|
|
327
|
-
remotePreview = _context2.sent;
|
|
328
|
-
setPreview(remotePreview);
|
|
329
|
-
return _context2.abrupt("return");
|
|
330
|
-
case 31:
|
|
331
|
-
_context2.prev = 31;
|
|
332
|
-
_context2.t1 = _context2["catch"](2);
|
|
333
|
-
wrappedError = (0, _errors.ensureMediaFilePreviewError)('preview-fetch', _context2.t1); // If remote preview fails, we set status 'error'
|
|
334
|
-
// If local preview fails (i.e, no remote preview available),
|
|
335
|
-
// we can stay in the same status until there is a remote preview available
|
|
336
|
-
// If it's any other error we set status 'error'
|
|
337
|
-
if ((0, _errors.isLocalPreviewError)(wrappedError)) {
|
|
338
|
-
// This error should already been logged inside the getCardPreview. No need to log it here.
|
|
339
|
-
setIsBannedLocalPreview(true);
|
|
340
|
-
} else {
|
|
341
|
-
if (!['complete', 'error', 'failed-processing'].includes(status)) {
|
|
342
|
-
setStatus('error');
|
|
343
|
-
setError(wrappedError);
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
case 35:
|
|
347
|
-
case "end":
|
|
348
|
-
return _context2.stop();
|
|
349
|
-
}
|
|
350
|
-
}, _callee2, null, [[2, 31], [8, 17]]);
|
|
351
|
-
}));
|
|
352
|
-
return function (_x, _x2) {
|
|
353
|
-
return _ref3.apply(this, arguments);
|
|
354
|
-
};
|
|
355
|
-
}());
|
|
356
|
-
(0, _react.useEffect)(function () {
|
|
357
|
-
if (fileState && wasResolvedUpfrontPreviewRef.current && (0, _getPreview.isPreviewableStatus)(status, (0, _getPreview.extractFilePreviewStatus)(fileState, isBannedLocalPreview)) && (!preview || (0, _helpers.isBigger)(prevRequestDimensions, requestDimensions))) {
|
|
358
|
-
resolvePreviewRef.current(identifier, fileState);
|
|
359
|
-
}
|
|
360
|
-
}, [fileState, identifier, isBannedLocalPreview, prevRequestDimensions, preview, requestDimensions, resolvePreviewRef, status]);
|
|
361
|
-
|
|
362
|
-
//----------------------------------------------------------------
|
|
363
|
-
// RETURN
|
|
364
|
-
//----------------------------------------------------------------
|
|
365
|
-
|
|
366
|
-
var onImageError = (0, _react.useCallback)(function (newPreview) {
|
|
367
|
-
if (newPreview) {
|
|
368
|
-
var failedSSRObject = _objectSpread({
|
|
369
|
-
status: 'fail'
|
|
370
|
-
}, (0, _analytics.extractErrorInfo)(new _errors.ImageLoadError(newPreview.source)));
|
|
371
|
-
if ((0, _getPreview.isSSRClientPreview)(newPreview)) {
|
|
372
|
-
ssrReliabilityRef.current.client = failedSSRObject;
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
/*
|
|
376
|
-
If the preview 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.
|
|
377
|
-
*/
|
|
378
|
-
|
|
379
|
-
if ((0, _getPreview.isSSRDataPreview)(newPreview)) {
|
|
380
|
-
ssrReliabilityRef.current.server = failedSSRObject;
|
|
381
|
-
ssrReliabilityRef.current.client = failedSSRObject;
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
// If the dataURI has been replaced, we can dismiss this error
|
|
386
|
-
if ((newPreview === null || newPreview === void 0 ? void 0 : newPreview.dataURI) !== (preview === null || preview === void 0 ? void 0 : preview.dataURI)) {
|
|
387
|
-
return;
|
|
388
|
-
}
|
|
389
|
-
var error = new _errors.ImageLoadError(newPreview === null || newPreview === void 0 ? void 0 : newPreview.source);
|
|
390
|
-
var isLocal = newPreview && (0, _getPreview.isLocalPreview)(newPreview);
|
|
391
|
-
var isSSR = newPreview && ((0, _getPreview.isSSRClientPreview)(newPreview) || (0, _getPreview.isSSRDataPreview)(newPreview));
|
|
392
|
-
if (isLocal || isSSR) {
|
|
393
|
-
if (isLocal) {
|
|
394
|
-
setIsBannedLocalPreview(true);
|
|
395
|
-
setNonCriticalError(error);
|
|
396
|
-
}
|
|
397
|
-
var fileImageMode = (0, _mediaClient.imageResizeModeToFileImageMode)(resizeMode);
|
|
398
|
-
_getPreview.mediaFilePreviewCache.remove(identifier.id, fileImageMode);
|
|
399
|
-
setPreview(undefined);
|
|
400
|
-
} else {
|
|
401
|
-
if (!['complete', 'error', 'failed-processing'].includes(status)) {
|
|
402
|
-
setStatus('error');
|
|
403
|
-
setError(error);
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
}, [identifier.id, preview === null || preview === void 0 ? void 0 : preview.dataURI, resizeMode, status]);
|
|
407
|
-
var onImageLoad = (0, _react.useCallback)(function (newPreview) {
|
|
408
|
-
if (newPreview) {
|
|
409
|
-
if ((0, _getPreview.isSSRClientPreview)(newPreview) && ssrReliabilityRef.current.client.status === 'unknown') {
|
|
410
|
-
ssrReliabilityRef.current.client = {
|
|
411
|
-
status: 'success'
|
|
412
|
-
};
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
/*
|
|
416
|
-
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.
|
|
417
|
-
*/
|
|
418
|
-
|
|
419
|
-
if ((0, _getPreview.isSSRDataPreview)(newPreview) && ssrReliabilityRef.current.server.status === 'unknown') {
|
|
420
|
-
ssrReliabilityRef.current.server = {
|
|
421
|
-
status: 'success'
|
|
422
|
-
};
|
|
423
|
-
ssrReliabilityRef.current.client = {
|
|
424
|
-
status: 'success'
|
|
425
|
-
};
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
// If the dataURI has been replaced, we can dismiss this callback
|
|
430
|
-
if ((newPreview === null || newPreview === void 0 ? void 0 : newPreview.dataURI) !== (preview === null || preview === void 0 ? void 0 : preview.dataURI)) {
|
|
431
|
-
return;
|
|
432
|
-
}
|
|
433
|
-
}, [preview === null || preview === void 0 ? void 0 : preview.dataURI]);
|
|
434
|
-
|
|
435
|
-
// FOR SSR
|
|
436
|
-
var getScriptProps = function getScriptProps() {
|
|
437
|
-
var _ssrReliabilityRef$cu;
|
|
438
|
-
return (0, _globalScope.generateScriptProps)(identifier, preview === null || preview === void 0 ? void 0 : preview.dataURI, requestDimensions, ((_ssrReliabilityRef$cu = ssrReliabilityRef.current.server) === null || _ssrReliabilityRef$cu === void 0 ? void 0 : _ssrReliabilityRef$cu.status) === 'fail' ? ssrReliabilityRef.current.server : undefined);
|
|
439
|
-
};
|
|
440
|
-
|
|
441
|
-
// CXP-2723 TODO: should consider simplifying our analytics, and how
|
|
442
|
-
// we might get rid of ssrReliabiltyRef from our hook
|
|
443
|
-
return {
|
|
444
|
-
preview: preview,
|
|
445
|
-
error: error,
|
|
446
|
-
nonCriticalError: nonCriticalError,
|
|
447
|
-
ssrReliabilityRef: ssrReliabilityRef,
|
|
448
|
-
onImageError: onImageError,
|
|
449
|
-
onImageLoad: onImageLoad,
|
|
450
|
-
getScriptProps: getScriptProps
|
|
451
|
-
};
|
|
452
|
-
};
|
|
453
|
-
var initialSsrReliability = {
|
|
454
|
-
server: {
|
|
455
|
-
status: 'unknown'
|
|
456
|
-
},
|
|
457
|
-
client: {
|
|
458
|
-
status: 'unknown'
|
|
459
|
-
}
|
|
460
|
-
};
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { getMediaClientErrorReason, isRequestError } from '@atlaskit/media-client';
|
|
2
|
-
import { isMediaFilePreviewError, getFileStateErrorReason, isMediaFileStateError } from './errors';
|
|
3
|
-
export const getErrorTraceContext = error => {
|
|
4
|
-
if (isMediaFilePreviewError(error) && !!error.secondaryError) {
|
|
5
|
-
if (isRequestError(error.secondaryError)) {
|
|
6
|
-
var _error$secondaryError;
|
|
7
|
-
return (_error$secondaryError = error.secondaryError.metadata) === null || _error$secondaryError === void 0 ? void 0 : _error$secondaryError.traceContext;
|
|
8
|
-
} else if (isMediaFileStateError(error.secondaryError)) {
|
|
9
|
-
var _error$secondaryError2, _error$secondaryError3;
|
|
10
|
-
return (_error$secondaryError2 = error.secondaryError.details) === null || _error$secondaryError2 === void 0 ? void 0 : (_error$secondaryError3 = _error$secondaryError2.metadata) === null || _error$secondaryError3 === void 0 ? void 0 : _error$secondaryError3.traceContext;
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
};
|
|
14
|
-
export const getRenderErrorFailReason = error => {
|
|
15
|
-
if (isMediaFilePreviewError(error)) {
|
|
16
|
-
return error.primaryReason;
|
|
17
|
-
} else {
|
|
18
|
-
return 'nativeError';
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
export const getRenderErrorErrorReason = error => {
|
|
22
|
-
if (isMediaFilePreviewError(error) && error.secondaryError) {
|
|
23
|
-
const mediaClientReason = isMediaFileStateError(error.secondaryError) ? getFileStateErrorReason(error.secondaryError) : getMediaClientErrorReason(error.secondaryError);
|
|
24
|
-
if (mediaClientReason !== 'unknown') {
|
|
25
|
-
return mediaClientReason;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
return 'nativeError';
|
|
29
|
-
};
|
|
30
|
-
export const getRenderErrorErrorDetail = error => {
|
|
31
|
-
if (isMediaFilePreviewError(error) && error.secondaryError) {
|
|
32
|
-
return error.secondaryError.message;
|
|
33
|
-
} else {
|
|
34
|
-
return error.message;
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
export const extractErrorInfo = (error, metadataTraceContext) => {
|
|
38
|
-
return {
|
|
39
|
-
failReason: getRenderErrorFailReason(error),
|
|
40
|
-
error: getRenderErrorErrorReason(error),
|
|
41
|
-
errorDetail: getRenderErrorErrorDetail(error),
|
|
42
|
-
metadataTraceContext: metadataTraceContext !== null && metadataTraceContext !== void 0 ? metadataTraceContext : getErrorTraceContext(error)
|
|
43
|
-
};
|
|
44
|
-
};
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { MediaFileStateError } from '@atlaskit/media-client-react';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Primary reason is logged through Data Portal.
|
|
5
|
-
* Make sure all the values are whitelisted in Measure -> Event Regitry -> "mediaCardRender failed" event
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
export class MediaFilePreviewError extends Error {
|
|
9
|
-
constructor(primaryReason, secondaryError) {
|
|
10
|
-
super(primaryReason);
|
|
11
|
-
// https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-2.html#support-for-newtarget
|
|
12
|
-
this.primaryReason = primaryReason;
|
|
13
|
-
this.secondaryError = secondaryError;
|
|
14
|
-
Object.setPrototypeOf(this, new.target.prototype);
|
|
15
|
-
|
|
16
|
-
// https://v8.dev/docs/stack-trace-api
|
|
17
|
-
if ('captureStackTrace' in Error) {
|
|
18
|
-
Error.captureStackTrace(this, new.target);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
export class LocalPreviewError extends MediaFilePreviewError {
|
|
23
|
-
constructor(primaryReason, secondaryError) {
|
|
24
|
-
super(primaryReason, secondaryError);
|
|
25
|
-
this.primaryReason = primaryReason;
|
|
26
|
-
this.secondaryError = secondaryError;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
export class RemotePreviewError extends MediaFilePreviewError {
|
|
30
|
-
constructor(primaryReason, secondaryError) {
|
|
31
|
-
super(primaryReason, secondaryError);
|
|
32
|
-
this.primaryReason = primaryReason;
|
|
33
|
-
this.secondaryError = secondaryError;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
export class SsrPreviewError extends MediaFilePreviewError {
|
|
37
|
-
constructor(primaryReason, secondaryError) {
|
|
38
|
-
super(primaryReason, secondaryError);
|
|
39
|
-
this.primaryReason = primaryReason;
|
|
40
|
-
this.secondaryError = secondaryError;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
const getImageLoadPrimaryReason = source => {
|
|
44
|
-
switch (source) {
|
|
45
|
-
case 'cache-remote':
|
|
46
|
-
return 'cache-remote-uri';
|
|
47
|
-
case 'cache-local':
|
|
48
|
-
return 'cache-local-uri';
|
|
49
|
-
case 'external':
|
|
50
|
-
return 'external-uri';
|
|
51
|
-
case 'local':
|
|
52
|
-
return 'local-uri';
|
|
53
|
-
case 'remote':
|
|
54
|
-
return 'remote-uri';
|
|
55
|
-
// This fail reason will come from a bug, most likely.
|
|
56
|
-
default:
|
|
57
|
-
return `unknown-uri`;
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
export class ImageLoadError extends MediaFilePreviewError {
|
|
61
|
-
constructor(source) {
|
|
62
|
-
super(getImageLoadPrimaryReason(source));
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
export function isMediaFilePreviewError(err) {
|
|
66
|
-
return err instanceof MediaFilePreviewError;
|
|
67
|
-
}
|
|
68
|
-
export const isLocalPreviewError = err => err instanceof LocalPreviewError;
|
|
69
|
-
export const isRemotePreviewError = err => err instanceof RemotePreviewError;
|
|
70
|
-
export const isUnsupportedLocalPreviewError = err => isMediaFilePreviewError(err) && err.primaryReason === 'local-preview-unsupported';
|
|
71
|
-
|
|
72
|
-
// In a try/catch statement, the error caught is the type of unknown.
|
|
73
|
-
// We can use this helper to ensure that the error handled is the type of MediaFilePreviewError if unsure
|
|
74
|
-
// If updatePrimaryReason is true, if it's a MediaFilePreviewError already, it will update it's primary reason
|
|
75
|
-
export const ensureMediaFilePreviewError = (primaryReason, error, updatePrimaryReason) => {
|
|
76
|
-
if (isMediaFilePreviewError(error)) {
|
|
77
|
-
if (updatePrimaryReason && error.primaryReason !== primaryReason) {
|
|
78
|
-
return new MediaFilePreviewError(primaryReason, error.secondaryError);
|
|
79
|
-
}
|
|
80
|
-
return error;
|
|
81
|
-
}
|
|
82
|
-
return new MediaFilePreviewError(primaryReason, error);
|
|
83
|
-
};
|
|
84
|
-
export function isMediaFileStateError(err) {
|
|
85
|
-
return err instanceof MediaFileStateError;
|
|
86
|
-
}
|
|
87
|
-
export function getFileStateErrorReason(err) {
|
|
88
|
-
var _err$details$reason, _err$details;
|
|
89
|
-
return (_err$details$reason = (_err$details = err.details) === null || _err$details === void 0 ? void 0 : _err$details.reason) !== null && _err$details$reason !== void 0 ? _err$details$reason : 'unknown';
|
|
90
|
-
}
|