@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.
Files changed (150) hide show
  1. package/CHANGELOG.md +79 -0
  2. package/dist/cjs/errors.js +76 -5
  3. package/dist/cjs/files/cardImageView/index.js +58 -89
  4. package/dist/cjs/files/index.js +0 -6
  5. package/dist/cjs/index.js +16 -6
  6. package/dist/cjs/root/card/cardAnalytics.js +33 -19
  7. package/dist/cjs/root/card/cardConstants.js +8 -0
  8. package/dist/cjs/root/card/cardLoader.js +66 -124
  9. package/dist/cjs/root/card/cardState.js +50 -0
  10. package/dist/cjs/root/card/getCardPreview/cache.js +5 -0
  11. package/dist/cjs/root/card/getCardPreview/filePreviewStatus.js +50 -0
  12. package/dist/cjs/root/card/getCardPreview/helpers.js +13 -21
  13. package/dist/cjs/root/card/getCardPreview/index.js +171 -100
  14. package/dist/cjs/root/card/getCardStatus.js +7 -1
  15. package/dist/cjs/root/card/index.js +407 -322
  16. package/dist/cjs/root/cardView.js +115 -76
  17. package/dist/cjs/root/index.js +9 -1
  18. package/dist/cjs/root/inline/loader.js +22 -21
  19. package/dist/cjs/root/inline/{inlineMediaCard.js → mediaInlineCard.js} +72 -25
  20. package/dist/cjs/root/inlinePlayer.js +5 -15
  21. package/dist/cjs/root/ui/iconMessage/index.js +17 -9
  22. package/dist/cjs/root/ui/imageRenderer/imageRenderer.js +36 -115
  23. package/dist/cjs/root/ui/styled.js +1 -1
  24. package/dist/cjs/root/ui/titleBox/failedTitleBox.js +7 -3
  25. package/dist/cjs/utils/analytics.js +26 -43
  26. package/dist/cjs/utils/cardActions/cardActionsDropdownMenu.js +16 -9
  27. package/dist/cjs/utils/dimensionComparer.js +1 -1
  28. package/dist/cjs/utils/document.js +12 -0
  29. package/dist/cjs/utils/getDataURIDimension.js +13 -2
  30. package/dist/cjs/utils/metadata.js +11 -3
  31. package/dist/cjs/utils/objectURLCache.js +6 -0
  32. package/dist/cjs/utils/resizeModeToMediaImageProps.js +13 -0
  33. package/dist/cjs/utils/shouldDisplayImageThumbnail.js +1 -1
  34. package/dist/cjs/version.json +1 -1
  35. package/dist/es2019/errors.js +42 -2
  36. package/dist/es2019/files/cardImageView/index.js +12 -46
  37. package/dist/es2019/files/index.js +1 -1
  38. package/dist/es2019/index.js +3 -3
  39. package/dist/es2019/root/card/cardAnalytics.js +23 -17
  40. package/dist/es2019/root/card/cardConstants.js +1 -0
  41. package/dist/es2019/root/card/cardLoader.js +47 -53
  42. package/dist/es2019/root/card/cardState.js +26 -0
  43. package/dist/es2019/root/card/getCardPreview/cache.js +5 -0
  44. package/dist/es2019/root/card/getCardPreview/filePreviewStatus.js +35 -0
  45. package/dist/es2019/root/card/getCardPreview/helpers.js +2 -12
  46. package/dist/es2019/root/card/getCardPreview/index.js +112 -79
  47. package/dist/es2019/root/card/getCardStatus.js +1 -0
  48. package/dist/es2019/root/card/index.js +356 -254
  49. package/dist/es2019/root/cardView.js +98 -58
  50. package/dist/es2019/root/index.js +2 -1
  51. package/dist/es2019/root/inline/loader.js +16 -15
  52. package/dist/es2019/root/inline/mediaInlineCard.js +132 -0
  53. package/dist/es2019/root/inlinePlayer.js +5 -13
  54. package/dist/es2019/root/ui/iconMessage/index.js +10 -6
  55. package/dist/es2019/root/ui/imageRenderer/imageRenderer.js +26 -74
  56. package/dist/es2019/root/ui/styled.js +1 -0
  57. package/dist/es2019/root/ui/titleBox/failedTitleBox.js +5 -3
  58. package/dist/es2019/utils/analytics.js +29 -40
  59. package/dist/es2019/utils/cardActions/cardActionsDropdownMenu.js +8 -4
  60. package/dist/es2019/utils/dimensionComparer.js +1 -1
  61. package/dist/es2019/utils/document.js +1 -0
  62. package/dist/es2019/utils/getDataURIDimension.js +8 -0
  63. package/dist/es2019/utils/metadata.js +12 -4
  64. package/dist/es2019/utils/objectURLCache.js +5 -0
  65. package/dist/es2019/utils/resizeModeToMediaImageProps.js +6 -0
  66. package/dist/es2019/utils/shouldDisplayImageThumbnail.js +1 -1
  67. package/dist/es2019/version.json +1 -1
  68. package/dist/esm/errors.js +60 -1
  69. package/dist/esm/files/cardImageView/index.js +55 -87
  70. package/dist/esm/files/index.js +1 -1
  71. package/dist/esm/index.js +3 -3
  72. package/dist/esm/root/card/cardAnalytics.js +23 -18
  73. package/dist/esm/root/card/cardConstants.js +1 -0
  74. package/dist/esm/root/card/cardLoader.js +66 -126
  75. package/dist/esm/root/card/cardState.js +32 -0
  76. package/dist/esm/root/card/getCardPreview/cache.js +6 -0
  77. package/dist/esm/root/card/getCardPreview/filePreviewStatus.js +35 -0
  78. package/dist/esm/root/card/getCardPreview/helpers.js +13 -21
  79. package/dist/esm/root/card/getCardPreview/index.js +142 -95
  80. package/dist/esm/root/card/getCardStatus.js +3 -0
  81. package/dist/esm/root/card/index.js +416 -325
  82. package/dist/esm/root/cardView.js +114 -73
  83. package/dist/esm/root/index.js +2 -1
  84. package/dist/esm/root/inline/loader.js +23 -22
  85. package/dist/esm/root/inline/mediaInlineCard.js +145 -0
  86. package/dist/esm/root/inlinePlayer.js +5 -13
  87. package/dist/esm/root/ui/iconMessage/index.js +12 -7
  88. package/dist/esm/root/ui/imageRenderer/imageRenderer.js +28 -106
  89. package/dist/esm/root/ui/styled.js +1 -1
  90. package/dist/esm/root/ui/titleBox/failedTitleBox.js +6 -3
  91. package/dist/esm/utils/analytics.js +22 -35
  92. package/dist/esm/utils/cardActions/cardActionsDropdownMenu.js +16 -9
  93. package/dist/esm/utils/dimensionComparer.js +1 -1
  94. package/dist/esm/utils/document.js +3 -0
  95. package/dist/esm/utils/getDataURIDimension.js +8 -0
  96. package/dist/esm/utils/metadata.js +12 -4
  97. package/dist/esm/utils/objectURLCache.js +6 -0
  98. package/dist/esm/utils/resizeModeToMediaImageProps.js +6 -0
  99. package/dist/esm/utils/shouldDisplayImageThumbnail.js +1 -1
  100. package/dist/esm/version.json +1 -1
  101. package/dist/types/errors.d.ts +15 -1
  102. package/dist/types/files/cardImageView/index.d.ts +5 -12
  103. package/dist/types/files/cardImageView/styled.d.ts +1 -1
  104. package/dist/types/files/index.d.ts +1 -1
  105. package/dist/types/index.d.ts +11 -13
  106. package/dist/types/root/card/cardAnalytics.d.ts +5 -7
  107. package/dist/types/root/card/cardConstants.d.ts +1 -0
  108. package/dist/types/root/card/cardLoader.d.ts +4 -18
  109. package/dist/types/root/card/cardState.d.ts +5 -0
  110. package/dist/types/root/card/getCardPreview/cache.d.ts +4 -2
  111. package/dist/types/root/card/getCardPreview/filePreviewStatus.d.ts +5 -0
  112. package/dist/types/root/card/getCardPreview/helpers.d.ts +4 -5
  113. package/dist/types/root/card/getCardPreview/index.d.ts +25 -14
  114. package/dist/types/root/card/getCardStatus.d.ts +1 -0
  115. package/dist/types/root/card/index.d.ts +18 -15
  116. package/dist/types/root/cardView.d.ts +14 -8
  117. package/dist/types/root/index.d.ts +1 -0
  118. package/dist/types/root/inline/loader.d.ts +8 -8
  119. package/dist/types/root/inline/{inlineMediaCard.d.ts → mediaInlineCard.d.ts} +4 -4
  120. package/dist/types/root/inlinePlayer.d.ts +1 -1
  121. package/dist/types/root/ui/iconMessage/index.d.ts +7 -2
  122. package/dist/types/root/ui/imageRenderer/imageRenderer.d.ts +5 -18
  123. package/dist/types/root/ui/titleBox/failedTitleBox.d.ts +2 -0
  124. package/dist/types/types.d.ts +9 -1
  125. package/dist/types/utils/analytics.d.ts +20 -21
  126. package/dist/types/utils/cardDimensions.d.ts +5 -1
  127. package/dist/types/utils/dimensionComparer.d.ts +1 -1
  128. package/dist/types/utils/document.d.ts +2 -0
  129. package/dist/types/utils/getDataURIDimension.d.ts +3 -1
  130. package/dist/types/utils/index.d.ts +1 -0
  131. package/dist/types/utils/lazyContent/styled.d.ts +1 -1
  132. package/dist/types/utils/lightCards/types.d.ts +1 -1
  133. package/dist/types/utils/metadata.d.ts +2 -2
  134. package/dist/types/utils/objectURLCache.d.ts +2 -1
  135. package/dist/types/utils/resizeModeToMediaImageProps.d.ts +5 -0
  136. package/dist/types/utils/shouldDisplayImageThumbnail.d.ts +1 -1
  137. package/example-helpers/developmentUseMessage.tsx +14 -0
  138. package/example-helpers/index.tsx +55 -4
  139. package/example-helpers/selectableCard.tsx +2 -1
  140. package/package.json +18 -14
  141. package/dist/cjs/root/card/getCardPreview/types.js +0 -5
  142. package/dist/cjs/utils/fileAttributesContext.js +0 -40
  143. package/dist/es2019/root/card/getCardPreview/types.js +0 -1
  144. package/dist/es2019/root/inline/inlineMediaCard.js +0 -92
  145. package/dist/es2019/utils/fileAttributesContext.js +0 -19
  146. package/dist/esm/root/card/getCardPreview/types.js +0 -1
  147. package/dist/esm/root/inline/inlineMediaCard.js +0 -100
  148. package/dist/esm/utils/fileAttributesContext.js +0 -18
  149. package/dist/types/root/card/getCardPreview/types.d.ts +0 -5
  150. package/dist/types/utils/fileAttributesContext.d.ts +0 -10
