@atlaskit/media-card 74.0.0 → 74.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/dist/cjs/errors.js +4 -0
- package/dist/cjs/root/card/cardAnalytics.js +6 -2
- package/dist/cjs/root/card/getCardPreview/index.js +47 -20
- package/dist/cjs/root/card/imageRefetchingAnalytics.js +45 -0
- package/dist/cjs/root/card/index.js +13 -16
- package/dist/cjs/utils/analytics.js +29 -2
- package/dist/cjs/utils/document.js +9 -1
- package/dist/cjs/utils/ufoExperiences.js +7 -3
- package/dist/cjs/utils/viewportDetector.js +11 -36
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/errors.js +4 -0
- package/dist/es2019/root/card/cardAnalytics.js +3 -2
- package/dist/es2019/root/card/getCardPreview/index.js +27 -2
- package/dist/es2019/root/card/imageRefetchingAnalytics.js +30 -0
- package/dist/es2019/root/card/index.js +15 -20
- package/dist/es2019/utils/analytics.js +18 -1
- package/dist/es2019/utils/document.js +11 -1
- package/dist/es2019/utils/ufoExperiences.js +4 -3
- package/dist/es2019/utils/viewportDetector.js +9 -36
- package/dist/es2019/version.json +1 -1
- package/dist/esm/errors.js +4 -0
- package/dist/esm/root/card/cardAnalytics.js +5 -2
- package/dist/esm/root/card/getCardPreview/index.js +47 -20
- package/dist/esm/root/card/imageRefetchingAnalytics.js +32 -0
- package/dist/esm/root/card/index.js +15 -20
- package/dist/esm/utils/analytics.js +22 -1
- package/dist/esm/utils/document.js +9 -1
- package/dist/esm/utils/ufoExperiences.js +6 -3
- package/dist/esm/utils/viewportDetector.js +9 -36
- package/dist/esm/version.json +1 -1
- package/dist/types/errors.d.ts +5 -1
- package/dist/types/root/card/cardAnalytics.d.ts +1 -1
- package/dist/types/root/card/getCardPreview/index.d.ts +4 -1
- package/dist/types/root/card/imageRefetchingAnalytics.d.ts +10 -0
- package/dist/types/root/card/index.d.ts +0 -2
- package/dist/types/utils/analytics.d.ts +17 -1
- package/dist/types/utils/document.d.ts +1 -1
- package/dist/types/utils/ufoExperiences.d.ts +1 -1
- package/dist/types/utils/viewportDetector.d.ts +0 -10
- package/package.json +6 -5
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
-
import React, { Component
|
|
2
|
+
import React, { Component } from 'react';
|
|
3
3
|
import ReactDOM from 'react-dom';
|
|
4
4
|
import { withAnalyticsEvents } from '@atlaskit/analytics-next';
|
|
5
5
|
import { withMediaAnalyticsContext } from '@atlaskit/media-common';
|
|
@@ -8,7 +8,7 @@ import { globalMediaEventEmitter, isDifferentIdentifier, isFileIdentifier, RECEN
|
|
|
8
8
|
import { MediaViewer } from '@atlaskit/media-viewer';
|
|
9
9
|
import { injectIntl, IntlProvider } from 'react-intl-next';
|
|
10
10
|
import { CardView } from '../cardView';
|
|
11
|
-
import {
|
|
11
|
+
import { ViewportDetector } from '../../utils/viewportDetector';
|
|
12
12
|
import { getRequestedDimensions } from '../../utils/getDataURIDimension';
|
|
13
13
|
import { getCardPreview, getCardPreviewFromCache, removeCardPreviewFromCache, getFilePreviewFromFileState, shouldResolvePreview, getSSRCardPreview, isLocalPreview, isSSRPreview, isSSRClientPreview, isSSRDataPreview, fetchAndCacheRemotePreview } from './getCardPreview';
|
|
14
14
|
import { getFileDetails } from '../../utils/metadata';
|
|
@@ -25,7 +25,7 @@ import { getMediaCardCursor } from '../../utils/getMediaCardCursor';
|
|
|
25
25
|
import { completeUfoExperience, startUfoExperience } from '../../utils/ufoExperiences';
|
|
26
26
|
import { generateUniqueId } from '../../utils/generateUniqueId';
|
|
27
27
|
const packageName = "@atlaskit/media-card";
|
|
28
|
-
const packageVersion = "74.
|
|
28
|
+
const packageVersion = "74.1.0";
|
|
29
29
|
export class CardBase extends Component {
|
|
30
30
|
// An internalOccurrenceKey is a randomly generated value to differentiate various instances
|
|
31
31
|
// of Cards regardless of whether it shares the same file (either internal or external)
|
|
@@ -43,10 +43,6 @@ export class CardBase extends Component {
|
|
|
43
43
|
wasStatusProcessing: false
|
|
44
44
|
});
|
|
45
45
|
|
|
46
|
-
_defineProperty(this, "viewportPreAnchorRef", /*#__PURE__*/createRef());
|
|
47
|
-
|
|
48
|
-
_defineProperty(this, "viewportPostAnchorRef", /*#__PURE__*/createRef());
|
|
49
|
-
|
|
50
46
|
_defineProperty(this, "ssrReliability", {
|
|
51
47
|
server: {
|
|
52
48
|
status: 'unknown'
|
|
@@ -103,7 +99,8 @@ export class CardBase extends Component {
|
|
|
103
99
|
} = identifier;
|
|
104
100
|
const {
|
|
105
101
|
dimensions = {},
|
|
106
|
-
mediaClient
|
|
102
|
+
mediaClient,
|
|
103
|
+
createAnalyticsEvent
|
|
107
104
|
} = this.props;
|
|
108
105
|
return {
|
|
109
106
|
mediaClient,
|
|
@@ -113,7 +110,9 @@ export class CardBase extends Component {
|
|
|
113
110
|
filePreview: isBannedLocalPreview ? undefined : getFilePreviewFromFileState(fileState),
|
|
114
111
|
isRemotePreviewReady: isImageRepresentationReady(fileState),
|
|
115
112
|
imageUrlParams: this.getImageURLParams(identifier),
|
|
116
|
-
mediaBlobUrlAttrs: this.getMediaBlobUrlAttrs(identifier, fileState)
|
|
113
|
+
mediaBlobUrlAttrs: this.getMediaBlobUrlAttrs(identifier, fileState),
|
|
114
|
+
createAnalyticsEvent,
|
|
115
|
+
featureFlags: this.props.featureFlags
|
|
117
116
|
};
|
|
118
117
|
});
|
|
119
118
|
|
|
@@ -553,16 +552,8 @@ export class CardBase extends Component {
|
|
|
553
552
|
});
|
|
554
553
|
return isLazy ? /*#__PURE__*/React.createElement(ViewportDetector, {
|
|
555
554
|
cardEl: cardRef,
|
|
556
|
-
preAnchorRef: this.viewportPreAnchorRef,
|
|
557
|
-
postAnchorRef: this.viewportPostAnchorRef,
|
|
558
555
|
onVisible: this.onCardInViewport
|
|
559
|
-
},
|
|
560
|
-
ref: this.viewportPreAnchorRef,
|
|
561
|
-
offsetTop: -ABS_VIEWPORT_ANCHOR_OFFSET_TOP
|
|
562
|
-
}), card, /*#__PURE__*/React.createElement(ViewportAnchor, {
|
|
563
|
-
ref: this.viewportPostAnchorRef,
|
|
564
|
-
offsetTop: ABS_VIEWPORT_ANCHOR_OFFSET_TOP
|
|
565
|
-
})) : card;
|
|
556
|
+
}, card) : card;
|
|
566
557
|
});
|
|
567
558
|
|
|
568
559
|
_defineProperty(this, "storeSSRData", () => {
|
|
@@ -706,6 +697,8 @@ export class CardBase extends Component {
|
|
|
706
697
|
}
|
|
707
698
|
|
|
708
699
|
componentDidMount() {
|
|
700
|
+
var _getDocument;
|
|
701
|
+
|
|
709
702
|
this.hasBeenMounted = true;
|
|
710
703
|
const {
|
|
711
704
|
isCardVisible,
|
|
@@ -741,7 +734,7 @@ export class CardBase extends Component {
|
|
|
741
734
|
// won't work in IE11
|
|
742
735
|
|
|
743
736
|
|
|
744
|
-
getDocument().addEventListener('copy', this.fireCopiedEvent);
|
|
737
|
+
(_getDocument = getDocument()) === null || _getDocument === void 0 ? void 0 : _getDocument.addEventListener('copy', this.fireCopiedEvent);
|
|
745
738
|
}
|
|
746
739
|
|
|
747
740
|
componentDidUpdate(prevProps, prevState) {
|
|
@@ -842,9 +835,11 @@ export class CardBase extends Component {
|
|
|
842
835
|
}
|
|
843
836
|
|
|
844
837
|
componentWillUnmount() {
|
|
838
|
+
var _getDocument2;
|
|
839
|
+
|
|
845
840
|
this.hasBeenMounted = false;
|
|
846
841
|
this.unsubscribe();
|
|
847
|
-
getDocument().removeEventListener('copy', this.fireCopiedEvent);
|
|
842
|
+
(_getDocument2 = getDocument()) === null || _getDocument2 === void 0 ? void 0 : _getDocument2.removeEventListener('copy', this.fireCopiedEvent);
|
|
848
843
|
}
|
|
849
844
|
|
|
850
845
|
updateStateForIdentifier(identifier) {
|
|
@@ -9,7 +9,8 @@ const relevantFlags = {
|
|
|
9
9
|
observedWidth: true,
|
|
10
10
|
mediaInline: false,
|
|
11
11
|
folderUploads: false,
|
|
12
|
-
mediaUploadApiV2: true
|
|
12
|
+
mediaUploadApiV2: true,
|
|
13
|
+
memoryCacheLogging: true
|
|
13
14
|
};
|
|
14
15
|
export const LOGGED_FEATURE_FLAGS = filterFeatureFlagNames(relevantFlags);
|
|
15
16
|
export const LOGGED_FEATURE_FLAG_KEYS = filterFeatureFlagKeysAllProducts(relevantFlags);
|
|
@@ -52,6 +53,22 @@ export const getRenderSucceededEventPayload = (fileAttributes, performanceAttrib
|
|
|
52
53
|
ssrReliability
|
|
53
54
|
}
|
|
54
55
|
});
|
|
56
|
+
export const getCacheHitEventPayload = cardPreviewAttributes => ({
|
|
57
|
+
eventType: 'operational',
|
|
58
|
+
action: 'cache-hit',
|
|
59
|
+
actionSubject: 'mediaCardCache',
|
|
60
|
+
attributes: {
|
|
61
|
+
cardPreviewAttributes
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
export const getRemoteSuccessEventPayload = cardPreviewAttributes => ({
|
|
65
|
+
eventType: 'operational',
|
|
66
|
+
action: 'Remote-success',
|
|
67
|
+
actionSubject: 'mediaCardCache',
|
|
68
|
+
attributes: {
|
|
69
|
+
cardPreviewAttributes
|
|
70
|
+
}
|
|
71
|
+
});
|
|
55
72
|
export const getRenderFailedExternalUriPayload = (fileAttributes, performanceAttributes) => ({
|
|
56
73
|
eventType: 'operational',
|
|
57
74
|
action: 'failed',
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { ConcurrentExperience, ExperiencePerformanceTypes, ExperienceTypes } from '@atlaskit/ufo';
|
|
2
2
|
import { extractErrorInfo, getRenderErrorRequestMetadata, LOGGED_FEATURE_FLAG_KEYS } from './analytics';
|
|
3
|
+
import { MediaCardError } from '../errors';
|
|
3
4
|
import { getMediaEnvironment, getMediaRegion } from '@atlaskit/media-client';
|
|
4
5
|
const packageName = "@atlaskit/media-card";
|
|
5
|
-
const packageVersion = "74.
|
|
6
|
+
const packageVersion = "74.1.0";
|
|
6
7
|
let concurrentExperience;
|
|
7
8
|
|
|
8
9
|
const getExperience = id => {
|
|
@@ -24,7 +25,7 @@ const getExperience = id => {
|
|
|
24
25
|
export const startUfoExperience = id => {
|
|
25
26
|
getExperience(id).start();
|
|
26
27
|
};
|
|
27
|
-
export const completeUfoExperience = (id, status, fileAttributes, fileStateFlags, ssrReliability, error) => {
|
|
28
|
+
export const completeUfoExperience = (id, status, fileAttributes, fileStateFlags, ssrReliability, error = new MediaCardError('missing-error-data')) => {
|
|
28
29
|
switch (status) {
|
|
29
30
|
case 'complete':
|
|
30
31
|
succeedUfoExperience(id, {
|
|
@@ -44,7 +45,7 @@ export const completeUfoExperience = (id, status, fileAttributes, fileStateFlags
|
|
|
44
45
|
break;
|
|
45
46
|
|
|
46
47
|
case 'error':
|
|
47
|
-
|
|
48
|
+
failUfoExperience(id, {
|
|
48
49
|
fileAttributes,
|
|
49
50
|
...extractErrorInfo(error),
|
|
50
51
|
request: getRenderErrorRequestMetadata(error),
|
|
@@ -1,27 +1,6 @@
|
|
|
1
|
-
import React, { useEffect
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
* Using this approach, we can lazy load cards ABS_VIEWPORT_ANCHOR_OFFSET_TOP px before they enter viewport.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
export const ABS_VIEWPORT_ANCHOR_OFFSET_TOP = 900; //px
|
|
8
|
-
|
|
9
|
-
export const ViewportAnchor = /*#__PURE__*/forwardRef((props, ref) => {
|
|
10
|
-
if (typeof IntersectionObserver === 'undefined') {
|
|
11
|
-
return null;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
15
|
-
ref: ref,
|
|
16
|
-
className: "media-card-viewport-anchor",
|
|
17
|
-
style: {
|
|
18
|
-
position: 'absolute',
|
|
19
|
-
top: `${props.offsetTop}px`,
|
|
20
|
-
maxHeight: 0,
|
|
21
|
-
pointerEvents: 'none'
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
});
|
|
1
|
+
import React, { useEffect } from 'react';
|
|
2
|
+
import getDocument from './document';
|
|
3
|
+
const ABS_VIEWPORT_ANCHOR_OFFSET_TOP = 900; //px
|
|
25
4
|
|
|
26
5
|
const createIntersectionObserverCallback = onVisible => (entries, observer) => {
|
|
27
6
|
for (let entry of entries) {
|
|
@@ -36,27 +15,23 @@ const createIntersectionObserverCallback = onVisible => (entries, observer) => {
|
|
|
36
15
|
const ViewportObserver = ({
|
|
37
16
|
onVisible,
|
|
38
17
|
cardEl,
|
|
39
|
-
children
|
|
40
|
-
preAnchorRef,
|
|
41
|
-
postAnchorRef
|
|
18
|
+
children
|
|
42
19
|
}) => {
|
|
43
20
|
useEffect(() => {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
21
|
+
const intersectionObserver = new IntersectionObserver(createIntersectionObserverCallback(onVisible), {
|
|
22
|
+
root: getDocument(),
|
|
23
|
+
rootMargin: `${ABS_VIEWPORT_ANCHOR_OFFSET_TOP}px`
|
|
24
|
+
});
|
|
48
25
|
cardEl && intersectionObserver.observe(cardEl);
|
|
49
26
|
return () => {
|
|
50
27
|
intersectionObserver.disconnect();
|
|
51
28
|
};
|
|
52
|
-
}, [cardEl,
|
|
29
|
+
}, [cardEl, onVisible]);
|
|
53
30
|
return /*#__PURE__*/React.createElement(React.Fragment, null, children);
|
|
54
31
|
};
|
|
55
32
|
|
|
56
33
|
export const ViewportDetector = ({
|
|
57
34
|
cardEl,
|
|
58
|
-
preAnchorRef,
|
|
59
|
-
postAnchorRef,
|
|
60
35
|
onVisible,
|
|
61
36
|
children
|
|
62
37
|
}) => {
|
|
@@ -66,8 +41,6 @@ export const ViewportDetector = ({
|
|
|
66
41
|
|
|
67
42
|
return /*#__PURE__*/React.createElement(ViewportObserver, {
|
|
68
43
|
cardEl: cardEl,
|
|
69
|
-
preAnchorRef: preAnchorRef,
|
|
70
|
-
postAnchorRef: postAnchorRef,
|
|
71
44
|
onVisible: onVisible
|
|
72
45
|
}, children);
|
|
73
46
|
};
|
package/dist/es2019/version.json
CHANGED
package/dist/esm/errors.js
CHANGED
|
@@ -10,6 +10,10 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
|
|
|
10
10
|
|
|
11
11
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
12
12
|
|
|
13
|
+
/**
|
|
14
|
+
* Primary reason is logged through Data Portal.
|
|
15
|
+
* Make sure all the values are whitelisted in Measure -> Event Regitry -> "mediaCardRender failed" event
|
|
16
|
+
*/
|
|
13
17
|
export var MediaCardError = /*#__PURE__*/function (_Error) {
|
|
14
18
|
_inherits(MediaCardError, _Error);
|
|
15
19
|
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { fireMediaCardEvent, getRenderSucceededEventPayload, getRenderErrorEventPayload, getRenderFailedFileStatusPayload, getCopiedFilePayload, getRenderCommencedEventPayload, getRenderPreviewableCardPayload } from '../../utils/analytics';
|
|
2
|
-
|
|
2
|
+
import { MediaCardError } from './../../errors';
|
|
3
|
+
export var fireOperationalEvent = function fireOperationalEvent(createAnalyticsEvent, status, fileAttributes, performanceAttributes, ssrReliability) {
|
|
4
|
+
var error = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : new MediaCardError('missing-error-data');
|
|
5
|
+
|
|
3
6
|
var fireEvent = function fireEvent(payload) {
|
|
4
7
|
return fireMediaCardEvent(payload, createAnalyticsEvent);
|
|
5
8
|
};
|
|
@@ -14,7 +17,7 @@ export var fireOperationalEvent = function fireOperationalEvent(createAnalyticsE
|
|
|
14
17
|
break;
|
|
15
18
|
|
|
16
19
|
case 'error':
|
|
17
|
-
|
|
20
|
+
fireEvent(getRenderErrorEventPayload(fileAttributes, performanceAttributes, error, ssrReliability));
|
|
18
21
|
break;
|
|
19
22
|
}
|
|
20
23
|
};
|
|
@@ -13,6 +13,8 @@ import { getCardPreviewFromFilePreview, getCardPreviewFromBackend } from './help
|
|
|
13
13
|
import { MediaCardError, SsrPreviewError, isUnsupportedLocalPreviewError } from '../../../errors';
|
|
14
14
|
import { isBigger } from '../../../utils/dimensionComparer';
|
|
15
15
|
import { extractFilePreviewStatus, isPreviewableStatus } from './filePreviewStatus';
|
|
16
|
+
import { fireImageFetchingOperationalEvent, calculatePercentageDifference } from '../imageRefetchingAnalytics';
|
|
17
|
+
import { getMediaFeatureFlag } from '@atlaskit/media-common';
|
|
16
18
|
export { getCardPreviewFromFilePreview, getCardPreviewFromBackend, isSupportedLocalPreview } from './helpers';
|
|
17
19
|
export { extractFilePreviewStatus } from './filePreviewStatus';
|
|
18
20
|
export var getCardPreviewFromCache = cardPreviewCache.get;
|
|
@@ -75,48 +77,57 @@ var extendAndCachePreview = function extendAndCachePreview(id, mode, preview, me
|
|
|
75
77
|
|
|
76
78
|
export var getCardPreview = /*#__PURE__*/function () {
|
|
77
79
|
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref) {
|
|
78
|
-
var mediaClient, id, _ref$dimensions, dimensions, filePreview, onLocalPreviewError, isRemotePreviewReady, imageUrlParams, mediaBlobUrlAttrs, mode, cachedPreview, dimensionsAreBigger, localPreview;
|
|
80
|
+
var mediaClient, id, _ref$dimensions, dimensions, filePreview, onLocalPreviewError, isRemotePreviewReady, imageUrlParams, mediaBlobUrlAttrs, createAnalyticsEvent, featureFlags, mode, cachedPreview, dimensionsAreBigger, localPreview, remotePreview;
|
|
79
81
|
|
|
80
82
|
return _regeneratorRuntime.wrap(function _callee$(_context) {
|
|
81
83
|
while (1) {
|
|
82
84
|
switch (_context.prev = _context.next) {
|
|
83
85
|
case 0:
|
|
84
|
-
mediaClient = _ref.mediaClient, id = _ref.id, _ref$dimensions = _ref.dimensions, dimensions = _ref$dimensions === void 0 ? {} : _ref$dimensions, filePreview = _ref.filePreview, onLocalPreviewError = _ref.onLocalPreviewError, isRemotePreviewReady = _ref.isRemotePreviewReady, imageUrlParams = _ref.imageUrlParams, mediaBlobUrlAttrs = _ref.mediaBlobUrlAttrs;
|
|
86
|
+
mediaClient = _ref.mediaClient, id = _ref.id, _ref$dimensions = _ref.dimensions, dimensions = _ref$dimensions === void 0 ? {} : _ref$dimensions, filePreview = _ref.filePreview, onLocalPreviewError = _ref.onLocalPreviewError, isRemotePreviewReady = _ref.isRemotePreviewReady, imageUrlParams = _ref.imageUrlParams, mediaBlobUrlAttrs = _ref.mediaBlobUrlAttrs, createAnalyticsEvent = _ref.createAnalyticsEvent, featureFlags = _ref.featureFlags;
|
|
85
87
|
mode = imageUrlParams.mode;
|
|
86
88
|
cachedPreview = cardPreviewCache.get(id, mode);
|
|
87
89
|
dimensionsAreBigger = isBigger(cachedPreview === null || cachedPreview === void 0 ? void 0 : cachedPreview.dimensions, dimensions);
|
|
88
90
|
|
|
89
91
|
if (!(cachedPreview && !dimensionsAreBigger)) {
|
|
90
|
-
_context.next =
|
|
92
|
+
_context.next = 7;
|
|
91
93
|
break;
|
|
92
94
|
}
|
|
93
95
|
|
|
96
|
+
if (getMediaFeatureFlag('memoryCacheLogging', featureFlags)) {
|
|
97
|
+
createAnalyticsEvent && fireImageFetchingOperationalEvent(createAnalyticsEvent, 'cache-hit', {
|
|
98
|
+
fileId: id,
|
|
99
|
+
prevDimensions: cachedPreview.dimensions,
|
|
100
|
+
currentDimensions: dimensions,
|
|
101
|
+
source: cachedPreview.source
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
|
|
94
105
|
return _context.abrupt("return", cachedPreview);
|
|
95
106
|
|
|
96
|
-
case
|
|
97
|
-
_context.prev =
|
|
107
|
+
case 7:
|
|
108
|
+
_context.prev = 7;
|
|
98
109
|
|
|
99
110
|
if (!filePreview) {
|
|
100
|
-
_context.next =
|
|
111
|
+
_context.next = 13;
|
|
101
112
|
break;
|
|
102
113
|
}
|
|
103
114
|
|
|
104
|
-
_context.next =
|
|
115
|
+
_context.next = 11;
|
|
105
116
|
return getCardPreviewFromFilePreview(filePreview);
|
|
106
117
|
|
|
107
|
-
case
|
|
118
|
+
case 11:
|
|
108
119
|
localPreview = _context.sent;
|
|
109
120
|
return _context.abrupt("return", extendAndCachePreview(id, mode, _objectSpread(_objectSpread({}, localPreview), {}, {
|
|
110
121
|
dimensions: dimensions
|
|
111
122
|
}), mediaBlobUrlAttrs));
|
|
112
123
|
|
|
113
|
-
case
|
|
114
|
-
_context.next =
|
|
124
|
+
case 13:
|
|
125
|
+
_context.next = 20;
|
|
115
126
|
break;
|
|
116
127
|
|
|
117
|
-
case
|
|
118
|
-
_context.prev =
|
|
119
|
-
_context.t0 = _context["catch"](
|
|
128
|
+
case 15:
|
|
129
|
+
_context.prev = 15;
|
|
130
|
+
_context.t0 = _context["catch"](7);
|
|
120
131
|
|
|
121
132
|
/**
|
|
122
133
|
* We report the error if:
|
|
@@ -138,29 +149,45 @@ export var getCardPreview = /*#__PURE__*/function () {
|
|
|
138
149
|
|
|
139
150
|
|
|
140
151
|
if (isRemotePreviewReady) {
|
|
141
|
-
_context.next =
|
|
152
|
+
_context.next = 20;
|
|
142
153
|
break;
|
|
143
154
|
}
|
|
144
155
|
|
|
145
156
|
throw _context.t0;
|
|
146
157
|
|
|
147
|
-
case
|
|
158
|
+
case 20:
|
|
148
159
|
if (isRemotePreviewReady) {
|
|
149
|
-
_context.next =
|
|
160
|
+
_context.next = 22;
|
|
150
161
|
break;
|
|
151
162
|
}
|
|
152
163
|
|
|
153
164
|
throw new MediaCardError('remote-preview-not-ready');
|
|
154
165
|
|
|
155
|
-
case 21:
|
|
156
|
-
return _context.abrupt("return", fetchAndCacheRemotePreview(mediaClient, id, dimensions, imageUrlParams, mediaBlobUrlAttrs));
|
|
157
|
-
|
|
158
166
|
case 22:
|
|
167
|
+
_context.next = 24;
|
|
168
|
+
return fetchAndCacheRemotePreview(mediaClient, id, dimensions, imageUrlParams, mediaBlobUrlAttrs);
|
|
169
|
+
|
|
170
|
+
case 24:
|
|
171
|
+
remotePreview = _context.sent;
|
|
172
|
+
|
|
173
|
+
if (getMediaFeatureFlag('memoryCacheLogging', featureFlags)) {
|
|
174
|
+
createAnalyticsEvent && fireImageFetchingOperationalEvent(createAnalyticsEvent, 'remote-success', {
|
|
175
|
+
fileId: id,
|
|
176
|
+
prevDimensions: cachedPreview === null || cachedPreview === void 0 ? void 0 : cachedPreview.dimensions,
|
|
177
|
+
currentDimensions: dimensions,
|
|
178
|
+
dimensionsPercentageDiff: calculatePercentageDifference(cachedPreview === null || cachedPreview === void 0 ? void 0 : cachedPreview.dimensions, dimensions),
|
|
179
|
+
source: remotePreview.source
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
return _context.abrupt("return", remotePreview);
|
|
184
|
+
|
|
185
|
+
case 27:
|
|
159
186
|
case "end":
|
|
160
187
|
return _context.stop();
|
|
161
188
|
}
|
|
162
189
|
}
|
|
163
|
-
}, _callee, null, [[
|
|
190
|
+
}, _callee, null, [[7, 15]]);
|
|
164
191
|
}));
|
|
165
192
|
|
|
166
193
|
return function getCardPreview(_x) {
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { fireMediaCardEvent, getCacheHitEventPayload, getRemoteSuccessEventPayload } from '../../utils/analytics';
|
|
2
|
+
export var fireImageFetchingOperationalEvent = function fireImageFetchingOperationalEvent(createAnalyticsEvent, action, cardPreviewAttributes) {
|
|
3
|
+
var fireEvent = function fireEvent(payload) {
|
|
4
|
+
return fireMediaCardEvent(payload, createAnalyticsEvent);
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
switch (action) {
|
|
8
|
+
case 'cache-hit':
|
|
9
|
+
fireEvent(getCacheHitEventPayload(cardPreviewAttributes));
|
|
10
|
+
break;
|
|
11
|
+
|
|
12
|
+
case 'remote-success':
|
|
13
|
+
fireEvent(getRemoteSuccessEventPayload(cardPreviewAttributes));
|
|
14
|
+
break;
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
export var calculatePercentageDifference = function calculatePercentageDifference(prevDimensions, currentDimensions) {
|
|
18
|
+
if (!prevDimensions) {
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
var prevWidth = parseInt("".concat(prevDimensions === null || prevDimensions === void 0 ? void 0 : prevDimensions.width), 10);
|
|
23
|
+
var currWidth = parseInt("".concat(currentDimensions === null || currentDimensions === void 0 ? void 0 : currentDimensions.width), 10);
|
|
24
|
+
var prevHeight = parseInt("".concat(prevDimensions === null || prevDimensions === void 0 ? void 0 : prevDimensions.height), 10);
|
|
25
|
+
var currHeight = parseInt("".concat(currentDimensions === null || currentDimensions === void 0 ? void 0 : currentDimensions.height), 10);
|
|
26
|
+
var percentageDiffInWidth = ((currWidth - prevWidth) / prevWidth * 100).toFixed(2);
|
|
27
|
+
var percentageDiffInHeight = ((currHeight - prevHeight) / prevHeight * 100).toFixed(2);
|
|
28
|
+
return {
|
|
29
|
+
width: percentageDiffInWidth,
|
|
30
|
+
height: percentageDiffInHeight
|
|
31
|
+
};
|
|
32
|
+
};
|
|
@@ -17,7 +17,7 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
|
|
|
17
17
|
|
|
18
18
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
19
19
|
|
|
20
|
-
import React, { Component
|
|
20
|
+
import React, { Component } from 'react';
|
|
21
21
|
import ReactDOM from 'react-dom';
|
|
22
22
|
import { withAnalyticsEvents } from '@atlaskit/analytics-next';
|
|
23
23
|
import { withMediaAnalyticsContext } from '@atlaskit/media-common';
|
|
@@ -26,7 +26,7 @@ import { globalMediaEventEmitter, isDifferentIdentifier, isFileIdentifier, RECEN
|
|
|
26
26
|
import { MediaViewer } from '@atlaskit/media-viewer';
|
|
27
27
|
import { injectIntl, IntlProvider } from 'react-intl-next';
|
|
28
28
|
import { CardView } from '../cardView';
|
|
29
|
-
import {
|
|
29
|
+
import { ViewportDetector } from '../../utils/viewportDetector';
|
|
30
30
|
import { getRequestedDimensions } from '../../utils/getDataURIDimension';
|
|
31
31
|
import { getCardPreview, getCardPreviewFromCache, removeCardPreviewFromCache, getFilePreviewFromFileState, shouldResolvePreview, getSSRCardPreview, isLocalPreview, isSSRPreview, isSSRClientPreview, isSSRDataPreview, fetchAndCacheRemotePreview } from './getCardPreview';
|
|
32
32
|
import { getFileDetails } from '../../utils/metadata';
|
|
@@ -43,7 +43,7 @@ import { getMediaCardCursor } from '../../utils/getMediaCardCursor';
|
|
|
43
43
|
import { completeUfoExperience, startUfoExperience } from '../../utils/ufoExperiences';
|
|
44
44
|
import { generateUniqueId } from '../../utils/generateUniqueId';
|
|
45
45
|
var packageName = "@atlaskit/media-card";
|
|
46
|
-
var packageVersion = "74.
|
|
46
|
+
var packageVersion = "74.1.0";
|
|
47
47
|
export var CardBase = /*#__PURE__*/function (_Component) {
|
|
48
48
|
_inherits(CardBase, _Component);
|
|
49
49
|
|
|
@@ -69,10 +69,6 @@ export var CardBase = /*#__PURE__*/function (_Component) {
|
|
|
69
69
|
wasStatusProcessing: false
|
|
70
70
|
});
|
|
71
71
|
|
|
72
|
-
_defineProperty(_assertThisInitialized(_this), "viewportPreAnchorRef", /*#__PURE__*/createRef());
|
|
73
|
-
|
|
74
|
-
_defineProperty(_assertThisInitialized(_this), "viewportPostAnchorRef", /*#__PURE__*/createRef());
|
|
75
|
-
|
|
76
72
|
_defineProperty(_assertThisInitialized(_this), "ssrReliability", {
|
|
77
73
|
server: {
|
|
78
74
|
status: 'unknown'
|
|
@@ -125,7 +121,8 @@ export var CardBase = /*#__PURE__*/function (_Component) {
|
|
|
125
121
|
var _this$props2 = _this.props,
|
|
126
122
|
_this$props2$dimensio = _this$props2.dimensions,
|
|
127
123
|
dimensions = _this$props2$dimensio === void 0 ? {} : _this$props2$dimensio,
|
|
128
|
-
mediaClient = _this$props2.mediaClient
|
|
124
|
+
mediaClient = _this$props2.mediaClient,
|
|
125
|
+
createAnalyticsEvent = _this$props2.createAnalyticsEvent;
|
|
129
126
|
return {
|
|
130
127
|
mediaClient: mediaClient,
|
|
131
128
|
id: id,
|
|
@@ -134,7 +131,9 @@ export var CardBase = /*#__PURE__*/function (_Component) {
|
|
|
134
131
|
filePreview: isBannedLocalPreview ? undefined : getFilePreviewFromFileState(fileState),
|
|
135
132
|
isRemotePreviewReady: isImageRepresentationReady(fileState),
|
|
136
133
|
imageUrlParams: _this.getImageURLParams(identifier),
|
|
137
|
-
mediaBlobUrlAttrs: _this.getMediaBlobUrlAttrs(identifier, fileState)
|
|
134
|
+
mediaBlobUrlAttrs: _this.getMediaBlobUrlAttrs(identifier, fileState),
|
|
135
|
+
createAnalyticsEvent: createAnalyticsEvent,
|
|
136
|
+
featureFlags: _this.props.featureFlags
|
|
138
137
|
};
|
|
139
138
|
});
|
|
140
139
|
|
|
@@ -605,16 +604,8 @@ export var CardBase = /*#__PURE__*/function (_Component) {
|
|
|
605
604
|
});
|
|
606
605
|
return isLazy ? /*#__PURE__*/React.createElement(ViewportDetector, {
|
|
607
606
|
cardEl: cardRef,
|
|
608
|
-
preAnchorRef: _this.viewportPreAnchorRef,
|
|
609
|
-
postAnchorRef: _this.viewportPostAnchorRef,
|
|
610
607
|
onVisible: _this.onCardInViewport
|
|
611
|
-
},
|
|
612
|
-
ref: _this.viewportPreAnchorRef,
|
|
613
|
-
offsetTop: -ABS_VIEWPORT_ANCHOR_OFFSET_TOP
|
|
614
|
-
}), card, /*#__PURE__*/React.createElement(ViewportAnchor, {
|
|
615
|
-
ref: _this.viewportPostAnchorRef,
|
|
616
|
-
offsetTop: ABS_VIEWPORT_ANCHOR_OFFSET_TOP
|
|
617
|
-
})) : card;
|
|
608
|
+
}, card) : card;
|
|
618
609
|
});
|
|
619
610
|
|
|
620
611
|
_defineProperty(_assertThisInitialized(_this), "storeSSRData", function () {
|
|
@@ -748,6 +739,8 @@ export var CardBase = /*#__PURE__*/function (_Component) {
|
|
|
748
739
|
_createClass(CardBase, [{
|
|
749
740
|
key: "componentDidMount",
|
|
750
741
|
value: function componentDidMount() {
|
|
742
|
+
var _getDocument;
|
|
743
|
+
|
|
751
744
|
this.hasBeenMounted = true;
|
|
752
745
|
var _this$state3 = this.state,
|
|
753
746
|
isCardVisible = _this$state3.isCardVisible,
|
|
@@ -781,7 +774,7 @@ export var CardBase = /*#__PURE__*/function (_Component) {
|
|
|
781
774
|
// won't work in IE11
|
|
782
775
|
|
|
783
776
|
|
|
784
|
-
getDocument().addEventListener('copy', this.fireCopiedEvent);
|
|
777
|
+
(_getDocument = getDocument()) === null || _getDocument === void 0 ? void 0 : _getDocument.addEventListener('copy', this.fireCopiedEvent);
|
|
785
778
|
}
|
|
786
779
|
}, {
|
|
787
780
|
key: "componentDidUpdate",
|
|
@@ -876,9 +869,11 @@ export var CardBase = /*#__PURE__*/function (_Component) {
|
|
|
876
869
|
}, {
|
|
877
870
|
key: "componentWillUnmount",
|
|
878
871
|
value: function componentWillUnmount() {
|
|
872
|
+
var _getDocument2;
|
|
873
|
+
|
|
879
874
|
this.hasBeenMounted = false;
|
|
880
875
|
this.unsubscribe();
|
|
881
|
-
getDocument().removeEventListener('copy', this.fireCopiedEvent);
|
|
876
|
+
(_getDocument2 = getDocument()) === null || _getDocument2 === void 0 ? void 0 : _getDocument2.removeEventListener('copy', this.fireCopiedEvent);
|
|
882
877
|
}
|
|
883
878
|
}, {
|
|
884
879
|
key: "updateStateForIdentifier",
|
|
@@ -15,7 +15,8 @@ var relevantFlags = {
|
|
|
15
15
|
observedWidth: true,
|
|
16
16
|
mediaInline: false,
|
|
17
17
|
folderUploads: false,
|
|
18
|
-
mediaUploadApiV2: true
|
|
18
|
+
mediaUploadApiV2: true,
|
|
19
|
+
memoryCacheLogging: true
|
|
19
20
|
};
|
|
20
21
|
export var LOGGED_FEATURE_FLAGS = filterFeatureFlagNames(relevantFlags);
|
|
21
22
|
export var LOGGED_FEATURE_FLAG_KEYS = filterFeatureFlagKeysAllProducts(relevantFlags);
|
|
@@ -64,6 +65,26 @@ export var getRenderSucceededEventPayload = function getRenderSucceededEventPayl
|
|
|
64
65
|
}
|
|
65
66
|
};
|
|
66
67
|
};
|
|
68
|
+
export var getCacheHitEventPayload = function getCacheHitEventPayload(cardPreviewAttributes) {
|
|
69
|
+
return {
|
|
70
|
+
eventType: 'operational',
|
|
71
|
+
action: 'cache-hit',
|
|
72
|
+
actionSubject: 'mediaCardCache',
|
|
73
|
+
attributes: {
|
|
74
|
+
cardPreviewAttributes: cardPreviewAttributes
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
export var getRemoteSuccessEventPayload = function getRemoteSuccessEventPayload(cardPreviewAttributes) {
|
|
79
|
+
return {
|
|
80
|
+
eventType: 'operational',
|
|
81
|
+
action: 'Remote-success',
|
|
82
|
+
actionSubject: 'mediaCardCache',
|
|
83
|
+
attributes: {
|
|
84
|
+
cardPreviewAttributes: cardPreviewAttributes
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
};
|
|
67
88
|
export var getRenderFailedExternalUriPayload = function getRenderFailedExternalUriPayload(fileAttributes, performanceAttributes) {
|
|
68
89
|
return {
|
|
69
90
|
eventType: 'operational',
|
|
@@ -6,9 +6,10 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
|
6
6
|
|
|
7
7
|
import { ConcurrentExperience, ExperiencePerformanceTypes, ExperienceTypes } from '@atlaskit/ufo';
|
|
8
8
|
import { extractErrorInfo, getRenderErrorRequestMetadata, LOGGED_FEATURE_FLAG_KEYS } from './analytics';
|
|
9
|
+
import { MediaCardError } from '../errors';
|
|
9
10
|
import { getMediaEnvironment, getMediaRegion } from '@atlaskit/media-client';
|
|
10
11
|
var packageName = "@atlaskit/media-card";
|
|
11
|
-
var packageVersion = "74.
|
|
12
|
+
var packageVersion = "74.1.0";
|
|
12
13
|
var concurrentExperience;
|
|
13
14
|
|
|
14
15
|
var getExperience = function getExperience(id) {
|
|
@@ -30,7 +31,9 @@ var getExperience = function getExperience(id) {
|
|
|
30
31
|
export var startUfoExperience = function startUfoExperience(id) {
|
|
31
32
|
getExperience(id).start();
|
|
32
33
|
};
|
|
33
|
-
export var completeUfoExperience = function completeUfoExperience(id, status, fileAttributes, fileStateFlags, ssrReliability
|
|
34
|
+
export var completeUfoExperience = function completeUfoExperience(id, status, fileAttributes, fileStateFlags, ssrReliability) {
|
|
35
|
+
var error = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : new MediaCardError('missing-error-data');
|
|
36
|
+
|
|
34
37
|
switch (status) {
|
|
35
38
|
case 'complete':
|
|
36
39
|
succeedUfoExperience(id, {
|
|
@@ -50,7 +53,7 @@ export var completeUfoExperience = function completeUfoExperience(id, status, fi
|
|
|
50
53
|
break;
|
|
51
54
|
|
|
52
55
|
case 'error':
|
|
53
|
-
|
|
56
|
+
failUfoExperience(id, _objectSpread(_objectSpread({
|
|
54
57
|
fileAttributes: fileAttributes
|
|
55
58
|
}, extractErrorInfo(error)), {}, {
|
|
56
59
|
request: getRenderErrorRequestMetadata(error),
|