@atlaskit/media-card 77.4.6 → 77.4.8

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 (55) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cjs/card/card.js +4 -7
  3. package/dist/cjs/card/cardView.js +11 -7
  4. package/dist/cjs/card/media-card-analytics-error-boundary.js +1 -1
  5. package/dist/cjs/card/v2/cardV2.js +1 -1
  6. package/dist/cjs/card/v2/cardViewV2.js +0 -3
  7. package/dist/cjs/card/v2/externalImageCard.js +3 -3
  8. package/dist/cjs/card/v2/fileCard.js +18 -17
  9. package/dist/cjs/card/v2/useFilePreview.js +48 -31
  10. package/dist/cjs/inline/loader.js +1 -1
  11. package/dist/cjs/utils/getDataURIDimension.js +38 -1
  12. package/dist/cjs/utils/globalScope/globalScope.js +4 -10
  13. package/dist/cjs/utils/globalScope/index.js +2 -2
  14. package/dist/cjs/utils/ufoExperiences.js +1 -1
  15. package/dist/es2019/card/card.js +5 -8
  16. package/dist/es2019/card/cardView.js +6 -1
  17. package/dist/es2019/card/media-card-analytics-error-boundary.js +1 -1
  18. package/dist/es2019/card/v2/cardV2.js +1 -1
  19. package/dist/es2019/card/v2/cardViewV2.js +0 -2
  20. package/dist/es2019/card/v2/externalImageCard.js +3 -3
  21. package/dist/es2019/card/v2/fileCard.js +21 -20
  22. package/dist/es2019/card/v2/useFilePreview.js +51 -32
  23. package/dist/es2019/inline/loader.js +1 -1
  24. package/dist/es2019/utils/getDataURIDimension.js +39 -0
  25. package/dist/es2019/utils/globalScope/globalScope.js +1 -7
  26. package/dist/es2019/utils/globalScope/index.js +1 -1
  27. package/dist/es2019/utils/ufoExperiences.js +1 -1
  28. package/dist/esm/card/card.js +5 -8
  29. package/dist/esm/card/cardView.js +11 -7
  30. package/dist/esm/card/media-card-analytics-error-boundary.js +1 -1
  31. package/dist/esm/card/v2/cardV2.js +1 -1
  32. package/dist/esm/card/v2/cardViewV2.js +0 -3
  33. package/dist/esm/card/v2/externalImageCard.js +3 -3
  34. package/dist/esm/card/v2/fileCard.js +21 -20
  35. package/dist/esm/card/v2/useFilePreview.js +50 -32
  36. package/dist/esm/inline/loader.js +1 -1
  37. package/dist/esm/utils/getDataURIDimension.js +38 -0
  38. package/dist/esm/utils/globalScope/globalScope.js +3 -8
  39. package/dist/esm/utils/globalScope/index.js +1 -1
  40. package/dist/esm/utils/ufoExperiences.js +1 -1
  41. package/dist/types/card/v2/cardViewV2.d.ts +17 -6
  42. package/dist/types/card/v2/fileCard.d.ts +40 -6
  43. package/dist/types/card/v2/useFilePreview.d.ts +9 -14
  44. package/dist/types/utils/getDataURIDimension.d.ts +17 -0
  45. package/dist/types/utils/globalScope/globalScope.d.ts +2 -8
  46. package/dist/types/utils/globalScope/index.d.ts +1 -1
  47. package/dist/types/utils/globalScope/types.d.ts +1 -1
  48. package/dist/types-ts4.5/card/v2/cardViewV2.d.ts +17 -6
  49. package/dist/types-ts4.5/card/v2/fileCard.d.ts +40 -6
  50. package/dist/types-ts4.5/card/v2/useFilePreview.d.ts +9 -14
  51. package/dist/types-ts4.5/utils/getDataURIDimension.d.ts +17 -0
  52. package/dist/types-ts4.5/utils/globalScope/globalScope.d.ts +2 -8
  53. package/dist/types-ts4.5/utils/globalScope/index.d.ts +1 -1
  54. package/dist/types-ts4.5/utils/globalScope/types.d.ts +1 -1
  55. package/package.json +7 -3
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @atlaskit/media-card
2
2
 
