@atlaskit/media-card 74.5.1 → 74.6.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 +17 -0
- package/dist/cjs/card/actions.js +0 -5
- package/dist/cjs/card/card.js +263 -322
- package/dist/cjs/card/cardAnalytics.js +0 -18
- package/dist/cjs/card/cardImageView/cardImageViewWrapper.js +7 -16
- package/dist/cjs/card/cardImageView/cardOverlay/cardOverlayComponents.js +3 -15
- package/dist/cjs/card/cardImageView/cardOverlay/index.js +20 -52
- package/dist/cjs/card/cardImageView/cardOverlay/styles.js +1 -19
- package/dist/cjs/card/cardImageView/cardViewWrapper.js +7 -10
- package/dist/cjs/card/cardImageView/fileCardImageView.js +66 -111
- package/dist/cjs/card/cardImageView/index.js +0 -1
- package/dist/cjs/card/cardImageView/styles.js +0 -14
- package/dist/cjs/card/cardLoader.js +3 -20
- package/dist/cjs/card/cardState.js +0 -9
- package/dist/cjs/card/cardView.js +105 -198
- package/dist/cjs/card/getCardPreview/cache.js +0 -12
- package/dist/cjs/card/getCardPreview/filePreviewStatus.js +8 -16
- package/dist/cjs/card/getCardPreview/helpers.js +0 -39
- package/dist/cjs/card/getCardPreview/imageRefetchingAnalytics.js +0 -8
- package/dist/cjs/card/getCardPreview/index.js +19 -86
- package/dist/cjs/card/getCardStatus.js +5 -24
- package/dist/cjs/card/index.js +0 -2
- package/dist/cjs/card/inlinePlayer.js +19 -102
- package/dist/cjs/card/inlinePlayerLazy.js +0 -11
- package/dist/cjs/card/inlinePlayerWrapper.js +5 -8
- package/dist/cjs/card/media-card-analytics-error-boundary.js +6 -34
- package/dist/cjs/card/styles/animations.js +0 -5
- package/dist/cjs/card/styles/getSelectedBorderStyle.js +0 -4
- package/dist/cjs/card/styles/index.js +0 -14
- package/dist/cjs/card/styles/mixins.js +0 -11
- package/dist/cjs/card/styles/styles.js +4 -20
- package/dist/cjs/card/ui/actionsBar/actionsBar.js +2 -20
- package/dist/cjs/card/ui/actionsBar/actionsBarWrapper.js +1 -4
- package/dist/cjs/card/ui/actionsBar/styles.js +0 -8
- package/dist/cjs/card/ui/blanket/blanket.js +1 -4
- package/dist/cjs/card/ui/blanket/styles.js +0 -9
- package/dist/cjs/card/ui/common.js +0 -8
- package/dist/cjs/card/ui/iconMessage/iconMessageWrapper.js +2 -5
- package/dist/cjs/card/ui/iconMessage/index.js +4 -22
- package/dist/cjs/card/ui/iconMessage/styles.js +1 -10
- package/dist/cjs/card/ui/iconWrapper/iconWrapper.js +2 -5
- package/dist/cjs/card/ui/iconWrapper/styles.js +3 -11
- package/dist/cjs/card/ui/imageRenderer/imageRenderer.js +8 -21
- package/dist/cjs/card/ui/loadingRateLimited/styles.js +1 -10
- package/dist/cjs/card/ui/newFileExperience/newFileExperienceWrapper.js +14 -19
- package/dist/cjs/card/ui/newFileExperience/styles.js +10 -26
- package/dist/cjs/card/ui/playButton/playButton.js +0 -7
- package/dist/cjs/card/ui/playButton/playButtonBackground.js +1 -4
- package/dist/cjs/card/ui/playButton/playButtonWrapper.js +1 -4
- package/dist/cjs/card/ui/playButton/styles.js +0 -6
- package/dist/cjs/card/ui/progressBar/progressBar.js +6 -14
- package/dist/cjs/card/ui/progressBar/styledBar.js +4 -7
- package/dist/cjs/card/ui/progressBar/styles.js +4 -18
- package/dist/cjs/card/ui/styles.js +12 -46
- package/dist/cjs/card/ui/tickBox/styles.js +0 -11
- package/dist/cjs/card/ui/tickBox/tickBox.js +0 -6
- package/dist/cjs/card/ui/tickBox/tickBoxWrapper.js +1 -4
- package/dist/cjs/card/ui/titleBox/failedTitleBox.js +2 -11
- package/dist/cjs/card/ui/titleBox/styles.js +4 -19
- package/dist/cjs/card/ui/titleBox/titleBox.js +9 -21
- package/dist/cjs/card/ui/titleBox/titleBoxComponents.js +2 -14
- package/dist/cjs/card/ui/unhandledErrorCard/index.js +6 -36
- package/dist/cjs/classnames.js +0 -1
- package/dist/cjs/errors.js +7 -66
- package/dist/cjs/index.js +0 -8
- package/dist/cjs/inline/index.js +0 -2
- package/dist/cjs/inline/loader.js +2 -43
- package/dist/cjs/inline/mediaInlineAnalyticsErrorBoundary.js +4 -29
- package/dist/cjs/inline/mediaInlineCard.js +21 -57
- package/dist/cjs/types.js +0 -2
- package/dist/cjs/utils/analytics.js +0 -49
- package/dist/cjs/utils/breakpoint.js +0 -10
- package/dist/cjs/utils/cardActions/cardActionButton.js +1 -4
- package/dist/cjs/utils/cardActions/cardActionIconButton.js +7 -29
- package/dist/cjs/utils/cardActions/cardActionsDropdownMenu.js +6 -35
- package/dist/cjs/utils/cardActions/cardActionsView.js +7 -34
- package/dist/cjs/utils/cardActions/index.js +0 -4
- package/dist/cjs/utils/cardActions/styles.js +0 -13
- package/dist/cjs/utils/cardDimensions.js +5 -22
- package/dist/cjs/utils/containsPixelUnit.js +0 -2
- package/dist/cjs/utils/dimensionComparer.js +0 -8
- package/dist/cjs/utils/document.js +0 -4
- package/dist/cjs/utils/errorIcon/index.js +0 -18
- package/dist/cjs/utils/errorIcon/styles.js +0 -5
- package/dist/cjs/utils/fileIcon/index.js +3 -21
- package/dist/cjs/utils/fileIcon/styles.js +0 -6
- package/dist/cjs/utils/generateUniqueId.js +0 -2
- package/dist/cjs/utils/getCSSUnitValue.js +0 -1
- package/dist/cjs/utils/getDataURIDimension.js +0 -13
- package/dist/cjs/utils/getElementDimension.js +0 -2
- package/dist/cjs/utils/getErrorMessage.js +0 -6
- package/dist/cjs/utils/getMediaCardCursor.js +1 -6
- package/dist/cjs/utils/globalScope/getSSRData.js +0 -5
- package/dist/cjs/utils/globalScope/globalScope.js +8 -25
- package/dist/cjs/utils/globalScope/index.js +0 -2
- package/dist/cjs/utils/index.js +0 -12
- package/dist/cjs/utils/isRetina.js +0 -1
- package/dist/cjs/utils/isValidPercentageUnit.js +0 -2
- package/dist/cjs/utils/lightCards/cardError.js +0 -21
- package/dist/cjs/utils/lightCards/cardLoading.js +3 -27
- package/dist/cjs/utils/lightCards/getDimensionsWithDefault.js +0 -2
- package/dist/cjs/utils/lightCards/lightCardWrappers.js +1 -9
- package/dist/cjs/utils/lightCards/styles.js +1 -13
- package/dist/cjs/utils/metadata.js +0 -7
- package/dist/cjs/utils/objectURLCache.js +0 -22
- package/dist/cjs/utils/preventClickThrough.js +0 -5
- package/dist/cjs/utils/printScript.js +0 -10
- package/dist/cjs/utils/progressBar/index.js +0 -17
- package/dist/cjs/utils/progressBar/styles.js +0 -6
- package/dist/cjs/utils/resizeModeToMediaImageProps.js +0 -1
- package/dist/cjs/utils/shouldDisplayImageThumbnail.js +0 -5
- package/dist/cjs/utils/ufoExperiences.js +1 -21
- package/dist/cjs/utils/videoSnapshot.js +2 -11
- package/dist/cjs/utils/viewportDetector.js +5 -24
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/card/actions.js +2 -1
- package/dist/es2019/card/card.js +115 -156
- package/dist/es2019/card/cardAnalytics.js +0 -5
- package/dist/es2019/card/cardImageView/cardOverlay/index.js +2 -16
- package/dist/es2019/card/cardImageView/cardOverlay/styles.js +1 -2
- package/dist/es2019/card/cardImageView/fileCardImageView.js +3 -36
- package/dist/es2019/card/cardImageView/styles.js +0 -3
- package/dist/es2019/card/cardLoader.js +3 -14
- package/dist/es2019/card/cardState.js +1 -2
- package/dist/es2019/card/cardView.js +24 -68
- package/dist/es2019/card/getCardPreview/cache.js +0 -4
- package/dist/es2019/card/getCardPreview/filePreviewStatus.js +8 -5
- package/dist/es2019/card/getCardPreview/helpers.js +0 -9
- package/dist/es2019/card/getCardPreview/imageRefetchingAnalytics.js +0 -3
- package/dist/es2019/card/getCardPreview/index.js +20 -32
- package/dist/es2019/card/getCardStatus.js +2 -15
- package/dist/es2019/card/inlinePlayer.js +2 -35
- package/dist/es2019/card/inlinePlayerLazy.js +1 -2
- package/dist/es2019/card/media-card-analytics-error-boundary.js +1 -15
- package/dist/es2019/card/styles/getSelectedBorderStyle.js +1 -1
- package/dist/es2019/card/styles/styles.js +0 -3
- package/dist/es2019/card/ui/actionsBar/actionsBar.js +0 -3
- package/dist/es2019/card/ui/common.js +0 -2
- package/dist/es2019/card/ui/iconMessage/styles.js +0 -2
- package/dist/es2019/card/ui/iconWrapper/styles.js +2 -2
- package/dist/es2019/card/ui/imageRenderer/imageRenderer.js +0 -3
- package/dist/es2019/card/ui/progressBar/styles.js +1 -3
- package/dist/es2019/card/ui/styles.js +3 -4
- package/dist/es2019/card/ui/titleBox/styles.js +2 -3
- package/dist/es2019/card/ui/unhandledErrorCard/index.js +0 -8
- package/dist/es2019/errors.js +8 -17
- package/dist/es2019/index.js +1 -0
- package/dist/es2019/inline/loader.js +1 -18
- package/dist/es2019/inline/mediaInlineAnalyticsErrorBoundary.js +1 -12
- package/dist/es2019/inline/mediaInlineCard.js +0 -15
- package/dist/es2019/types.js +1 -1
- package/dist/es2019/utils/analytics.js +0 -3
- package/dist/es2019/utils/breakpoint.js +0 -4
- package/dist/es2019/utils/cardActions/cardActionIconButton.js +3 -5
- package/dist/es2019/utils/cardActions/cardActionsDropdownMenu.js +0 -5
- package/dist/es2019/utils/cardActions/cardActionsView.js +0 -10
- package/dist/es2019/utils/cardActions/styles.js +0 -3
- package/dist/es2019/utils/cardDimensions.js +7 -14
- package/dist/es2019/utils/dimensionComparer.js +0 -3
- package/dist/es2019/utils/document.js +0 -2
- package/dist/es2019/utils/errorIcon/index.js +0 -3
- package/dist/es2019/utils/fileIcon/index.js +0 -1
- package/dist/es2019/utils/getDataURIDimension.js +0 -4
- package/dist/es2019/utils/getMediaCardCursor.js +1 -4
- package/dist/es2019/utils/globalScope/getSSRData.js +0 -2
- package/dist/es2019/utils/globalScope/globalScope.js +3 -10
- package/dist/es2019/utils/lightCards/cardError.js +0 -3
- package/dist/es2019/utils/lightCards/cardLoading.js +0 -3
- package/dist/es2019/utils/lightCards/lightCardWrappers.js +0 -1
- package/dist/es2019/utils/metadata.js +0 -5
- package/dist/es2019/utils/objectURLCache.js +0 -10
- package/dist/es2019/utils/printScript.js +0 -3
- package/dist/es2019/utils/progressBar/index.js +0 -2
- package/dist/es2019/utils/shouldDisplayImageThumbnail.js +0 -2
- package/dist/es2019/utils/ufoExperiences.js +5 -10
- package/dist/es2019/utils/videoSnapshot.js +2 -4
- package/dist/es2019/utils/viewportDetector.js +0 -5
- package/dist/es2019/version.json +1 -1
- package/dist/esm/card/actions.js +0 -3
- package/dist/esm/card/card.js +263 -316
- package/dist/esm/card/cardAnalytics.js +0 -6
- package/dist/esm/card/cardImageView/cardImageViewWrapper.js +6 -6
- package/dist/esm/card/cardImageView/cardOverlay/cardOverlayComponents.js +2 -2
- package/dist/esm/card/cardImageView/cardOverlay/index.js +22 -37
- package/dist/esm/card/cardImageView/cardOverlay/styles.js +2 -6
- package/dist/esm/card/cardImageView/cardViewWrapper.js +6 -6
- package/dist/esm/card/cardImageView/fileCardImageView.js +66 -104
- package/dist/esm/card/cardImageView/styles.js +0 -5
- package/dist/esm/card/cardLoader.js +6 -17
- package/dist/esm/card/cardState.js +1 -2
- package/dist/esm/card/cardView.js +105 -171
- package/dist/esm/card/getCardPreview/cache.js +0 -7
- package/dist/esm/card/getCardPreview/filePreviewStatus.js +11 -11
- package/dist/esm/card/getCardPreview/helpers.js +0 -28
- package/dist/esm/card/getCardPreview/imageRefetchingAnalytics.js +0 -3
- package/dist/esm/card/getCardPreview/index.js +19 -54
- package/dist/esm/card/getCardStatus.js +5 -20
- package/dist/esm/card/inlinePlayer.js +19 -85
- package/dist/esm/card/inlinePlayerLazy.js +1 -5
- package/dist/esm/card/inlinePlayerWrapper.js +4 -4
- package/dist/esm/card/media-card-analytics-error-boundary.js +6 -28
- package/dist/esm/card/styles/animations.js +0 -2
- package/dist/esm/card/styles/getSelectedBorderStyle.js +1 -1
- package/dist/esm/card/styles/index.js +0 -2
- package/dist/esm/card/styles/styles.js +4 -9
- package/dist/esm/card/ui/actionsBar/actionsBar.js +2 -12
- package/dist/esm/card/ui/actionsBar/styles.js +0 -2
- package/dist/esm/card/ui/blanket/styles.js +0 -2
- package/dist/esm/card/ui/common.js +0 -4
- package/dist/esm/card/ui/iconMessage/iconMessageWrapper.js +1 -1
- package/dist/esm/card/ui/iconMessage/index.js +4 -4
- package/dist/esm/card/ui/iconMessage/styles.js +1 -5
- package/dist/esm/card/ui/iconWrapper/iconWrapper.js +1 -1
- package/dist/esm/card/ui/iconWrapper/styles.js +3 -5
- package/dist/esm/card/ui/imageRenderer/imageRenderer.js +8 -11
- package/dist/esm/card/ui/loadingRateLimited/styles.js +1 -3
- package/dist/esm/card/ui/newFileExperience/newFileExperienceWrapper.js +13 -13
- package/dist/esm/card/ui/newFileExperience/styles.js +10 -12
- package/dist/esm/card/ui/playButton/styles.js +0 -2
- package/dist/esm/card/ui/progressBar/progressBar.js +6 -6
- package/dist/esm/card/ui/progressBar/styledBar.js +3 -3
- package/dist/esm/card/ui/progressBar/styles.js +4 -8
- package/dist/esm/card/ui/styles.js +12 -20
- package/dist/esm/card/ui/tickBox/styles.js +0 -2
- package/dist/esm/card/ui/titleBox/failedTitleBox.js +2 -2
- package/dist/esm/card/ui/titleBox/styles.js +4 -7
- package/dist/esm/card/ui/titleBox/titleBox.js +9 -11
- package/dist/esm/card/ui/titleBox/titleBoxComponents.js +1 -1
- package/dist/esm/card/ui/unhandledErrorCard/index.js +6 -24
- package/dist/esm/errors.js +8 -40
- package/dist/esm/index.js +1 -0
- package/dist/esm/inline/loader.js +3 -40
- package/dist/esm/inline/mediaInlineAnalyticsErrorBoundary.js +4 -23
- package/dist/esm/inline/mediaInlineCard.js +21 -40
- package/dist/esm/types.js +1 -1
- package/dist/esm/utils/analytics.js +0 -6
- package/dist/esm/utils/breakpoint.js +0 -5
- package/dist/esm/utils/cardActions/cardActionIconButton.js +7 -18
- package/dist/esm/utils/cardActions/cardActionsDropdownMenu.js +6 -19
- package/dist/esm/utils/cardActions/cardActionsView.js +7 -22
- package/dist/esm/utils/cardActions/styles.js +0 -5
- package/dist/esm/utils/cardDimensions.js +7 -14
- package/dist/esm/utils/dimensionComparer.js +0 -3
- package/dist/esm/utils/document.js +0 -2
- package/dist/esm/utils/errorIcon/index.js +0 -9
- package/dist/esm/utils/errorIcon/styles.js +0 -2
- package/dist/esm/utils/fileIcon/index.js +3 -11
- package/dist/esm/utils/fileIcon/styles.js +0 -2
- package/dist/esm/utils/getDataURIDimension.js +0 -4
- package/dist/esm/utils/getMediaCardCursor.js +1 -4
- package/dist/esm/utils/globalScope/getSSRData.js +0 -2
- package/dist/esm/utils/globalScope/globalScope.js +8 -15
- package/dist/esm/utils/lightCards/cardError.js +0 -9
- package/dist/esm/utils/lightCards/cardLoading.js +3 -13
- package/dist/esm/utils/lightCards/lightCardWrappers.js +0 -1
- package/dist/esm/utils/lightCards/styles.js +1 -3
- package/dist/esm/utils/metadata.js +0 -5
- package/dist/esm/utils/objectURLCache.js +0 -15
- package/dist/esm/utils/printScript.js +0 -5
- package/dist/esm/utils/progressBar/index.js +0 -9
- package/dist/esm/utils/progressBar/styles.js +0 -2
- package/dist/esm/utils/shouldDisplayImageThumbnail.js +0 -2
- package/dist/esm/utils/ufoExperiences.js +1 -12
- package/dist/esm/utils/videoSnapshot.js +2 -6
- package/dist/esm/utils/viewportDetector.js +5 -16
- package/dist/esm/version.json +1 -1
- package/dist/types/card/card.d.ts +3 -0
- package/dist/types/card/getCardPreview/index.d.ts +2 -1
- package/dist/types/types.d.ts +1 -0
- package/package.json +6 -4
- package/report.api.md +2 -0
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
-
|
|
3
2
|
/** @jsx jsx */
|
|
4
3
|
import { jsx } from '@emotion/react';
|
|
5
4
|
import React from 'react';
|
|
@@ -33,7 +32,6 @@ import { PreviewUnavailable, CreatingPreview, FailedToUpload, PreviewCurrentlyUn
|
|
|
33
32
|
import { isUploadError } from '../errors';
|
|
34
33
|
import { NewFileExperienceWrapper } from './ui/newFileExperience/newFileExperienceWrapper';
|
|
35
34
|
import { Wrapper } from './cardImageView/cardViewWrapper';
|
|
36
|
-
|
|
37
35
|
/**
|
|
38
36
|
* This is classic vanilla CardView class. To create an instance of class one would need to supply
|
|
39
37
|
* `createAnalyticsEvent` prop to satisfy it's Analytics Events needs.
|
|
@@ -41,22 +39,19 @@ import { Wrapper } from './cardImageView/cardViewWrapper';
|
|
|
41
39
|
export class CardViewBase extends React.Component {
|
|
42
40
|
constructor(...args) {
|
|
43
41
|
super(...args);
|
|
44
|
-
|
|
45
42
|
_defineProperty(this, "state", {
|
|
46
43
|
didImageRender: false
|
|
47
44
|
});
|
|
48
|
-
|
|
49
45
|
_defineProperty(this, "divRef", /*#__PURE__*/React.createRef());
|
|
50
|
-
|
|
51
46
|
_defineProperty(this, "onImageLoad", prevCardPreview => {
|
|
52
47
|
const {
|
|
53
48
|
onImageLoad,
|
|
54
49
|
cardPreview
|
|
55
50
|
} = this.props;
|
|
56
|
-
|
|
57
51
|
if (prevCardPreview.dataURI !== (cardPreview === null || cardPreview === void 0 ? void 0 : cardPreview.dataURI)) {
|
|
58
52
|
return;
|
|
59
|
-
}
|
|
53
|
+
}
|
|
54
|
+
// We render the icon & icon message always, even if there is cardPreview available.
|
|
60
55
|
// If the image fails to load/render, the icon will remain, i.e. the user won't see a change until
|
|
61
56
|
// the root card decides to chage status to error.
|
|
62
57
|
// If the image renders successfully, we switch this variable to hide the icon & icon message
|
|
@@ -64,14 +59,11 @@ export class CardViewBase extends React.Component {
|
|
|
64
59
|
// It is less likely that root component replaces a suceeded cardPreview for a failed one
|
|
65
60
|
// than the opposite case. Therefore we prefer to hide the icon instead show when the image fails,
|
|
66
61
|
// for a smoother transition
|
|
67
|
-
|
|
68
|
-
|
|
69
62
|
this.setState({
|
|
70
63
|
didImageRender: true
|
|
71
64
|
});
|
|
72
65
|
onImageLoad && onImageLoad(cardPreview);
|
|
73
66
|
});
|
|
74
|
-
|
|
75
67
|
_defineProperty(this, "onImageError", cardPreview => {
|
|
76
68
|
const {
|
|
77
69
|
onImageError
|
|
@@ -81,20 +73,16 @@ export class CardViewBase extends React.Component {
|
|
|
81
73
|
});
|
|
82
74
|
onImageError && onImageError(cardPreview);
|
|
83
75
|
});
|
|
84
|
-
|
|
85
76
|
_defineProperty(this, "saveElementWidth", () => {
|
|
86
77
|
const {
|
|
87
78
|
dimensions
|
|
88
79
|
} = this.props;
|
|
89
|
-
|
|
90
80
|
if (!dimensions) {
|
|
91
81
|
return;
|
|
92
82
|
}
|
|
93
|
-
|
|
94
83
|
const {
|
|
95
84
|
width
|
|
96
85
|
} = dimensions;
|
|
97
|
-
|
|
98
86
|
if (width && isValidPercentageUnit(width) && !!this.divRef.current) {
|
|
99
87
|
const elementWidth = getElementDimension(this.divRef.current, 'width');
|
|
100
88
|
this.setState({
|
|
@@ -102,7 +90,6 @@ export class CardViewBase extends React.Component {
|
|
|
102
90
|
});
|
|
103
91
|
}
|
|
104
92
|
});
|
|
105
|
-
|
|
106
93
|
_defineProperty(this, "renderFileNewExperience", () => {
|
|
107
94
|
const {
|
|
108
95
|
dimensions,
|
|
@@ -123,8 +110,8 @@ export class CardViewBase extends React.Component {
|
|
|
123
110
|
} = metadata || {};
|
|
124
111
|
const shouldDisplayBackground = !cardPreview || !disableOverlay || status === 'error' || status === 'failed-processing';
|
|
125
112
|
const isPlayButtonClickable = !!(this.shouldRenderPlayButton() && disableOverlay);
|
|
126
|
-
const isTickBoxSelectable = !disableOverlay && !!selectable && !selected;
|
|
127
|
-
|
|
113
|
+
const isTickBoxSelectable = !disableOverlay && !!selectable && !selected;
|
|
114
|
+
// Disable tooltip for Media Single
|
|
128
115
|
const shouldDisplayTooltip = !disableOverlay;
|
|
129
116
|
return jsx(NewFileExperienceWrapper, {
|
|
130
117
|
testId: testId || 'media-card-view',
|
|
@@ -147,7 +134,6 @@ export class CardViewBase extends React.Component {
|
|
|
147
134
|
tag: 'div'
|
|
148
135
|
}, this.renderNewExperienceCard()) : this.renderNewExperienceCard());
|
|
149
136
|
});
|
|
150
|
-
|
|
151
137
|
_defineProperty(this, "renderFile", () => {
|
|
152
138
|
const {
|
|
153
139
|
cardPreview,
|
|
@@ -201,7 +187,6 @@ export class CardViewBase extends React.Component {
|
|
|
201
187
|
cardPreview: cardPreview
|
|
202
188
|
});
|
|
203
189
|
});
|
|
204
|
-
|
|
205
190
|
_defineProperty(this, "getRenderConfigByStatus", () => {
|
|
206
191
|
const {
|
|
207
192
|
cardPreview,
|
|
@@ -228,28 +213,27 @@ export class CardViewBase extends React.Component {
|
|
|
228
213
|
renderTitleBox: !disableOverlay && !!name,
|
|
229
214
|
renderTickBox: !disableOverlay && !!selectable
|
|
230
215
|
};
|
|
231
|
-
|
|
232
216
|
switch (status) {
|
|
233
217
|
case 'uploading':
|
|
234
|
-
return {
|
|
218
|
+
return {
|
|
219
|
+
...defaultConfig,
|
|
235
220
|
renderBlanket: !disableOverlay || mediaType !== 'video',
|
|
236
221
|
isFixedBlanket: true,
|
|
237
222
|
renderProgressBar: true
|
|
238
223
|
};
|
|
239
|
-
|
|
240
224
|
case 'processing':
|
|
241
|
-
return {
|
|
225
|
+
return {
|
|
226
|
+
...defaultConfig,
|
|
242
227
|
iconMessage: !didImageRender && !isZeroSize ? jsx(CreatingPreview, {
|
|
243
228
|
disableAnimation: disableAnimation
|
|
244
229
|
}) : undefined
|
|
245
230
|
};
|
|
246
|
-
|
|
247
231
|
case 'complete':
|
|
248
232
|
return defaultConfig;
|
|
249
|
-
|
|
250
233
|
case 'error':
|
|
251
234
|
case 'failed-processing':
|
|
252
|
-
const baseErrorConfig = {
|
|
235
|
+
const baseErrorConfig = {
|
|
236
|
+
...defaultConfig,
|
|
253
237
|
renderTypeIcon: true,
|
|
254
238
|
renderImageRenderer: false,
|
|
255
239
|
renderTitleBox: false,
|
|
@@ -260,7 +244,6 @@ export class CardViewBase extends React.Component {
|
|
|
260
244
|
const {
|
|
261
245
|
secondaryError
|
|
262
246
|
} = error || {};
|
|
263
|
-
|
|
264
247
|
if (isRateLimitedError(secondaryError) || isPollingError(secondaryError)) {
|
|
265
248
|
iconMessage = jsx(PreviewCurrentlyUnavailable, null);
|
|
266
249
|
} else if (isUploadError(error)) {
|
|
@@ -271,32 +254,31 @@ export class CardViewBase extends React.Component {
|
|
|
271
254
|
} else {
|
|
272
255
|
iconMessage = jsx(PreviewUnavailable, null);
|
|
273
256
|
}
|
|
274
|
-
|
|
275
257
|
if (!disableOverlay) {
|
|
276
258
|
const renderFailedTitleBox = !name || !!customTitleMessage;
|
|
277
|
-
return {
|
|
259
|
+
return {
|
|
260
|
+
...baseErrorConfig,
|
|
278
261
|
renderTitleBox: !!name && !customTitleMessage,
|
|
279
262
|
renderFailedTitleBox,
|
|
280
263
|
iconMessage: !renderFailedTitleBox ? iconMessage : undefined,
|
|
281
264
|
customTitleMessage
|
|
282
265
|
};
|
|
283
266
|
}
|
|
284
|
-
|
|
285
|
-
|
|
267
|
+
return {
|
|
268
|
+
...baseErrorConfig,
|
|
286
269
|
iconMessage
|
|
287
270
|
};
|
|
288
|
-
|
|
289
271
|
case 'loading-preview':
|
|
290
272
|
case 'loading':
|
|
291
273
|
default:
|
|
292
|
-
return {
|
|
274
|
+
return {
|
|
275
|
+
...defaultConfig,
|
|
293
276
|
renderPlayButton: false,
|
|
294
277
|
renderTypeIcon: false,
|
|
295
278
|
renderSpinner: !didImageRender
|
|
296
279
|
};
|
|
297
280
|
}
|
|
298
281
|
});
|
|
299
|
-
|
|
300
282
|
_defineProperty(this, "renderNewExperienceCard", () => {
|
|
301
283
|
const {
|
|
302
284
|
renderTypeIcon,
|
|
@@ -333,7 +315,6 @@ export class CardViewBase extends React.Component {
|
|
|
333
315
|
}, renderTypeIcon && this.renderMediaTypeIcon(hasTitleBox, iconMessage), renderSpinner && this.renderSpinner(hasTitleBox), renderImageRenderer && this.renderImageRenderer(), renderPlayButton && this.renderPlayButton(hasTitleBox), renderBlanket && this.renderBlanket(!!isFixedBlanket), renderTitleBox && this.renderTitleBox(), renderFailedTitleBox && this.renderFailedTitleBox(customTitleMessage), renderProgressBar && this.renderProgressBar(!hasTitleBox), renderTickBox && this.renderTickBox()), this.renderActionsBar());
|
|
334
316
|
});
|
|
335
317
|
}
|
|
336
|
-
|
|
337
318
|
componentDidMount() {
|
|
338
319
|
this.saveElementWidth();
|
|
339
320
|
const {
|
|
@@ -341,62 +322,54 @@ export class CardViewBase extends React.Component {
|
|
|
341
322
|
} = this.props;
|
|
342
323
|
!!innerRef && !!this.divRef.current && innerRef(this.divRef.current);
|
|
343
324
|
}
|
|
344
|
-
|
|
345
325
|
componentDidUpdate({
|
|
346
326
|
cardPreview: prevCardPreview
|
|
347
327
|
}) {
|
|
348
328
|
const {
|
|
349
329
|
cardPreview
|
|
350
|
-
} = this.props;
|
|
330
|
+
} = this.props;
|
|
331
|
+
// We should only switch didImageRender to false
|
|
351
332
|
// when cardPreview goes undefined, not when it is updated.
|
|
352
333
|
// as this method could be triggered after onImageLoad callback,
|
|
353
334
|
// falling on a race condition
|
|
354
|
-
|
|
355
335
|
!!prevCardPreview && !cardPreview && this.setState({
|
|
356
336
|
didImageRender: false
|
|
357
337
|
});
|
|
358
338
|
}
|
|
359
|
-
|
|
360
339
|
// This width is only used to calculate breakpoints, dimensions are passed down as
|
|
361
340
|
// integrator pass it to the root component
|
|
362
341
|
get width() {
|
|
363
342
|
const {
|
|
364
343
|
elementWidth
|
|
365
344
|
} = this.state;
|
|
366
|
-
|
|
367
345
|
if (elementWidth) {
|
|
368
346
|
return elementWidth;
|
|
369
347
|
}
|
|
370
|
-
|
|
371
348
|
const {
|
|
372
349
|
width
|
|
373
350
|
} = this.props.dimensions || {
|
|
374
351
|
width: undefined
|
|
375
352
|
};
|
|
376
|
-
|
|
377
353
|
if (!width) {
|
|
378
354
|
return defaultImageCardDimensions.width;
|
|
379
355
|
}
|
|
380
|
-
|
|
381
356
|
return getCSSUnitValue(width);
|
|
382
357
|
}
|
|
383
|
-
|
|
384
358
|
get breakpoint() {
|
|
385
359
|
const width = this.state.elementWidth || (this.props.dimensions ? this.props.dimensions.width : '') || defaultImageCardDimensions.width;
|
|
386
360
|
return calcBreakpointSize(parseInt(`${width}`, 10));
|
|
387
|
-
}
|
|
388
|
-
// into a pixel value in order to get the right breakpoints applied.
|
|
361
|
+
}
|
|
389
362
|
|
|
363
|
+
// If the dimensions.width is a percentage, we need to transform it
|
|
364
|
+
// into a pixel value in order to get the right breakpoints applied.
|
|
390
365
|
|
|
391
366
|
render() {
|
|
392
367
|
const {
|
|
393
368
|
featureFlags
|
|
394
369
|
} = this.props;
|
|
395
|
-
|
|
396
370
|
if (getMediaFeatureFlag('newCardExperience', featureFlags)) {
|
|
397
371
|
return this.renderFileNewExperience();
|
|
398
372
|
}
|
|
399
|
-
|
|
400
373
|
const {
|
|
401
374
|
dimensions,
|
|
402
375
|
appearance,
|
|
@@ -415,14 +388,12 @@ export class CardViewBase extends React.Component {
|
|
|
415
388
|
innerRef: this.divRef
|
|
416
389
|
}, this.renderFile());
|
|
417
390
|
}
|
|
418
|
-
|
|
419
391
|
renderSpinner(hasTitleBox) {
|
|
420
392
|
return jsx(IconWrapper, {
|
|
421
393
|
breakpoint: this.breakpoint,
|
|
422
394
|
hasTitleBox: hasTitleBox
|
|
423
395
|
}, jsx(SpinnerIcon, null));
|
|
424
396
|
}
|
|
425
|
-
|
|
426
397
|
shouldRenderPlayButton() {
|
|
427
398
|
const {
|
|
428
399
|
metadata,
|
|
@@ -431,29 +402,25 @@ export class CardViewBase extends React.Component {
|
|
|
431
402
|
const {
|
|
432
403
|
mediaType
|
|
433
404
|
} = metadata || {};
|
|
434
|
-
|
|
435
405
|
if (mediaType !== 'video' || !cardPreview) {
|
|
436
406
|
return false;
|
|
437
407
|
}
|
|
438
|
-
|
|
439
408
|
return true;
|
|
440
409
|
}
|
|
441
|
-
|
|
442
410
|
renderPlayButton(hasTitleBox) {
|
|
443
411
|
return jsx(IconWrapper, {
|
|
444
412
|
breakpoint: this.breakpoint,
|
|
445
413
|
hasTitleBox: hasTitleBox
|
|
446
414
|
}, jsx(PlayButton, null));
|
|
447
|
-
}
|
|
448
|
-
//setting isFixed.
|
|
449
|
-
|
|
415
|
+
}
|
|
450
416
|
|
|
417
|
+
//This Blanket will provide a shadow backround for uploading status by
|
|
418
|
+
//setting isFixed.
|
|
451
419
|
renderBlanket(isFixed) {
|
|
452
420
|
return jsx(Blanket, {
|
|
453
421
|
isFixed: isFixed
|
|
454
422
|
});
|
|
455
423
|
}
|
|
456
|
-
|
|
457
424
|
renderTitleBox() {
|
|
458
425
|
const {
|
|
459
426
|
metadata,
|
|
@@ -472,14 +439,12 @@ export class CardViewBase extends React.Component {
|
|
|
472
439
|
titleBoxBgColor: titleBoxBgColor
|
|
473
440
|
});
|
|
474
441
|
}
|
|
475
|
-
|
|
476
442
|
renderFailedTitleBox(customMessage) {
|
|
477
443
|
return jsx(FailedTitleBox, {
|
|
478
444
|
breakpoint: this.breakpoint,
|
|
479
445
|
customMessage: customMessage
|
|
480
446
|
});
|
|
481
447
|
}
|
|
482
|
-
|
|
483
448
|
renderProgressBar(positionBottom) {
|
|
484
449
|
const {
|
|
485
450
|
progress
|
|
@@ -490,7 +455,6 @@ export class CardViewBase extends React.Component {
|
|
|
490
455
|
positionBottom: positionBottom
|
|
491
456
|
});
|
|
492
457
|
}
|
|
493
|
-
|
|
494
458
|
renderImageRenderer() {
|
|
495
459
|
const {
|
|
496
460
|
cardPreview,
|
|
@@ -515,7 +479,6 @@ export class CardViewBase extends React.Component {
|
|
|
515
479
|
forceSyncDisplay: forceSyncDisplay
|
|
516
480
|
});
|
|
517
481
|
}
|
|
518
|
-
|
|
519
482
|
renderTickBox() {
|
|
520
483
|
const {
|
|
521
484
|
selected
|
|
@@ -524,7 +487,6 @@ export class CardViewBase extends React.Component {
|
|
|
524
487
|
selected: selected
|
|
525
488
|
});
|
|
526
489
|
}
|
|
527
|
-
|
|
528
490
|
renderMediaTypeIcon(hasTitleBox, iconMessage) {
|
|
529
491
|
const {
|
|
530
492
|
metadata
|
|
@@ -544,7 +506,6 @@ export class CardViewBase extends React.Component {
|
|
|
544
506
|
name: name
|
|
545
507
|
}), iconMessage);
|
|
546
508
|
}
|
|
547
|
-
|
|
548
509
|
renderActionsBar() {
|
|
549
510
|
const {
|
|
550
511
|
disableOverlay,
|
|
@@ -552,22 +513,17 @@ export class CardViewBase extends React.Component {
|
|
|
552
513
|
metadata
|
|
553
514
|
} = this.props;
|
|
554
515
|
const actionsWithDetails = metadata && actions ? attachDetailsToActions(actions, metadata) : [];
|
|
555
|
-
|
|
556
516
|
if (disableOverlay || !actions || actions.length === 0) {
|
|
557
517
|
return null;
|
|
558
518
|
}
|
|
559
|
-
|
|
560
519
|
return jsx(ActionsBar, {
|
|
561
520
|
actions: actionsWithDetails
|
|
562
521
|
});
|
|
563
522
|
}
|
|
564
|
-
|
|
565
523
|
}
|
|
566
|
-
|
|
567
524
|
_defineProperty(CardViewBase, "defaultProps", {
|
|
568
525
|
appearance: 'auto'
|
|
569
526
|
});
|
|
570
|
-
|
|
571
527
|
export const CardView = withAnalyticsEvents({
|
|
572
528
|
onClick: createAndFireMediaCardEvent({
|
|
573
529
|
eventType: 'ui',
|
|
@@ -10,19 +10,15 @@ export class CardPreviewCacheImpl {
|
|
|
10
10
|
const cacheKey = getCacheKey(id, mode);
|
|
11
11
|
return this.previewCache.get(cacheKey);
|
|
12
12
|
});
|
|
13
|
-
|
|
14
13
|
_defineProperty(this, "set", (id, mode, cardPreview) => {
|
|
15
14
|
const cacheKey = getCacheKey(id, mode);
|
|
16
15
|
this.previewCache.set(cacheKey, cardPreview);
|
|
17
16
|
});
|
|
18
|
-
|
|
19
17
|
_defineProperty(this, "remove", (id, mode) => {
|
|
20
18
|
const cacheKey = getCacheKey(id, mode);
|
|
21
19
|
this.previewCache.remove(cacheKey);
|
|
22
20
|
});
|
|
23
|
-
|
|
24
21
|
this.previewCache = previewCache;
|
|
25
22
|
}
|
|
26
|
-
|
|
27
23
|
}
|
|
28
24
|
export default new CardPreviewCacheImpl(createObjectURLCache());
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { isMimeTypeSupportedByBrowser } from '@atlaskit/media-common';
|
|
2
2
|
import { isPreviewableFileState, isPreviewableType, isImageRepresentationReady } from '@atlaskit/media-client';
|
|
3
|
-
import { isSupportedLocalPreview } from './helpers';
|
|
4
|
-
// https://product-fabric.atlassian.net/browse/BMPT-1300
|
|
3
|
+
import { isSupportedLocalPreview } from './helpers';
|
|
5
4
|
|
|
5
|
+
// TODO: align these checks with helpers from Media Client
|
|
6
|
+
// https://product-fabric.atlassian.net/browse/BMPT-1300
|
|
6
7
|
export const extractFilePreviewStatus = (fileState, isBannedLocalPreview, featureFlags) => {
|
|
7
8
|
const hasFilesize = 'size' in fileState && !!fileState.size;
|
|
8
9
|
const {
|
|
@@ -11,10 +12,11 @@ export const extractFilePreviewStatus = (fileState, isBannedLocalPreview, featur
|
|
|
11
12
|
const {
|
|
12
13
|
mimeType
|
|
13
14
|
} = 'mimeType' in fileState && fileState || {};
|
|
14
|
-
const isPreviewable = !!mediaType && isPreviewableType(mediaType, featureFlags);
|
|
15
|
+
const isPreviewable = !!mediaType && isPreviewableType(mediaType, featureFlags);
|
|
16
|
+
|
|
17
|
+
// Local preview is available only if it's supported by browser and supported by Media Card (isSupportedLocalPreview)
|
|
15
18
|
// For example, SVGs are mime type NOT supported by browser but media type supported by Media Card (image)
|
|
16
19
|
// Then, local Preview NOT available
|
|
17
|
-
|
|
18
20
|
const hasLocalPreview = !isBannedLocalPreview && isPreviewableFileState(fileState) && isSupportedLocalPreview(mediaType) && !!mimeType && isMimeTypeSupportedByBrowser(mimeType);
|
|
19
21
|
const hasRemotePreview = isImageRepresentationReady(fileState);
|
|
20
22
|
const hasPreview = hasLocalPreview || hasRemotePreview;
|
|
@@ -31,7 +33,8 @@ export const isPreviewableStatus = (cardStatus, {
|
|
|
31
33
|
hasPreview,
|
|
32
34
|
isSupportedByBrowser
|
|
33
35
|
}) => {
|
|
34
|
-
return hasPreview && isPreviewable && (cardStatus === 'complete' || cardStatus === 'loading-preview' || cardStatus === 'uploading' ||
|
|
36
|
+
return hasPreview && isPreviewable && (cardStatus === 'complete' || cardStatus === 'loading-preview' || cardStatus === 'uploading' ||
|
|
37
|
+
// For Video, we can have local or remote preview while processing.
|
|
35
38
|
// Then, we only want to show the thumbnail if the file is supported by the browser,
|
|
36
39
|
// this way we prevent playing unsupported videos that are not procesed
|
|
37
40
|
cardStatus === 'processing' && isSupportedByBrowser);
|
|
@@ -2,13 +2,11 @@ import { takeSnapshot } from '../../utils/videoSnapshot';
|
|
|
2
2
|
import { getMediaTypeFromMimeType } from '@atlaskit/media-common';
|
|
3
3
|
import { getOrientation } from '@atlaskit/media-ui';
|
|
4
4
|
import { LocalPreviewError, RemotePreviewError } from '../../errors';
|
|
5
|
-
|
|
6
5
|
/**
|
|
7
6
|
* This method tells the support for the media
|
|
8
7
|
* types covered in getCardPreviewFromFilePreview
|
|
9
8
|
*/
|
|
10
9
|
export const isSupportedLocalPreview = mediaType => mediaType === 'image' || mediaType === 'video';
|
|
11
|
-
|
|
12
10
|
const getImageLocalPreview = async value => {
|
|
13
11
|
try {
|
|
14
12
|
const orientation = await getOrientation(value);
|
|
@@ -22,7 +20,6 @@ const getImageLocalPreview = async value => {
|
|
|
22
20
|
throw new LocalPreviewError('local-preview-image', e instanceof Error ? e : undefined);
|
|
23
21
|
}
|
|
24
22
|
};
|
|
25
|
-
|
|
26
23
|
const getVideoLocalPreview = async value => {
|
|
27
24
|
try {
|
|
28
25
|
const dataURI = await takeSnapshot(value);
|
|
@@ -35,17 +32,14 @@ const getVideoLocalPreview = async value => {
|
|
|
35
32
|
throw new LocalPreviewError('local-preview-video', e instanceof Error ? e : undefined);
|
|
36
33
|
}
|
|
37
34
|
};
|
|
38
|
-
|
|
39
35
|
export const getCardPreviewFromFilePreview = async filePreview => {
|
|
40
36
|
let value;
|
|
41
|
-
|
|
42
37
|
try {
|
|
43
38
|
const resolvedFilePreview = await filePreview;
|
|
44
39
|
value = resolvedFilePreview.value;
|
|
45
40
|
} catch (e) {
|
|
46
41
|
throw new LocalPreviewError('local-preview-rejected', e instanceof Error ? e : undefined);
|
|
47
42
|
}
|
|
48
|
-
|
|
49
43
|
if (typeof value === 'string') {
|
|
50
44
|
return {
|
|
51
45
|
dataURI: value,
|
|
@@ -57,16 +51,13 @@ export const getCardPreviewFromFilePreview = async filePreview => {
|
|
|
57
51
|
type
|
|
58
52
|
} = value;
|
|
59
53
|
const mediaType = getMediaTypeFromMimeType(type);
|
|
60
|
-
|
|
61
54
|
switch (mediaType) {
|
|
62
55
|
case 'image':
|
|
63
56
|
return getImageLocalPreview(value);
|
|
64
|
-
|
|
65
57
|
case 'video':
|
|
66
58
|
return getVideoLocalPreview(value);
|
|
67
59
|
}
|
|
68
60
|
}
|
|
69
|
-
|
|
70
61
|
throw new LocalPreviewError('local-preview-unsupported');
|
|
71
62
|
};
|
|
72
63
|
export const getCardPreviewFromBackend = async (mediaClient, id, params, traceContext) => {
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import { fireMediaCardEvent, getCacheHitEventPayload, getRemoteSuccessEventPayload } from '../../utils/analytics';
|
|
2
2
|
export const fireImageFetchingOperationalEvent = (createAnalyticsEvent, action, cardPreviewAttributes) => {
|
|
3
3
|
const fireEvent = payload => fireMediaCardEvent(payload, createAnalyticsEvent);
|
|
4
|
-
|
|
5
4
|
switch (action) {
|
|
6
5
|
case 'cache-hit':
|
|
7
6
|
fireEvent(getCacheHitEventPayload(cardPreviewAttributes));
|
|
8
7
|
break;
|
|
9
|
-
|
|
10
8
|
case 'remote-success':
|
|
11
9
|
fireEvent(getRemoteSuccessEventPayload(cardPreviewAttributes));
|
|
12
10
|
break;
|
|
@@ -16,7 +14,6 @@ export const calculatePercentageDifference = (prevDimensions, currentDimensions)
|
|
|
16
14
|
if (!prevDimensions) {
|
|
17
15
|
return undefined;
|
|
18
16
|
}
|
|
19
|
-
|
|
20
17
|
const prevWidth = parseInt(`${prevDimensions === null || prevDimensions === void 0 ? void 0 : prevDimensions.width}`, 10);
|
|
21
18
|
const currWidth = parseInt(`${currentDimensions === null || currentDimensions === void 0 ? void 0 : currentDimensions.width}`, 10);
|
|
22
19
|
const prevHeight = parseInt(`${prevDimensions === null || prevDimensions === void 0 ? void 0 : prevDimensions.height}`, 10);
|
|
@@ -11,48 +11,44 @@ export { getCardPreviewFromFilePreview, getCardPreviewFromBackend, isSupportedLo
|
|
|
11
11
|
export { extractFilePreviewStatus } from './filePreviewStatus';
|
|
12
12
|
export const getCardPreviewFromCache = cardPreviewCache.get;
|
|
13
13
|
export const removeCardPreviewFromCache = cardPreviewCache.remove;
|
|
14
|
+
|
|
14
15
|
/**
|
|
15
16
|
* Will return the preview if available and supported by the browser
|
|
16
17
|
* See extractFilePreviewStatus "hasLocalPreview" logic
|
|
17
18
|
*/
|
|
18
|
-
|
|
19
19
|
export const getFilePreviewFromFileState = fileState => 'mimeType' in fileState && isMimeTypeSupportedByBrowser(fileState.mimeType) && isPreviewableFileState(fileState) ? fileState.preview : undefined;
|
|
20
|
-
|
|
21
20
|
const extendAndCachePreview = (id, mode, preview, mediaBlobUrlAttrs) => {
|
|
22
21
|
let source;
|
|
23
|
-
|
|
24
22
|
switch (preview.source) {
|
|
25
23
|
case 'local':
|
|
26
24
|
source = 'cache-local';
|
|
27
25
|
break;
|
|
28
|
-
|
|
29
26
|
case 'remote':
|
|
30
27
|
source = 'cache-remote';
|
|
31
28
|
break;
|
|
32
|
-
|
|
33
29
|
case 'ssr-server':
|
|
34
30
|
source = 'cache-ssr-server';
|
|
35
31
|
break;
|
|
36
|
-
|
|
37
32
|
case 'ssr-client':
|
|
38
33
|
source = 'cache-ssr-client';
|
|
39
34
|
break;
|
|
40
|
-
|
|
41
35
|
default:
|
|
42
36
|
source = preview.source;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
37
|
+
}
|
|
38
|
+
// We want to embed some meta context into dataURI for Copy/Paste to work.
|
|
39
|
+
const dataURI = mediaBlobUrlAttrs ? addFileAttrsToUrl(preview.dataURI, mediaBlobUrlAttrs) : preview.dataURI;
|
|
40
|
+
// We store new cardPreview into cache
|
|
41
|
+
cardPreviewCache.set(id, mode, {
|
|
42
|
+
...preview,
|
|
49
43
|
source,
|
|
50
44
|
dataURI
|
|
51
45
|
});
|
|
52
|
-
return {
|
|
46
|
+
return {
|
|
47
|
+
...preview,
|
|
53
48
|
dataURI
|
|
54
49
|
};
|
|
55
50
|
};
|
|
51
|
+
|
|
56
52
|
/**
|
|
57
53
|
* This function will try to return a Card preview, either from cache, local preview or remote preview.
|
|
58
54
|
* It should only be called if there is a chance to get either a remote or a local preview, or both.
|
|
@@ -63,8 +59,6 @@ const extendAndCachePreview = (id, mode, preview, mediaBlobUrlAttrs) => {
|
|
|
63
59
|
* In that case, we still want to report the local preview error to the caller, for feature realiability track.
|
|
64
60
|
* hence the use of the optional callback onLocalPreviewError
|
|
65
61
|
*/
|
|
66
|
-
|
|
67
|
-
|
|
68
62
|
export const getCardPreview = async ({
|
|
69
63
|
mediaClient,
|
|
70
64
|
id,
|
|
@@ -81,7 +75,6 @@ export const getCardPreview = async ({
|
|
|
81
75
|
const mode = imageUrlParams.mode;
|
|
82
76
|
const cachedPreview = cardPreviewCache.get(id, mode);
|
|
83
77
|
const dimensionsAreBigger = isBigger(cachedPreview === null || cachedPreview === void 0 ? void 0 : cachedPreview.dimensions, dimensions);
|
|
84
|
-
|
|
85
78
|
if (cachedPreview && !dimensionsAreBigger) {
|
|
86
79
|
if (getMediaFeatureFlag('memoryCacheLogging', featureFlags)) {
|
|
87
80
|
createAnalyticsEvent && fireImageFetchingOperationalEvent(createAnalyticsEvent, 'cache-hit', {
|
|
@@ -91,14 +84,13 @@ export const getCardPreview = async ({
|
|
|
91
84
|
source: cachedPreview.source
|
|
92
85
|
});
|
|
93
86
|
}
|
|
94
|
-
|
|
95
87
|
return cachedPreview;
|
|
96
88
|
}
|
|
97
|
-
|
|
98
89
|
try {
|
|
99
90
|
if (filePreview) {
|
|
100
91
|
const localPreview = await getCardPreviewFromFilePreview(filePreview);
|
|
101
|
-
return extendAndCachePreview(id, mode, {
|
|
92
|
+
return extendAndCachePreview(id, mode, {
|
|
93
|
+
...localPreview,
|
|
102
94
|
dimensions
|
|
103
95
|
}, mediaBlobUrlAttrs);
|
|
104
96
|
}
|
|
@@ -120,13 +112,10 @@ export const getCardPreview = async ({
|
|
|
120
112
|
* No matter the reason why the local preview failed, we break the process
|
|
121
113
|
* if there is no remote preview available
|
|
122
114
|
*/
|
|
123
|
-
|
|
124
|
-
|
|
125
115
|
if (!isRemotePreviewReady) {
|
|
126
116
|
throw e;
|
|
127
117
|
}
|
|
128
118
|
}
|
|
129
|
-
|
|
130
119
|
if (!isRemotePreviewReady) {
|
|
131
120
|
/**
|
|
132
121
|
* We throw this in case this function has been called
|
|
@@ -136,9 +125,7 @@ export const getCardPreview = async ({
|
|
|
136
125
|
*/
|
|
137
126
|
throw new MediaCardError('remote-preview-not-ready');
|
|
138
127
|
}
|
|
139
|
-
|
|
140
128
|
const remotePreview = await fetchAndCacheRemotePreview(mediaClient, id, dimensions, imageUrlParams, mediaBlobUrlAttrs, traceContext);
|
|
141
|
-
|
|
142
129
|
if (getMediaFeatureFlag('memoryCacheLogging', featureFlags)) {
|
|
143
130
|
createAnalyticsEvent && fireImageFetchingOperationalEvent(createAnalyticsEvent, 'remote-success', {
|
|
144
131
|
fileId: id,
|
|
@@ -148,7 +135,6 @@ export const getCardPreview = async ({
|
|
|
148
135
|
source: remotePreview.source
|
|
149
136
|
});
|
|
150
137
|
}
|
|
151
|
-
|
|
152
138
|
return remotePreview;
|
|
153
139
|
};
|
|
154
140
|
export const shouldResolvePreview = ({
|
|
@@ -160,18 +146,19 @@ export const shouldResolvePreview = ({
|
|
|
160
146
|
fileImageMode,
|
|
161
147
|
hasCardPreview,
|
|
162
148
|
isBannedLocalPreview,
|
|
163
|
-
featureFlags
|
|
149
|
+
featureFlags,
|
|
150
|
+
wasResolvedUpfrontPreview
|
|
164
151
|
}) => {
|
|
165
152
|
const statusIsPreviewable = isPreviewableStatus(status, extractFilePreviewStatus(fileState, isBannedLocalPreview, featureFlags));
|
|
166
153
|
const dimensionsAreBigger = isBigger(prevDimensions, dimensions);
|
|
167
|
-
|
|
154
|
+
// We should not fetch the preview if the upfront one hasn't been resolved yet (it could be resolving now), even if there are new dimensions.
|
|
155
|
+
return wasResolvedUpfrontPreview && statusIsPreviewable && (!hasCardPreview || dimensionsAreBigger);
|
|
168
156
|
};
|
|
169
157
|
export const getSSRCardPreview = (ssr, mediaClient, id, params, mediaBlobUrlAttrs) => {
|
|
170
158
|
let dataURI;
|
|
171
|
-
|
|
172
159
|
try {
|
|
173
|
-
const rawDataURI = mediaClient.getImageUrlSync(id, params);
|
|
174
|
-
|
|
160
|
+
const rawDataURI = mediaClient.getImageUrlSync(id, params);
|
|
161
|
+
// We want to embed some meta context into dataURI for Copy/Paste to work.
|
|
175
162
|
dataURI = mediaBlobUrlAttrs ? addFileAttrsToUrl(rawDataURI, mediaBlobUrlAttrs) : rawDataURI;
|
|
176
163
|
const source = ssr === 'client' ? 'ssr-client' : 'ssr-server';
|
|
177
164
|
return {
|
|
@@ -200,7 +187,8 @@ export const isSSRClientPreview = preview => {
|
|
|
200
187
|
export const isSSRDataPreview = preview => preview.source === 'ssr-data';
|
|
201
188
|
export const fetchAndCacheRemotePreview = async (mediaClient, id, dimensions, params, mediaBlobUrlAttrs, traceContext) => {
|
|
202
189
|
const remotePreview = await getCardPreviewFromBackend(mediaClient, id, params, traceContext);
|
|
203
|
-
return extendAndCachePreview(id, params.mode, {
|
|
190
|
+
return extendAndCachePreview(id, params.mode, {
|
|
191
|
+
...remotePreview,
|
|
204
192
|
dimensions
|
|
205
193
|
}, mediaBlobUrlAttrs);
|
|
206
194
|
};
|