@@ -1,51 +1,14 @@
1
- import { isPreviewableFileState, isPreviewableType, isImageRepresentationReady } from '@atlaskit/media-client';
1
+ import { isPreviewableFileState, addFileAttrsToUrl } from '@atlaskit/media-client';
2
2
  import { isMimeTypeSupportedByBrowser } from '@atlaskit/media-common';
3
3
  import cardPreviewCache from './cache';
4
- import { getCardPreviewFromFilePreview, getCardPreviewFromBackend, isSupportedLocalPreview } from './helpers';
5
- import { MediaCardError, isUnsupportedLocalPreviewError } from '../../../errors';
6
- export { getCardPreviewFromFilePreview, getCardPreviewFromBackend, isSupportedLocalPreview } from './helpers'; // TODO: align these checks with helpers from Media Client
7
- // https://product-fabric.atlassian.net/browse/BMPT-1300
8
-
9
- export const extractFilePreviewStatus = (fileState, featureFlags) => {
10
- const hasFilesize = 'size' in fileState && !!fileState.size;
11
- const {
12
- mediaType
13
- } = 'mediaType' in fileState && fileState || {};
14
- const {
15
- mimeType
16
- } = 'mimeType' in fileState && fileState || {};
17
- const isPreviewable = !!mediaType && isPreviewableType(mediaType, featureFlags);
18
- /**
19
- * Local preview is available only if it's supported by browser and supported by Media Card (isSupportedLocalPreview)
20
- * For example, SVGs are mime type NOT supported by browser but media type supported by Media Card (image)
21
- * Then, local Preview NOT available
22
- */
23
-
24
- const hasLocalPreview = isPreviewableFileState(fileState) && isSupportedLocalPreview(mediaType) && !!mimeType && isMimeTypeSupportedByBrowser(mimeType);
25
- const hasRemotePreview = isImageRepresentationReady(fileState);
26
- const hasPreview = hasLocalPreview || hasRemotePreview;
27
- const isSupportedByBrowser = !!mimeType && isMimeTypeSupportedByBrowser(mimeType);
28
- return {
29
- hasFilesize,
30
- isPreviewable,
31
- hasPreview,
32
- isSupportedByBrowser
33
- };
34
- };
35
- export const shouldGetCardPreview = (cardStatus, {
36
- isPreviewable,
37
- hasPreview,
38
- isSupportedByBrowser
39
- }) => {
40
- return cardStatus === 'loading-preview' || cardStatus === 'uploading' && hasPreview && isPreviewable ||
41
- /**
42
- * For Video, we can have local or remote preview while processing.
43
- * Then, we only want to show the thumbnail if the file is supported by the browser,
44
- * this way we prevent playing unsupported videos that are not procesed
45
- */
46
- cardStatus === 'processing' && hasPreview && isPreviewable && isSupportedByBrowser;
47
- };
4
+ import { getCardPreviewFromFilePreview, getCardPreviewFromBackend } from './helpers';
5
+ import { MediaCardError, SsrPreviewError, isUnsupportedLocalPreviewError } from '../../../errors';
6
+ import { isBigger } from '../../../utils/dimensionComparer';
7
+ import { extractFilePreviewStatus, isPreviewableStatus } from './filePreviewStatus';
8
+ export { getCardPreviewFromFilePreview, getCardPreviewFromBackend, isSupportedLocalPreview } from './helpers';
9
+ export { extractFilePreviewStatus } from './filePreviewStatus';
48
10
  export const getCardPreviewFromCache = cardPreviewCache.get;
