@atlaskit/media-card 71.0.0 → 73.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/CHANGELOG.md +104 -0
  2. package/dist/cjs/actions.js +2 -2
  3. package/dist/cjs/errors.js +83 -8
  4. package/dist/cjs/files/cardImageView/cardOverlay/styled.js +1 -1
  5. package/dist/cjs/files/cardImageView/index.js +53 -104
  6. package/dist/cjs/files/cardImageView/styled.js +1 -1
  7. package/dist/cjs/files/index.js +0 -6
  8. package/dist/cjs/index.js +8 -8
  9. package/dist/cjs/root/card/cardAnalytics.js +4 -16
  10. package/dist/cjs/root/card/cardLoader.js +66 -124
  11. package/dist/cjs/root/card/cardState.js +50 -0
  12. package/dist/cjs/root/card/getCardPreview/cache.js +10 -5
  13. package/dist/cjs/root/card/getCardPreview/filePreviewStatus.js +53 -0
  14. package/dist/cjs/root/card/getCardPreview/helpers.js +14 -22
  15. package/dist/cjs/root/card/getCardPreview/index.js +177 -97
  16. package/dist/cjs/root/card/getCardStatus.js +7 -1
  17. package/dist/cjs/root/card/index.js +384 -285
  18. package/dist/cjs/root/cardView.js +113 -88
  19. package/dist/cjs/root/inline/loader.js +47 -15
  20. package/dist/cjs/root/inline/mediaInlineCard.js +33 -12
  21. package/dist/cjs/root/inlinePlayer.js +77 -24
  22. package/dist/cjs/root/styled.js +7 -3
  23. package/dist/cjs/root/ui/actionsBar/styled.js +1 -1
  24. package/dist/cjs/root/ui/blanket/styled.js +1 -1
  25. package/dist/cjs/root/ui/common.js +11 -5
  26. package/dist/cjs/root/ui/iconMessage/index.js +16 -7
  27. package/dist/cjs/root/ui/iconWrapper/styled.js +1 -1
  28. package/dist/cjs/root/ui/imageRenderer/imageRenderer.js +47 -123
  29. package/dist/cjs/root/ui/loadingRateLimited/loadingRateLimited.js +6 -4
  30. package/dist/cjs/root/ui/loadingRateLimited/styled.js +2 -2
  31. package/dist/cjs/root/ui/playButton/styled.js +1 -1
  32. package/dist/cjs/root/ui/progressBar/progressBar.js +7 -4
  33. package/dist/cjs/root/ui/progressBar/styled.js +8 -9
  34. package/dist/cjs/root/ui/styled.js +80 -17
  35. package/dist/cjs/root/ui/tickBox/styled.js +1 -1
  36. package/dist/cjs/root/ui/titleBox/failedTitleBox.js +9 -3
  37. package/dist/cjs/root/ui/titleBox/styled.js +2 -4
  38. package/dist/cjs/root/ui/titleBox/titleBox.js +2 -2
  39. package/dist/cjs/styles/index.js +25 -23
  40. package/dist/cjs/styles/mixins.js +1 -1
  41. package/dist/cjs/utils/analytics.js +7 -44
  42. package/dist/cjs/utils/breakpoint.js +1 -1
  43. package/dist/cjs/utils/cardActions/cardActionsDropdownMenu.js +18 -9
  44. package/dist/cjs/utils/cardActions/index.js +10 -10
  45. package/dist/cjs/utils/cardActions/styled.js +1 -1
  46. package/dist/cjs/utils/cardDimensions.js +1 -1
  47. package/dist/cjs/utils/dimensionComparer.js +1 -1
  48. package/dist/cjs/utils/getErrorMessage.js +2 -2
  49. package/dist/cjs/utils/index.js +46 -46
  50. package/dist/cjs/utils/lightCards/styled.js +1 -1
  51. package/dist/cjs/utils/metadata.js +11 -3
  52. package/dist/cjs/utils/objectURLCache.js +7 -1
  53. package/dist/cjs/utils/shouldDisplayImageThumbnail.js +1 -1
  54. package/dist/cjs/utils/viewportDetector.js +49 -22
  55. package/dist/cjs/version.json +1 -1
  56. package/dist/es2019/errors.js +42 -2
  57. package/dist/es2019/files/cardImageView/index.js +8 -61
  58. package/dist/es2019/files/index.js +1 -1
  59. package/dist/es2019/root/card/cardAnalytics.js +3 -14
  60. package/dist/es2019/root/card/cardLoader.js +47 -53
  61. package/dist/es2019/root/card/cardState.js +26 -0
  62. package/dist/es2019/root/card/getCardPreview/cache.js +5 -0
  63. package/dist/es2019/root/card/getCardPreview/filePreviewStatus.js +38 -0
  64. package/dist/es2019/root/card/getCardPreview/helpers.js +2 -12
  65. package/dist/es2019/root/card/getCardPreview/index.js +112 -73
  66. package/dist/es2019/root/card/getCardStatus.js +1 -0
  67. package/dist/es2019/root/card/index.js +308 -190
  68. package/dist/es2019/root/cardView.js +97 -68
  69. package/dist/es2019/root/inline/loader.js +17 -5
  70. package/dist/es2019/root/inline/mediaInlineCard.js +32 -11
  71. package/dist/es2019/root/inlinePlayer.js +56 -4
  72. package/dist/es2019/root/styled.js +2 -1
  73. package/dist/es2019/root/ui/common.js +7 -1
  74. package/dist/es2019/root/ui/iconMessage/index.js +8 -5
  75. package/dist/es2019/root/ui/imageRenderer/imageRenderer.js +35 -88
  76. package/dist/es2019/root/ui/loadingRateLimited/loadingRateLimited.js +4 -3
  77. package/dist/es2019/root/ui/loadingRateLimited/styled.js +1 -1
  78. package/dist/es2019/root/ui/progressBar/progressBar.js +5 -3
  79. package/dist/es2019/root/ui/progressBar/styled.js +7 -6
  80. package/dist/es2019/root/ui/styled.js +65 -4
  81. package/dist/es2019/root/ui/titleBox/failedTitleBox.js +6 -3
  82. package/dist/es2019/root/ui/titleBox/styled.js +1 -2
  83. package/dist/es2019/root/ui/titleBox/titleBox.js +1 -1
  84. package/dist/es2019/utils/analytics.js +5 -34
  85. package/dist/es2019/utils/cardActions/cardActionsDropdownMenu.js +8 -4
  86. package/dist/es2019/utils/dimensionComparer.js +1 -1
  87. package/dist/es2019/utils/getErrorMessage.js +1 -1
  88. package/dist/es2019/utils/metadata.js +12 -4
  89. package/dist/es2019/utils/objectURLCache.js +5 -0
  90. package/dist/es2019/utils/shouldDisplayImageThumbnail.js +1 -1
  91. package/dist/es2019/utils/viewportDetector.js +48 -18
  92. package/dist/es2019/version.json +1 -1
  93. package/dist/esm/actions.js +2 -2
  94. package/dist/esm/errors.js +64 -4
  95. package/dist/esm/files/cardImageView/index.js +51 -102
  96. package/dist/esm/files/index.js +1 -1
  97. package/dist/esm/root/card/cardAnalytics.js +3 -15
  98. package/dist/esm/root/card/cardLoader.js +66 -126
  99. package/dist/esm/root/card/cardState.js +32 -0
  100. package/dist/esm/root/card/getCardPreview/cache.js +9 -2
  101. package/dist/esm/root/card/getCardPreview/filePreviewStatus.js +38 -0
  102. package/dist/esm/root/card/getCardPreview/helpers.js +13 -21
  103. package/dist/esm/root/card/getCardPreview/index.js +144 -91
  104. package/dist/esm/root/card/getCardStatus.js +3 -0
  105. package/dist/esm/root/card/index.js +396 -288
  106. package/dist/esm/root/cardView.js +113 -86
  107. package/dist/esm/root/inline/loader.js +48 -15
  108. package/dist/esm/root/inline/mediaInlineCard.js +32 -11
  109. package/dist/esm/root/inlinePlayer.js +74 -23
  110. package/dist/esm/root/styled.js +3 -2
  111. package/dist/esm/root/ui/common.js +7 -1
  112. package/dist/esm/root/ui/iconMessage/index.js +10 -5
  113. package/dist/esm/root/ui/imageRenderer/imageRenderer.js +37 -116
  114. package/dist/esm/root/ui/loadingRateLimited/loadingRateLimited.js +4 -3
  115. package/dist/esm/root/ui/loadingRateLimited/styled.js +1 -1
  116. package/dist/esm/root/ui/progressBar/progressBar.js +6 -3
  117. package/dist/esm/root/ui/progressBar/styled.js +7 -7
  118. package/dist/esm/root/ui/styled.js +61 -13
  119. package/dist/esm/root/ui/titleBox/failedTitleBox.js +7 -3
  120. package/dist/esm/root/ui/titleBox/styled.js +1 -2
  121. package/dist/esm/root/ui/titleBox/titleBox.js +1 -1
  122. package/dist/esm/utils/analytics.js +5 -36
  123. package/dist/esm/utils/cardActions/cardActionsDropdownMenu.js +17 -9
  124. package/dist/esm/utils/dimensionComparer.js +1 -1
  125. package/dist/esm/utils/getErrorMessage.js +1 -1
  126. package/dist/esm/utils/metadata.js +12 -4
  127. package/dist/esm/utils/objectURLCache.js +6 -0
  128. package/dist/esm/utils/shouldDisplayImageThumbnail.js +1 -1
  129. package/dist/esm/utils/viewportDetector.js +48 -21
  130. package/dist/esm/version.json +1 -1
  131. package/dist/types/errors.d.ts +15 -1
  132. package/dist/types/files/cardImageView/index.d.ts +4 -13
  133. package/dist/types/files/cardImageView/styled.d.ts +1 -1
  134. package/dist/types/files/index.d.ts +1 -1
  135. package/dist/types/index.d.ts +7 -4
  136. package/dist/types/root/card/cardAnalytics.d.ts +1 -6
  137. package/dist/types/root/card/cardLoader.d.ts +5 -19
  138. package/dist/types/root/card/cardState.d.ts +5 -0
  139. package/dist/types/root/card/getCardPreview/cache.d.ts +3 -1
  140. package/dist/types/root/card/getCardPreview/filePreviewStatus.d.ts +5 -0
  141. package/dist/types/root/card/getCardPreview/helpers.d.ts +3 -4
  142. package/dist/types/root/card/getCardPreview/index.d.ts +24 -14
  143. package/dist/types/root/card/getCardStatus.d.ts +1 -0
  144. package/dist/types/root/card/index.d.ts +20 -18
  145. package/dist/types/root/cardView.d.ts +13 -8
  146. package/dist/types/root/inline/loader.d.ts +2 -0
  147. package/dist/types/root/inline/mediaInlineCard.d.ts +3 -5
  148. package/dist/types/root/inlinePlayer.d.ts +8 -1
  149. package/dist/types/root/styled.d.ts +1 -0
  150. package/dist/types/root/ui/common.d.ts +4 -1
  151. package/dist/types/root/ui/iconMessage/index.d.ts +4 -3
  152. package/dist/types/root/ui/iconWrapper/styled.d.ts +1 -1
  153. package/dist/types/root/ui/imageRenderer/imageRenderer.d.ts +14 -15
  154. package/dist/types/root/ui/loadingRateLimited/loadingRateLimited.d.ts +2 -1
  155. package/dist/types/root/ui/loadingRateLimited/styled.d.ts +1 -1
  156. package/dist/types/root/ui/playButton/playButton.d.ts +1 -0
  157. package/dist/types/root/ui/progressBar/progressBar.d.ts +4 -2
  158. package/dist/types/root/ui/progressBar/styled.d.ts +3 -2
  159. package/dist/types/root/ui/styled.d.ts +10 -3
  160. package/dist/types/root/ui/tickBox/tickBox.d.ts +1 -0
  161. package/dist/types/root/ui/titleBox/failedTitleBox.d.ts +3 -1
  162. package/dist/types/root/ui/titleBox/styled.d.ts +1 -1
  163. package/dist/types/root/ui/titleBox/titleBox.d.ts +2 -10
  164. package/dist/types/styles/mixins.d.ts +1 -1
  165. package/dist/types/types.d.ts +7 -1
  166. package/dist/types/utils/analytics.d.ts +6 -15
  167. package/dist/types/utils/cardDimensions.d.ts +4 -4
  168. package/dist/types/utils/dimensionComparer.d.ts +1 -1
  169. package/dist/types/utils/getErrorMessage.d.ts +1 -0
  170. package/dist/types/utils/metadata.d.ts +2 -2
  171. package/dist/types/utils/objectURLCache.d.ts +2 -1
  172. package/dist/types/utils/viewportDetector.d.ts +13 -5
  173. package/example-helpers/developmentUseMessage.tsx +14 -0
  174. package/example-helpers/index.tsx +55 -4
  175. package/example-helpers/selectableCard.tsx +2 -1
  176. package/package.json +18 -16
  177. package/dist/cjs/root/card/cardSSRView.js +0 -112
  178. package/dist/cjs/root/card/getCardPreview/types.js +0 -5
  179. package/dist/cjs/root/ui/Breakpoint.js +0 -13
  180. package/dist/cjs/root/ui/styledSSR.js +0 -108
  181. package/dist/cjs/utils/fileAttributesContext.js +0 -40
  182. package/dist/cjs/utils/lazyContent/index.js +0 -56
  183. package/dist/cjs/utils/lazyContent/styled.js +0 -23
  184. package/dist/es2019/root/card/cardSSRView.js +0 -92
  185. package/dist/es2019/root/card/getCardPreview/types.js +0 -1
  186. package/dist/es2019/root/ui/Breakpoint.js +0 -6
  187. package/dist/es2019/root/ui/styledSSR.js +0 -93
  188. package/dist/es2019/utils/fileAttributesContext.js +0 -19
  189. package/dist/es2019/utils/lazyContent/index.js +0 -18
  190. package/dist/es2019/utils/lazyContent/styled.js +0 -12
  191. package/dist/esm/root/card/cardSSRView.js +0 -91
  192. package/dist/esm/root/card/getCardPreview/types.js +0 -1
  193. package/dist/esm/root/ui/Breakpoint.js +0 -6
  194. package/dist/esm/root/ui/styledSSR.js +0 -76
  195. package/dist/esm/utils/fileAttributesContext.js +0 -18
  196. package/dist/esm/utils/lazyContent/index.js +0 -41
  197. package/dist/esm/utils/lazyContent/styled.js +0 -14
  198. package/dist/types/root/card/cardSSRView.d.ts +0 -13
  199. package/dist/types/root/card/getCardPreview/types.d.ts +0 -5
  200. package/dist/types/root/ui/Breakpoint.d.ts +0 -4
  201. package/dist/types/root/ui/styledSSR.d.ts +0 -16
  202. package/dist/types/utils/fileAttributesContext.d.ts +0 -10
  203. package/dist/types/utils/lazyContent/index.d.ts +0 -11
  204. package/dist/types/utils/lazyContent/styled.d.ts +0 -5
