@atlaskit/media-card 73.4.2 → 73.6.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 (63) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/classnames/package.json +8 -0
  3. package/dist/cjs/classnames.js +19 -0
  4. package/dist/cjs/files/cardImageView/classnames.js +10 -0
  5. package/dist/cjs/files/cardImageView/index.js +4 -7
  6. package/dist/cjs/index.js +3 -3
  7. package/dist/cjs/root/card/cardAnalytics.js +24 -3
  8. package/dist/cjs/root/card/index.js +32 -3
  9. package/dist/cjs/root/cardView.js +1 -1
  10. package/dist/cjs/utils/generateUniqueId.js +12 -0
  11. package/dist/cjs/utils/ufoExperiences.js +101 -0
  12. package/dist/cjs/version.json +1 -1
  13. package/dist/es2019/classnames.js +1 -0
  14. package/dist/es2019/files/cardImageView/classnames.js +2 -0
  15. package/dist/es2019/files/cardImageView/index.js +1 -2
  16. package/dist/es2019/index.js +1 -1
  17. package/dist/es2019/root/card/cardAnalytics.js +11 -1
  18. package/dist/es2019/root/card/index.js +34 -4
  19. package/dist/es2019/root/cardView.js +1 -1
  20. package/dist/es2019/utils/generateUniqueId.js +3 -0
  21. package/dist/es2019/utils/ufoExperiences.js +77 -0
  22. package/dist/es2019/version.json +1 -1
  23. package/dist/esm/classnames.js +1 -0
  24. package/dist/esm/files/cardImageView/classnames.js +2 -0
  25. package/dist/esm/files/cardImageView/index.js +1 -2
  26. package/dist/esm/index.js +1 -1
  27. package/dist/esm/root/card/cardAnalytics.js +15 -1
  28. package/dist/esm/root/card/index.js +33 -4
  29. package/dist/esm/root/cardView.js +1 -1
  30. package/dist/esm/utils/generateUniqueId.js +3 -0
  31. package/dist/esm/utils/ufoExperiences.js +83 -0
  32. package/dist/esm/version.json +1 -1
  33. package/dist/types/classnames.d.ts +1 -0
  34. package/dist/types/errors.d.ts +1 -1
  35. package/dist/types/files/cardImageView/cardOverlay/styled.d.ts +10 -10
  36. package/dist/types/files/cardImageView/classnames.d.ts +2 -0
  37. package/dist/types/files/cardImageView/index.d.ts +0 -2
  38. package/dist/types/files/cardImageView/styled.d.ts +266 -9
  39. package/dist/types/index.d.ts +1 -1
  40. package/dist/types/root/card/cardAnalytics.d.ts +11 -2
  41. package/dist/types/root/card/getCardPreview/helpers.d.ts +2 -2
  42. package/dist/types/root/card/index.d.ts +4 -1
  43. package/dist/types/root/cardView.d.ts +1 -1
  44. package/dist/types/root/inlinePlayer.d.ts +1 -1
  45. package/dist/types/root/styled.d.ts +1 -1
  46. package/dist/types/root/ui/loadingRateLimited/styled.d.ts +3 -3
  47. package/dist/types/root/ui/playButton/styled.d.ts +2 -2
  48. package/dist/types/root/ui/styled.d.ts +1 -1
  49. package/dist/types/root/ui/titleBox/styled.d.ts +2 -2
  50. package/dist/types/styles/mixins.d.ts +1 -1
  51. package/dist/types/types.d.ts +4 -0
  52. package/dist/types/utils/analytics.d.ts +1 -1
  53. package/dist/types/utils/cardDimensions.d.ts +5 -5
  54. package/dist/types/utils/dimensionComparer.d.ts +2 -2
  55. package/dist/types/utils/generateUniqueId.d.ts +1 -0
  56. package/dist/types/utils/getMediaCardCursor.d.ts +2 -1
  57. package/dist/types/utils/metadata.d.ts +2 -2
  58. package/dist/types/utils/shouldDisplayImageThumbnail.d.ts +2 -2
  59. package/dist/types/utils/ufoExperiences.d.ts +7 -0
  60. package/example-helpers/index.tsx +2 -2
  61. package/in-product/package.json +1 -0
  62. package/package.json +14 -11
  63. package/types/package.json +1 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,40 @@
