@atlaskit/media-card 70.10.0 → 72.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 +79 -0
- package/dist/cjs/errors.js +76 -5
- 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/cardLoader.js +66 -124
- package/dist/cjs/root/card/cardState.js +50 -0
- package/dist/cjs/root/card/getCardPreview/cache.js +5 -0
- package/dist/cjs/root/card/getCardPreview/filePreviewStatus.js +50 -0
- package/dist/cjs/root/card/getCardPreview/helpers.js +13 -21
- package/dist/cjs/root/card/getCardPreview/index.js +171 -100
- package/dist/cjs/root/card/getCardStatus.js +7 -1
- package/dist/cjs/root/card/index.js +407 -322
- package/dist/cjs/root/cardView.js +115 -76
- 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} +72 -25
- package/dist/cjs/root/inlinePlayer.js +5 -15
- package/dist/cjs/root/ui/iconMessage/index.js +17 -9
- package/dist/cjs/root/ui/imageRenderer/imageRenderer.js +36 -115
- package/dist/cjs/root/ui/styled.js +1 -1
- package/dist/cjs/root/ui/titleBox/failedTitleBox.js +7 -3
- package/dist/cjs/utils/analytics.js +26 -43
- package/dist/cjs/utils/cardActions/cardActionsDropdownMenu.js +16 -9
- 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/version.json +1 -1
- package/dist/es2019/errors.js +42 -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/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 +35 -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 +356 -254
- package/dist/es2019/root/cardView.js +98 -58
- package/dist/es2019/root/index.js +2 -1
- package/dist/es2019/root/inline/loader.js +16 -15
- package/dist/es2019/root/inline/mediaInlineCard.js +132 -0
- package/dist/es2019/root/inlinePlayer.js +5 -13
- package/dist/es2019/root/ui/iconMessage/index.js +10 -6
- package/dist/es2019/root/ui/imageRenderer/imageRenderer.js +26 -74
- package/dist/es2019/root/ui/styled.js +1 -0
- package/dist/es2019/root/ui/titleBox/failedTitleBox.js +5 -3
- package/dist/es2019/utils/analytics.js +29 -40
- package/dist/es2019/utils/cardActions/cardActionsDropdownMenu.js +8 -4
- 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/version.json +1 -1
- package/dist/esm/errors.js +60 -1
- 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/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 +35 -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 +416 -325
- package/dist/esm/root/cardView.js +114 -73
- package/dist/esm/root/index.js +2 -1
- package/dist/esm/root/inline/loader.js +23 -22
- package/dist/esm/root/inline/mediaInlineCard.js +145 -0
- package/dist/esm/root/inlinePlayer.js +5 -13
- package/dist/esm/root/ui/iconMessage/index.js +12 -7
- package/dist/esm/root/ui/imageRenderer/imageRenderer.js +28 -106
- package/dist/esm/root/ui/styled.js +1 -1
- package/dist/esm/root/ui/titleBox/failedTitleBox.js +6 -3
- package/dist/esm/utils/analytics.js +22 -35
- package/dist/esm/utils/cardActions/cardActionsDropdownMenu.js +16 -9
- 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/version.json +1 -1
- package/dist/types/errors.d.ts +15 -1
- 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 +11 -13
- 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/cardLoader.d.ts +4 -18
- package/dist/types/root/card/cardState.d.ts +5 -0
- package/dist/types/root/card/getCardPreview/cache.d.ts +4 -2
- package/dist/types/root/card/getCardPreview/filePreviewStatus.d.ts +5 -0
- package/dist/types/root/card/getCardPreview/helpers.d.ts +4 -5
- package/dist/types/root/card/getCardPreview/index.d.ts +25 -14
- package/dist/types/root/card/getCardStatus.d.ts +1 -0
- package/dist/types/root/card/index.d.ts +18 -15
- package/dist/types/root/cardView.d.ts +14 -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/iconMessage/index.d.ts +7 -2
- package/dist/types/root/ui/imageRenderer/imageRenderer.d.ts +5 -18
- package/dist/types/root/ui/titleBox/failedTitleBox.d.ts +2 -0
- package/dist/types/types.d.ts +9 -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/example-helpers/developmentUseMessage.tsx +14 -0
- package/example-helpers/index.tsx +55 -4
- package/example-helpers/selectableCard.tsx +2 -1
- package/package.json +18 -14
- package/dist/cjs/root/card/getCardPreview/types.js +0 -5
- package/dist/cjs/utils/fileAttributesContext.js +0 -40
- package/dist/es2019/root/card/getCardPreview/types.js +0 -1
- package/dist/es2019/root/inline/inlineMediaCard.js +0 -92
- package/dist/es2019/utils/fileAttributesContext.js +0 -19
- package/dist/esm/root/card/getCardPreview/types.js +0 -1
- package/dist/esm/root/inline/inlineMediaCard.js +0 -100
- package/dist/esm/utils/fileAttributesContext.js +0 -18
- package/dist/types/root/card/getCardPreview/types.d.ts +0 -5
- package/dist/types/utils/fileAttributesContext.d.ts +0 -10
package/dist/es2019/errors.js
CHANGED
|
@@ -27,13 +27,53 @@ export class RemotePreviewError extends MediaCardError {
|
|
|
27
27
|
this.secondaryError = secondaryError;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
+
}
|
|
31
|
+
export class SsrPreviewError extends MediaCardError {
|
|
32
|
+
constructor(primaryReason, secondaryError) {
|
|
33
|
+
super(primaryReason, secondaryError);
|
|
34
|
+
this.primaryReason = primaryReason;
|
|
35
|
+
this.secondaryError = secondaryError;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
}
|
|
39
|
+
export const getImageLoadPrimaryReason = source => {
|
|
40
|
+
switch (source) {
|
|
41
|
+
case 'cache-remote':
|
|
42
|
+
return 'cache-remote-uri';
|
|
43
|
+
|
|
44
|
+
case 'cache-local':
|
|
45
|
+
return 'cache-local-uri';
|
|
46
|
+
|
|
47
|
+
case 'external':
|
|
48
|
+
return 'external-uri';
|
|
49
|
+
|
|
50
|
+
case 'local':
|
|
51
|
+
return 'local-uri';
|
|
52
|
+
|
|
53
|
+
case 'remote':
|
|
54
|
+
return 'remote-uri';
|
|
55
|
+
// This fail reason will come from a bug, most likely.
|
|
56
|
+
|
|
57
|
+
default:
|
|
58
|
+
return `unknown-uri`;
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
export class ImageLoadError extends MediaCardError {
|
|
62
|
+
constructor(source) {
|
|
63
|
+
super(getImageLoadPrimaryReason(source));
|
|
64
|
+
}
|
|
65
|
+
|
|
30
66
|
}
|
|
31
67
|
export function isMediaCardError(err) {
|
|
32
68
|
return err instanceof MediaCardError;
|
|
33
69
|
}
|
|
34
70
|
export const isLocalPreviewError = err => err instanceof LocalPreviewError;
|
|
35
71
|
export const isRemotePreviewError = err => err instanceof RemotePreviewError;
|
|
36
|
-
export const isUnsupportedLocalPreviewError = err => isMediaCardError(err) && err.primaryReason === 'local-preview-unsupported';
|
|
72
|
+
export const isUnsupportedLocalPreviewError = err => isMediaCardError(err) && err.primaryReason === 'local-preview-unsupported';
|
|
73
|
+
export function isImageLoadError(err) {
|
|
74
|
+
return err instanceof ImageLoadError;
|
|
75
|
+
} // In a try/catch statement, the error caught is the type of any.
|
|
37
76
|
// We can use this helper to ensure that the error handled is the type of MediaCardError if unsure
|
|
38
77
|
|
|
39
|
-
export const ensureMediaCardError = (primaryReason, error) => isMediaCardError(error) ? error : new MediaCardError(primaryReason, error);
|
|
78
|
+
export const ensureMediaCardError = (primaryReason, error) => isMediaCardError(error) ? error : new MediaCardError(primaryReason, error);
|
|
79
|
+
export const isUploadError = error => error && error.primaryReason === 'upload';
|
|
@@ -9,11 +9,9 @@ import { CardLoading } from '../../utils/lightCards/cardLoading';
|
|
|
9
9
|
import { shouldDisplayImageThumbnail } from '../../utils/shouldDisplayImageThumbnail';
|
|
10
10
|
import { ProgressBar } from '../../utils/progressBar';
|
|
11
11
|
import CardActions from '../../utils/cardActions';
|
|
12
|
-
import { withAnalyticsEvents } from '@atlaskit/analytics-next';
|
|
13
|
-
import { fireMediaCardEvent, RenderEventAction, getRenderSucceededEventPayload, getRenderFailedFileUriPayload, getRenderFailedExternalUriPayload } from '../../utils/analytics';
|
|
14
|
-
import { withFileAttributes } from '../../utils/fileAttributesContext';
|
|
15
12
|
export const fileCardImageViewSelector = 'media-file-card-view';
|
|
16
|
-
export
|
|
13
|
+
export const fileCardImageViewSelectedSelector = 'media-file-card-view-selected';
|
|
14
|
+
export class FileCardImageView extends Component {
|
|
17
15
|
constructor(...args) {
|
|
18
16
|
super(...args);
|
|
19
17
|
|
|
@@ -34,7 +32,7 @@ export class FileCardImageViewBase extends Component {
|
|
|
34
32
|
// immediately, even if there's no image preview
|
|
35
33
|
|
|
36
34
|
|
|
37
|
-
const isZeroSize = fileSize === '' &&
|
|
35
|
+
const isZeroSize = fileSize === '' && ['processing', 'loading-preview'].includes(status);
|
|
38
36
|
|
|
39
37
|
if (mediaType !== 'video' && !this.isFileCardImageReadyForDisplay && !isZeroSize) {
|
|
40
38
|
return this.renderLoadingContents();
|
|
@@ -140,36 +138,6 @@ export class FileCardImageViewBase extends Component {
|
|
|
140
138
|
})));
|
|
141
139
|
});
|
|
142
140
|
|
|
143
|
-
_defineProperty(this, "onImageLoad", () => {
|
|
144
|
-
const {
|
|
145
|
-
createAnalyticsEvent,
|
|
146
|
-
fileAttributes
|
|
147
|
-
} = this.props;
|
|
148
|
-
|
|
149
|
-
if (fileAttributes && this.shouldFireEvent(RenderEventAction.SUCCEEDED)) {
|
|
150
|
-
fireMediaCardEvent(getRenderSucceededEventPayload(fileAttributes), createAnalyticsEvent);
|
|
151
|
-
}
|
|
152
|
-
});
|
|
153
|
-
|
|
154
|
-
_defineProperty(this, "onImageError", () => {
|
|
155
|
-
const {
|
|
156
|
-
fileAttributes
|
|
157
|
-
} = this.props;
|
|
158
|
-
|
|
159
|
-
if (fileAttributes && this.shouldFireEvent(RenderEventAction.FAILED)) {
|
|
160
|
-
const {
|
|
161
|
-
createAnalyticsEvent,
|
|
162
|
-
mediaItemType
|
|
163
|
-
} = this.props;
|
|
164
|
-
|
|
165
|
-
if (mediaItemType === 'file') {
|
|
166
|
-
fireMediaCardEvent(getRenderFailedFileUriPayload(fileAttributes), createAnalyticsEvent);
|
|
167
|
-
} else if (mediaItemType === 'external-image') {
|
|
168
|
-
fireMediaCardEvent(getRenderFailedExternalUriPayload(fileAttributes), createAnalyticsEvent);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
});
|
|
172
|
-
|
|
173
141
|
_defineProperty(this, "renderMediaImage", () => {
|
|
174
142
|
const {
|
|
175
143
|
status,
|
|
@@ -179,7 +147,9 @@ export class FileCardImageViewBase extends Component {
|
|
|
179
147
|
mimeType,
|
|
180
148
|
previewOrientation,
|
|
181
149
|
onDisplayImage,
|
|
182
|
-
alt
|
|
150
|
+
alt,
|
|
151
|
+
onImageLoad,
|
|
152
|
+
onImageError
|
|
183
153
|
} = this.props;
|
|
184
154
|
|
|
185
155
|
if (!shouldDisplayImageThumbnail(status, mediaItemType, dataURI, mediaType, mimeType)) {
|
|
@@ -197,13 +167,11 @@ export class FileCardImageViewBase extends Component {
|
|
|
197
167
|
crop: this.isCropped,
|
|
198
168
|
stretch: this.isStretched,
|
|
199
169
|
previewOrientation: previewOrientation,
|
|
200
|
-
onImageLoad:
|
|
201
|
-
onImageError:
|
|
170
|
+
onImageLoad: onImageLoad,
|
|
171
|
+
onImageError: onImageError
|
|
202
172
|
});
|
|
203
173
|
});
|
|
204
174
|
|
|
205
|
-
_defineProperty(this, "shouldFireEvent", action => !this.lastAnalyticsAction || this.lastAnalyticsAction !== action);
|
|
206
|
-
|
|
207
175
|
_defineProperty(this, "renderProgressBar", () => {
|
|
208
176
|
const {
|
|
209
177
|
mediaName,
|
|
@@ -298,7 +266,7 @@ export class FileCardImageViewBase extends Component {
|
|
|
298
266
|
selectable: selectable,
|
|
299
267
|
selected: selected,
|
|
300
268
|
mediaType: mediaType,
|
|
301
|
-
className: fileCardImageViewSelector
|
|
269
|
+
className: `${fileCardImageViewSelector} ${selected ? fileCardImageViewSelectedSelector : ''}`
|
|
302
270
|
}, this.renderCardContents());
|
|
303
271
|
}
|
|
304
272
|
|
|
@@ -307,7 +275,7 @@ export class FileCardImageViewBase extends Component {
|
|
|
307
275
|
dataURI,
|
|
308
276
|
status
|
|
309
277
|
} = this.props;
|
|
310
|
-
return !!dataURI || !['loading', 'processing'].includes(status);
|
|
278
|
+
return !!dataURI || !['loading', 'processing', 'loading-preview'].includes(status);
|
|
311
279
|
}
|
|
312
280
|
|
|
313
281
|
get isCropped() {
|
|
@@ -326,9 +294,7 @@ export class FileCardImageViewBase extends Component {
|
|
|
326
294
|
|
|
327
295
|
}
|
|
328
296
|
|
|
329
|
-
_defineProperty(
|
|
297
|
+
_defineProperty(FileCardImageView, "defaultProps", {
|
|
330
298
|
resizeMode: 'crop',
|
|
331
299
|
disableOverlay: false
|
|
332
|
-
});
|
|
333
|
-
|
|
334
|
-
export const FileCardImageView = withAnalyticsEvents()(withFileAttributes(FileCardImageViewBase));
|
|
300
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { FileCardImageView
|
|
1
|
+
export { FileCardImageView } from './cardImageView';
|
package/dist/es2019/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { Card, MediaInlineCard } from './root';
|
|
2
2
|
export { CardLoading } from './utils/lightCards/cardLoading';
|
|
3
3
|
export { CardError } from './utils/lightCards/cardError';
|
|
4
4
|
export { defaultImageCardDimensions } from './utils/cardDimensions';
|
|
5
|
-
export { fileCardImageViewSelector } from './files/cardImageView';
|
|
5
|
+
export { fileCardImageViewSelector, fileCardImageViewSelectedSelector } from './files/cardImageView';
|
|
6
6
|
export { inlinePlayerClassName } from './root/inlinePlayer';
|
|
7
|
-
export { newFileExperienceClassName } from './root/
|
|
7
|
+
export { newFileExperienceClassName } from './root/card/cardConstants';
|
|
@@ -1,30 +1,36 @@
|
|
|
1
|
-
import { fireMediaCardEvent, getRenderSucceededEventPayload, getRenderErrorEventPayload, getRenderFailedFileStatusPayload } from '../../utils/analytics';
|
|
2
|
-
export const relevantFeatureFlagNames = ['newCardExperience', '
|
|
3
|
-
export const fireOperationalEvent = (createAnalyticsEvent, status, fileAttributes, {
|
|
4
|
-
cardPreview,
|
|
5
|
-
error
|
|
6
|
-
} = {}) => {
|
|
1
|
+
import { fireMediaCardEvent, getRenderSucceededEventPayload, getRenderErrorEventPayload, getRenderFailedFileStatusPayload, getCopiedFilePayload, getRenderCommencedEventPayload, getRenderPreviewableCardPayload } from '../../utils/analytics';
|
|
2
|
+
export const relevantFeatureFlagNames = ['newCardExperience', 'captions'];
|
|
3
|
+
export const fireOperationalEvent = (createAnalyticsEvent, status, fileAttributes, performanceAttributes, error) => {
|
|
7
4
|
const fireEvent = payload => fireMediaCardEvent(payload, createAnalyticsEvent);
|
|
8
5
|
|
|
9
6
|
switch (status) {
|
|
10
7
|
case 'complete':
|
|
11
|
-
|
|
12
|
-
* A Card that is considered Complete and has no preview,
|
|
13
|
-
* reflects an expected behaviour, and thus a legitimate
|
|
14
|
-
* success case to be logged.
|
|
15
|
-
*/
|
|
16
|
-
if (!(cardPreview !== null && cardPreview !== void 0 && cardPreview.dataURI)) {
|
|
17
|
-
fireEvent(getRenderSucceededEventPayload(fileAttributes));
|
|
18
|
-
}
|
|
19
|
-
|
|
8
|
+
fireEvent(getRenderSucceededEventPayload(fileAttributes, performanceAttributes));
|
|
20
9
|
break;
|
|
21
10
|
|
|
22
11
|
case 'failed-processing':
|
|
23
|
-
fireEvent(getRenderFailedFileStatusPayload(fileAttributes));
|
|
12
|
+
fireEvent(getRenderFailedFileStatusPayload(fileAttributes, performanceAttributes));
|
|
24
13
|
break;
|
|
25
14
|
|
|
26
15
|
case 'error':
|
|
27
|
-
error && fireEvent(getRenderErrorEventPayload(fileAttributes, error));
|
|
16
|
+
error && fireEvent(getRenderErrorEventPayload(fileAttributes, performanceAttributes, error));
|
|
28
17
|
break;
|
|
29
18
|
}
|
|
19
|
+
};
|
|
20
|
+
export const fireCommencedEvent = (createAnalyticsEvent, fileAttributes, performanceAttributes) => {
|
|
21
|
+
fireMediaCardEvent(getRenderCommencedEventPayload(fileAttributes, performanceAttributes), createAnalyticsEvent);
|
|
22
|
+
};
|
|
23
|
+
export const fireCopiedEvent = (createAnalyticsEvent, fileId, cardRef) => {
|
|
24
|
+
if (typeof window.getSelection === 'function') {
|
|
25
|
+
var _selection$containsNo;
|
|
26
|
+
|
|
27
|
+
const selection = window.getSelection();
|
|
28
|
+
|
|
29
|
+
if (selection !== null && selection !== void 0 && (_selection$containsNo = selection.containsNode) !== null && _selection$containsNo !== void 0 && _selection$containsNo.call(selection, cardRef, true)) {
|
|
30
|
+
fireMediaCardEvent(getCopiedFilePayload(fileId), createAnalyticsEvent);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
export const fireScreenEvent = (createAnalyticsEvent, fileAttributes) => {
|
|
35
|
+
fireMediaCardEvent(getRenderPreviewableCardPayload(fileAttributes), createAnalyticsEvent);
|
|
30
36
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const newFileExperienceClassName = 'new-file-experience-wrapper';
|
|
@@ -1,59 +1,53 @@
|
|
|
1
|
-
import
|
|
2
|
-
import React from 'react';
|
|
1
|
+
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
+
import React, { useContext } from 'react';
|
|
3
|
+
import { useMemoizeFeatureFlags } from '@atlaskit/media-common';
|
|
4
|
+
import Loadable from 'react-loadable';
|
|
3
5
|
import { CardLoading } from '../..';
|
|
4
|
-
|
|
5
|
-
constructor(...args) {
|
|
6
|
-
super(...args);
|
|
6
|
+
const MediaCardContext = /*#__PURE__*/React.createContext({});
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
8
|
+
const CardLoadingWithContext = () => {
|
|
9
|
+
const props = useContext(MediaCardContext);
|
|
10
|
+
return /*#__PURE__*/React.createElement(CardLoading, props);
|
|
11
|
+
};
|
|
13
12
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
13
|
+
const MediaCard = Loadable({
|
|
14
|
+
loader: () => import(
|
|
15
|
+
/* webpackChunkName: "@atlaskit-internal_media-card" */
|
|
16
|
+
'./index').then(mod => mod.Card),
|
|
17
|
+
loading: () => /*#__PURE__*/React.createElement(CardLoadingWithContext, null)
|
|
18
|
+
});
|
|
19
|
+
const MediaCardErrorBoundary = Loadable({
|
|
20
|
+
loader: () => import(
|
|
21
|
+
/* webpackChunkName: "@atlaskit-internal_media-card-error-boundary" */
|
|
22
|
+
'../media-card-analytics-error-boundary').then(mod => mod.default),
|
|
23
|
+
loading: () => /*#__PURE__*/React.createElement(CardLoadingWithContext, null)
|
|
24
|
+
});
|
|
25
|
+
const MediaCardWithMediaClient = Loadable({
|
|
26
|
+
loader: () => import(
|
|
27
|
+
/* webpackChunkName: "@atlaskit-internal_media-client" */
|
|
28
|
+
'@atlaskit/media-client'),
|
|
29
|
+
loading: () => /*#__PURE__*/React.createElement(CardLoadingWithContext, null),
|
|
30
|
+
render: (loaded, props) => /*#__PURE__*/React.createElement(CardWithMediaClient, _extends({}, props, {
|
|
31
|
+
withMediaClient: loaded.withMediaClient
|
|
32
|
+
}))
|
|
33
|
+
});
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
35
|
+
const CardWithMediaClient = props => {
|
|
36
|
+
const {
|
|
37
|
+
withMediaClient,
|
|
38
|
+
featureFlags
|
|
39
|
+
} = props;
|
|
40
|
+
const memoizedFeatureFlags = useMemoizeFeatureFlags(featureFlags);
|
|
41
|
+
const Card = React.useMemo(() => {
|
|
42
|
+
return withMediaClient(MediaCard, memoizedFeatureFlags);
|
|
43
|
+
}, [withMediaClient, memoizedFeatureFlags]);
|
|
44
|
+
return /*#__PURE__*/React.createElement(MediaCardErrorBoundary, null, /*#__PURE__*/React.createElement(Card, props));
|
|
45
|
+
};
|
|
45
46
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
});
|
|
52
|
-
}
|
|
47
|
+
const CardLoader = props => {
|
|
48
|
+
return /*#__PURE__*/React.createElement(MediaCardContext.Provider, {
|
|
49
|
+
value: props
|
|
50
|
+
}, /*#__PURE__*/React.createElement(MediaCardWithMediaClient, props));
|
|
51
|
+
};
|
|
53
52
|
|
|
54
|
-
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
_defineProperty(CardLoader, "displayName", 'AsyncCard');
|
|
53
|
+
export default CardLoader;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { isErrorFileState } from '@atlaskit/media-client';
|
|
2
|
+
import { MediaCardError } from '../../errors';
|
|
3
|
+
import { getCardStatus, isFinalCardStatus } from './getCardStatus';
|
|
4
|
+
import { extractFilePreviewStatus } from './getCardPreview';
|
|
5
|
+
export const createStateUpdater = newState => prevState => {
|
|
6
|
+
// Only override if previous status is non-final
|
|
7
|
+
// or new status is 'complete'
|
|
8
|
+
if (isFinalCardStatus(prevState.status) && newState.status !== 'complete') {
|
|
9
|
+
return prevState;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
return { ...prevState,
|
|
13
|
+
...newState
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
export const getCardStateFromFileState = (fileState, isBannedLocalPreview, featureFlags) => {
|
|
17
|
+
const status = getCardStatus(fileState.status, extractFilePreviewStatus(fileState, isBannedLocalPreview, featureFlags));
|
|
18
|
+
const error = status === 'error' && isErrorFileState(fileState) ? new MediaCardError('error-file-state', new Error(fileState.message)) : undefined;
|
|
19
|
+
const progress = status === 'uploading' && fileState.status === 'uploading' ? fileState.progress : 1;
|
|
20
|
+
return {
|
|
21
|
+
fileState,
|
|
22
|
+
status,
|
|
23
|
+
progress,
|
|
24
|
+
error
|
|
25
|
+
};
|
|
26
|
+
};
|
|
@@ -17,6 +17,11 @@ export class CardPreviewCacheImpl {
|
|
|
17
17
|
this.previewCache.set(cacheKey, cardPreview);
|
|
18
18
|
});
|
|
19
19
|
|
|
20
|
+
_defineProperty(this, "remove", (id, dimensions) => {
|
|
21
|
+
const cacheKey = getCacheKey(id, dimensions);
|
|
22
|
+
this.previewCache.remove(cacheKey);
|
|
23
|
+
});
|
|
24
|
+
|
|
20
25
|
this.previewCache = previewCache;
|
|
21
26
|
}
|
|
22
27
|
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { isMimeTypeSupportedByBrowser } from '@atlaskit/media-common';
|
|
2
|
+
import { isPreviewableFileState, isPreviewableType, isImageRepresentationReady } from '@atlaskit/media-client';
|
|
3
|
+
import { isSupportedLocalPreview } from './helpers'; // TODO: align these checks with helpers from Media Client
|
|
4
|
+
// https://product-fabric.atlassian.net/browse/BMPT-1300
|
|
5
|
+
|
|
6
|
+
export const extractFilePreviewStatus = (fileState, isBannedLocalPreview, featureFlags) => {
|
|
7
|
+
const hasFilesize = 'size' in fileState && !!fileState.size;
|
|
8
|
+
const {
|
|
9
|
+
mediaType
|
|
10
|
+
} = 'mediaType' in fileState && fileState || {};
|
|
11
|
+
const {
|
|
12
|
+
mimeType
|
|
13
|
+
} = 'mimeType' in fileState && fileState || {};
|
|
14
|
+
const isPreviewable = !!mediaType && isPreviewableType(mediaType, featureFlags); // Local preview is available only if it's supported by browser and supported by Media Card (isSupportedLocalPreview)
|
|
15
|
+
// For example, SVGs are mime type NOT supported by browser but media type supported by Media Card (image)
|
|
16
|
+
// Then, local Preview NOT available
|
|
17
|
+
|
|
18
|
+
const hasLocalPreview = !isBannedLocalPreview && isPreviewableFileState(fileState) && isSupportedLocalPreview(mediaType) && !!mimeType && isMimeTypeSupportedByBrowser(mimeType);
|
|
19
|
+
const hasRemotePreview = isImageRepresentationReady(fileState);
|
|
20
|
+
const hasPreview = hasLocalPreview || hasRemotePreview;
|
|
21
|
+
const isSupportedByBrowser = !!mimeType && isMimeTypeSupportedByBrowser(mimeType);
|
|
22
|
+
return {
|
|
23
|
+
hasFilesize,
|
|
24
|
+
isPreviewable,
|
|
25
|
+
hasPreview,
|
|
26
|
+
isSupportedByBrowser
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
export const isPreviewableStatus = (cardStatus, {
|
|
30
|
+
isPreviewable,
|
|
31
|
+
hasPreview,
|
|
32
|
+
isSupportedByBrowser
|
|
33
|
+
}) => {
|
|
34
|
+
return hasPreview && isPreviewable && (cardStatus === 'complete' || cardStatus === 'loading-preview' || cardStatus === 'uploading' || cardStatus === 'processing' && isSupportedByBrowser);
|
|
35
|
+
};
|
|
@@ -69,19 +69,9 @@ export const getCardPreviewFromFilePreview = async filePreview => {
|
|
|
69
69
|
|
|
70
70
|
throw new LocalPreviewError('local-preview-unsupported');
|
|
71
71
|
};
|
|
72
|
-
export const getCardPreviewFromBackend = async (mediaClient, id, {
|
|
73
|
-
width,
|
|
74
|
-
height
|
|
75
|
-
}, collectionName, resizeMode) => {
|
|
72
|
+
export const getCardPreviewFromBackend = async (mediaClient, id, params) => {
|
|
76
73
|
try {
|
|
77
|
-
const
|
|
78
|
-
const blob = await mediaClient.getImage(id, {
|
|
79
|
-
collection: collectionName,
|
|
80
|
-
mode,
|
|
81
|
-
width,
|
|
82
|
-
height,
|
|
83
|
-
allowAnimated: true
|
|
84
|
-
});
|
|
74
|
+
const blob = await mediaClient.getImage(id, params);
|
|
85
75
|
return {
|
|
86
76
|
dataURI: URL.createObjectURL(blob),
|
|
87
77
|
orientation: 1,
|