@atlaskit/media-card 71.0.0 → 73.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 +104 -0
- package/dist/cjs/actions.js +2 -2
- package/dist/cjs/errors.js +83 -8
- package/dist/cjs/files/cardImageView/cardOverlay/styled.js +1 -1
- package/dist/cjs/files/cardImageView/index.js +53 -104
- package/dist/cjs/files/cardImageView/styled.js +1 -1
- package/dist/cjs/files/index.js +0 -6
- package/dist/cjs/index.js +8 -8
- package/dist/cjs/root/card/cardAnalytics.js +4 -16
- package/dist/cjs/root/card/cardLoader.js +66 -124
- package/dist/cjs/root/card/cardState.js +50 -0
- package/dist/cjs/root/card/getCardPreview/cache.js +10 -5
- package/dist/cjs/root/card/getCardPreview/filePreviewStatus.js +53 -0
- package/dist/cjs/root/card/getCardPreview/helpers.js +14 -22
- package/dist/cjs/root/card/getCardPreview/index.js +177 -97
- package/dist/cjs/root/card/getCardStatus.js +7 -1
- package/dist/cjs/root/card/index.js +384 -285
- package/dist/cjs/root/cardView.js +113 -88
- package/dist/cjs/root/inline/loader.js +47 -15
- package/dist/cjs/root/inline/mediaInlineCard.js +33 -12
- package/dist/cjs/root/inlinePlayer.js +77 -24
- package/dist/cjs/root/styled.js +7 -3
- package/dist/cjs/root/ui/actionsBar/styled.js +1 -1
- package/dist/cjs/root/ui/blanket/styled.js +1 -1
- package/dist/cjs/root/ui/common.js +11 -5
- package/dist/cjs/root/ui/iconMessage/index.js +16 -7
- package/dist/cjs/root/ui/iconWrapper/styled.js +1 -1
- package/dist/cjs/root/ui/imageRenderer/imageRenderer.js +47 -123
- package/dist/cjs/root/ui/loadingRateLimited/loadingRateLimited.js +6 -4
- package/dist/cjs/root/ui/loadingRateLimited/styled.js +2 -2
- package/dist/cjs/root/ui/playButton/styled.js +1 -1
- package/dist/cjs/root/ui/progressBar/progressBar.js +7 -4
- package/dist/cjs/root/ui/progressBar/styled.js +8 -9
- package/dist/cjs/root/ui/styled.js +80 -17
- package/dist/cjs/root/ui/tickBox/styled.js +1 -1
- package/dist/cjs/root/ui/titleBox/failedTitleBox.js +9 -3
- package/dist/cjs/root/ui/titleBox/styled.js +2 -4
- package/dist/cjs/root/ui/titleBox/titleBox.js +2 -2
- package/dist/cjs/styles/index.js +25 -23
- package/dist/cjs/styles/mixins.js +1 -1
- package/dist/cjs/utils/analytics.js +7 -44
- package/dist/cjs/utils/breakpoint.js +1 -1
- package/dist/cjs/utils/cardActions/cardActionsDropdownMenu.js +18 -9
- package/dist/cjs/utils/cardActions/index.js +10 -10
- package/dist/cjs/utils/cardActions/styled.js +1 -1
- package/dist/cjs/utils/cardDimensions.js +1 -1
- package/dist/cjs/utils/dimensionComparer.js +1 -1
- package/dist/cjs/utils/getErrorMessage.js +2 -2
- package/dist/cjs/utils/index.js +46 -46
- package/dist/cjs/utils/lightCards/styled.js +1 -1
- package/dist/cjs/utils/metadata.js +11 -3
- package/dist/cjs/utils/objectURLCache.js +7 -1
- package/dist/cjs/utils/shouldDisplayImageThumbnail.js +1 -1
- package/dist/cjs/utils/viewportDetector.js +49 -22
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/errors.js +42 -2
- package/dist/es2019/files/cardImageView/index.js +8 -61
- package/dist/es2019/files/index.js +1 -1
- package/dist/es2019/root/card/cardAnalytics.js +3 -14
- package/dist/es2019/root/card/cardLoader.js +47 -53
- package/dist/es2019/root/card/cardState.js +26 -0
- package/dist/es2019/root/card/getCardPreview/cache.js +5 -0
- package/dist/es2019/root/card/getCardPreview/filePreviewStatus.js +38 -0
- package/dist/es2019/root/card/getCardPreview/helpers.js +2 -12
- package/dist/es2019/root/card/getCardPreview/index.js +112 -73
- package/dist/es2019/root/card/getCardStatus.js +1 -0
- package/dist/es2019/root/card/index.js +308 -190
- package/dist/es2019/root/cardView.js +97 -68
- package/dist/es2019/root/inline/loader.js +17 -5
- package/dist/es2019/root/inline/mediaInlineCard.js +32 -11
- package/dist/es2019/root/inlinePlayer.js +56 -4
- package/dist/es2019/root/styled.js +2 -1
- package/dist/es2019/root/ui/common.js +7 -1
- package/dist/es2019/root/ui/iconMessage/index.js +8 -5
- package/dist/es2019/root/ui/imageRenderer/imageRenderer.js +35 -88
- package/dist/es2019/root/ui/loadingRateLimited/loadingRateLimited.js +4 -3
- package/dist/es2019/root/ui/loadingRateLimited/styled.js +1 -1
- package/dist/es2019/root/ui/progressBar/progressBar.js +5 -3
- package/dist/es2019/root/ui/progressBar/styled.js +7 -6
- package/dist/es2019/root/ui/styled.js +65 -4
- package/dist/es2019/root/ui/titleBox/failedTitleBox.js +6 -3
- package/dist/es2019/root/ui/titleBox/styled.js +1 -2
- package/dist/es2019/root/ui/titleBox/titleBox.js +1 -1
- package/dist/es2019/utils/analytics.js +5 -34
- package/dist/es2019/utils/cardActions/cardActionsDropdownMenu.js +8 -4
- package/dist/es2019/utils/dimensionComparer.js +1 -1
- package/dist/es2019/utils/getErrorMessage.js +1 -1
- package/dist/es2019/utils/metadata.js +12 -4
- package/dist/es2019/utils/objectURLCache.js +5 -0
- package/dist/es2019/utils/shouldDisplayImageThumbnail.js +1 -1
- package/dist/es2019/utils/viewportDetector.js +48 -18
- package/dist/es2019/version.json +1 -1
- package/dist/esm/actions.js +2 -2
- package/dist/esm/errors.js +64 -4
- package/dist/esm/files/cardImageView/index.js +51 -102
- package/dist/esm/files/index.js +1 -1
- package/dist/esm/root/card/cardAnalytics.js +3 -15
- package/dist/esm/root/card/cardLoader.js +66 -126
- package/dist/esm/root/card/cardState.js +32 -0
- package/dist/esm/root/card/getCardPreview/cache.js +9 -2
- package/dist/esm/root/card/getCardPreview/filePreviewStatus.js +38 -0
- package/dist/esm/root/card/getCardPreview/helpers.js +13 -21
- package/dist/esm/root/card/getCardPreview/index.js +144 -91
- package/dist/esm/root/card/getCardStatus.js +3 -0
- package/dist/esm/root/card/index.js +396 -288
- package/dist/esm/root/cardView.js +113 -86
- package/dist/esm/root/inline/loader.js +48 -15
- package/dist/esm/root/inline/mediaInlineCard.js +32 -11
- package/dist/esm/root/inlinePlayer.js +74 -23
- package/dist/esm/root/styled.js +3 -2
- package/dist/esm/root/ui/common.js +7 -1
- package/dist/esm/root/ui/iconMessage/index.js +10 -5
- package/dist/esm/root/ui/imageRenderer/imageRenderer.js +37 -116
- package/dist/esm/root/ui/loadingRateLimited/loadingRateLimited.js +4 -3
- package/dist/esm/root/ui/loadingRateLimited/styled.js +1 -1
- package/dist/esm/root/ui/progressBar/progressBar.js +6 -3
- package/dist/esm/root/ui/progressBar/styled.js +7 -7
- package/dist/esm/root/ui/styled.js +61 -13
- package/dist/esm/root/ui/titleBox/failedTitleBox.js +7 -3
- package/dist/esm/root/ui/titleBox/styled.js +1 -2
- package/dist/esm/root/ui/titleBox/titleBox.js +1 -1
- package/dist/esm/utils/analytics.js +5 -36
- package/dist/esm/utils/cardActions/cardActionsDropdownMenu.js +17 -9
- package/dist/esm/utils/dimensionComparer.js +1 -1
- package/dist/esm/utils/getErrorMessage.js +1 -1
- package/dist/esm/utils/metadata.js +12 -4
- package/dist/esm/utils/objectURLCache.js +6 -0
- package/dist/esm/utils/shouldDisplayImageThumbnail.js +1 -1
- package/dist/esm/utils/viewportDetector.js +48 -21
- package/dist/esm/version.json +1 -1
- package/dist/types/errors.d.ts +15 -1
- package/dist/types/files/cardImageView/index.d.ts +4 -13
- package/dist/types/files/cardImageView/styled.d.ts +1 -1
- package/dist/types/files/index.d.ts +1 -1
- package/dist/types/index.d.ts +7 -4
- package/dist/types/root/card/cardAnalytics.d.ts +1 -6
- package/dist/types/root/card/cardLoader.d.ts +5 -19
- package/dist/types/root/card/cardState.d.ts +5 -0
- package/dist/types/root/card/getCardPreview/cache.d.ts +3 -1
- package/dist/types/root/card/getCardPreview/filePreviewStatus.d.ts +5 -0
- package/dist/types/root/card/getCardPreview/helpers.d.ts +3 -4
- package/dist/types/root/card/getCardPreview/index.d.ts +24 -14
- package/dist/types/root/card/getCardStatus.d.ts +1 -0
- package/dist/types/root/card/index.d.ts +20 -18
- package/dist/types/root/cardView.d.ts +13 -8
- package/dist/types/root/inline/loader.d.ts +2 -0
- package/dist/types/root/inline/mediaInlineCard.d.ts +3 -5
- package/dist/types/root/inlinePlayer.d.ts +8 -1
- package/dist/types/root/styled.d.ts +1 -0
- package/dist/types/root/ui/common.d.ts +4 -1
- package/dist/types/root/ui/iconMessage/index.d.ts +4 -3
- package/dist/types/root/ui/iconWrapper/styled.d.ts +1 -1
- package/dist/types/root/ui/imageRenderer/imageRenderer.d.ts +14 -15
- package/dist/types/root/ui/loadingRateLimited/loadingRateLimited.d.ts +2 -1
- package/dist/types/root/ui/loadingRateLimited/styled.d.ts +1 -1
- package/dist/types/root/ui/playButton/playButton.d.ts +1 -0
- package/dist/types/root/ui/progressBar/progressBar.d.ts +4 -2
- package/dist/types/root/ui/progressBar/styled.d.ts +3 -2
- package/dist/types/root/ui/styled.d.ts +10 -3
- package/dist/types/root/ui/tickBox/tickBox.d.ts +1 -0
- package/dist/types/root/ui/titleBox/failedTitleBox.d.ts +3 -1
- package/dist/types/root/ui/titleBox/styled.d.ts +1 -1
- package/dist/types/root/ui/titleBox/titleBox.d.ts +2 -10
- package/dist/types/styles/mixins.d.ts +1 -1
- package/dist/types/types.d.ts +7 -1
- package/dist/types/utils/analytics.d.ts +6 -15
- package/dist/types/utils/cardDimensions.d.ts +4 -4
- package/dist/types/utils/dimensionComparer.d.ts +1 -1
- package/dist/types/utils/getErrorMessage.d.ts +1 -0
- package/dist/types/utils/metadata.d.ts +2 -2
- package/dist/types/utils/objectURLCache.d.ts +2 -1
- package/dist/types/utils/viewportDetector.d.ts +13 -5
- package/example-helpers/developmentUseMessage.tsx +14 -0
- package/example-helpers/index.tsx +55 -4
- package/example-helpers/selectableCard.tsx +2 -1
- package/package.json +18 -16
- package/dist/cjs/root/card/cardSSRView.js +0 -112
- package/dist/cjs/root/card/getCardPreview/types.js +0 -5
- package/dist/cjs/root/ui/Breakpoint.js +0 -13
- package/dist/cjs/root/ui/styledSSR.js +0 -108
- package/dist/cjs/utils/fileAttributesContext.js +0 -40
- package/dist/cjs/utils/lazyContent/index.js +0 -56
- package/dist/cjs/utils/lazyContent/styled.js +0 -23
- package/dist/es2019/root/card/cardSSRView.js +0 -92
- package/dist/es2019/root/card/getCardPreview/types.js +0 -1
- package/dist/es2019/root/ui/Breakpoint.js +0 -6
- package/dist/es2019/root/ui/styledSSR.js +0 -93
- package/dist/es2019/utils/fileAttributesContext.js +0 -19
- package/dist/es2019/utils/lazyContent/index.js +0 -18
- package/dist/es2019/utils/lazyContent/styled.js +0 -12
- package/dist/esm/root/card/cardSSRView.js +0 -91
- package/dist/esm/root/card/getCardPreview/types.js +0 -1
- package/dist/esm/root/ui/Breakpoint.js +0 -6
- package/dist/esm/root/ui/styledSSR.js +0 -76
- package/dist/esm/utils/fileAttributesContext.js +0 -18
- package/dist/esm/utils/lazyContent/index.js +0 -41
- package/dist/esm/utils/lazyContent/styled.js +0 -14
- package/dist/types/root/card/cardSSRView.d.ts +0 -13
- package/dist/types/root/card/getCardPreview/types.d.ts +0 -5
- package/dist/types/root/ui/Breakpoint.d.ts +0 -4
- package/dist/types/root/ui/styledSSR.d.ts +0 -16
- package/dist/types/utils/fileAttributesContext.d.ts +0 -10
- package/dist/types/utils/lazyContent/index.d.ts +0 -11
- package/dist/types/utils/lazyContent/styled.d.ts +0 -5
|
@@ -12,9 +12,8 @@ import { Wrapper } from './styled';
|
|
|
12
12
|
import { createAndFireMediaCardEvent } from '../utils/analytics';
|
|
13
13
|
import { attachDetailsToActions } from '../actions';
|
|
14
14
|
import { getErrorMessage } from '../utils/getErrorMessage';
|
|
15
|
-
import { toHumanReadableMediaSize } from '@atlaskit/media-ui';
|
|
16
|
-
import { NewFileExperienceWrapper } from './ui/styled';
|
|
17
|
-
import { CardImageContainer, calcBreakpointSize } from './ui/styledSSR';
|
|
15
|
+
import { toHumanReadableMediaSize, messages } from '@atlaskit/media-ui';
|
|
16
|
+
import { NewFileExperienceWrapper, CardImageContainer, calcBreakpointSize } from './ui/styled';
|
|
18
17
|
import { ImageRenderer } from './ui/imageRenderer/imageRenderer';
|
|
19
18
|
import { TitleBox } from './ui/titleBox/titleBox';
|
|
20
19
|
import { FailedTitleBox } from './ui/titleBox/failedTitleBox';
|
|
@@ -27,10 +26,10 @@ import Tooltip from '@atlaskit/tooltip';
|
|
|
27
26
|
import { IconWrapper } from './ui/iconWrapper/styled';
|
|
28
27
|
import { MimeTypeIcon } from '@atlaskit/media-ui/mime-type-icon';
|
|
29
28
|
import SpinnerIcon from '@atlaskit/spinner';
|
|
30
|
-
import { PreviewUnavailable, CreatingPreview,
|
|
31
|
-
import { LoadingRateLimited } from './ui/loadingRateLimited/loadingRateLimited';
|
|
29
|
+
import { PreviewUnavailable, CreatingPreview, FailedToUpload, PreviewCurrentlyUnavailable, FailedToLoad } from './ui/iconMessage';
|
|
32
30
|
import { isRateLimitedError, isPollingError } from '@atlaskit/media-client';
|
|
33
31
|
import { newFileExperienceClassName } from './card/cardConstants';
|
|
32
|
+
import { isUploadError } from '../errors';
|
|
34
33
|
|
|
35
34
|
/**
|
|
36
35
|
* This is classic vanilla CardView class. To create an instance of class one would need to supply
|
|
@@ -41,15 +40,37 @@ export class CardViewBase extends React.Component {
|
|
|
41
40
|
super(...args);
|
|
42
41
|
|
|
43
42
|
_defineProperty(this, "state", {
|
|
44
|
-
|
|
43
|
+
didImageRender: false
|
|
45
44
|
});
|
|
46
45
|
|
|
47
46
|
_defineProperty(this, "divRef", /*#__PURE__*/React.createRef());
|
|
48
47
|
|
|
49
|
-
_defineProperty(this, "
|
|
48
|
+
_defineProperty(this, "onImageLoad", () => {
|
|
49
|
+
const {
|
|
50
|
+
onImageLoad
|
|
51
|
+
} = this.props; // We render the icon & icon message always, even if there is dataURI available.
|
|
52
|
+
// If the image fails to load/render, the icon will remain, i.e. the user won't see a change until
|
|
53
|
+
// the root card decides to chage status to error.
|
|
54
|
+
// If the image renders successfully, we switch this variable to hide the icon & icon message
|
|
55
|
+
// behind the thumbnail in case the image has transparency.
|
|
56
|
+
// It is less likely that root component replaces a suceeded dataURI for a failed one
|
|
57
|
+
// than the opposite case. Therefore we prefer to hide the icon instead show when the image fails,
|
|
58
|
+
// for a smoother transition
|
|
59
|
+
|
|
60
|
+
this.setState({
|
|
61
|
+
didImageRender: true
|
|
62
|
+
});
|
|
63
|
+
onImageLoad && onImageLoad();
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
_defineProperty(this, "onImageError", () => {
|
|
67
|
+
const {
|
|
68
|
+
onImageError
|
|
69
|
+
} = this.props;
|
|
50
70
|
this.setState({
|
|
51
|
-
|
|
71
|
+
didImageRender: false
|
|
52
72
|
});
|
|
73
|
+
onImageError && onImageError();
|
|
53
74
|
});
|
|
54
75
|
|
|
55
76
|
_defineProperty(this, "saveElementWidth", () => {
|
|
@@ -91,13 +112,11 @@ export class CardViewBase extends React.Component {
|
|
|
91
112
|
name
|
|
92
113
|
} = metadata || {};
|
|
93
114
|
const shouldUsePointerCursor = status !== 'error' && status !== 'failed-processing';
|
|
94
|
-
const shouldDisplayBackground = !dataURI || !disableOverlay;
|
|
115
|
+
const shouldDisplayBackground = !dataURI || !disableOverlay || status === 'error' || status === 'failed-processing';
|
|
95
116
|
const isPlayButtonClickable = !!(this.shouldRenderPlayButton() && disableOverlay);
|
|
96
|
-
const isTickBoxSelectable = !disableOverlay && !!selectable && !selected; //
|
|
97
|
-
// Intention is to show full file name when it's truncate in titlebox,
|
|
98
|
-
// and to hide it when no titlebox exists.
|
|
117
|
+
const isTickBoxSelectable = !disableOverlay && !!selectable && !selected; // Disable tooltip for Media Single
|
|
99
118
|
|
|
100
|
-
const shouldDisplayTooltip =
|
|
119
|
+
const shouldDisplayTooltip = !disableOverlay;
|
|
101
120
|
return /*#__PURE__*/React.createElement(NewFileExperienceWrapper, {
|
|
102
121
|
className: newFileExperienceClassName,
|
|
103
122
|
"data-testid": testId || 'media-card-view',
|
|
@@ -136,8 +155,7 @@ export class CardViewBase extends React.Component {
|
|
|
136
155
|
previewOrientation,
|
|
137
156
|
alt,
|
|
138
157
|
onDisplayImage,
|
|
139
|
-
actions
|
|
140
|
-
timeElapsedTillCommenced
|
|
158
|
+
actions
|
|
141
159
|
} = this.props;
|
|
142
160
|
const {
|
|
143
161
|
name,
|
|
@@ -167,7 +185,8 @@ export class CardViewBase extends React.Component {
|
|
|
167
185
|
disableOverlay: disableOverlay,
|
|
168
186
|
previewOrientation: previewOrientation,
|
|
169
187
|
alt: alt,
|
|
170
|
-
|
|
188
|
+
onImageLoad: this.onImageLoad,
|
|
189
|
+
onImageError: this.onImageError
|
|
171
190
|
});
|
|
172
191
|
});
|
|
173
192
|
|
|
@@ -186,16 +205,15 @@ export class CardViewBase extends React.Component {
|
|
|
186
205
|
mediaType
|
|
187
206
|
} = metadata || {};
|
|
188
207
|
const {
|
|
189
|
-
|
|
208
|
+
didImageRender
|
|
190
209
|
} = this.state;
|
|
191
210
|
const isZeroSize = !!(metadata && metadata.size === 0);
|
|
192
211
|
const defaultConfig = {
|
|
193
|
-
renderTypeIcon:
|
|
194
|
-
renderImageRenderer: !!dataURI
|
|
212
|
+
renderTypeIcon: !didImageRender,
|
|
213
|
+
renderImageRenderer: !!dataURI,
|
|
195
214
|
renderPlayButton: !!dataURI && mediaType === 'video',
|
|
196
215
|
renderBlanket: !disableOverlay,
|
|
197
|
-
renderTitleBox:
|
|
198
|
-
renderFailedTitleBox: !!isImageFailedToLoad && !metadata,
|
|
216
|
+
renderTitleBox: !disableOverlay && !!name,
|
|
199
217
|
renderTickBox: !disableOverlay && !!selectable
|
|
200
218
|
};
|
|
201
219
|
|
|
@@ -210,55 +228,59 @@ export class CardViewBase extends React.Component {
|
|
|
210
228
|
case 'processing':
|
|
211
229
|
case 'loading-preview':
|
|
212
230
|
return { ...defaultConfig,
|
|
213
|
-
iconMessage:
|
|
231
|
+
iconMessage: !didImageRender && !isZeroSize ? /*#__PURE__*/React.createElement(CreatingPreview, {
|
|
214
232
|
disableAnimation: disableAnimation
|
|
215
233
|
}) : undefined
|
|
216
234
|
};
|
|
217
235
|
|
|
218
236
|
case 'complete':
|
|
219
|
-
return
|
|
220
|
-
iconMessage: !!isImageFailedToLoad && !!metadata ? /*#__PURE__*/React.createElement(PreviewUnavailable, null) : undefined
|
|
221
|
-
};
|
|
237
|
+
return defaultConfig;
|
|
222
238
|
|
|
223
239
|
case 'error':
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
240
|
+
case 'failed-processing':
|
|
241
|
+
const baseErrorConfig = { ...defaultConfig,
|
|
242
|
+
renderTypeIcon: true,
|
|
243
|
+
renderImageRenderer: false,
|
|
244
|
+
renderTitleBox: false,
|
|
245
|
+
renderPlayButton: false
|
|
246
|
+
};
|
|
247
|
+
let iconMessage;
|
|
248
|
+
let customTitleMessage;
|
|
249
|
+
const {
|
|
250
|
+
secondaryError
|
|
251
|
+
} = error || {};
|
|
252
|
+
|
|
253
|
+
if (isRateLimitedError(secondaryError) || isPollingError(secondaryError)) {
|
|
254
|
+
iconMessage = /*#__PURE__*/React.createElement(PreviewCurrentlyUnavailable, null);
|
|
255
|
+
} else if (isUploadError(error)) {
|
|
256
|
+
iconMessage = /*#__PURE__*/React.createElement(FailedToUpload, null);
|
|
257
|
+
customTitleMessage = messages.failed_to_upload;
|
|
258
|
+
} else if (!metadata) {
|
|
259
|
+
iconMessage = /*#__PURE__*/React.createElement(FailedToLoad, null);
|
|
239
260
|
} else {
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
261
|
+
iconMessage = /*#__PURE__*/React.createElement(PreviewUnavailable, null);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
if (!disableOverlay) {
|
|
265
|
+
const renderFailedTitleBox = !name || !!customTitleMessage;
|
|
266
|
+
return { ...baseErrorConfig,
|
|
267
|
+
renderTitleBox: !!name && !customTitleMessage,
|
|
268
|
+
renderFailedTitleBox,
|
|
269
|
+
iconMessage: !renderFailedTitleBox ? iconMessage : undefined,
|
|
270
|
+
customTitleMessage
|
|
245
271
|
};
|
|
246
272
|
}
|
|
247
273
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
renderTypeIcon: true,
|
|
251
|
-
renderImageRenderer: false,
|
|
252
|
-
renderTitleBox: !!name && !disableOverlay,
|
|
253
|
-
renderFailedTitleBox: !metadata,
|
|
254
|
-
iconMessage: !!metadata && !isZeroSize ? /*#__PURE__*/React.createElement(PreviewUnavailable, null) : undefined
|
|
274
|
+
return { ...baseErrorConfig,
|
|
275
|
+
iconMessage
|
|
255
276
|
};
|
|
256
277
|
|
|
257
278
|
case 'loading':
|
|
258
279
|
default:
|
|
259
280
|
return { ...defaultConfig,
|
|
281
|
+
renderPlayButton: false,
|
|
260
282
|
renderTypeIcon: false,
|
|
261
|
-
renderSpinner:
|
|
283
|
+
renderSpinner: !didImageRender
|
|
262
284
|
};
|
|
263
285
|
}
|
|
264
286
|
});
|
|
@@ -276,7 +298,7 @@ export class CardViewBase extends React.Component {
|
|
|
276
298
|
renderFailedTitleBox,
|
|
277
299
|
renderTickBox,
|
|
278
300
|
isFixedBlanket,
|
|
279
|
-
|
|
301
|
+
customTitleMessage
|
|
280
302
|
} = this.getRenderConfigByStatus();
|
|
281
303
|
const {
|
|
282
304
|
progress,
|
|
@@ -295,7 +317,7 @@ export class CardViewBase extends React.Component {
|
|
|
295
317
|
"data-test-status": status,
|
|
296
318
|
"data-test-progress": progress,
|
|
297
319
|
"data-test-selected": selected ? true : undefined
|
|
298
|
-
}, 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(), renderProgressBar && this.renderProgressBar(!hasTitleBox),
|
|
320
|
+
}, 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());
|
|
299
321
|
});
|
|
300
322
|
}
|
|
301
323
|
|
|
@@ -312,13 +334,14 @@ export class CardViewBase extends React.Component {
|
|
|
312
334
|
}) {
|
|
313
335
|
const {
|
|
314
336
|
dataURI
|
|
315
|
-
} = this.props;
|
|
337
|
+
} = this.props; // We should only switch didImageRender to false
|
|
338
|
+
// when dataURI goes undefined, not when it is updated.
|
|
339
|
+
// as this method could be triggered after onImageLoad callback,
|
|
340
|
+
// falling on a race condition
|
|
316
341
|
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
});
|
|
321
|
-
}
|
|
342
|
+
prevDataURI && !dataURI && this.setState({
|
|
343
|
+
didImageRender: false
|
|
344
|
+
});
|
|
322
345
|
}
|
|
323
346
|
|
|
324
347
|
// This width is only used to calculate breakpoints, dimensions are passed down as
|
|
@@ -437,9 +460,10 @@ export class CardViewBase extends React.Component {
|
|
|
437
460
|
});
|
|
438
461
|
}
|
|
439
462
|
|
|
440
|
-
renderFailedTitleBox() {
|
|
463
|
+
renderFailedTitleBox(customMessage) {
|
|
441
464
|
return /*#__PURE__*/React.createElement(FailedTitleBox, {
|
|
442
|
-
breakpoint: this.breakpoint
|
|
465
|
+
breakpoint: this.breakpoint,
|
|
466
|
+
customMessage: customMessage
|
|
443
467
|
});
|
|
444
468
|
}
|
|
445
469
|
|
|
@@ -464,19 +488,24 @@ export class CardViewBase extends React.Component {
|
|
|
464
488
|
alt,
|
|
465
489
|
resizeMode,
|
|
466
490
|
onDisplayImage,
|
|
467
|
-
|
|
468
|
-
|
|
491
|
+
nativeLazyLoad,
|
|
492
|
+
forceSyncDisplay
|
|
469
493
|
} = this.props;
|
|
494
|
+
const {
|
|
495
|
+
didImageRender
|
|
496
|
+
} = this.state;
|
|
470
497
|
return !!dataURI && /*#__PURE__*/React.createElement(ImageRenderer, {
|
|
471
498
|
dataURI: dataURI,
|
|
472
499
|
mediaType: mediaType,
|
|
473
|
-
mediaItemType: mediaItemType,
|
|
474
500
|
previewOrientation: previewOrientation,
|
|
475
501
|
alt: alt,
|
|
476
502
|
resizeMode: resizeMode,
|
|
477
503
|
onDisplayImage: onDisplayImage,
|
|
478
|
-
|
|
479
|
-
|
|
504
|
+
onImageLoad: this.onImageLoad,
|
|
505
|
+
onImageError: this.onImageError,
|
|
506
|
+
nativeLazyLoad: nativeLazyLoad,
|
|
507
|
+
forceSyncDisplay: forceSyncDisplay,
|
|
508
|
+
isImageVisible: forceSyncDisplay || didImageRender
|
|
480
509
|
});
|
|
481
510
|
}
|
|
482
511
|
|
|
@@ -5,12 +5,17 @@ export default class MediaInlineCardLoader extends React.PureComponent {
|
|
|
5
5
|
constructor(...args) {
|
|
6
6
|
super(...args);
|
|
7
7
|
|
|
8
|
+
_defineProperty(this, "isMounted", false);
|
|
9
|
+
|
|
8
10
|
_defineProperty(this, "state", {
|
|
9
|
-
MediaInlineCard: MediaInlineCardLoader.MediaInlineCard
|
|
11
|
+
MediaInlineCard: MediaInlineCardLoader.MediaInlineCard,
|
|
12
|
+
ErrorBoundary: MediaInlineCardLoader.ErrorBoundary
|
|
10
13
|
});
|
|
11
14
|
}
|
|
12
15
|
|
|
13
16
|
async componentDidMount() {
|
|
17
|
+
this.isMounted = true;
|
|
18
|
+
|
|
14
19
|
if (!this.state.MediaInlineCard) {
|
|
15
20
|
try {
|
|
16
21
|
const [mediaClient, cardModule, mediaCardErrorBoundaryModule] = await Promise.all([import(
|
|
@@ -22,14 +27,21 @@ export default class MediaInlineCardLoader extends React.PureComponent {
|
|
|
22
27
|
'../media-card-analytics-error-boundary')]);
|
|
23
28
|
MediaInlineCardLoader.MediaInlineCard = mediaClient.withMediaClient(cardModule.MediaInlineCard);
|
|
24
29
|
MediaInlineCardLoader.ErrorBoundary = mediaCardErrorBoundaryModule.default;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
30
|
+
|
|
31
|
+
if (this.isMounted) {
|
|
32
|
+
this.setState({
|
|
33
|
+
MediaInlineCard: MediaInlineCardLoader.MediaInlineCard,
|
|
34
|
+
ErrorBoundary: MediaInlineCardLoader.ErrorBoundary
|
|
35
|
+
});
|
|
36
|
+
}
|
|
29
37
|
} catch (error) {}
|
|
30
38
|
}
|
|
31
39
|
}
|
|
32
40
|
|
|
41
|
+
async componentWillUnmount() {
|
|
42
|
+
this.isMounted = false;
|
|
43
|
+
}
|
|
44
|
+
|
|
33
45
|
render() {
|
|
34
46
|
const {
|
|
35
47
|
MediaInlineCard,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { useState, useEffect } from 'react';
|
|
2
2
|
import ReactDOM from 'react-dom';
|
|
3
|
-
import { injectIntl } from 'react-intl';
|
|
3
|
+
import { injectIntl, IntlProvider, createIntl } from 'react-intl-next';
|
|
4
4
|
import { MediaInlineCardLoadedView, MediaInlineCardLoadingView, MediaInlineCardErroredView, messages } from '@atlaskit/media-ui';
|
|
5
5
|
import { MediaTypeIcon } from '@atlaskit/media-ui/media-type-icon';
|
|
6
6
|
import { MediaViewer } from '@atlaskit/media-viewer';
|
|
@@ -49,46 +49,64 @@ export const MediaInlineCardInternal = ({
|
|
|
49
49
|
return null;
|
|
50
50
|
};
|
|
51
51
|
|
|
52
|
+
const renderContent = children => {
|
|
53
|
+
return intl ? children : /*#__PURE__*/React.createElement(IntlProvider, {
|
|
54
|
+
locale: "en"
|
|
55
|
+
}, children);
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const defaultIntl = createIntl({
|
|
59
|
+
locale: 'en'
|
|
60
|
+
});
|
|
52
61
|
useEffect(() => {
|
|
53
|
-
mediaClient.file.getFileState(identifier.id, {
|
|
62
|
+
const subscription = mediaClient.file.getFileState(identifier.id, {
|
|
54
63
|
collectionName: identifier.collectionName
|
|
55
64
|
}).subscribe({
|
|
56
65
|
next: fileState => {
|
|
57
66
|
setFileState(fileState);
|
|
67
|
+
setIsErrored(false);
|
|
58
68
|
},
|
|
59
69
|
error: () => {
|
|
60
70
|
setIsErrored(true);
|
|
61
71
|
}
|
|
62
72
|
});
|
|
73
|
+
return () => {
|
|
74
|
+
subscription.unsubscribe();
|
|
75
|
+
};
|
|
63
76
|
}, [identifier.collectionName, identifier.id, mediaClient.file]);
|
|
64
77
|
|
|
65
78
|
if (!fileState) {
|
|
66
79
|
return /*#__PURE__*/React.createElement(MediaInlineCardLoadingView, {
|
|
67
|
-
message: intl.formatMessage(messages.loading_file)
|
|
80
|
+
message: (intl || defaultIntl).formatMessage(messages.loading_file),
|
|
81
|
+
isSelected: isSelected
|
|
68
82
|
});
|
|
69
83
|
}
|
|
70
84
|
|
|
71
85
|
if (isErrored) {
|
|
72
86
|
return /*#__PURE__*/React.createElement(MediaInlineCardErroredView, {
|
|
73
|
-
message: intl.formatMessage(messages.couldnt_load_file)
|
|
87
|
+
message: (intl || defaultIntl).formatMessage(messages.couldnt_load_file),
|
|
88
|
+
isSelected: isSelected
|
|
74
89
|
});
|
|
75
90
|
}
|
|
76
91
|
|
|
77
92
|
if (fileState.status === 'error') {
|
|
78
93
|
return /*#__PURE__*/React.createElement(MediaInlineCardErroredView, {
|
|
79
|
-
message: fileState.message || ''
|
|
94
|
+
message: fileState.message || '',
|
|
95
|
+
isSelected: isSelected
|
|
80
96
|
});
|
|
81
97
|
}
|
|
82
98
|
|
|
83
99
|
if (fileState.status === 'failed-processing') {
|
|
84
100
|
return /*#__PURE__*/React.createElement(MediaInlineCardErroredView, {
|
|
85
|
-
message: intl.formatMessage(messages.couldnt_load_file)
|
|
101
|
+
message: (intl || defaultIntl).formatMessage(messages.couldnt_load_file),
|
|
102
|
+
isSelected: isSelected
|
|
86
103
|
});
|
|
87
104
|
}
|
|
88
105
|
|
|
89
106
|
if (fileState.status === 'uploading') {
|
|
90
107
|
return /*#__PURE__*/React.createElement(MediaInlineCardLoadingView, {
|
|
91
|
-
message: fileState.name
|
|
108
|
+
message: fileState.name,
|
|
109
|
+
isSelected: isSelected
|
|
92
110
|
});
|
|
93
111
|
}
|
|
94
112
|
|
|
@@ -113,14 +131,17 @@ export const MediaInlineCardInternal = ({
|
|
|
113
131
|
formattedDate = formatDate(fileState.createdAt, locale);
|
|
114
132
|
}
|
|
115
133
|
|
|
116
|
-
return /*#__PURE__*/React.createElement(Tooltip, {
|
|
134
|
+
return renderContent( /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Tooltip, {
|
|
117
135
|
position: "bottom",
|
|
118
|
-
content: formattedDate
|
|
136
|
+
content: formattedDate,
|
|
137
|
+
tag: "span"
|
|
119
138
|
}, /*#__PURE__*/React.createElement(MediaInlineCardLoadedView, {
|
|
120
139
|
icon: linkIcon,
|
|
121
140
|
title: name,
|
|
122
141
|
onClick: onMediaInlineCardClick,
|
|
123
142
|
isSelected: isSelected
|
|
124
|
-
}), mediaViewer);
|
|
143
|
+
})), mediaViewer));
|
|
125
144
|
};
|
|
126
|
-
export const MediaInlineCard = injectIntl(MediaInlineCardInternal
|
|
145
|
+
export const MediaInlineCard = injectIntl(MediaInlineCardInternal, {
|
|
146
|
+
enforceContext: false
|
|
147
|
+
});
|
|
@@ -7,6 +7,10 @@ import { CustomMediaPlayer, InactivityDetector } from '@atlaskit/media-ui';
|
|
|
7
7
|
import { InlinePlayerWrapper } from './styled';
|
|
8
8
|
import { defaultImageCardDimensions } from '..';
|
|
9
9
|
import { CardLoading } from '../utils/lightCards/cardLoading';
|
|
10
|
+
import { ProgressBar } from './ui/progressBar/progressBar';
|
|
11
|
+
import { calcBreakpointSize } from './ui/styled';
|
|
12
|
+
import { isValidPercentageUnit } from '../utils/isValidPercentageUnit';
|
|
13
|
+
import { getElementDimension } from '../utils/getElementDimension';
|
|
10
14
|
export const inlinePlayerClassName = 'media-card-inline-player';
|
|
11
15
|
export const getPreferredVideoArtifact = fileState => {
|
|
12
16
|
if (fileState.status === 'processed' || fileState.status === 'processing') {
|
|
@@ -29,6 +33,8 @@ export class InlinePlayerBase extends Component {
|
|
|
29
33
|
|
|
30
34
|
_defineProperty(this, "state", {});
|
|
31
35
|
|
|
36
|
+
_defineProperty(this, "divRef", /*#__PURE__*/React.createRef());
|
|
37
|
+
|
|
32
38
|
_defineProperty(this, "setFileSrc", fileSrc => {
|
|
33
39
|
this.setState({
|
|
34
40
|
fileSrc
|
|
@@ -93,9 +99,31 @@ export class InlinePlayerBase extends Component {
|
|
|
93
99
|
viewingLevel: 'full'
|
|
94
100
|
});
|
|
95
101
|
});
|
|
102
|
+
|
|
103
|
+
_defineProperty(this, "saveElementWidth", () => {
|
|
104
|
+
const {
|
|
105
|
+
dimensions
|
|
106
|
+
} = this.props;
|
|
107
|
+
|
|
108
|
+
if (!dimensions) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const {
|
|
113
|
+
width
|
|
114
|
+
} = dimensions;
|
|
115
|
+
|
|
116
|
+
if (width && isValidPercentageUnit(width) && !!this.divRef.current) {
|
|
117
|
+
const elementWidth = getElementDimension(this.divRef.current, 'width');
|
|
118
|
+
this.setState({
|
|
119
|
+
elementWidth
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
});
|
|
96
123
|
}
|
|
97
124
|
|
|
98
125
|
componentDidMount() {
|
|
126
|
+
this.saveElementWidth();
|
|
99
127
|
const {
|
|
100
128
|
mediaClient,
|
|
101
129
|
identifier
|
|
@@ -110,6 +138,17 @@ export class InlinePlayerBase extends Component {
|
|
|
110
138
|
collectionName
|
|
111
139
|
}).subscribe({
|
|
112
140
|
next: async fileState => {
|
|
141
|
+
if (fileState.status === 'uploading') {
|
|
142
|
+
this.setState({
|
|
143
|
+
isUploading: true,
|
|
144
|
+
progress: fileState.progress
|
|
145
|
+
});
|
|
146
|
+
} else {
|
|
147
|
+
this.setState({
|
|
148
|
+
isUploading: false
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
|
|
113
152
|
const {
|
|
114
153
|
fileSrc: existingFileSrc
|
|
115
154
|
} = this.state; // we want to reuse the existing fileSrc to prevent re renders
|
|
@@ -163,6 +202,11 @@ export class InlinePlayerBase extends Component {
|
|
|
163
202
|
this.revoke();
|
|
164
203
|
}
|
|
165
204
|
|
|
205
|
+
get breakpoint() {
|
|
206
|
+
const width = this.state.elementWidth || (this.props.dimensions ? this.props.dimensions.width : '') || defaultImageCardDimensions.width;
|
|
207
|
+
return calcBreakpointSize(parseInt(`${width}`, 10));
|
|
208
|
+
}
|
|
209
|
+
|
|
166
210
|
render() {
|
|
167
211
|
const {
|
|
168
212
|
onClick,
|
|
@@ -171,10 +215,13 @@ export class InlinePlayerBase extends Component {
|
|
|
171
215
|
selected,
|
|
172
216
|
testId,
|
|
173
217
|
identifier,
|
|
174
|
-
forwardRef
|
|
218
|
+
forwardRef,
|
|
219
|
+
autoplay
|
|
175
220
|
} = this.props;
|
|
176
221
|
const {
|
|
177
|
-
fileSrc
|
|
222
|
+
fileSrc,
|
|
223
|
+
isUploading,
|
|
224
|
+
progress
|
|
178
225
|
} = this.state;
|
|
179
226
|
|
|
180
227
|
if (!fileSrc) {
|
|
@@ -195,7 +242,7 @@ export class InlinePlayerBase extends Component {
|
|
|
195
242
|
type: "video",
|
|
196
243
|
src: fileSrc,
|
|
197
244
|
fileId: identifier.id,
|
|
198
|
-
isAutoPlay:
|
|
245
|
+
isAutoPlay: autoplay,
|
|
199
246
|
isHDAvailable: false,
|
|
200
247
|
onDownloadClick: this.onDownloadClick,
|
|
201
248
|
onFirstPlay: this.onFirstPlay,
|
|
@@ -204,7 +251,12 @@ export class InlinePlayerBase extends Component {
|
|
|
204
251
|
},
|
|
205
252
|
originalDimensions: originalDimensions,
|
|
206
253
|
showControls: checkMouseMovement
|
|
207
|
-
}))
|
|
254
|
+
})), isUploading ? /*#__PURE__*/React.createElement(ProgressBar, {
|
|
255
|
+
progress: progress,
|
|
256
|
+
breakpoint: this.breakpoint,
|
|
257
|
+
positionBottom: true,
|
|
258
|
+
showOnTop: true
|
|
259
|
+
}) : null);
|
|
208
260
|
}
|
|
209
261
|
|
|
210
262
|
}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
export let Breakpoint;
|
|
2
|
+
|
|
3
|
+
(function (Breakpoint) {
|
|
4
|
+
Breakpoint["SMALL"] = "small";
|
|
5
|
+
Breakpoint["LARGE"] = "large";
|
|
6
|
+
})(Breakpoint || (Breakpoint = {}));
|
|
7
|
+
|
|
2
8
|
export const responsiveSettings = {
|
|
3
9
|
[Breakpoint.SMALL]: {
|
|
4
10
|
fontSize: 11,
|
|
@@ -2,7 +2,8 @@ import _extends from "@babel/runtime/helpers/extends";
|
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { IconMessageWrapper } from './styled';
|
|
4
4
|
import { messages } from '@atlaskit/media-ui';
|
|
5
|
-
import { FormattedMessage } from 'react-intl';
|
|
5
|
+
import { FormattedMessage } from 'react-intl-next';
|
|
6
|
+
import { FormattedMessageWrapper } from '../../styled';
|
|
6
7
|
export const IconMessage = ({
|
|
7
8
|
messageDescriptor,
|
|
8
9
|
animated = false,
|
|
@@ -11,7 +12,7 @@ export const IconMessage = ({
|
|
|
11
12
|
return /*#__PURE__*/React.createElement(IconMessageWrapper, {
|
|
12
13
|
animated: animated,
|
|
13
14
|
reducedFont: reducedFont
|
|
14
|
-
}, /*#__PURE__*/React.createElement(FormattedMessage, messageDescriptor));
|
|
15
|
+
}, /*#__PURE__*/React.createElement(FormattedMessageWrapper, null, /*#__PURE__*/React.createElement(FormattedMessage, messageDescriptor)));
|
|
15
16
|
};
|
|
16
17
|
export const CreatingPreview = ({
|
|
17
18
|
disableAnimation
|
|
@@ -22,9 +23,11 @@ export const CreatingPreview = ({
|
|
|
22
23
|
export const PreviewUnavailable = props => /*#__PURE__*/React.createElement(IconMessage, _extends({}, props, {
|
|
23
24
|
messageDescriptor: messages.preview_unavailable
|
|
24
25
|
}));
|
|
25
|
-
export const
|
|
26
|
-
messageDescriptor: messages.
|
|
27
|
-
|
|
26
|
+
export const FailedToLoad = props => /*#__PURE__*/React.createElement(IconMessage, _extends({}, props, {
|
|
27
|
+
messageDescriptor: messages.failed_to_load
|
|
28
|
+
}));
|
|
29
|
+
export const FailedToUpload = props => /*#__PURE__*/React.createElement(IconMessage, _extends({}, props, {
|
|
30
|
+
messageDescriptor: messages.failed_to_upload
|
|
28
31
|
}));
|
|
29
32
|
export const PreviewCurrentlyUnavailable = props => /*#__PURE__*/React.createElement(IconMessage, _extends({}, props, {
|
|
30
33
|
messageDescriptor: messages.preview_currently_unavailable,
|