11
+ export const removeCardPreviewFromCache = cardPreviewCache.remove;
49
12
  /**
50
13
  * Will return the preview if available and supported by the browser
51
14
  * See extractFilePreviewStatus "hasLocalPreview" logic
@@ -53,6 +16,41 @@ export const getCardPreviewFromCache = cardPreviewCache.get;
53
16
 
54
17
  export const getFilePreviewFromFileState = fileState => 'mimeType' in fileState && isMimeTypeSupportedByBrowser(fileState.mimeType) && isPreviewableFileState(fileState) ? fileState.preview : undefined;
55
18
 
19
+ const extendAndCachePreview = (id, dimensions, preview, mediaBlobUrlAttrs) => {
20
+ let source;
21
+
22
+ switch (preview.source) {
23
+ case 'local':
24
+ source = 'cache-local';
25
+ break;
26
+
27
+ case 'remote':
28
+ source = 'cache-remote';
29
+ break;
30
+
31
+ case 'ssr-server':
32
+ source = 'cache-ssr-server';
33
+ break;
34
+
35
+ case 'ssr-client':
36
+ source = 'cache-ssr-client';
37
+ break;
38
+
39
+ default:
40
+ source = preview.source;
41
+ } // We want to embed some meta context into dataURI for Copy/Paste to work.
42
+
43
+
44
+ const dataURI = mediaBlobUrlAttrs ? addFileAttrsToUrl(preview.dataURI, mediaBlobUrlAttrs) : preview.dataURI; // We store new cardPreview into cache
45
+
46
+ cardPreviewCache.set(id, dimensions, { ...preview,
47
+ source,
48
+ dataURI
49
+ });
50
+ return { ...preview,
51
+ dataURI
52
+ };
53
+ };
56
54
  /**
57
55
  * This function will try to return a Card preview, either from cache, local preview or remote preview.
58
56
  * It should only be called if there is a chance to get either a remote or a local preview, or both.
@@ -63,28 +61,29 @@ export const getFilePreviewFromFileState = fileState => 'mimeType' in fileState
63
61
  * In that case, we still want to report the local preview error to the caller, for feature realiability track.
64
62
  * hence the use of the optional callback onLocalPreviewError
65
63
  */