3
+ ## 77.4.8
4
+
5
+ ### Patch Changes
6
+
7
+ - [#59147](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/59147) [`f12e489f23b0`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/f12e489f23b0) - Re-build and deploy packages to NPM to resolve React/Compiled not found error (HOT-106483).
8
+ - [#58813](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/58813) [`28b2b3f41843`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/28b2b3f41843) - Internal components use useMediaClient hook
9
+ - [#56822](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/56822) [`77f4fbf44e93`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/77f4fbf44e93) - ECA11Y-78: Added announce for the selected file
10
+ - [#58473](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/58473) [`7c4103bcdc2c`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/7c4103bcdc2c) - refactored use of card dimensions and requested dimensions in card V2
11
+
12
+ ## 77.4.7
13
+
14
+ ### Patch Changes
15
+
16
+ - [#57119](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/57119) [`c64d6ef23ba4`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/c64d6ef23ba4) - Replaces the return type of internal preview hook to include the attributes for the ssr script
17
+ - Updated dependencies
18
+
3
19
  ## 77.4.6
4
20
 
5
21
  ### Patch Changes
@@ -49,7 +49,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
49
49
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
50
50
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
51
51
  var packageName = "@atlaskit/media-card";
52
- var packageVersion = "77.4.6";
52
+ var packageVersion = "77.4.8";
53
53
  var CardBase = exports.CardBase = /*#__PURE__*/function (_Component) {
54
54
  (0, _inherits2.default)(CardBase, _Component);
55
55
  var _super = _createSuper(CardBase);
@@ -611,12 +611,9 @@ var CardBase = exports.CardBase = /*#__PURE__*/function (_Component) {
611
611
  var _this$state$cardPrevi = _this.state.cardPreview,
612
612
  _this$state$cardPrevi2 = _this$state$cardPrevi === void 0 ? {} : _this$state$cardPrevi,
613
613
  dataURI = _this$state$cardPrevi2.dataURI;
614
- return (0, _mediaClient2.isFileIdentifier)(identifier) && ssr === 'server' && /*#__PURE__*/_react.default.createElement(_globalScope.StoreSSRDataScript, {
615
- identifier: identifier,
616
- dataURI: dataURI,
617
- dimensions: _this.requestedDimensions,
618
- error: ((_this$ssrReliability$ = _this.ssrReliability.server) === null || _this$ssrReliability$ === void 0 ? void 0 : _this$ssrReliability$.status) === 'fail' ? _this.ssrReliability.server : undefined
619
- });
614
+ return (0, _mediaClient2.isFileIdentifier)(identifier) &&
615
+ // Print the SSR result to be used during hydration
616
+ ssr === 'server' && /*#__PURE__*/_react.default.createElement("script", (0, _globalScope.generateScriptProps)(identifier, dataURI, _this.requestedDimensions, ((_this$ssrReliability$ = _this.ssrReliability.server) === null || _this$ssrReliability$ === void 0 ? void 0 : _this$ssrReliability$.status) === 'fail' ? _this.ssrReliability.server : undefined));
620
617
  });
621
618
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "onCardInViewport", function () {
622
619
  _this.setState({
@@ -38,6 +38,7 @@ var _iconMessage = require("./ui/iconMessage");
38
38
  var _errors = require("../errors");
39
39
  var _wrapper = require("./ui/wrapper");
40
40
  var _classnames = require("./classnames");
41
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
41
42
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
42
43
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
43
44
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
@@ -334,10 +335,13 @@ var CardViewBase = exports.CardViewBase = /*#__PURE__*/function (_React$Componen
334
335
  onDisplayImage = _this$props6.onDisplayImage,
335
336
  nativeLazyLoad = _this$props6.nativeLazyLoad,
336
337
  forceSyncDisplay = _this$props6.forceSyncDisplay;
338
+ var _ref7 = this.props.metadata || {},
339
+ name = _ref7.name;
340
+ var altText = (0, _platformFeatureFlags.getBooleanFF)('platform.editor.a11y-media_er96o') ? alt || name : alt;
337
341
  return !!cardPreview && (0, _react.jsx)(_imageRenderer.ImageRenderer, {
338
342
  cardPreview: cardPreview,
339
343
  mediaType: mediaType,
340
- alt: alt,
344
+ alt: altText,
341
345
  resizeMode: resizeMode,
342
346
  onDisplayImage: onDisplayImage,
343
347
  onImageLoad: this.onImageLoad,
@@ -358,10 +362,10 @@ var CardViewBase = exports.CardViewBase = /*#__PURE__*/function (_React$Componen
358
362
  key: "renderMediaTypeIcon",
359
363
  value: function renderMediaTypeIcon(hasTitleBox, iconMessage) {
360
364
  var metadata = this.props.metadata;
361
- var _ref7 = metadata || {},
362
- mediaType = _ref7.mediaType,
363
- mimeType = _ref7.mimeType,
364
- name = _ref7.name;
365
+ var _ref8 = metadata || {},
366
+ mediaType = _ref8.mediaType,
367
+ mimeType = _ref8.mimeType,
368
+ name = _ref8.name;
365
369
  return (0, _react.jsx)(_iconWrapper.IconWrapper, {
366
370
  breakpoint: this.breakpoint,
367
371
  hasTitleBox: hasTitleBox
@@ -404,8 +408,8 @@ var CardViewBase = exports.CardViewBase = /*#__PURE__*/function (_React$Componen
404
408
  cardPreview = _this$props8.cardPreview,
405
409
  mediaCardCursor = _this$props8.mediaCardCursor,
406
410
  shouldHideTooltip = _this$props8.shouldHideTooltip;
407
- var _ref8 = metadata || {},
408
- name = _ref8.name;
411
+ var _ref9 = metadata || {},
412
+ name = _ref9.name;
409
413
  var shouldDisplayBackground = !cardPreview || !disableOverlay || status === 'error' || status === 'failed-processing';
410
414
  var isPlayButtonClickable = !!(this.shouldRenderPlayButton() && disableOverlay);
411
415
  var isTickBoxSelectable = !disableOverlay && !!selectable && !selected;
@@ -90,7 +90,7 @@ var WrappedMediaCardAnalyticsErrorBoundary = /*#__PURE__*/function (_React$Compo
90
90
  }(_react.default.Component);
91
91
  (0, _defineProperty2.default)(WrappedMediaCardAnalyticsErrorBoundary, "displayName", 'MediaCardAnalyticsErrorBoundary');
92
92
  var packageName = "@atlaskit/media-card";
93
- var packageVersion = "77.4.6";
93
+ var packageVersion = "77.4.8";
94
94
  var MediaCardAnalyticsErrorBoundary = (0, _mediaCommon.withMediaAnalyticsContext)({
95
95
  packageVersion: packageVersion,
96
96
  packageName: packageName,
@@ -16,7 +16,7 @@ var _externalImageCard = require("./externalImageCard");
16
16
  var _fileCard = require("./fileCard");
17
17
  var _excluded = ["identifier"];
18
18
  var packageName = "@atlaskit/media-card";
19
- var packageVersion = "77.4.6";
19
+ var packageVersion = "77.4.8";
20
20
  var CardV2Base = exports.CardV2Base = function CardV2Base(_ref) {
21
21
  var identifier = _ref.identifier,
22
22
  otherProps = (0, _objectWithoutProperties2.default)(_ref, _excluded);
@@ -41,8 +41,6 @@ var CardViewV2Base = exports.CardViewV2Base = function CardViewV2Base(_ref) {
41
41
  onImageLoad = _ref.onImageLoad,
42
42
  onImageError = _ref.onImageError,
43
43
  dimensions = _ref.dimensions,
44
- _ref$appearance = _ref.appearance,
45
- appearance = _ref$appearance === void 0 ? 'auto' : _ref$appearance,
46
44
  onClick = _ref.onClick,
47
45
  onMouseEnter = _ref.onMouseEnter,
48
46
  testId = _ref.testId,
@@ -263,7 +261,6 @@ var CardViewV2Base = exports.CardViewV2Base = function CardViewV2Base(_ref) {
263
261
  return (0, _react.jsx)(_wrapper.Wrapper, {
264
262
  testId: testId || 'media-card-view',
265
263
  dimensions: dimensions,
266
- appearance: appearance,
267
264
  onClick: onClick,
268
265
  onMouseEnter: onMouseEnter,
269
266
  innerRef: divRef,
@@ -19,6 +19,7 @@ var _generateUniqueId = require("../../utils/generateUniqueId");
19
19
  var _getMediaCardCursor = require("../../utils/getMediaCardCursor");
20
20
  var _ufoExperiences = require("../../utils/ufoExperiences");
21
21
  var _useCurrentValueRef = require("../../utils/useCurrentValueRef");
22
+ var _cardDimensions = require("../../utils/cardDimensions");
22
23
  var _usePrevious = require("../../utils/usePrevious");
23
24
  var _cardAnalytics = require("../cardAnalytics");
24
25
  var _cardViewV = require("./cardViewV2");
@@ -52,6 +53,7 @@ var ExternalImageCard = exports.ExternalImageCard = function ExternalImageCard(_
52
53
  _onClick = _ref.onClick,
53
54
  _onMouseEnter = _ref.onMouseEnter,
54
55
  createAnalyticsEvent = _ref.createAnalyticsEvent;
56
+ var cardDimensions = dimensions || (0, _cardDimensions.getDefaultCardDimensions)(appearance);
55
57
  var internalOccurrenceKey = (0, _react.useMemo)(function () {
56
58
  return (0, _generateUniqueId.generateUniqueId)();
57
59
  }, []);
@@ -233,9 +235,8 @@ var ExternalImageCard = exports.ExternalImageCard = function ExternalImageCard(_
233
235
  metadata: metadata,
234
236
  cardPreview: cardPreview,
235
237
  alt: alt,
236
- appearance: appearance,
237
238
  resizeMode: resizeMode,
238
- dimensions: dimensions,
239
+ dimensions: cardDimensions,
239
240
  actions: actions,
240
241
  selectable: selectable,
241
242
  selected: selected,
@@ -273,7 +274,6 @@ var ExternalImageCard = exports.ExternalImageCard = function ExternalImageCard(_
273
274
  },
274
275
  innerRef: setCardElement,
275
276
  testId: testId,
276
- featureFlags: featureFlags,
277
277
  titleBoxBgColor: titleBoxBgColor,
278
278
  titleBoxIcon: titleBoxIcon,
279
279
  onImageError: function onImageError(newCardPreview) {
@@ -27,6 +27,7 @@ var _useCurrentValueRef = require("../../utils/useCurrentValueRef");
27
27
  var _usePrevious = require("../../utils/usePrevious");
28
28
  var _videoIsPlayable = require("../../utils/videoIsPlayable");
29
29
  var _viewportDetector = require("../../utils/viewportDetector");
30
+ var _cardDimensions = require("../../utils/cardDimensions");
30
31
  var _cardAnalytics = require("../cardAnalytics");
31
32
  var _getCardPreview = require("../getCardPreview");
32
33
  var _cardViewV = require("./cardViewV2");
@@ -49,7 +50,6 @@ var FileCard = exports.FileCard = function FileCard(_ref) {
49
50
  featureFlags = _ref$featureFlags === void 0 ? {} : _ref$featureFlags,
50
51
  identifier = _ref.identifier,
51
52
  ssr = _ref.ssr,
52
- mediaClient = _ref.mediaClient,
53
53
  dimensions = _ref.dimensions,
54
54
  originalDimensions = _ref.originalDimensions,
55
55
  contextId = _ref.contextId,
@@ -73,19 +73,24 @@ var FileCard = exports.FileCard = function FileCard(_ref) {
73
73
  //------------ State, Refs & Initial Values ----------------------//
74
74
  //----------------------------------------------------------------//
75
75
 
76
+ var mediaClient = (0, _mediaClientReact.useMediaClient)();
76
77
  var _useState = (0, _react.useState)(null),
77
78
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
78
79
  cardElement = _useState2[0],
79
80
  setCardElement = _useState2[1];
80
- var requestedDimensions = (0, _react.useMemo)(function () {
81
+ var cardDimensions = dimensions || (0, _cardDimensions.getDefaultCardDimensions)(appearance);
82
+
83
+ // Calculate the preview dimensions if card dimensions are "percentage" based
84
+ var previewDimensions = (0, _react.useMemo)(function () {
81
85
  return (
82
- // requested dimensions is eventually an expensive operation if the dimensions are a percentage
83
- (0, _getDataURIDimension.getRequestedDimensions)({
84
- dimensions: dimensions,
86
+ // resolving dimensions is eventually an expensive operation if the dimensions are a percentage
87
+ // thus needs to be memoized
88
+ (0, _getDataURIDimension.resolveCardPreviewDimensions)({
89
+ dimensions: cardDimensions,
85
90
  element: cardElement
86
91
  })
87
92
  );
88
- }, [dimensions, cardElement]);
93
+ }, [cardDimensions, cardElement]);
89
94
  var _useState3 = (0, _react.useState)(!isLazy),
90
95
  _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
91
96
  isCardVisible = _useState4[0],
@@ -164,18 +169,16 @@ var FileCard = exports.FileCard = function FileCard(_ref) {
164
169
  mimeType: mimeType,
165
170
  name: name,
166
171
  size: size
167
- }, originalDimensions || requestedDimensions), {}, {
172
+ }, originalDimensions || previewDimensions), {}, {
168
173
  alt: alt
169
174
  }) : undefined;
170
- }, [alt, requestedDimensions, contextId, fileStateValue, identifier, originalDimensions]);
175
+ }, [alt, previewDimensions, contextId, fileStateValue, identifier, originalDimensions]);
171
176
  var _useFilePreview = (0, _useFilePreview2.useFilePreview)({
172
177
  mediaBlobUrlAttrs: mediaBlobUrlAttrs,
173
178
  resizeMode: resizeMode,
174
179
  identifier: identifier,
175
180
  ssr: ssr,
176
- mediaClient: mediaClient,
177
- dimensions: dimensions,
178
- requestedDimensions: requestedDimensions,
181
+ dimensions: previewDimensions,
179
182
  traceContext: traceContext,
180
183
  previewDidRender: previewDidRender,
181
184
  skipRemote: !isCardVisible
@@ -186,7 +189,7 @@ var FileCard = exports.FileCard = function FileCard(_ref) {
186
189
  ssrReliabilityRef = _useFilePreview.ssrReliabilityRef,
187
190
  onImageErrorBase = _useFilePreview.onImageError,
188
191
  onImageLoadBase = _useFilePreview.onImageLoad,
189
- StoreSSRDataScript = _useFilePreview.StoreSSRDataScript;
192
+ getScriptProps = _useFilePreview.getScriptProps;
190
193
  var _useState15 = (0, _react.useState)(),
191
194
  _useState16 = (0, _slicedToArray2.default)(_useState15, 2),
192
195
  error = _useState16[0],
@@ -523,9 +526,8 @@ var FileCard = exports.FileCard = function FileCard(_ref) {
523
526
  metadata: metadata,
524
527
  cardPreview: cardPreview,
525
528
  alt: alt,
526
- appearance: appearance,
527
529
  resizeMode: resizeMode,
528
- dimensions: dimensions,
530
+ dimensions: cardDimensions,
529
531
  actions: computedActions,
530
532
  selectable: selectable,
531
533
  selected: selected,
@@ -549,7 +551,6 @@ var FileCard = exports.FileCard = function FileCard(_ref) {
549
551
  } : undefined,
550
552
  innerRef: setCardElement,
551
553
  testId: testId,
552
- featureFlags: featureFlags,
553
554
  titleBoxBgColor: titleBoxBgColor,
554
555
  titleBoxIcon: titleBoxIcon,
555
556
  onImageError: withCallbacks ? onImageError : undefined,
@@ -576,7 +577,7 @@ var FileCard = exports.FileCard = function FileCard(_ref) {
576
577
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, isPlayingFile ? /*#__PURE__*/_react.default.createElement(_react.Suspense, {
577
578
  fallback: inlinePlayerFallback
578
579
  }, /*#__PURE__*/_react.default.createElement(_inlinePlayerLazyV.InlinePlayerLazyV2, {
579
- dimensions: dimensions,
580
+ dimensions: cardDimensions,
580
581
  originalDimensions: originalDimensions,
581
582
  identifier: identifier,
582
583
  autoplay: !!shouldAutoplay,
@@ -601,5 +602,5 @@ var FileCard = exports.FileCard = function FileCard(_ref) {
601
602
  },
602
603
  contextId: contextId,
603
604
  featureFlags: featureFlags
604
- }), document.body) : null, ssr === 'server' && /*#__PURE__*/_react.default.createElement(StoreSSRDataScript, null));
605
+ }), document.body) : null, ssr === 'server' && /*#__PURE__*/_react.default.createElement("script", getScriptProps()));
605
606
  };
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof = require("@babel/runtime/helpers/typeof");
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
@@ -10,22 +9,21 @@ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"))
10
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
11
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
11
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
- var _react = _interopRequireWildcard(require("react"));
14
12
  var _mediaClient = require("@atlaskit/media-client");
15
13
  var _mediaClientReact = require("@atlaskit/media-client-react");
16
14
  var _mediaCommon = require("@atlaskit/media-common");
17
15
  var _mediaUi = require("@atlaskit/media-ui");
16
+ var _react = require("react");
18
17
  var _errors = require("../../errors");
19
18
  var _analytics = require("../../utils/analytics");
20
19
  var _dimensionComparer = require("../../utils/dimensionComparer");
20
+ var _isRetina = require("../../utils/isRetina");
21
21
  var _globalScope = require("../../utils/globalScope");
22
22
  var _useCurrentValueRef = require("../../utils/useCurrentValueRef");
23
23
  var _usePrevious = require("../../utils/usePrevious");
24
24
  var _videoSnapshot = require("../../utils/videoSnapshot");
25
25
  var _getCardPreview = require("../getCardPreview");
26
26
  var _cache = _interopRequireDefault(require("../getCardPreview/cache"));
27
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
28
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
29
27
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
30
28
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
31
29
  var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
@@ -33,13 +31,12 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
33
31
  resizeMode = _ref$resizeMode === void 0 ? 'crop' : _ref$resizeMode,
34
32
  identifier = _ref.identifier,
35
33
  ssr = _ref.ssr,
36
- mediaClient = _ref.mediaClient,
37
34
  dimensions = _ref.dimensions,
38
- requestedDimensions = _ref.requestedDimensions,
39
35
  traceContext = _ref.traceContext,
40
36
  previewDidRender = _ref.previewDidRender,
41
37
  skipRemote = _ref.skipRemote,
42
38
  mediaBlobUrlAttrs = _ref.mediaBlobUrlAttrs;
39
+ var mediaClient = (0, _mediaClientReact.useMediaClient)();
43
40
  var _useState = (0, _react.useState)(),
44
41
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
45
42
  error = _useState2[0],
@@ -48,6 +45,10 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
48
45
  _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
49
46
  nonCriticalError = _useState4[0],
50
47
  setNonCriticalError = _useState4[1];
48
+ var requestDimensions = (0, _react.useMemo)(function () {
49
+ return dimensions ? createRequestDimensions(dimensions) : undefined;
50
+ }, [dimensions]);
51
+
51
52
  //----------------------------------------------------------------//
52
53
  //---------------- State Initializer Functions -------------------//
53
54
  //----------------------------------------------------------------//
@@ -65,10 +66,10 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
65
66
  return _objectSpread(_objectSpread({
66
67
  collection: identifier.collectionName,
67
68
  mode: resizeMode === 'stretchy-fit' ? 'full-fit' : resizeMode
68
- }, requestedDimensions), {}, {
69
+ }, requestDimensions), {}, {
69
70
  allowAnimated: true
70
71
  });
71
- }, [requestedDimensions, identifier.collectionName, resizeMode]);
72
+ }, [requestDimensions, identifier.collectionName, resizeMode]);
72
73
  var getSSRPreview = function getSSRPreview(ssr, identifier, mediaClient) {
73
74
  var _ssrDataRef$current, _ssrDataRef$current2;
74
75
  ssrDataRef.current = (0, _globalScope.getSSRData)(identifier);
@@ -86,8 +87,12 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
86
87
  }, (0, _analytics.extractErrorInfo)(e));
87
88
  }
88
89
  } else {
90
+ var _ssrDataRef$current3 = ssrDataRef.current,
91
+ _dimensions = _ssrDataRef$current3.dimensions,
92
+ dataURI = _ssrDataRef$current3.dataURI;
89
93
  return {
90
- dataURI: ssrDataRef.current.dataURI,
94
+ dataURI: dataURI,
95
+ dimensions: _dimensions,
91
96
  source: 'ssr-data'
92
97
  };
93
98
  }
@@ -135,7 +140,7 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
135
140
  //----------------------------------------------------------------//
136
141
 
137
142
  var fetchRemotePreviewRef = (0, _useCurrentValueRef.useCurrentValueRef)(function (identifier) {
138
- return (0, _getCardPreview.fetchAndCacheRemotePreview)(mediaClient, identifier.id, dimensions !== null && dimensions !== void 0 ? dimensions : {}, imageURLParams, mediaBlobUrlAttrs);
143
+ return (0, _getCardPreview.fetchAndCacheRemotePreview)(mediaClient, identifier.id, requestDimensions || {}, imageURLParams, mediaBlobUrlAttrs, traceContext);
139
144
  });
140
145
  var resolvePreviewRef = (0, _useCurrentValueRef.useCurrentValueRef)( /*#__PURE__*/function () {
141
146
  var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(identifier, fileState) {
@@ -148,7 +153,7 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
148
153
  _context.prev = 2;
149
154
  mode = imageURLParams.mode;
150
155
  cachedPreview = _cache.default.get(identifier.id, mode);
151
- dimensionsAreBigger = (0, _dimensionComparer.isBigger)(cachedPreview === null || cachedPreview === void 0 ? void 0 : cachedPreview.dimensions, dimensions);
156
+ dimensionsAreBigger = (0, _dimensionComparer.isBigger)(cachedPreview === null || cachedPreview === void 0 ? void 0 : cachedPreview.dimensions, requestDimensions);
152
157
  if (!(cachedPreview && !dimensionsAreBigger)) {
153
158
  _context.next = 8;
154
159
  break;
@@ -242,7 +247,7 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
242
247
  throw new _errors.LocalPreviewError('local-preview-unsupported');
243
248
  case 57:
244
249
  preview = _objectSpread(_objectSpread({}, localPreview), {}, {
245
- dimensions: dimensions
250
+ dimensions: requestDimensions
246
251
  });
247
252
  _context.t4 = preview.source;
248
253
  _context.next = _context.t4 === 'local' ? 61 : _context.t4 === 'remote' ? 63 : _context.t4 === 'ssr-server' ? 65 : _context.t4 === 'ssr-client' ? 67 : 69;
@@ -309,7 +314,7 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
309
314
  throw new _errors.MediaCardError('remote-preview-not-ready');
310
315
  case 83:
311
316
  _context.next = 85;
312
- return (0, _getCardPreview.fetchAndCacheRemotePreview)(mediaClient, identifier.id, dimensions !== null && dimensions !== void 0 ? dimensions : {}, imageURLParams, mediaBlobUrlAttrs, traceContext);
317
+ return fetchRemotePreviewRef.current(identifier);
313
318
  case 85:
314
319
  remotePreview = _context.sent;
315
320
  setCardPreview(remotePreview);
@@ -345,7 +350,7 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
345
350
  //------------ resolveUpfrontPreview useEffect -------------------//
346
351
  //----------------------------------------------------------------//
347
352
  var prevCardPreview = (0, _usePrevious.usePrevious)(cardPreview);
348
- var dimensionsRef = (0, _useCurrentValueRef.useCurrentValueRef)(dimensions);
353
+ var requestDimensionsRef = (0, _useCurrentValueRef.useCurrentValueRef)(requestDimensions);
349
354
  (0, _react.useEffect)(function () {
350
355
  var resolveUpfrontPreview = /*#__PURE__*/function () {
351
356
  var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(identifier) {
@@ -357,12 +362,12 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
357
362
  // If it fails, the normal preview fetch should occur after the file state is fetched anyways
358
363
  wasResolvedUpfrontPreviewRef.current = true;
359
364
  _context2.prev = 1;
360
- fetchedDimensions = _objectSpread({}, dimensions);
365
+ fetchedDimensions = _objectSpread({}, requestDimensions);
361
366
  _context2.next = 5;
362
367
  return fetchRemotePreviewRef.current(identifier);
363
368
  case 5:
364
369
  newCardPreview = _context2.sent;
365
- areValidFetchedDimensions = !(0, _dimensionComparer.isBigger)(fetchedDimensions, dimensionsRef.current); // If there are new and bigger dimensions in the props, and the upfront preview is still resolving,
370
+ areValidFetchedDimensions = !(0, _dimensionComparer.isBigger)(fetchedDimensions, requestDimensionsRef.current); // If there are new and bigger dimensions in the props, and the upfront preview is still resolving,
366
371
  // the fetched preview is no longer valid, and thus, we dismiss it
367
372
  if (areValidFetchedDimensions) {
368
373
  setCardPreview(newCardPreview);
@@ -388,16 +393,16 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
388
393
  if (!wasResolvedUpfrontPreviewRef.current && (!skipRemote || hadSSRCardPreview) && !cardPreview) {
389
394
  resolveUpfrontPreview(identifier);
390
395
  }
391
- }, [cardPreview, dimensions, dimensionsRef, fetchRemotePreviewRef, identifier, skipRemote, prevCardPreview, ssr]);
396
+ }, [cardPreview, requestDimensions, requestDimensionsRef, fetchRemotePreviewRef, identifier, skipRemote, prevCardPreview, ssr]);
392
397
 
393
398
  //----------------------------------------------------------------//
394
399
  //---------------- fetch and resolve card preview ----------------//
395
400
  //----------------------------------------------------------------//
396
401
 
397
- var prevDimensions = (0, _usePrevious.usePrevious)(dimensions);
402
+ var prevRequestDimensions = (0, _usePrevious.usePrevious)(requestDimensions);
398
403
  (0, _react.useEffect)(function () {
399
- var _ssrDataRef$current3;
400
- if (cardPreview && !skipRemote && (0, _getCardPreview.isSSRDataPreview)(cardPreview) && (0, _dimensionComparer.isBigger)((_ssrDataRef$current3 = ssrDataRef.current) === null || _ssrDataRef$current3 === void 0 ? void 0 : _ssrDataRef$current3.dimensions, dimensions)) {
404
+ // CXP-2813 TODO: This is called too many times if the refetch failed. Should be called only once
405
+ if (cardPreview && !skipRemote && (0, _getCardPreview.isSSRDataPreview)(cardPreview) && (0, _dimensionComparer.isBigger)(cardPreview.dimensions, requestDimensions)) {
401
406
  // refetchSRRPreview: If dimensions from Server have changed and are bigger,
402
407
  // we need to refetch
403
408
  fetchRemotePreviewRef.current(identifier).then(setCardPreview).catch(function (e) {
@@ -412,8 +417,8 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
412
417
  if (fileState && (0, _getCardPreview.shouldResolvePreview)({
413
418
  status: status,
414
419
  fileState: fileState,
415
- prevDimensions: prevDimensions,
416
- dimensions: dimensions,
420
+ prevDimensions: prevRequestDimensions,
421
+ dimensions: requestDimensions,
417
422
  hasCardPreview: !!cardPreview,
418
423
  isBannedLocalPreview: isBannedLocalPreview,
419
424
  wasResolvedUpfrontPreview: wasResolvedUpfrontPreviewRef.current
@@ -430,7 +435,7 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
430
435
  // https://product-fabric.atlassian.net/browse/MEX-1071
431
436
  });
432
437
  }
433
- }, [cardPreview, dimensions, fetchRemotePreviewRef, fileState, identifier, isBannedLocalPreview, prevDimensions, resolvePreviewRef, skipRemote, ssr, status]);
438
+ }, [cardPreview, requestDimensions, fetchRemotePreviewRef, fileState, identifier, isBannedLocalPreview, prevRequestDimensions, resolvePreviewRef, skipRemote, ssr, status]);
434
439
 
435
440
  //----------------------------------------------------------------//
436
441
  //----------------- set complete status --------------------------//
@@ -568,14 +573,10 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
568
573
  // RETURN
569
574
  //----------------------------------------------------------------//
570
575
 
571
- var StoreSSRDataScriptComponent = function StoreSSRDataScriptComponent() {
576
+ // FOR SSR
577
+ var getScriptProps = function getScriptProps() {
572
578
  var _ssrReliabilityRef$cu;
573
- return /*#__PURE__*/_react.default.createElement(_globalScope.StoreSSRDataScript, {
574
- identifier: identifier,
575
- dataURI: cardPreview === null || cardPreview === void 0 ? void 0 : cardPreview.dataURI,
576
- dimensions: requestedDimensions,
577
- error: ((_ssrReliabilityRef$cu = ssrReliabilityRef.current.server) === null || _ssrReliabilityRef$cu === void 0 ? void 0 : _ssrReliabilityRef$cu.status) === 'fail' ? ssrReliabilityRef.current.server : undefined
578
- });
579
+ return (0, _globalScope.generateScriptProps)(identifier, cardPreview === null || cardPreview === void 0 ? void 0 : cardPreview.dataURI, requestDimensions, ((_ssrReliabilityRef$cu = ssrReliabilityRef.current.server) === null || _ssrReliabilityRef$cu === void 0 ? void 0 : _ssrReliabilityRef$cu.status) === 'fail' ? ssrReliabilityRef.current.server : undefined);
579
580
  };
580
581
 
581
582
  // CXP-2723 TODO: should consider simplifying our analytics, and how
@@ -587,6 +588,22 @@ var useFilePreview = exports.useFilePreview = function useFilePreview(_ref) {
587
588
  ssrReliabilityRef: ssrReliabilityRef,
588
589
  onImageError: onImageError,
589
590
  onImageLoad: onImageLoad,
590
- StoreSSRDataScript: StoreSSRDataScriptComponent
591
+ getScriptProps: getScriptProps
591
592
  };
593
+ };
594
+ var createRequestDimensions = function createRequestDimensions(dimensions) {
595
+ if (!dimensions) {
596
+ return;
597
+ }
598
+ var retinaFactor = (0, _isRetina.isRetina)() ? 2 : 1;
599
+ var width = dimensions.width,
600
+ height = dimensions.height;
601
+ var result = {};
602
+ if (width) {
603
+ result.width = width * retinaFactor;
604
+ }
605
+ if (height) {
606
+ result.height = height * retinaFactor;
607
+ }
608
+ return result;
592
609
  };
@@ -119,7 +119,7 @@ var MediaInlineCardLoader = exports.default = /*#__PURE__*/function (_React$Pure
119
119
  ErrorBoundary = _this$state.ErrorBoundary;
120
120
  var analyticsContext = {
121
121
  packageVersion: "@atlaskit/media-card",
122
- packageName: "77.4.6",
122
+ packageName: "77.4.8",
123
123
  componentName: 'mediaInlineCard',
124
124
  component: 'mediaInlineCard'
125
125
  };
@@ -3,12 +3,18 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getRequestedDimensions = exports.getDataURIDimension = void 0;
6
+ exports.resolveCardPreviewDimensions = exports.resolveCardPreviewDimension = exports.getRequestedDimensions = exports.getDataURIDimension = void 0;
7
7
  var _isRetina = require("./isRetina");
8
8
  var _getElementDimension = require("./getElementDimension");
9
9
  var _cardDimensions = require("./cardDimensions");
10
10
  var _isValidPercentageUnit = require("./isValidPercentageUnit");
11
11
  var _containsPixelUnit = require("./containsPixelUnit");
12
+ /**
13
+ * ************************************************
14
+ * For Card v1
15
+ * ************************************************
16
+ */
17
+
12
18
  var getDataURIDimension = exports.getDataURIDimension = function getDataURIDimension(dimension, options) {
13
19
  var retinaFactor = (0, _isRetina.isRetina)() ? 2 : 1;
14
20
  var dimensionValue = options.dimensions && options.dimensions[dimension] || '';
@@ -30,4 +36,35 @@ var getRequestedDimensions = exports.getRequestedDimensions = function getReques
30
36
  width: width,
31
37
  height: height
32
38
  };
39
+ };
40
+
41
+ /**
42
+ * ************************************************
43
+ * For Card v2
44
+ * ************************************************
45
+ */
46
+
47
+ // Same as getDataURIDimension but without Retina factor
48
+ var resolveCardPreviewDimension = exports.resolveCardPreviewDimension = function resolveCardPreviewDimension(dimensionName, _ref) {
49
+ var dimensions = _ref.dimensions,
50
+ element = _ref.element;
51
+ var dimensionValue = (dimensions === null || dimensions === void 0 ? void 0 : dimensions[dimensionName]) || '';
52
+ if ((0, _isValidPercentageUnit.isValidPercentageUnit)(dimensionValue) && element) {
53
+ return (0, _getElementDimension.getElementDimension)(element, dimensionName);
54
+ }
55
+ if (typeof dimensionValue === 'number') {
56
+ return dimensionValue;
57
+ }
58
+ if ((0, _containsPixelUnit.containsPixelUnit)("".concat(dimensionValue))) {
59
+ return parseInt("".concat(dimensionValue), 10);
60
+ }
61
+ return _cardDimensions.defaultImageCardDimensions[dimensionName];
62
+ };
63
+ var resolveCardPreviewDimensions = exports.resolveCardPreviewDimensions = function resolveCardPreviewDimensions(options) {
64
+ var width = resolveCardPreviewDimension('width', options);
65
+ var height = resolveCardPreviewDimension('height', options);
66
+ return {
67
+ width: width,
68
+ height: height
69
+ };
33
70
  };
@@ -1,14 +1,12 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
7
- exports.getKey = exports.StoreSSRDataScript = exports.GLOBAL_MEDIA_NAMESPACE = exports.GLOBAL_MEDIA_CARD_SSR = void 0;
6
+ exports.getKey = exports.generateScriptProps = exports.GLOBAL_MEDIA_NAMESPACE = exports.GLOBAL_MEDIA_CARD_SSR = void 0;
8
7
  exports.getMediaCardSSR = getMediaCardSSR;
9
8
  exports.getMediaGlobalScope = getMediaGlobalScope;
10
9
  exports.storeDataURI = void 0;
11
- var _react = _interopRequireDefault(require("react"));
12
10
  var _printScript = require("../printScript");
13
11
  // ----- WARNING -----
14
12
  // This is a very sensitive fraction of code.
@@ -59,14 +57,10 @@ var generateScript = function generateScript(identifier, dataURI, dimensions, er
59
57
  var functionCall = (0, _printScript.printFunctionCall)(storeDataURI, getKey(identifier), dataURI, dimensions, error);
60
58
  return (0, _printScript.printScript)([getMediaCardSSR.toString(), getMediaGlobalScope.toString(), functionCall]);
61
59
  };
62
- var StoreSSRDataScript = exports.StoreSSRDataScript = function StoreSSRDataScript(_ref2) {
63
- var dataURI = _ref2.dataURI,
64
- identifier = _ref2.identifier,
65
- dimensions = _ref2.dimensions,
66
- error = _ref2.error;
67
- return /*#__PURE__*/_react.default.createElement("script", {
60
+ var generateScriptProps = exports.generateScriptProps = function generateScriptProps(identifier, dataURI, dimensions, error) {
61
+ return {
68
62
  dangerouslySetInnerHTML: {
69
63
  __html: generateScript(identifier, dataURI, dimensions, error)
70
64
  }
71
- });
65
+ };
72
66
  };
@@ -15,10 +15,10 @@ Object.defineProperty(exports, "GLOBAL_MEDIA_NAMESPACE", {
15
15
  return _globalScope.GLOBAL_MEDIA_NAMESPACE;
16
16
  }
17
17
  });
18
- Object.defineProperty(exports, "StoreSSRDataScript", {
18
+ Object.defineProperty(exports, "generateScriptProps", {
19
19
  enumerable: true,
20
20
  get: function get() {
21
- return _globalScope.StoreSSRDataScript;
21
+ return _globalScope.generateScriptProps;
22
22
  }
23
23
  });
24
24
  Object.defineProperty(exports, "getKey", {
@@ -14,7 +14,7 @@ var _mediaClient = require("@atlaskit/media-client");
14
14
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
15
15
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
16
16
  var packageName = "@atlaskit/media-card";
17
- var packageVersion = "77.4.6";
17
+ var packageVersion = "77.4.8";
18
18
  var concurrentExperience;
19
19
  var getExperience = function getExperience(id) {
20
20
  if (!concurrentExperience) {