1
1
  # @atlaskit/media-card
2
2
 
3
+ ## 73.6.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`b4fd2a59367`](https://bitbucket.org/atlassian/atlassian-frontend/commits/b4fd2a59367) - Attach media environment and region to the media-card UFO events
8
+ - [`7e767393469`](https://bitbucket.org/atlassian/atlassian-frontend/commits/7e767393469) - Add ufo feature flag logging to `media-card`
9
+ - [`ade1a5c3e23`](https://bitbucket.org/atlassian/atlassian-frontend/commits/ade1a5c3e23) - Flagged events with file states processing and uploading for UFO payload
10
+
11
+ ### Patch Changes
12
+
13
+ - [`bf0e7c8e46b`](https://bitbucket.org/atlassian/atlassian-frontend/commits/bf0e7c8e46b) - [MEX-1413] Hot fix for remove useMediaPickerAuthProvider flag
14
+ - [`79c431ca1a6`](https://bitbucket.org/atlassian/atlassian-frontend/commits/79c431ca1a6) - Removed "Creating Preview" message for files already processed
15
+ - [`f87afac53b3`](https://bitbucket.org/atlassian/atlassian-frontend/commits/f87afac53b3) - Add ufo logging for media-card
16
+ - Updated dependencies
17
+
18
+ ## 73.5.1
19
+
20
+ ### Patch Changes
21
+
22
+ - [`cb2392f6d33`](https://bitbucket.org/atlassian/atlassian-frontend/commits/cb2392f6d33) - Upgrade to TypeScript 4.2.4
23
+ - Updated dependencies
24
+
25
+ ## 73.5.0
26
+
27
+ ### Minor Changes
28
+
29
+ - [`02fb8e78fb9`](https://bitbucket.org/atlassian/atlassian-frontend/commits/02fb8e78fb9) - Implement media card render UFO experience
30
+
31
+ ### Patch Changes
32
+
33
+ - [`3ef794dc11f`](https://bitbucket.org/atlassian/atlassian-frontend/commits/3ef794dc11f) - Removed emoji and media packages dependencies from renderer initial load.
34
+ - [`7948702bf56`](https://bitbucket.org/atlassian/atlassian-frontend/commits/7948702bf56) - Fixing a bug where sometimes the media card pre-load indicator is given 100% height and renders over other components. It now has a max height of 0 and is not a click target
35
+ - [`065ae19cb44`](https://bitbucket.org/atlassian/atlassian-frontend/commits/065ae19cb44) - Enforced "up to date" logged feature flags via type checks
36
+ - Updated dependencies
37
+
3
38
  ## 73.4.2
4
39
 
5
40
  ### Patch Changes
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "@atlaskit/media-card/classnames",
3
+ "main": "../dist/cjs/classnames.js",
4
+ "module": "../dist/esm/classnames.js",
5
+ "module:es2019": "../dist/es2019/classnames.js",
6
+ "sideEffects": false,
7
+ "types": "../dist/types/classnames.d.ts"
8
+ }
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "fileCardImageViewSelectedSelector", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _classnames.fileCardImageViewSelectedSelector;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "fileCardImageViewSelector", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _classnames.fileCardImageViewSelector;
16
+ }
17
+ });
18
+
19
+ var _classnames = require("./files/cardImageView/classnames");
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.fileCardImageViewSelector = exports.fileCardImageViewSelectedSelector = void 0;
7
+ var fileCardImageViewSelector = 'media-file-card-view';
8
+ exports.fileCardImageViewSelector = fileCardImageViewSelector;
9
+ var fileCardImageViewSelectedSelector = 'media-file-card-view-selected';
10
+ exports.fileCardImageViewSelectedSelector = fileCardImageViewSelectedSelector;
@@ -7,7 +7,7 @@ var _typeof = require("@babel/runtime/helpers/typeof");
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
10
- exports.fileCardImageViewSelector = exports.fileCardImageViewSelectedSelector = exports.FileCardImageView = void 0;
10
+ exports.FileCardImageView = void 0;
11
11
 
12
12
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
13
 
@@ -41,6 +41,8 @@ var _progressBar = require("../../utils/progressBar");
41
41
 
42
42
  var _cardActions = _interopRequireDefault(require("../../utils/cardActions"));
43
43
 
44
+ var _classnames = require("./classnames");
45
+
44
46
  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); }
45
47
 
46
48
  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; }
@@ -49,11 +51,6 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
49
51
 
50
52
  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
53
 
52
- var fileCardImageViewSelector = 'media-file-card-view';
53
- exports.fileCardImageViewSelector = fileCardImageViewSelector;
54
- var fileCardImageViewSelectedSelector = 'media-file-card-view-selected';
55
- exports.fileCardImageViewSelectedSelector = fileCardImageViewSelectedSelector;
56
-
57
54
  var FileCardImageView = /*#__PURE__*/function (_Component) {
58
55
  (0, _inherits2.default)(FileCardImageView, _Component);
59
56
 
@@ -313,7 +310,7 @@ var FileCardImageView = /*#__PURE__*/function (_Component) {
313
310
  selectable: selectable,
314
311
  selected: selected,
315
312
  mediaType: mediaType,
316
- className: "".concat(fileCardImageViewSelector, " ").concat(selected ? fileCardImageViewSelectedSelector : '')
313
+ className: "".concat(_classnames.fileCardImageViewSelector, " ").concat(selected ? _classnames.fileCardImageViewSelectedSelector : '')
317
314
  }, this.renderCardContents());
318
315
  }
319
316
  }, {
package/dist/cjs/index.js CHANGED
@@ -36,13 +36,13 @@ Object.defineProperty(exports, "defaultImageCardDimensions", {
36
36
  Object.defineProperty(exports, "fileCardImageViewSelectedSelector", {
37
37
  enumerable: true,
38
38
  get: function get() {
39
- return _cardImageView.fileCardImageViewSelectedSelector;
39
+ return _classnames.fileCardImageViewSelectedSelector;
40
40
  }
41
41
  });
42
42
  Object.defineProperty(exports, "fileCardImageViewSelector", {
43
43
  enumerable: true,
44
44
  get: function get() {
45
- return _cardImageView.fileCardImageViewSelector;
45
+ return _classnames.fileCardImageViewSelector;
46
46
  }
47
47
  });
48
48
  Object.defineProperty(exports, "inlinePlayerClassName", {
@@ -66,7 +66,7 @@ var _cardError = require("./utils/lightCards/cardError");
66
66
 
67
67
  var _cardDimensions = require("./utils/cardDimensions");
68
68
 
69
- var _cardImageView = require("./files/cardImageView");
69
+ var _classnames = require("./files/cardImageView/classnames");
70
70
 
71
71
  var _inlinePlayer = require("./root/inlinePlayer");
72
72
 
@@ -3,12 +3,33 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.relevantFeatureFlagNames = exports.fireScreenEvent = exports.fireOperationalEvent = exports.fireCopiedEvent = exports.fireCommencedEvent = void 0;
6
+ exports.getRelevantFeatureFlagNames = exports.getRelevantFeatureFlagKeysWithAllProducts = exports.fireScreenEvent = exports.fireOperationalEvent = exports.fireCopiedEvent = exports.fireCommencedEvent = exports.REQUIRED_FEATURE_FLAGS = void 0;
7
+
8
+ var _mediaCommon = require("@atlaskit/media-common");
7
9
 
8
10
  var _analytics = require("../../utils/analytics");
9
11
 
10
- var relevantFeatureFlagNames = ['newCardExperience', 'captions', 'timestampOnVideo'];
11
- exports.relevantFeatureFlagNames = relevantFeatureFlagNames;
12
+ var REQUIRED_FEATURE_FLAGS = {
13
+ newCardExperience: true,
14
+ captions: true,
15
+ timestampOnVideo: true,
16
+ observedWidth: true,
17
+ mediaInline: false,
18
+ folderUploads: false
19
+ };
20
+ exports.REQUIRED_FEATURE_FLAGS = REQUIRED_FEATURE_FLAGS;
21
+
22
+ var getRelevantFeatureFlagNames = function getRelevantFeatureFlagNames() {
23
+ return (0, _mediaCommon.filterFeatureFlagNames)(REQUIRED_FEATURE_FLAGS);
24
+ };
25
+
26
+ exports.getRelevantFeatureFlagNames = getRelevantFeatureFlagNames;
27
+
28
+ var getRelevantFeatureFlagKeysWithAllProducts = function getRelevantFeatureFlagKeysWithAllProducts() {
29
+ return (0, _mediaCommon.filterFeatureFlagKeysAllProducts)(REQUIRED_FEATURE_FLAGS);
30
+ };
31
+
32
+ exports.getRelevantFeatureFlagKeysWithAllProducts = getRelevantFeatureFlagKeysWithAllProducts;
12
33
 
13
34
  var fireOperationalEvent = function fireOperationalEvent(createAnalyticsEvent, status, fileAttributes, performanceAttributes, ssrReliability, error) {
14
35
  var fireEvent = function fireEvent(payload) {
@@ -75,6 +75,10 @@ var _dimensionComparer = require("../../utils/dimensionComparer");
75
75
 
76
76
  var _getMediaCardCursor = require("../../utils/getMediaCardCursor");
77
77
 
78
+ var _ufoExperiences = require("../../utils/ufoExperiences");
79
+
80
+ var _generateUniqueId = require("../../utils/generateUniqueId");
81
+
78
82
  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); }
79
83
 
80
84
  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; }
@@ -92,6 +96,8 @@ var CardBase = /*#__PURE__*/function (_Component) {
92
96
 
93
97
  var _super = _createSuper(CardBase);
94
98
 
99
+ // An internalOccurrenceKey is a randomly generated value to differentiate various instances
100
+ // of Cards regardless of whether it shares the same file (either internal or external)
95
101
  // We initialise timeElapsedTillCommenced
96
102
  // to avoid extra branching on a possibly undefined value.
97
103
  function CardBase(props) {
@@ -99,7 +105,12 @@ var CardBase = /*#__PURE__*/function (_Component) {
99
105
 
100
106
  (0, _classCallCheck2.default)(this, CardBase);
101
107
  _this = _super.call(this, props);
108
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "internalOccurrenceKey", (0, _generateUniqueId.generateUniqueId)());
102
109
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "hasBeenMounted", false);
110
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "fileStateFlags", {
111
+ wasStatusUploading: false,
112
+ wasStatusProcessing: false
113
+ });
103
114
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "viewportPreAnchorRef", /*#__PURE__*/(0, _react.createRef)());
104
115
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "viewportPostAnchorRef", /*#__PURE__*/(0, _react.createRef)());
105
116
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "ssrReliability", {
@@ -287,7 +298,7 @@ var CardBase = /*#__PURE__*/function (_Component) {
287
298
  if ((0, _getCardPreview.isSSRClientPreview)(cardPreview)) {
288
299
  _this.ssrReliability.client = failedSSRObject;
289
300
  }
290
- /*
301
+ /*
291
302
  If the cardPreview failed and it comes from server (global scope / ssrData), it means that we have reused it in client and the error counts for both: server & client.
292
303
  */
293
304
 
@@ -343,7 +354,7 @@ var CardBase = /*#__PURE__*/function (_Component) {
343
354
  status: 'success'
344
355
  };
345
356
  }
346
- /*
357
+ /*
347
358
  If the image loads successfully and it comes from server (global scope / ssrData), it means that we have reused it in client and the success counts for both: server & client.
348
359
  */
349
360
 
@@ -808,6 +819,7 @@ var CardBase = /*#__PURE__*/function (_Component) {
808
819
  var isDifferent = (0, _mediaClient2.isDifferentIdentifier)(prevIdentifier, identifier);
809
820
  var turnedVisible = !prevIsCardVisible && isCardVisible;
810
821
  var isNewMediaClient = prevMediaClient !== mediaClient;
822
+ this.updateFileStateFlag(fileState);
811
823
 
812
824
  if ((0, _mediaClient2.isExternalImageIdentifier)(identifier) && isDifferent) {
813
825
  this.fireCommencedEvent();
@@ -883,6 +895,21 @@ var CardBase = /*#__PURE__*/function (_Component) {
883
895
  this.fireCommencedEvent();
884
896
  this.subscribeInternalFile(identifier);
885
897
  }
898
+ }, {
899
+ key: "updateFileStateFlag",
900
+ value: function updateFileStateFlag(fileState) {
901
+ if (!fileState) {
902
+ return;
903
+ }
904
+
905
+ var status = fileState.status;
906
+
907
+ if (status === 'processing') {
908
+ this.fileStateFlags.wasStatusProcessing = true;
909
+ } else if (status === 'uploading') {
910
+ this.fileStateFlags.wasStatusUploading = true;
911
+ }
912
+ }
886
913
  }, {
887
914
  key: "subscribeInternalFile",
888
915
  value: function subscribeInternalFile(identifier) {
@@ -950,6 +977,7 @@ var CardBase = /*#__PURE__*/function (_Component) {
950
977
  error = _this$state7.error;
951
978
  var createAnalyticsEvent = this.props.createAnalyticsEvent;
952
979
  createAnalyticsEvent && (0, _cardAnalytics.fireOperationalEvent)(createAnalyticsEvent, status, this.fileAttributes, this.getPerformanceAttributes(), this.ssrReliability, error);
980
+ (0, _ufoExperiences.completeUfoExperience)(this.internalOccurrenceKey, status, this.fileAttributes, this.fileStateFlags, this.ssrReliability, (0, _cardAnalytics.getRelevantFeatureFlagKeysWithAllProducts)(), error);
953
981
  }
954
982
  }, {
955
983
  key: "fireCommencedEvent",
@@ -961,6 +989,7 @@ var CardBase = /*#__PURE__*/function (_Component) {
961
989
  durationSincePageStart: this.timeElapsedTillCommenced
962
990
  }
963
991
  });
992
+ (0, _ufoExperiences.startUfoExperience)(this.internalOccurrenceKey, (0, _cardAnalytics.getRelevantFeatureFlagKeysWithAllProducts)());
964
993
  }
965
994
  }, {
966
995
  key: "actions",
@@ -1022,7 +1051,7 @@ var Card = (0, _mediaCommon.withMediaAnalyticsContext)({
1022
1051
  componentName: 'mediaCard',
1023
1052
  component: 'mediaCard'
1024
1053
  }, {
1025
- filterFeatureFlags: _cardAnalytics.relevantFeatureFlagNames
1054
+ filterFeatureFlags: (0, _cardAnalytics.getRelevantFeatureFlagNames)()
1026
1055
  })((0, _analyticsNext.withAnalyticsEvents)()((0, _reactIntlNext.injectIntl)(CardBase, {
1027
1056
  enforceContext: false
1028
1057
  })));
@@ -297,7 +297,6 @@ var CardViewBase = /*#__PURE__*/function (_React$Component) {
297
297
  });
298
298
 
299
299
  case 'processing':
300
- case 'loading-preview':
301
300
  return _objectSpread(_objectSpread({}, defaultConfig), {}, {
302
301
  iconMessage: !didImageRender && !isZeroSize ? /*#__PURE__*/_react.default.createElement(_iconMessage.CreatingPreview, {
303
302
  disableAnimation: disableAnimation
@@ -347,6 +346,7 @@ var CardViewBase = /*#__PURE__*/function (_React$Component) {
347
346
  iconMessage: iconMessage
348
347
  });
349
348
 
349
+ case 'loading-preview':
350
350
  case 'loading':
351
351
  default:
352
352
  return _objectSpread(_objectSpread({}, defaultConfig), {}, {
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.generateUniqueId = void 0;
7
+
8
+ var generateUniqueId = function generateUniqueId() {
9
+ return (performance.now().toString(36) + Math.random().toString(36)).replace(/\./g, '');
10
+ };
11
+
12
+ exports.generateUniqueId = generateUniqueId;
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.startUfoExperience = exports.completeUfoExperience = void 0;
9
+
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+
12
+ var _ufo = require("@atlaskit/ufo");
13
+
14
+ var _version = require("../version.json");
15
+
16
+ var _analytics = require("./analytics");
17
+
18
+ var _mediaClient = require("@atlaskit/media-client");
19
+
20
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
21
+
22
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
23
+
24
+ var concurrentExperience;
25
+
26
+ var getExperience = function getExperience(id, featureFlagsKeys) {
27
+ if (!concurrentExperience) {
28
+ var inlineExperience = {
29
+ platform: {
30
+ component: 'media-card'
31
+ },
32
+ type: _ufo.ExperienceTypes.Experience,
33
+ performanceType: _ufo.ExperiencePerformanceTypes.InlineResult,
34
+ featureFlagsKeys: featureFlagsKeys
35
+ };
36
+ concurrentExperience = new _ufo.ConcurrentExperience('media-card-render', inlineExperience);
37
+ }
38
+
39
+ return concurrentExperience.getInstance(id);
40
+ };
41
+
42
+ var startUfoExperience = function startUfoExperience(id, featureFlagsKeys) {
43
+ getExperience(id, featureFlagsKeys).start();
44
+ };
45
+
46
+ exports.startUfoExperience = startUfoExperience;
47
+
48
+ var completeUfoExperience = function completeUfoExperience(id, status, fileAttributes, fileStateFlags, ssrReliability, featureFlagsKeys, error) {
49
+ switch (status) {
50
+ case 'complete':
51
+ succeedUfoExperience(id, featureFlagsKeys, {
52
+ fileAttributes: fileAttributes,
53
+ ssrReliability: ssrReliability,
54
+ fileStateFlags: fileStateFlags
55
+ });
56
+ break;
57
+
58
+ case 'failed-processing':
59
+ failUfoExperience(id, featureFlagsKeys, {
60
+ fileAttributes: fileAttributes,
61
+ failReason: 'failed-processing',
62
+ ssrReliability: ssrReliability,
63
+ fileStateFlags: fileStateFlags
64
+ });
65
+ break;
66
+
67
+ case 'error':
68
+ error && failUfoExperience(id, featureFlagsKeys, _objectSpread(_objectSpread({
69
+ fileAttributes: fileAttributes
70
+ }, (0, _analytics.extractErrorInfo)(error)), {}, {
71
+ request: (0, _analytics.getRenderErrorRequestMetadata)(error),
72
+ ssrReliability: ssrReliability,
73
+ fileStateFlags: fileStateFlags
74
+ }));
75
+ break;
76
+ }
77
+ };
78
+
79
+ exports.completeUfoExperience = completeUfoExperience;
80
+
81
+ var succeedUfoExperience = function succeedUfoExperience(id, featureFlagsKeys, properties) {
82
+ getExperience(id, featureFlagsKeys).success({
83
+ metadata: _objectSpread(_objectSpread({}, properties), {}, {
84
+ packageName: _version.name,
85
+ packageVersion: _version.version,
86
+ mediaEnvironment: (0, _mediaClient.getMediaEnvironment)(),
87
+ mediaRegion: (0, _mediaClient.getMediaRegion)()
88
+ })
89
+ });
90
+ };
91
+
92
+ var failUfoExperience = function failUfoExperience(id, featureFlagsKeys, properties) {
93
+ getExperience(id, featureFlagsKeys).failure({
94
+ metadata: _objectSpread(_objectSpread({}, properties), {}, {
95
+ packageName: _version.name,
96
+ packageVersion: _version.version,
97
+ mediaEnvironment: (0, _mediaClient.getMediaEnvironment)(),
98
+ mediaRegion: (0, _mediaClient.getMediaRegion)()
99
+ })
100
+ });
101
+ };
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/media-card",
3
- "version": "73.4.2",
3
+ "version": "73.6.0",
4
4
  "sideEffects": false
5
5
  }
@@ -0,0 +1 @@
1
+ export { fileCardImageViewSelector, fileCardImageViewSelectedSelector } from './files/cardImageView/classnames';
@@ -0,0 +1,2 @@
1
+ export const fileCardImageViewSelector = 'media-file-card-view';
2
+ export const fileCardImageViewSelectedSelector = 'media-file-card-view-selected';
@@ -9,8 +9,7 @@ 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
- export const fileCardImageViewSelector = 'media-file-card-view';
13
- export const fileCardImageViewSelectedSelector = 'media-file-card-view-selected';
12
+ import { fileCardImageViewSelectedSelector, fileCardImageViewSelector } from './classnames';
14
13
  export class FileCardImageView extends Component {
15
14
  constructor(...args) {
16
15
  super(...args);
@@ -2,6 +2,6 @@ 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, fileCardImageViewSelectedSelector } from './files/cardImageView';
5
+ export { fileCardImageViewSelector, fileCardImageViewSelectedSelector } from './files/cardImageView/classnames';
6
6
  export { inlinePlayerClassName } from './root/inlinePlayer';
7
7
  export { newFileExperienceClassName } from './root/card/cardConstants';
@@ -1,5 +1,15 @@
1
+ import { filterFeatureFlagNames, filterFeatureFlagKeysAllProducts } from '@atlaskit/media-common';
1
2
  import { fireMediaCardEvent, getRenderSucceededEventPayload, getRenderErrorEventPayload, getRenderFailedFileStatusPayload, getCopiedFilePayload, getRenderCommencedEventPayload, getRenderPreviewableCardPayload } from '../../utils/analytics';
2
- export const relevantFeatureFlagNames = ['newCardExperience', 'captions', 'timestampOnVideo'];
3
+ export const REQUIRED_FEATURE_FLAGS = {
4
+ newCardExperience: true,
5
+ captions: true,
6
+ timestampOnVideo: true,
7
+ observedWidth: true,
8
+ mediaInline: false,
9
+ folderUploads: false
10
+ };
11
+ export const getRelevantFeatureFlagNames = () => filterFeatureFlagNames(REQUIRED_FEATURE_FLAGS);
12
+ export const getRelevantFeatureFlagKeysWithAllProducts = () => filterFeatureFlagKeysAllProducts(REQUIRED_FEATURE_FLAGS);
3
13
  export const fireOperationalEvent = (createAnalyticsEvent, status, fileAttributes, performanceAttributes, ssrReliability, error) => {
4
14
  const fireEvent = payload => fireMediaCardEvent(payload, createAnalyticsEvent);
5
15
 
@@ -16,21 +16,32 @@ import { getFileDetails } from '../../utils/metadata';
16
16
  import { InlinePlayer } from '../inlinePlayer';
17
17
  import { getFileAttributes, extractErrorInfo } from '../../utils/analytics';
18
18
  import { isLocalPreviewError, MediaCardError, ensureMediaCardError, ImageLoadError } from '../../errors';
19
- import { fireOperationalEvent, fireCommencedEvent, relevantFeatureFlagNames, fireCopiedEvent, fireScreenEvent } from './cardAnalytics';
19
+ import { fireOperationalEvent, fireCommencedEvent, getRelevantFeatureFlagNames, getRelevantFeatureFlagKeysWithAllProducts, fireCopiedEvent, fireScreenEvent } from './cardAnalytics';
20
20
  import getDocument from '../../utils/document';
21
21
  import { StoreSSRDataScript, getSSRData } from '../../utils/globalScope';
22
22
  import { getCardStateFromFileState, createStateUpdater } from './cardState';
23
23
  import { getMediaFeatureFlag } from '@atlaskit/media-common';
24
24
  import { isBigger } from '../../utils/dimensionComparer';
25
25
  import { getMediaCardCursor } from '../../utils/getMediaCardCursor';
26
+ import { completeUfoExperience, startUfoExperience } from '../../utils/ufoExperiences';
27
+ import { generateUniqueId } from '../../utils/generateUniqueId';
26
28
  export class CardBase extends Component {
29
+ // An internalOccurrenceKey is a randomly generated value to differentiate various instances
30
+ // of Cards regardless of whether it shares the same file (either internal or external)
27
31
  // We initialise timeElapsedTillCommenced
28
32
  // to avoid extra branching on a possibly undefined value.
29
33
  constructor(props) {
30
34
  super(props);
31
35
 
36
+ _defineProperty(this, "internalOccurrenceKey", generateUniqueId());
37
+
32
38
  _defineProperty(this, "hasBeenMounted", false);
33
39
 
40
+ _defineProperty(this, "fileStateFlags", {
41
+ wasStatusUploading: false,
42
+ wasStatusProcessing: false
43
+ });
44
+
34
45
  _defineProperty(this, "viewportPreAnchorRef", /*#__PURE__*/createRef());
35
46
 
36
47
  _defineProperty(this, "viewportPostAnchorRef", /*#__PURE__*/createRef());
@@ -183,7 +194,7 @@ export class CardBase extends Component {
183
194
  if (isSSRClientPreview(cardPreview)) {
184
195
  this.ssrReliability.client = failedSSRObject;
185
196
  }
186
- /*
197
+ /*
187
198
  If the cardPreview failed and it comes from server (global scope / ssrData), it means that we have reused it in client and the error counts for both: server & client.
188
199
  */
189
200
 
@@ -240,7 +251,7 @@ export class CardBase extends Component {
240
251
  status: 'success'
241
252
  };
242
253
  }
243
- /*
254
+ /*
244
255
  If the image loads successfully and it comes from server (global scope / ssrData), it means that we have reused it in client and the success counts for both: server & client.
245
256
  */
246
257
 
@@ -757,6 +768,7 @@ export class CardBase extends Component {
757
768
  const isDifferent = isDifferentIdentifier(prevIdentifier, identifier);
758
769
  const turnedVisible = !prevIsCardVisible && isCardVisible;
759
770
  const isNewMediaClient = prevMediaClient !== mediaClient;
771
+ this.updateFileStateFlag(fileState);
760
772
 
761
773
  if (isExternalImageIdentifier(identifier) && isDifferent) {
762
774
  this.fireCommencedEvent();
@@ -833,6 +845,22 @@ export class CardBase extends Component {
833
845
  this.subscribeInternalFile(identifier);
834
846
  }
835
847
 
848
+ updateFileStateFlag(fileState) {
849
+ if (!fileState) {
850
+ return;
851
+ }
852
+
853
+ const {
854
+ status
855
+ } = fileState;
856
+
857
+ if (status === 'processing') {
858
+ this.fileStateFlags.wasStatusProcessing = true;
859
+ } else if (status === 'uploading') {
860
+ this.fileStateFlags.wasStatusUploading = true;
861
+ }
862
+ }
863
+
836
864
  subscribeInternalFile(identifier) {
837
865
  const {
838
866
  mediaClient
@@ -902,6 +930,7 @@ export class CardBase extends Component {
902
930
  createAnalyticsEvent
903
931
  } = this.props;
904
932
  createAnalyticsEvent && fireOperationalEvent(createAnalyticsEvent, status, this.fileAttributes, this.getPerformanceAttributes(), this.ssrReliability, error);
933
+ completeUfoExperience(this.internalOccurrenceKey, status, this.fileAttributes, this.fileStateFlags, this.ssrReliability, getRelevantFeatureFlagKeysWithAllProducts(), error);
905
934
  }
906
935
 
907
936
  fireCommencedEvent() {
@@ -914,6 +943,7 @@ export class CardBase extends Component {
914
943
  durationSincePageStart: this.timeElapsedTillCommenced
915
944
  }
916
945
  });
946
+ startUfoExperience(this.internalOccurrenceKey, getRelevantFeatureFlagKeysWithAllProducts());
917
947
  }
918
948
 
919
949
  get actions() {
@@ -971,7 +1001,7 @@ export const Card = withMediaAnalyticsContext({
971
1001
  componentName: 'mediaCard',
972
1002
  component: 'mediaCard'
973
1003
  }, {
974
- filterFeatureFlags: relevantFeatureFlagNames
1004
+ filterFeatureFlags: getRelevantFeatureFlagNames()
975
1005
  })(withAnalyticsEvents()(injectIntl(CardBase, {
976
1006
  enforceContext: false
977
1007
  })));
@@ -237,7 +237,6 @@ export class CardViewBase extends React.Component {
237
237
  };
238
238
 
239
239
  case 'processing':
240
- case 'loading-preview':
241
240
  return { ...defaultConfig,
242
241
  iconMessage: !didImageRender && !isZeroSize ? /*#__PURE__*/React.createElement(CreatingPreview, {
243
242
  disableAnimation: disableAnimation
@@ -286,6 +285,7 @@ export class CardViewBase extends React.Component {
286
285
  iconMessage
287
286
  };
288
287
 
288
+ case 'loading-preview':
289
289
  case 'loading':
290
290
  default:
291
291
  return { ...defaultConfig,
@@ -0,0 +1,3 @@
1
+ export const generateUniqueId = () => {
2
+ return (performance.now().toString(36) + Math.random().toString(36)).replace(/\./g, '');
3
+ };