@@ -0,0 +1,38 @@
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' || // For Video, we can have local or remote preview while processing.
35
+ // Then, we only want to show the thumbnail if the file is supported by the browser,
36
+ // this way we prevent playing unsupported videos that are not procesed
37
+ cardStatus === 'processing' && isSupportedByBrowser);
38
+ };
@@ -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 mode = resizeMode === 'stretchy-fit' ? 'full-fit' : resizeMode;
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,
@@ -1,45 +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 || cardStatus === 'processing' && hasPreview && isPreviewable && isSupportedByBrowser;
41
- };
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';
42
10
  export const getCardPreviewFromCache = cardPreviewCache.get;
11
+ export const removeCardPreviewFromCache = cardPreviewCache.remove;
43
12
  /**
44
13
  * Will return the preview if available and supported by the browser
45
14
  * See extractFilePreviewStatus "hasLocalPreview" logic
@@ -47,6 +16,41 @@ export const getCardPreviewFromCache = cardPreviewCache.get;
47
16
 
48
17
  export const getFilePreviewFromFileState = fileState => 'mimeType' in fileState && isMimeTypeSupportedByBrowser(fileState.mimeType) && isPreviewableFileState(fileState) ? fileState.preview : undefined;
49
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
+ };
50
54
  /**
51
55
  * This function will try to return a Card preview, either from cache, local preview or remote preview.
52
56
  * It should only be called if there is a chance to get either a remote or a local preview, or both.
@@ -57,28 +61,29 @@ export const getFilePreviewFromFileState = fileState => 'mimeType' in fileState
57
61
  * In that case, we still want to report the local preview error to the caller, for feature realiability track.
58
62
  * hence the use of the optional callback onLocalPreviewError
59
63
  */
