@atlaskit/media-card 70.9.0 → 72.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 +69 -0
- package/dist/cjs/errors.js +109 -6
- package/dist/cjs/files/cardImageView/index.js +58 -89
- package/dist/cjs/files/index.js +0 -6
- package/dist/cjs/index.js +16 -6
- package/dist/cjs/root/card/cardAnalytics.js +33 -19
- package/dist/cjs/root/card/cardConstants.js +8 -0
- package/dist/cjs/root/card/cardSSRView.js +114 -0
- package/dist/cjs/root/card/cardState.js +50 -0
- package/dist/cjs/root/card/getCardPreview/cache.js +49 -0
- package/dist/cjs/root/card/getCardPreview/filePreviewStatus.js +50 -0
- package/dist/cjs/root/card/getCardPreview/helpers.js +215 -0
- package/dist/cjs/root/card/getCardPreview/index.js +225 -0
- package/dist/cjs/root/card/getCardStatus.js +16 -21
- package/dist/cjs/root/card/index.js +339 -398
- package/dist/cjs/root/cardView.js +108 -56
- 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} +66 -24
- package/dist/cjs/root/inlinePlayer.js +5 -15
- package/dist/cjs/root/ui/Breakpoint.js +13 -0
- package/dist/cjs/root/ui/common.js +5 -11
- package/dist/cjs/root/ui/iconMessage/index.js +17 -9
- package/dist/cjs/root/ui/imageRenderer/imageRenderer.js +32 -115
- package/dist/cjs/root/ui/loadingRateLimited/loadingRateLimited.js +2 -2
- package/dist/cjs/root/ui/progressBar/progressBar.js +2 -2
- package/dist/cjs/root/ui/progressBar/styled.js +3 -1
- package/dist/cjs/root/ui/styled.js +17 -80
- package/dist/cjs/root/ui/styledSSR.js +108 -0
- package/dist/cjs/root/ui/titleBox/failedTitleBox.js +7 -3
- package/dist/cjs/root/ui/titleBox/styled.js +3 -1
- package/dist/cjs/utils/analytics.js +26 -43
- package/dist/cjs/utils/dimensionComparer.js +1 -1
- package/dist/cjs/utils/document.js +12 -0
- package/dist/cjs/utils/getDataURIDimension.js +13 -2
- package/dist/cjs/utils/metadata.js +11 -3
- package/dist/cjs/utils/objectURLCache.js +6 -0
- package/dist/cjs/utils/resizeModeToMediaImageProps.js +13 -0
- package/dist/cjs/utils/shouldDisplayImageThumbnail.js +1 -1
- package/dist/cjs/utils/videoSnapshot.js +45 -0
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/errors.js +52 -2
- package/dist/es2019/files/cardImageView/index.js +12 -46
- package/dist/es2019/files/index.js +1 -1
- package/dist/es2019/index.js +3 -3
- package/dist/es2019/root/card/cardAnalytics.js +23 -17
- package/dist/es2019/root/card/cardConstants.js +1 -0
- package/dist/es2019/root/card/cardSSRView.js +93 -0
- package/dist/es2019/root/card/cardState.js +26 -0
- package/dist/es2019/root/card/getCardPreview/cache.js +29 -0
- package/dist/es2019/root/card/getCardPreview/filePreviewStatus.js +35 -0
- package/dist/es2019/root/card/getCardPreview/helpers.js +83 -0
- package/dist/es2019/root/card/getCardPreview/index.js +129 -0
- package/dist/es2019/root/card/getCardStatus.js +11 -15
- package/dist/es2019/root/card/index.js +292 -276
- package/dist/es2019/root/cardView.js +107 -53
- package/dist/es2019/root/index.js +2 -1
- package/dist/es2019/root/inline/loader.js +16 -15
- package/dist/es2019/root/inline/mediaInlineCard.js +127 -0
- package/dist/es2019/root/inlinePlayer.js +5 -13
- package/dist/es2019/root/ui/Breakpoint.js +6 -0
- package/dist/es2019/root/ui/common.js +1 -7
- package/dist/es2019/root/ui/iconMessage/index.js +10 -6
- package/dist/es2019/root/ui/imageRenderer/imageRenderer.js +22 -74
- package/dist/es2019/root/ui/loadingRateLimited/loadingRateLimited.js +1 -1
- package/dist/es2019/root/ui/progressBar/progressBar.js +1 -1
- package/dist/es2019/root/ui/progressBar/styled.js +2 -1
- package/dist/es2019/root/ui/styled.js +4 -64
- package/dist/es2019/root/ui/styledSSR.js +93 -0
- package/dist/es2019/root/ui/titleBox/failedTitleBox.js +5 -3
- package/dist/es2019/root/ui/titleBox/styled.js +2 -1
- package/dist/es2019/utils/analytics.js +29 -40
- package/dist/es2019/utils/dimensionComparer.js +1 -1
- package/dist/es2019/utils/document.js +1 -0
- package/dist/es2019/utils/getDataURIDimension.js +8 -0
- package/dist/es2019/utils/metadata.js +12 -4
- package/dist/es2019/utils/objectURLCache.js +5 -0
- package/dist/es2019/utils/resizeModeToMediaImageProps.js +6 -0
- package/dist/es2019/utils/shouldDisplayImageThumbnail.js +1 -1
- package/dist/es2019/utils/videoSnapshot.js +7 -0
- package/dist/es2019/version.json +1 -1
- package/dist/esm/errors.js +85 -2
- package/dist/esm/files/cardImageView/index.js +55 -87
- package/dist/esm/files/index.js +1 -1
- package/dist/esm/index.js +3 -3
- package/dist/esm/root/card/cardAnalytics.js +23 -18
- package/dist/esm/root/card/cardConstants.js +1 -0
- package/dist/esm/root/card/cardSSRView.js +92 -0
- package/dist/esm/root/card/cardState.js +32 -0
- package/dist/esm/root/card/getCardPreview/cache.js +33 -0
- package/dist/esm/root/card/getCardPreview/filePreviewStatus.js +35 -0
- package/dist/esm/root/card/getCardPreview/helpers.js +194 -0
- package/dist/esm/root/card/getCardPreview/index.js +174 -0
- package/dist/esm/root/card/getCardStatus.js +13 -17
- package/dist/esm/root/card/index.js +349 -401
- package/dist/esm/root/cardView.js +105 -52
- package/dist/esm/root/index.js +2 -1
- package/dist/esm/root/inline/loader.js +23 -22
- package/dist/esm/root/inline/{inlineMediaCard.js → mediaInlineCard.js} +62 -22
- package/dist/esm/root/inlinePlayer.js +5 -13
- package/dist/esm/root/ui/Breakpoint.js +6 -0
- package/dist/esm/root/ui/common.js +1 -7
- package/dist/esm/root/ui/iconMessage/index.js +12 -7
- package/dist/esm/root/ui/imageRenderer/imageRenderer.js +24 -106
- package/dist/esm/root/ui/loadingRateLimited/loadingRateLimited.js +1 -1
- package/dist/esm/root/ui/progressBar/progressBar.js +1 -1
- package/dist/esm/root/ui/progressBar/styled.js +2 -1
- package/dist/esm/root/ui/styled.js +13 -61
- package/dist/esm/root/ui/styledSSR.js +76 -0
- package/dist/esm/root/ui/titleBox/failedTitleBox.js +6 -3
- package/dist/esm/root/ui/titleBox/styled.js +2 -1
- package/dist/esm/utils/analytics.js +22 -35
- package/dist/esm/utils/dimensionComparer.js +1 -1
- package/dist/esm/utils/document.js +3 -0
- package/dist/esm/utils/getDataURIDimension.js +8 -0
- package/dist/esm/utils/metadata.js +12 -4
- package/dist/esm/utils/objectURLCache.js +6 -0
- package/dist/esm/utils/resizeModeToMediaImageProps.js +6 -0
- package/dist/esm/utils/shouldDisplayImageThumbnail.js +1 -1
- package/dist/esm/utils/videoSnapshot.js +31 -0
- package/dist/esm/version.json +1 -1
- package/dist/types/__tests_external__/page-objects/MediaCard.d.ts +4 -3
- package/dist/types/errors.d.ts +24 -2
- package/dist/types/files/cardImageView/index.d.ts +5 -12
- 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 +9 -12
- package/dist/types/root/card/cardAnalytics.d.ts +5 -7
- package/dist/types/root/card/cardConstants.d.ts +1 -0
- package/dist/types/root/card/cardSSRView.d.ts +13 -0
- package/dist/types/root/card/cardState.d.ts +5 -0
- package/dist/types/root/card/getCardPreview/cache.d.ts +18 -0
- package/dist/types/root/card/getCardPreview/filePreviewStatus.d.ts +5 -0
- package/dist/types/root/card/getCardPreview/helpers.d.ts +9 -0
- package/dist/types/root/card/getCardPreview/index.d.ts +44 -0
- package/dist/types/root/card/getCardStatus.d.ts +4 -14
- package/dist/types/root/card/index.d.ts +17 -21
- package/dist/types/root/cardView.d.ts +12 -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 -4
- package/dist/types/root/inlinePlayer.d.ts +1 -1
- package/dist/types/root/ui/Breakpoint.d.ts +4 -0
- package/dist/types/root/ui/common.d.ts +1 -4
- package/dist/types/root/ui/iconMessage/index.d.ts +7 -2
- package/dist/types/root/ui/iconWrapper/styled.d.ts +1 -1
- package/dist/types/root/ui/imageRenderer/imageRenderer.d.ts +2 -16
- package/dist/types/root/ui/loadingRateLimited/loadingRateLimited.d.ts +1 -1
- package/dist/types/root/ui/loadingRateLimited/styled.d.ts +1 -1
- package/dist/types/root/ui/progressBar/progressBar.d.ts +1 -1
- package/dist/types/root/ui/progressBar/styled.d.ts +1 -1
- package/dist/types/root/ui/styled.d.ts +3 -10
- package/dist/types/root/ui/styledSSR.d.ts +16 -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 +1 -1
- package/dist/types/types.d.ts +15 -1
- package/dist/types/utils/analytics.d.ts +20 -21
- package/dist/types/utils/cardDimensions.d.ts +5 -1
- package/dist/types/utils/dimensionComparer.d.ts +1 -1
- package/dist/types/utils/document.d.ts +2 -0
- package/dist/types/utils/getDataURIDimension.d.ts +3 -1
- package/dist/types/utils/index.d.ts +1 -0
- package/dist/types/utils/lazyContent/styled.d.ts +1 -1
- package/dist/types/utils/lightCards/types.d.ts +1 -1
- package/dist/types/utils/metadata.d.ts +2 -2
- package/dist/types/utils/objectURLCache.d.ts +2 -1
- package/dist/types/utils/resizeModeToMediaImageProps.d.ts +5 -0
- package/dist/types/utils/shouldDisplayImageThumbnail.d.ts +1 -1
- package/dist/types/utils/videoSnapshot.d.ts +1 -0
- package/example-helpers/index.tsx +21 -0
- package/package.json +19 -17
- package/dist/cjs/root/card/getCardPreview.js +0 -173
- package/dist/cjs/utils/fileAttributesContext.js +0 -40
- package/dist/es2019/root/card/getCardPreview.js +0 -86
- package/dist/es2019/root/inline/inlineMediaCard.js +0 -92
- package/dist/es2019/utils/fileAttributesContext.js +0 -19
- package/dist/esm/root/card/getCardPreview.js +0 -153
- package/dist/esm/utils/fileAttributesContext.js +0 -18
- package/dist/types/root/card/getCardPreview.d.ts +0 -8
- package/dist/types/utils/fileAttributesContext.d.ts +0 -10
|
@@ -12,8 +12,9 @@ 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
|
|
15
|
+
import { toHumanReadableMediaSize, messages } from '@atlaskit/media-ui';
|
|
16
|
+
import { NewFileExperienceWrapper } from './ui/styled';
|
|
17
|
+
import { CardImageContainer, calcBreakpointSize } from './ui/styledSSR';
|
|
17
18
|
import { ImageRenderer } from './ui/imageRenderer/imageRenderer';
|
|
18
19
|
import { TitleBox } from './ui/titleBox/titleBox';
|
|
19
20
|
import { FailedTitleBox } from './ui/titleBox/failedTitleBox';
|
|
@@ -26,10 +27,10 @@ import Tooltip from '@atlaskit/tooltip';
|
|
|
26
27
|
import { IconWrapper } from './ui/iconWrapper/styled';
|
|
27
28
|
import { MimeTypeIcon } from '@atlaskit/media-ui/mime-type-icon';
|
|
28
29
|
import SpinnerIcon from '@atlaskit/spinner';
|
|
29
|
-
import { PreviewUnavailable, CreatingPreview,
|
|
30
|
-
import { LoadingRateLimited } from './ui/loadingRateLimited/loadingRateLimited';
|
|
30
|
+
import { PreviewUnavailable, CreatingPreview, FailedToUpload, PreviewCurrentlyUnavailable, FailedToLoad } from './ui/iconMessage';
|
|
31
31
|
import { isRateLimitedError, isPollingError } from '@atlaskit/media-client';
|
|
32
|
-
|
|
32
|
+
import { newFileExperienceClassName } from './card/cardConstants';
|
|
33
|
+
import { isUploadError } from '../errors';
|
|
33
34
|
|
|
34
35
|
/**
|
|
35
36
|
* This is classic vanilla CardView class. To create an instance of class one would need to supply
|
|
@@ -40,15 +41,37 @@ export class CardViewBase extends React.Component {
|
|
|
40
41
|
super(...args);
|
|
41
42
|
|
|
42
43
|
_defineProperty(this, "state", {
|
|
43
|
-
|
|
44
|
+
didImageRender: false
|
|
44
45
|
});
|
|
45
46
|
|
|
46
47
|
_defineProperty(this, "divRef", /*#__PURE__*/React.createRef());
|
|
47
48
|
|
|
48
|
-
_defineProperty(this, "
|
|
49
|
+
_defineProperty(this, "onImageLoad", () => {
|
|
50
|
+
const {
|
|
51
|
+
onImageLoad
|
|
52
|
+
} = this.props; // We render the icon & icon message always, even if there is dataURI available.
|
|
53
|
+
// If the image fails to load/render, the icon will remain, i.e. the user won't see a change until
|
|
54
|
+
// the root card decides to chage status to error.
|
|
55
|
+
// If the image renders successfully, we switch this variable to hide the icon & icon message
|
|
56
|
+
// behind the thumbnail in case the image has transparency.
|
|
57
|
+
// It is less likely that root component replaces a suceeded dataURI for a failed one
|
|
58
|
+
// than the opposite case. Therefore we prefer to hide the icon instead show when the image fails,
|
|
59
|
+
// for a smoother transition
|
|
60
|
+
|
|
61
|
+
this.setState({
|
|
62
|
+
didImageRender: true
|
|
63
|
+
});
|
|
64
|
+
onImageLoad && onImageLoad();
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
_defineProperty(this, "onImageError", () => {
|
|
68
|
+
const {
|
|
69
|
+
onImageError
|
|
70
|
+
} = this.props;
|
|
49
71
|
this.setState({
|
|
50
|
-
|
|
72
|
+
didImageRender: false
|
|
51
73
|
});
|
|
74
|
+
onImageError && onImageError();
|
|
52
75
|
});
|
|
53
76
|
|
|
54
77
|
_defineProperty(this, "saveElementWidth", () => {
|
|
@@ -87,11 +110,10 @@ export class CardViewBase extends React.Component {
|
|
|
87
110
|
dataURI
|
|
88
111
|
} = this.props;
|
|
89
112
|
const {
|
|
90
|
-
mediaType,
|
|
91
113
|
name
|
|
92
114
|
} = metadata || {};
|
|
93
115
|
const shouldUsePointerCursor = status !== 'error' && status !== 'failed-processing';
|
|
94
|
-
const shouldDisplayBackground = !dataURI || !disableOverlay;
|
|
116
|
+
const shouldDisplayBackground = !dataURI || !disableOverlay || status === 'error' || status === 'failed-processing';
|
|
95
117
|
const isPlayButtonClickable = !!(this.shouldRenderPlayButton() && disableOverlay);
|
|
96
118
|
const isTickBoxSelectable = !disableOverlay && !!selectable && !selected; // Make tooltip optional for media singles - images, videos.
|
|
97
119
|
// Intention is to show full file name when it's truncate in titlebox,
|
|
@@ -106,7 +128,6 @@ export class CardViewBase extends React.Component {
|
|
|
106
128
|
onClick: onClick,
|
|
107
129
|
onMouseEnter: onMouseEnter,
|
|
108
130
|
innerRef: this.divRef,
|
|
109
|
-
mediaType: mediaType,
|
|
110
131
|
breakpoint: this.breakpoint,
|
|
111
132
|
shouldUsePointerCursor: shouldUsePointerCursor,
|
|
112
133
|
disableOverlay: !!disableOverlay,
|
|
@@ -166,7 +187,9 @@ export class CardViewBase extends React.Component {
|
|
|
166
187
|
actions: actionsWithDetails,
|
|
167
188
|
disableOverlay: disableOverlay,
|
|
168
189
|
previewOrientation: previewOrientation,
|
|
169
|
-
alt: alt
|
|
190
|
+
alt: alt,
|
|
191
|
+
onImageLoad: this.onImageLoad,
|
|
192
|
+
onImageError: this.onImageError
|
|
170
193
|
});
|
|
171
194
|
});
|
|
172
195
|
|
|
@@ -177,23 +200,23 @@ export class CardViewBase extends React.Component {
|
|
|
177
200
|
metadata,
|
|
178
201
|
disableOverlay,
|
|
179
202
|
error,
|
|
180
|
-
selectable
|
|
203
|
+
selectable,
|
|
204
|
+
disableAnimation
|
|
181
205
|
} = this.props;
|
|
182
206
|
const {
|
|
183
207
|
name,
|
|
184
208
|
mediaType
|
|
185
209
|
} = metadata || {};
|
|
186
210
|
const {
|
|
187
|
-
|
|
211
|
+
didImageRender
|
|
188
212
|
} = this.state;
|
|
189
213
|
const isZeroSize = !!(metadata && metadata.size === 0);
|
|
190
214
|
const defaultConfig = {
|
|
191
|
-
renderTypeIcon:
|
|
192
|
-
renderImageRenderer: !!dataURI
|
|
215
|
+
renderTypeIcon: !didImageRender,
|
|
216
|
+
renderImageRenderer: !!dataURI,
|
|
193
217
|
renderPlayButton: !!dataURI && mediaType === 'video',
|
|
194
218
|
renderBlanket: !disableOverlay,
|
|
195
|
-
renderTitleBox:
|
|
196
|
-
renderFailedTitleBox: !!isImageFailedToLoad,
|
|
219
|
+
renderTitleBox: !disableOverlay && !!name,
|
|
197
220
|
renderTickBox: !disableOverlay && !!selectable
|
|
198
221
|
};
|
|
199
222
|
|
|
@@ -206,46 +229,74 @@ export class CardViewBase extends React.Component {
|
|
|
206
229
|
};
|
|
207
230
|
|
|
208
231
|
case 'processing':
|
|
232
|
+
case 'loading-preview':
|
|
209
233
|
return { ...defaultConfig,
|
|
210
|
-
iconMessage:
|
|
234
|
+
iconMessage: !didImageRender && !isZeroSize ? /*#__PURE__*/React.createElement(CreatingPreview, {
|
|
235
|
+
disableAnimation: disableAnimation
|
|
236
|
+
}) : undefined
|
|
211
237
|
};
|
|
212
238
|
|
|
213
239
|
case 'complete':
|
|
214
|
-
return
|
|
215
|
-
};
|
|
240
|
+
return defaultConfig;
|
|
216
241
|
|
|
217
242
|
case 'error':
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
243
|
+
case 'failed-processing':
|
|
244
|
+
const baseErrorConfig = { ...defaultConfig,
|
|
245
|
+
renderTypeIcon: true,
|
|
246
|
+
renderImageRenderer: false,
|
|
247
|
+
renderTitleBox: false,
|
|
248
|
+
renderPlayButton: false
|
|
249
|
+
};
|
|
250
|
+
let iconMessage;
|
|
251
|
+
|
|
252
|
+
if (!!metadata) {
|
|
253
|
+
if (error) {
|
|
254
|
+
const {
|
|
255
|
+
secondaryError
|
|
256
|
+
} = error;
|
|
257
|
+
|
|
258
|
+
if (isRateLimitedError(secondaryError) || secondaryError && isPollingError(secondaryError)) {
|
|
259
|
+
iconMessage = /*#__PURE__*/React.createElement(PreviewCurrentlyUnavailable, null);
|
|
260
|
+
}
|
|
261
|
+
} else if (!isZeroSize) {
|
|
262
|
+
iconMessage = /*#__PURE__*/React.createElement(PreviewUnavailable, null);
|
|
263
|
+
}
|
|
264
|
+
} else if (!!disableOverlay) {
|
|
265
|
+
iconMessage = /*#__PURE__*/React.createElement(FailedToLoad, null);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
if (error && isUploadError(error)) {
|
|
269
|
+
if (!disableOverlay) {
|
|
270
|
+
return { ...baseErrorConfig,
|
|
271
|
+
renderFailedTitleBox: true,
|
|
272
|
+
customTitleMessage: messages.failed_to_upload
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
return { ...baseErrorConfig,
|
|
277
|
+
renderTitleBox: !metadata && !!name,
|
|
278
|
+
iconMessage: /*#__PURE__*/React.createElement(FailedToUpload, null)
|
|
230
279
|
};
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
if (!disableOverlay) {
|
|
283
|
+
return { ...baseErrorConfig,
|
|
284
|
+
renderTitleBox: !!name,
|
|
285
|
+
renderFailedTitleBox: !metadata,
|
|
286
|
+
iconMessage
|
|
235
287
|
};
|
|
236
288
|
}
|
|
237
289
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
renderFailedTitleBox: !!isImageFailedToLoad || !dataURI && !metadata,
|
|
241
|
-
iconMessage: !!metadata && !isZeroSize ? /*#__PURE__*/React.createElement(PreviewUnavailable, null) : undefined
|
|
290
|
+
return { ...baseErrorConfig,
|
|
291
|
+
iconMessage
|
|
242
292
|
};
|
|
243
293
|
|
|
244
294
|
case 'loading':
|
|
245
295
|
default:
|
|
246
296
|
return { ...defaultConfig,
|
|
297
|
+
renderPlayButton: false,
|
|
247
298
|
renderTypeIcon: false,
|
|
248
|
-
renderSpinner:
|
|
299
|
+
renderSpinner: !didImageRender
|
|
249
300
|
};
|
|
250
301
|
}
|
|
251
302
|
});
|
|
@@ -263,7 +314,7 @@ export class CardViewBase extends React.Component {
|
|
|
263
314
|
renderFailedTitleBox,
|
|
264
315
|
renderTickBox,
|
|
265
316
|
isFixedBlanket,
|
|
266
|
-
|
|
317
|
+
customTitleMessage
|
|
267
318
|
} = this.getRenderConfigByStatus();
|
|
268
319
|
const {
|
|
269
320
|
progress,
|
|
@@ -282,7 +333,7 @@ export class CardViewBase extends React.Component {
|
|
|
282
333
|
"data-test-status": status,
|
|
283
334
|
"data-test-progress": progress,
|
|
284
335
|
"data-test-selected": selected ? true : undefined
|
|
285
|
-
}, 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(!
|
|
336
|
+
}, 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());
|
|
286
337
|
});
|
|
287
338
|
}
|
|
288
339
|
|
|
@@ -299,13 +350,14 @@ export class CardViewBase extends React.Component {
|
|
|
299
350
|
}) {
|
|
300
351
|
const {
|
|
301
352
|
dataURI
|
|
302
|
-
} = this.props;
|
|
353
|
+
} = this.props; // We should only switch didImageRender to false
|
|
354
|
+
// when dataURI goes undefined, not when it is updated.
|
|
355
|
+
// as this method could be triggered after onImageLoad callback,
|
|
356
|
+
// falling on a race condition
|
|
303
357
|
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
});
|
|
308
|
-
}
|
|
358
|
+
prevDataURI && !dataURI && this.setState({
|
|
359
|
+
didImageRender: false
|
|
360
|
+
});
|
|
309
361
|
}
|
|
310
362
|
|
|
311
363
|
// This width is only used to calculate breakpoints, dimensions are passed down as
|
|
@@ -424,9 +476,10 @@ export class CardViewBase extends React.Component {
|
|
|
424
476
|
});
|
|
425
477
|
}
|
|
426
478
|
|
|
427
|
-
renderFailedTitleBox() {
|
|
479
|
+
renderFailedTitleBox(customMessage) {
|
|
428
480
|
return /*#__PURE__*/React.createElement(FailedTitleBox, {
|
|
429
|
-
breakpoint: this.breakpoint
|
|
481
|
+
breakpoint: this.breakpoint,
|
|
482
|
+
customMessage: customMessage
|
|
430
483
|
});
|
|
431
484
|
}
|
|
432
485
|
|
|
@@ -461,7 +514,8 @@ export class CardViewBase extends React.Component {
|
|
|
461
514
|
alt: alt,
|
|
462
515
|
resizeMode: resizeMode,
|
|
463
516
|
onDisplayImage: onDisplayImage,
|
|
464
|
-
|
|
517
|
+
onImageLoad: this.onImageLoad,
|
|
518
|
+
onImageError: this.onImageError
|
|
465
519
|
});
|
|
466
520
|
}
|
|
467
521
|
|
|
@@ -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,127 @@
|
|
|
1
|
+
import React, { useState, useEffect } from 'react';
|
|
2
|
+
import ReactDOM from 'react-dom';
|
|
3
|
+
import { injectIntl } from 'react-intl';
|
|
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
|
+
useEffect(() => {
|
|
53
|
+
mediaClient.file.getFileState(identifier.id, {
|
|
54
|
+
collectionName: identifier.collectionName
|
|
55
|
+
}).subscribe({
|
|
56
|
+
next: fileState => {
|
|
57
|
+
setFileState(fileState);
|
|
58
|
+
},
|
|
59
|
+
error: () => {
|
|
60
|
+
setIsErrored(true);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}, [identifier.collectionName, identifier.id, mediaClient.file]);
|
|
64
|
+
|
|
65
|
+
if (!fileState) {
|
|
66
|
+
return /*#__PURE__*/React.createElement(MediaInlineCardLoadingView, {
|
|
67
|
+
message: intl.formatMessage(messages.loading_file)
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if (isErrored) {
|
|
72
|
+
return /*#__PURE__*/React.createElement(MediaInlineCardErroredView, {
|
|
73
|
+
message: intl.formatMessage(messages.couldnt_load_file)
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
if (fileState.status === 'error') {
|
|
78
|
+
return /*#__PURE__*/React.createElement(MediaInlineCardErroredView, {
|
|
79
|
+
message: fileState.message || ''
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (fileState.status === 'failed-processing') {
|
|
84
|
+
return /*#__PURE__*/React.createElement(MediaInlineCardErroredView, {
|
|
85
|
+
message: intl.formatMessage(messages.couldnt_load_file)
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if (fileState.status === 'uploading') {
|
|
90
|
+
return /*#__PURE__*/React.createElement(MediaInlineCardLoadingView, {
|
|
91
|
+
message: fileState.name
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const {
|
|
96
|
+
mediaType,
|
|
97
|
+
name
|
|
98
|
+
} = fileState;
|
|
99
|
+
const linkIcon = /*#__PURE__*/React.createElement(MediaTypeIcon, {
|
|
100
|
+
testId: 'media-inline-card-file-type-icon',
|
|
101
|
+
size: "small",
|
|
102
|
+
type: mediaType
|
|
103
|
+
});
|
|
104
|
+
const mediaViewer = renderMediaViewer();
|
|
105
|
+
let formattedDate;
|
|
106
|
+
|
|
107
|
+
if (fileState.createdAt) {
|
|
108
|
+
const {
|
|
109
|
+
locale = 'en'
|
|
110
|
+
} = intl || {
|
|
111
|
+
locale: 'en'
|
|
112
|
+
};
|
|
113
|
+
formattedDate = formatDate(fileState.createdAt, locale);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Tooltip, {
|
|
117
|
+
position: "bottom",
|
|
118
|
+
content: formattedDate,
|
|
119
|
+
tag: "span"
|
|
120
|
+
}, /*#__PURE__*/React.createElement(MediaInlineCardLoadedView, {
|
|
121
|
+
icon: linkIcon,
|
|
122
|
+
title: name,
|
|
123
|
+
onClick: onMediaInlineCardClick,
|
|
124
|
+
isSelected: isSelected
|
|
125
|
+
})), mediaViewer);
|
|
126
|
+
};
|
|
127
|
+
export const MediaInlineCard = injectIntl(MediaInlineCardInternal);
|
|
@@ -7,8 +7,6 @@ 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 { withAnalyticsEvents } from '@atlaskit/analytics-next';
|
|
11
|
-
import { createAndFireMediaCardEvent } from '../utils/analytics';
|
|
12
10
|
export const inlinePlayerClassName = 'media-card-inline-player';
|
|
13
11
|
export const getPreferredVideoArtifact = fileState => {
|
|
14
12
|
if (fileState.status === 'processed' || fileState.status === 'processing') {
|
|
@@ -193,9 +191,10 @@ export class InlinePlayerBase extends Component {
|
|
|
193
191
|
onClick: onClick,
|
|
194
192
|
innerRef: forwardRef || undefined,
|
|
195
193
|
dimensions: dimensions
|
|
196
|
-
}, /*#__PURE__*/React.createElement(InactivityDetector, null,
|
|
194
|
+
}, /*#__PURE__*/React.createElement(InactivityDetector, null, checkMouseMovement => /*#__PURE__*/React.createElement(CustomMediaPlayer, {
|
|
197
195
|
type: "video",
|
|
198
196
|
src: fileSrc,
|
|
197
|
+
fileId: identifier.id,
|
|
199
198
|
isAutoPlay: true,
|
|
200
199
|
isHDAvailable: false,
|
|
201
200
|
onDownloadClick: this.onDownloadClick,
|
|
@@ -203,7 +202,8 @@ export class InlinePlayerBase extends Component {
|
|
|
203
202
|
lastWatchTimeConfig: {
|
|
204
203
|
contentId: identifier.id
|
|
205
204
|
},
|
|
206
|
-
originalDimensions: originalDimensions
|
|
205
|
+
originalDimensions: originalDimensions,
|
|
206
|
+
showControls: checkMouseMovement
|
|
207
207
|
})));
|
|
208
208
|
}
|
|
209
209
|
|
|
@@ -218,12 +218,4 @@ const InlinePlayerForwardRef = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
218
218
|
forwardRef: ref
|
|
219
219
|
}));
|
|
220
220
|
});
|
|
221
|
-
export const InlinePlayer =
|
|
222
|
-
onClick: createAndFireMediaCardEvent({
|
|
223
|
-
eventType: 'ui',
|
|
224
|
-
action: 'clicked',
|
|
225
|
-
actionSubject: 'mediaCard',
|
|
226
|
-
actionSubjectId: 'mediaCardInlinePlayer',
|
|
227
|
-
attributes: {}
|
|
228
|
-
})
|
|
229
|
-
})(InlinePlayerForwardRef);
|
|
221
|
+
export const InlinePlayer = InlinePlayerForwardRef;
|
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
(function (Breakpoint) {
|
|
4
|
-
Breakpoint["SMALL"] = "small";
|
|
5
|
-
Breakpoint["LARGE"] = "large";
|
|
6
|
-
})(Breakpoint || (Breakpoint = {}));
|
|
7
|
-
|
|
1
|
+
import { Breakpoint } from './Breakpoint';
|
|
8
2
|
export const responsiveSettings = {
|
|
9
3
|
[Breakpoint.SMALL]: {
|
|
10
4
|
fontSize: 11,
|
|
@@ -13,16 +13,20 @@ export const IconMessage = ({
|
|
|
13
13
|
reducedFont: reducedFont
|
|
14
14
|
}, /*#__PURE__*/React.createElement(FormattedMessage, messageDescriptor));
|
|
15
15
|
};
|
|
16
|
-
export const CreatingPreview =
|
|
16
|
+
export const CreatingPreview = ({
|
|
17
|
+
disableAnimation
|
|
18
|
+
}) => /*#__PURE__*/React.createElement(IconMessage, {
|
|
17
19
|
messageDescriptor: messages.creating_preview,
|
|
18
|
-
animated:
|
|
19
|
-
})
|
|
20
|
+
animated: !disableAnimation
|
|
21
|
+
});
|
|
20
22
|
export const PreviewUnavailable = props => /*#__PURE__*/React.createElement(IconMessage, _extends({}, props, {
|
|
21
23
|
messageDescriptor: messages.preview_unavailable
|
|
22
24
|
}));
|
|
23
|
-
export const
|
|
24
|
-
messageDescriptor: messages.
|
|
25
|
-
|
|
25
|
+
export const FailedToLoad = props => /*#__PURE__*/React.createElement(IconMessage, _extends({}, props, {
|
|
26
|
+
messageDescriptor: messages.failed_to_load
|
|
27
|
+
}));
|
|
28
|
+
export const FailedToUpload = props => /*#__PURE__*/React.createElement(IconMessage, _extends({}, props, {
|
|
29
|
+
messageDescriptor: messages.failed_to_upload
|
|
26
30
|
}));
|
|
27
31
|
export const PreviewCurrentlyUnavailable = props => /*#__PURE__*/React.createElement(IconMessage, _extends({}, props, {
|
|
28
32
|
messageDescriptor: messages.preview_currently_unavailable,
|