@atlaskit/media-card 70.11.0 → 73.0.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/errors.js +78 -5
- 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 +12 -6
- package/dist/cjs/root/card/cardAnalytics.js +11 -17
- 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 +6 -1
- 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 +176 -102
- package/dist/cjs/root/card/getCardStatus.js +7 -1
- package/dist/cjs/root/card/index.js +361 -281
- package/dist/cjs/root/cardView.js +109 -86
- package/dist/cjs/root/index.js +9 -1
- package/dist/cjs/root/inline/loader.js +22 -21
- package/dist/cjs/root/inline/{inlineMediaCard.js → mediaInlineCard.js} +84 -26
- package/dist/cjs/root/inlinePlayer.js +4 -3
- 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 +34 -124
- package/dist/cjs/root/ui/loadingRateLimited/loadingRateLimited.js +6 -4
- package/dist/cjs/root/ui/loadingRateLimited/styled.js +1 -1
- package/dist/cjs/root/ui/playButton/styled.js +1 -1
- package/dist/cjs/root/ui/progressBar/progressBar.js +2 -2
- package/dist/cjs/root/ui/progressBar/styled.js +2 -4
- 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 +21 -43
- package/dist/cjs/utils/breakpoint.js +1 -1
- package/dist/cjs/utils/cardActions/cardActionsDropdownMenu.js +16 -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 +1 -1
- 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/index.js +1 -1
- package/dist/es2019/root/card/cardAnalytics.js +7 -15
- 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 -79
- package/dist/es2019/root/card/getCardStatus.js +1 -0
- package/dist/es2019/root/card/index.js +285 -190
- package/dist/es2019/root/cardView.js +93 -68
- package/dist/es2019/root/index.js +2 -1
- package/dist/es2019/root/inline/loader.js +16 -15
- package/dist/es2019/root/inline/mediaInlineCard.js +143 -0
- package/dist/es2019/root/inlinePlayer.js +3 -2
- 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 +25 -88
- package/dist/es2019/root/ui/loadingRateLimited/loadingRateLimited.js +4 -3
- package/dist/es2019/root/ui/progressBar/progressBar.js +1 -1
- package/dist/es2019/root/ui/progressBar/styled.js +1 -2
- package/dist/es2019/root/ui/styled.js +64 -3
- 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 +15 -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/version.json +1 -1
- package/dist/esm/errors.js +60 -1
- package/dist/esm/files/cardImageView/index.js +51 -102
- package/dist/esm/files/index.js +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/root/card/cardAnalytics.js +7 -16
- 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 +6 -0
- 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 +142 -95
- package/dist/esm/root/card/getCardStatus.js +3 -0
- package/dist/esm/root/card/index.js +370 -284
- package/dist/esm/root/cardView.js +109 -84
- package/dist/esm/root/index.js +2 -1
- package/dist/esm/root/inline/loader.js +23 -22
- package/dist/esm/root/inline/mediaInlineCard.js +156 -0
- package/dist/esm/root/inlinePlayer.js +3 -2
- 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 +27 -118
- package/dist/esm/root/ui/loadingRateLimited/loadingRateLimited.js +4 -3
- package/dist/esm/root/ui/progressBar/progressBar.js +1 -1
- package/dist/esm/root/ui/progressBar/styled.js +1 -2
- 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 +16 -35
- package/dist/esm/utils/cardActions/cardActionsDropdownMenu.js +16 -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/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 -5
- package/dist/types/root/card/cardAnalytics.d.ts +2 -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 +19 -18
- package/dist/types/root/cardView.d.ts +13 -8
- package/dist/types/root/index.d.ts +1 -0
- package/dist/types/root/inline/loader.d.ts +8 -8
- package/dist/types/root/inline/{inlineMediaCard.d.ts → mediaInlineCard.d.ts} +4 -6
- package/dist/types/root/inlinePlayer.d.ts +1 -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 +5 -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 +2 -1
- package/dist/types/root/ui/progressBar/styled.d.ts +1 -1
- 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 +14 -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/example-helpers/developmentUseMessage.tsx +14 -0
- package/example-helpers/index.tsx +55 -4
- package/example-helpers/selectableCard.tsx +2 -1
- package/package.json +20 -16
- package/dist/cjs/root/card/cardSSRView.js +0 -99
- 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/es2019/root/card/cardSSRView.js +0 -79
- package/dist/es2019/root/card/getCardPreview/types.js +0 -1
- package/dist/es2019/root/inline/inlineMediaCard.js +0 -92
- 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/esm/root/card/cardSSRView.js +0 -78
- package/dist/esm/root/card/getCardPreview/types.js +0 -1
- package/dist/esm/root/inline/inlineMediaCard.js +0 -100
- 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/types/root/card/cardSSRView.d.ts +0 -12
- 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
|
@@ -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,20 @@ 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;
|
|
470
494
|
return !!dataURI && /*#__PURE__*/React.createElement(ImageRenderer, {
|
|
471
495
|
dataURI: dataURI,
|
|
472
496
|
mediaType: mediaType,
|
|
473
|
-
mediaItemType: mediaItemType,
|
|
474
497
|
previewOrientation: previewOrientation,
|
|
475
498
|
alt: alt,
|
|
476
499
|
resizeMode: resizeMode,
|
|
477
500
|
onDisplayImage: onDisplayImage,
|
|
478
|
-
|
|
479
|
-
|
|
501
|
+
onImageLoad: this.onImageLoad,
|
|
502
|
+
onImageError: this.onImageError,
|
|
503
|
+
nativeLazyLoad: nativeLazyLoad,
|
|
504
|
+
forceSyncDisplay: forceSyncDisplay
|
|
480
505
|
});
|
|
481
506
|
}
|
|
482
507
|
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export { default as Card } from './card/cardLoader';
|
|
1
|
+
export { default as Card } from './card/cardLoader';
|
|
2
|
+
export { default as MediaInlineCard } from './inline/loader';
|
|
@@ -1,30 +1,31 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
2
|
import React from 'react';
|
|
3
|
-
import {
|
|
4
|
-
export default class
|
|
3
|
+
import { MediaInlineCardLoadingView } from '@atlaskit/media-ui';
|
|
4
|
+
export default class MediaInlineCardLoader extends React.PureComponent {
|
|
5
5
|
constructor(...args) {
|
|
6
6
|
super(...args);
|
|
7
7
|
|
|
8
8
|
_defineProperty(this, "state", {
|
|
9
|
-
|
|
9
|
+
MediaInlineCard: MediaInlineCardLoader.MediaInlineCard,
|
|
10
|
+
ErrorBoundary: MediaInlineCardLoader.ErrorBoundary
|
|
10
11
|
});
|
|
11
12
|
}
|
|
12
13
|
|
|
13
14
|
async componentDidMount() {
|
|
14
|
-
if (!this.state.
|
|
15
|
+
if (!this.state.MediaInlineCard) {
|
|
15
16
|
try {
|
|
16
17
|
const [mediaClient, cardModule, mediaCardErrorBoundaryModule] = await Promise.all([import(
|
|
17
18
|
/* webpackChunkName: "@atlaskit-internal_media-client" */
|
|
18
19
|
'@atlaskit/media-client'), import(
|
|
19
20
|
/* webpackChunkName: "@atlaskit-internal_inline-media-card" */
|
|
20
|
-
'./
|
|
21
|
+
'./mediaInlineCard'), import(
|
|
21
22
|
/* webpackChunkName: "@atlaskit-internal_media-card-error-boundary" */
|
|
22
23
|
'../media-card-analytics-error-boundary')]);
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
MediaInlineCardLoader.MediaInlineCard = mediaClient.withMediaClient(cardModule.MediaInlineCard);
|
|
25
|
+
MediaInlineCardLoader.ErrorBoundary = mediaCardErrorBoundaryModule.default;
|
|
25
26
|
this.setState({
|
|
26
|
-
|
|
27
|
-
ErrorBoundary:
|
|
27
|
+
MediaInlineCard: MediaInlineCardLoader.MediaInlineCard,
|
|
28
|
+
ErrorBoundary: MediaInlineCardLoader.ErrorBoundary
|
|
28
29
|
});
|
|
29
30
|
} catch (error) {}
|
|
30
31
|
}
|
|
@@ -32,19 +33,19 @@ export default class InlineMediaCardLoader extends React.PureComponent {
|
|
|
32
33
|
|
|
33
34
|
render() {
|
|
34
35
|
const {
|
|
35
|
-
|
|
36
|
+
MediaInlineCard,
|
|
36
37
|
ErrorBoundary
|
|
37
38
|
} = this.state;
|
|
38
39
|
|
|
39
|
-
if (!
|
|
40
|
-
return /*#__PURE__*/React.createElement(
|
|
41
|
-
|
|
40
|
+
if (!MediaInlineCard || !ErrorBoundary) {
|
|
41
|
+
return /*#__PURE__*/React.createElement(MediaInlineCardLoadingView, {
|
|
42
|
+
message: ""
|
|
42
43
|
});
|
|
43
44
|
}
|
|
44
45
|
|
|
45
|
-
return /*#__PURE__*/React.createElement(ErrorBoundary, null, /*#__PURE__*/React.createElement(
|
|
46
|
+
return /*#__PURE__*/React.createElement(ErrorBoundary, null, /*#__PURE__*/React.createElement(MediaInlineCard, this.props));
|
|
46
47
|
}
|
|
47
48
|
|
|
48
49
|
}
|
|
49
50
|
|
|
50
|
-
_defineProperty(
|
|
51
|
+
_defineProperty(MediaInlineCardLoader, "displayName", 'MediaInlineCardLoader');
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import React, { useState, useEffect } from 'react';
|
|
2
|
+
import ReactDOM from 'react-dom';
|
|
3
|
+
import { injectIntl, IntlProvider, createIntl } from 'react-intl-next';
|
|
4
|
+
import { MediaInlineCardLoadedView, MediaInlineCardLoadingView, MediaInlineCardErroredView, messages } from '@atlaskit/media-ui';
|
|
5
|
+
import { MediaTypeIcon } from '@atlaskit/media-ui/media-type-icon';
|
|
6
|
+
import { MediaViewer } from '@atlaskit/media-viewer';
|
|
7
|
+
import Tooltip from '@atlaskit/tooltip';
|
|
8
|
+
import { formatDate } from '@atlaskit/media-ui/formatDate';
|
|
9
|
+
// UI component which renders an inline link in the appropiate state based on a media file
|
|
10
|
+
export const MediaInlineCardInternal = ({
|
|
11
|
+
mediaClient,
|
|
12
|
+
identifier,
|
|
13
|
+
shouldOpenMediaViewer,
|
|
14
|
+
isSelected,
|
|
15
|
+
onClick,
|
|
16
|
+
mediaViewerDataSource,
|
|
17
|
+
intl
|
|
18
|
+
}) => {
|
|
19
|
+
const [fileState, setFileState] = useState();
|
|
20
|
+
const [isErrored, setIsErrored] = useState(false);
|
|
21
|
+
const [isMediaViewerVisible, setMediaViewerVisible] = useState(false);
|
|
22
|
+
|
|
23
|
+
const onMediaInlineCardClick = event => {
|
|
24
|
+
if (shouldOpenMediaViewer) {
|
|
25
|
+
setMediaViewerVisible(true);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (onClick) {
|
|
29
|
+
onClick(event);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const onMediaViewerClose = () => setMediaViewerVisible(false);
|
|
34
|
+
|
|
35
|
+
const renderMediaViewer = () => {
|
|
36
|
+
if (isMediaViewerVisible) {
|
|
37
|
+
const dataSource = mediaViewerDataSource || {
|
|
38
|
+
list: []
|
|
39
|
+
};
|
|
40
|
+
return /*#__PURE__*/ReactDOM.createPortal( /*#__PURE__*/React.createElement(MediaViewer, {
|
|
41
|
+
collectionName: identifier.collectionName || '',
|
|
42
|
+
dataSource: dataSource,
|
|
43
|
+
mediaClientConfig: mediaClient.mediaClientConfig,
|
|
44
|
+
selectedItem: identifier,
|
|
45
|
+
onClose: onMediaViewerClose
|
|
46
|
+
}), document.body);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return null;
|
|
50
|
+
};
|
|
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
|
+
});
|
|
61
|
+
useEffect(() => {
|
|
62
|
+
mediaClient.file.getFileState(identifier.id, {
|
|
63
|
+
collectionName: identifier.collectionName
|
|
64
|
+
}).subscribe({
|
|
65
|
+
next: fileState => {
|
|
66
|
+
setFileState(fileState);
|
|
67
|
+
},
|
|
68
|
+
error: () => {
|
|
69
|
+
setIsErrored(true);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}, [identifier.collectionName, identifier.id, mediaClient.file]);
|
|
73
|
+
|
|
74
|
+
if (!fileState) {
|
|
75
|
+
return /*#__PURE__*/React.createElement(MediaInlineCardLoadingView, {
|
|
76
|
+
message: (intl || defaultIntl).formatMessage(messages.loading_file),
|
|
77
|
+
isSelected: isSelected
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (isErrored) {
|
|
82
|
+
return /*#__PURE__*/React.createElement(MediaInlineCardErroredView, {
|
|
83
|
+
message: (intl || defaultIntl).formatMessage(messages.couldnt_load_file),
|
|
84
|
+
isSelected: isSelected
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if (fileState.status === 'error') {
|
|
89
|
+
return /*#__PURE__*/React.createElement(MediaInlineCardErroredView, {
|
|
90
|
+
message: fileState.message || '',
|
|
91
|
+
isSelected: isSelected
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (fileState.status === 'failed-processing') {
|
|
96
|
+
return /*#__PURE__*/React.createElement(MediaInlineCardErroredView, {
|
|
97
|
+
message: (intl || defaultIntl).formatMessage(messages.couldnt_load_file),
|
|
98
|
+
isSelected: isSelected
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (fileState.status === 'uploading') {
|
|
103
|
+
return /*#__PURE__*/React.createElement(MediaInlineCardLoadingView, {
|
|
104
|
+
message: fileState.name,
|
|
105
|
+
isSelected: isSelected
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const {
|
|
110
|
+
mediaType,
|
|
111
|
+
name
|
|
112
|
+
} = fileState;
|
|
113
|
+
const linkIcon = /*#__PURE__*/React.createElement(MediaTypeIcon, {
|
|
114
|
+
testId: 'media-inline-card-file-type-icon',
|
|
115
|
+
size: "small",
|
|
116
|
+
type: mediaType
|
|
117
|
+
});
|
|
118
|
+
const mediaViewer = renderMediaViewer();
|
|
119
|
+
let formattedDate;
|
|
120
|
+
|
|
121
|
+
if (fileState.createdAt) {
|
|
122
|
+
const {
|
|
123
|
+
locale = 'en'
|
|
124
|
+
} = intl || {
|
|
125
|
+
locale: 'en'
|
|
126
|
+
};
|
|
127
|
+
formattedDate = formatDate(fileState.createdAt, locale);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
return renderContent( /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Tooltip, {
|
|
131
|
+
position: "bottom",
|
|
132
|
+
content: formattedDate,
|
|
133
|
+
tag: "span"
|
|
134
|
+
}, /*#__PURE__*/React.createElement(MediaInlineCardLoadedView, {
|
|
135
|
+
icon: linkIcon,
|
|
136
|
+
title: name,
|
|
137
|
+
onClick: onMediaInlineCardClick,
|
|
138
|
+
isSelected: isSelected
|
|
139
|
+
})), mediaViewer));
|
|
140
|
+
};
|
|
141
|
+
export const MediaInlineCard = injectIntl(MediaInlineCardInternal, {
|
|
142
|
+
enforceContext: false
|
|
143
|
+
});
|
|
@@ -191,7 +191,7 @@ export class InlinePlayerBase extends Component {
|
|
|
191
191
|
onClick: onClick,
|
|
192
192
|
innerRef: forwardRef || undefined,
|
|
193
193
|
dimensions: dimensions
|
|
194
|
-
}, /*#__PURE__*/React.createElement(InactivityDetector, null,
|
|
194
|
+
}, /*#__PURE__*/React.createElement(InactivityDetector, null, checkMouseMovement => /*#__PURE__*/React.createElement(CustomMediaPlayer, {
|
|
195
195
|
type: "video",
|
|
196
196
|
src: fileSrc,
|
|
197
197
|
fileId: identifier.id,
|
|
@@ -202,7 +202,8 @@ export class InlinePlayerBase extends Component {
|
|
|
202
202
|
lastWatchTimeConfig: {
|
|
203
203
|
contentId: identifier.id
|
|
204
204
|
},
|
|
205
|
-
originalDimensions: originalDimensions
|
|
205
|
+
originalDimensions: originalDimensions,
|
|
206
|
+
showControls: checkMouseMovement
|
|
206
207
|
})));
|
|
207
208
|
}
|
|
208
209
|
|
|
@@ -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,
|