64
+
65
+
60
66
  export const getCardPreview = async ({
61
67
  mediaClient,
62
68
  id,
63
- collectionName,
64
- requestedDimensions,
65
- isRemotePreviewReady,
66
- addContextToDataURI,
67
- filePreview,
68
69
  dimensions = {},
69
- resizeMode,
70
- onLocalPreviewError
70
+ filePreview,
71
+ onLocalPreviewError,
72
+ isRemotePreviewReady,
73
+ imageUrlParams,
74
+ mediaBlobUrlAttrs
71
75
  }) => {
72
- let cardPreview = cardPreviewCache.get(id, dimensions);
76
+ const cachedPreview = cardPreviewCache.get(id, dimensions);
73
77
 
74
- if (cardPreview) {
75
- return { ...cardPreview,
76
- source: 'cache'
77
- };
78
+ if (cachedPreview) {
79
+ return cachedPreview;
78
80
  }
79
81
 
80
82
  try {
81
- cardPreview = filePreview && (await getCardPreviewFromFilePreview(filePreview));
83
+ if (filePreview) {
84
+ const localPreview = await getCardPreviewFromFilePreview(filePreview);
85
+ return extendAndCachePreview(id, dimensions, localPreview, mediaBlobUrlAttrs);
86
+ }
82
87
  } catch (e) {
83
88
  /**
84
89
  * We report the error if:
@@ -104,29 +109,63 @@ export const getCardPreview = async ({
104
109
  }
105
110
  }
106
111
 
107
- if (!cardPreview) {
108
- if (!isRemotePreviewReady) {
109
- /**
110
- * We throw this in case this function has been called
111
- * without checking isRemotePreviewReady first.
112
- * If remote preview is not ready, the call to getCardPreviewFromBackend
113
- * will generate a console error due to a 404 code
114
- */
115
- throw new MediaCardError('remote-preview-not-ready');
116
- }
117
-
118
- 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');
119
120
  }
120
- /**
121
- * In case we've retrieved cardPreview using one of the two methods above,
122
- * we want to embed some meta context into dataURI for Copy/Paste to work.
123
- */
124
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;
125
139
 
126
- cardPreview = { ...cardPreview,
127
- dataURI: addContextToDataURI(cardPreview.dataURI)
128
- }; // 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.
129
142
 
130
- cardPreviewCache.set(id, dimensions, cardPreview);
131
- 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);
132
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,