64
+
65
+
66
66
  export const getCardPreview = async ({
67
67
  mediaClient,
68
68
  id,
69
- collectionName,
70
- requestedDimensions,
71
- isRemotePreviewReady,
72
- addContextToDataURI,
73
- filePreview,
74
69
  dimensions = {},
75
- resizeMode,
76
- onLocalPreviewError
70
+ filePreview,
71
+ onLocalPreviewError,
72
+ isRemotePreviewReady,
73
+ imageUrlParams,
74
+ mediaBlobUrlAttrs
77
75
  }) => {
78
- let cardPreview = cardPreviewCache.get(id, dimensions);
76
+ const cachedPreview = cardPreviewCache.get(id, dimensions);
79
77
 
80
- if (cardPreview) {
81
- return { ...cardPreview,
82
- source: 'cache'
83
- };
78
+ if (cachedPreview) {
79
+ return cachedPreview;
84
80
  }
85
81
 
86
82
  try {
87
- cardPreview = filePreview && (await getCardPreviewFromFilePreview(filePreview));
83
+ if (filePreview) {
84
+ const localPreview = await getCardPreviewFromFilePreview(filePreview);
85
+ return extendAndCachePreview(id, dimensions, localPreview, mediaBlobUrlAttrs);
86
+ }
88
87
  } catch (e) {
89
88
  /**
90
89
  * We report the error if:
@@ -110,29 +109,63 @@ export const getCardPreview = async ({
110
109
  }
111
110
  }
112
111
 
113
- if (!cardPreview) {
114
- if (!isRemotePreviewReady) {
115
- /**
116
- * We throw this in case this function has been called
117
- * without checking isRemotePreviewReady first.
118
- * If remote preview is not ready, the call to getCardPreviewFromBackend
119
- * will generate a console error due to a 404 code
120
- */
121
- throw new MediaCardError('remote-preview-not-ready');
122
- }
123
-
124
- cardPreview = await getCardPreviewFromBackend(mediaClient, id, requestedDimensions, collectionName, resizeMode);
112
+ if (!isRemotePreviewReady) {
113
+ /**
114
+ * We throw this in case this function has been called
115
+ * without checking isRemotePreviewReady first.
116
+ * If remote preview is not ready, the call to getCardPreviewFromBackend
117
+ * will generate a console error due to a 404 code
118
+ */
119
+ throw new MediaCardError('remote-preview-not-ready');
125
120
  }
126
- /**
127
- * In case we've retrieved cardPreview using one of the two methods above,
128
- * we want to embed some meta context into dataURI for Copy/Paste to work.
129
- */
130
121
 
122
+ return fetchAndCacheRemotePreview(mediaClient, id, dimensions, imageUrlParams, mediaBlobUrlAttrs);
123
+ };
124
+ export const shouldResolvePreview = ({
125
+ status,
126
+ fileState,
127
+ dimensions,
128
+ prevDimensions,
129
+ hasCardPreview,
130
+ isBannedLocalPreview,
131
+ featureFlags
132
+ }) => {
133
+ const statusIsPreviewable = isPreviewableStatus(status, extractFilePreviewStatus(fileState, isBannedLocalPreview, featureFlags));
134
+ const dimensionsAreBigger = isBigger(prevDimensions, dimensions);
135
+ return statusIsPreviewable && (!hasCardPreview || dimensionsAreBigger);
136
+ };
137
+ export const getSSRCardPreview = (ssr, mediaClient, id, params, mediaBlobUrlAttrs) => {
138
+ let dataURI;
131
139
 
132
- cardPreview = { ...cardPreview,
133
- dataURI: addContextToDataURI(cardPreview.dataURI)
134
- }; // We store new cardPreview into cache
140
+ try {
141
+ const rawDataURI = mediaClient.getImageUrlSync(id, params); // We want to embed some meta context into dataURI for Copy/Paste to work.
135
142
 
136
- cardPreviewCache.set(id, dimensions, cardPreview);
137
- return cardPreview;
143
+ dataURI = mediaBlobUrlAttrs ? addFileAttrsToUrl(rawDataURI, mediaBlobUrlAttrs) : rawDataURI;
144
+ const source = ssr === 'client' ? 'ssr-client' : 'ssr-server';
145
+ return {
146
+ dataURI,
147
+ source,
148
+ orientation: 1
149
+ };
150
+ } catch (e) {
151
+ const reason = ssr === 'server' ? 'ssr-server-uri' : 'ssr-client-uri';
152
+ throw new SsrPreviewError(reason, e);
153
+ }
154
+ };
155
+ export const isLocalPreview = preview => {
156
+ const localSources = ['local', 'cache-local'];
157
+ return localSources.includes(preview.source);
158
+ };
159
+ export const isSSRPreview = preview => isSSRClientPreview(preview) || isSSRServerPreview(preview);
160
+ export const isSSRServerPreview = preview => {
161
+ const ssrClientSources = ['ssr-server', 'cache-ssr-server'];
162
+ return ssrClientSources.includes(preview.source);
163
+ };
164
+ export const isSSRClientPreview = preview => {
165
+ const ssrClientSources = ['ssr-client', 'cache-ssr-client'];
166
+ return ssrClientSources.includes(preview.source);
167
+ };
168
+ export const fetchAndCacheRemotePreview = async (mediaClient, id, dimensions, params, mediaBlobUrlAttrs) => {
169
+ const remotePreview = await getCardPreviewFromBackend(mediaClient, id, params);
170
+ return extendAndCachePreview(id, dimensions, remotePreview, mediaBlobUrlAttrs);
138
171
  };
@@ -1,3 +1,4 @@
1
+ export const isFinalCardStatus = status => ['complete', 'error', 'failed-processing'].includes(status);
1
2
  export const getCardStatus = (fileStatus, {
2
3
  hasFilesize,
3
4
  isPreviewable,