@atlaskit/media-card 73.4.1 → 73.5.1

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 (60) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/classnames/package.json +7 -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 +15 -3
  8. package/dist/cjs/root/card/index.js +12 -3
  9. package/dist/cjs/utils/generateUniqueId.js +12 -0
  10. package/dist/cjs/utils/ufoExperiences.js +91 -0
  11. package/dist/cjs/utils/viewportDetector.js +1 -1
  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 +9 -1
  18. package/dist/es2019/root/card/index.js +12 -4
  19. package/dist/es2019/utils/generateUniqueId.js +3 -0
  20. package/dist/es2019/utils/ufoExperiences.js +68 -0
  21. package/dist/es2019/utils/viewportDetector.js +1 -1
  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 +11 -1
  28. package/dist/esm/root/card/index.js +12 -4
  29. package/dist/esm/utils/generateUniqueId.js +3 -0
  30. package/dist/esm/utils/ufoExperiences.js +74 -0
  31. package/dist/esm/utils/viewportDetector.js +1 -1
  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 +2 -2
  41. package/dist/types/root/card/getCardPreview/helpers.d.ts +2 -2
  42. package/dist/types/root/card/index.d.ts +1 -0
  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/utils/analytics.d.ts +1 -1
  52. package/dist/types/utils/cardDimensions.d.ts +5 -5
  53. package/dist/types/utils/dimensionComparer.d.ts +2 -2
  54. package/dist/types/utils/generateUniqueId.d.ts +1 -0
  55. package/dist/types/utils/getMediaCardCursor.d.ts +2 -1
  56. package/dist/types/utils/metadata.d.ts +2 -2
  57. package/dist/types/utils/shouldDisplayImageThumbnail.d.ts +2 -2
  58. package/dist/types/utils/ufoExperiences.d.ts +6 -0
  59. package/example-helpers/index.tsx +2 -2
  60. package/package.json +10 -8
package/CHANGELOG.md CHANGED
@@ -1,5 +1,31 @@
1
1
  # @atlaskit/media-card
2
2
 
3
+ ## 73.5.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [`cb2392f6d33`](https://bitbucket.org/atlassian/atlassian-frontend/commits/cb2392f6d33) - Upgrade to TypeScript 4.2.4
8
+ - Updated dependencies
9
+
10
+ ## 73.5.0
11
+
12
+ ### Minor Changes
13
+
14
+ - [`02fb8e78fb9`](https://bitbucket.org/atlassian/atlassian-frontend/commits/02fb8e78fb9) - Implement media card render UFO experience
15
+
16
+ ### Patch Changes
17
+
18
+ - [`3ef794dc11f`](https://bitbucket.org/atlassian/atlassian-frontend/commits/3ef794dc11f) - Removed emoji and media packages dependencies from renderer initial load.
19
+ - [`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
20
+ - [`065ae19cb44`](https://bitbucket.org/atlassian/atlassian-frontend/commits/065ae19cb44) - Enforced "up to date" logged feature flags via type checks
21
+ - Updated dependencies
22
+
23
+ ## 73.4.2
24
+
25
+ ### Patch Changes
26
+
27
+ - [`c102bb59f41`](https://bitbucket.org/atlassian/atlassian-frontend/commits/c102bb59f41) - Viewport detector needs to have absolute positioning so that it does not cause scroll bars in firefox when rendered in a table with a link.
28
+
3
29
  ## 73.4.1
4
30
 
5
31
  ### Patch Changes
@@ -0,0 +1,7 @@
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
+ "types": "../dist/types/classnames.d.ts"
7
+ }
@@ -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,24 @@
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.fireScreenEvent = exports.fireOperationalEvent = exports.fireCopiedEvent = exports.fireCommencedEvent = 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 getRelevantFeatureFlagNames = function getRelevantFeatureFlagNames() {
13
+ return (0, _mediaCommon.filterFeatureFlagNames)({
14
+ newCardExperience: true,
15
+ captions: true,
16
+ timestampOnVideo: true,
17
+ observedWidth: true,
18
+ mediaInline: false,
19
+ folderUploads: false
20
+ });
21
+ };
22
+
23
+ exports.getRelevantFeatureFlagNames = getRelevantFeatureFlagNames;
12
24
 
13
25
  var fireOperationalEvent = function fireOperationalEvent(createAnalyticsEvent, status, fileAttributes, performanceAttributes, ssrReliability, error) {
14
26
  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,6 +105,7 @@ 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);
103
110
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "viewportPreAnchorRef", /*#__PURE__*/(0, _react.createRef)());
104
111
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "viewportPostAnchorRef", /*#__PURE__*/(0, _react.createRef)());
@@ -287,7 +294,7 @@ var CardBase = /*#__PURE__*/function (_Component) {
287
294
  if ((0, _getCardPreview.isSSRClientPreview)(cardPreview)) {
288
295
  _this.ssrReliability.client = failedSSRObject;
289
296
  }
290
- /*
297
+ /*
291
298
  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
299
  */
293
300
 
@@ -343,7 +350,7 @@ var CardBase = /*#__PURE__*/function (_Component) {
343
350
  status: 'success'
344
351
  };
345
352
  }
346
- /*
353
+ /*
347
354
  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
355
  */
349
356
 
@@ -950,6 +957,7 @@ var CardBase = /*#__PURE__*/function (_Component) {
950
957
  error = _this$state7.error;
951
958
  var createAnalyticsEvent = this.props.createAnalyticsEvent;
952
959
  createAnalyticsEvent && (0, _cardAnalytics.fireOperationalEvent)(createAnalyticsEvent, status, this.fileAttributes, this.getPerformanceAttributes(), this.ssrReliability, error);
960
+ (0, _ufoExperiences.completeUfoExperience)(this.internalOccurrenceKey, status, this.fileAttributes, this.ssrReliability, error);
953
961
  }
954
962
  }, {
955
963
  key: "fireCommencedEvent",
@@ -961,6 +969,7 @@ var CardBase = /*#__PURE__*/function (_Component) {
961
969
  durationSincePageStart: this.timeElapsedTillCommenced
962
970
  }
963
971
  });
972
+ (0, _ufoExperiences.startUfoExperience)(this.internalOccurrenceKey);
964
973
  }
965
974
  }, {
966
975
  key: "actions",
@@ -1022,7 +1031,7 @@ var Card = (0, _mediaCommon.withMediaAnalyticsContext)({
1022
1031
  componentName: 'mediaCard',
1023
1032
  component: 'mediaCard'
1024
1033
  }, {
1025
- filterFeatureFlags: _cardAnalytics.relevantFeatureFlagNames
1034
+ filterFeatureFlags: (0, _cardAnalytics.getRelevantFeatureFlagNames)()
1026
1035
  })((0, _analyticsNext.withAnalyticsEvents)()((0, _reactIntlNext.injectIntl)(CardBase, {
1027
1036
  enforceContext: false
1028
1037
  })));
@@ -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,91 @@
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
+ 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; }
19
+
20
+ 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; }
21
+
22
+ var concurrentExperience;
23
+
24
+ var getExperience = function getExperience(id) {
25
+ if (!concurrentExperience) {
26
+ var inlineExperience = {
27
+ platform: {
28
+ component: 'media-card'
29
+ },
30
+ type: _ufo.ExperienceTypes.Experience,
31
+ performanceType: _ufo.ExperiencePerformanceTypes.InlineResult
32
+ };
33
+ concurrentExperience = new _ufo.ConcurrentExperience('media-card-render', inlineExperience);
34
+ }
35
+
36
+ return concurrentExperience.getInstance(id);
37
+ };
38
+
39
+ var startUfoExperience = function startUfoExperience(id) {
40
+ getExperience(id).start();
41
+ };
42
+
43
+ exports.startUfoExperience = startUfoExperience;
44
+
45
+ var completeUfoExperience = function completeUfoExperience(id, status, fileAttributes, ssrReliability, error) {
46
+ switch (status) {
47
+ case 'complete':
48
+ succeedUfoExperience(id, {
49
+ fileAttributes: fileAttributes,
50
+ ssrReliability: ssrReliability
51
+ });
52
+ break;
53
+
54
+ case 'failed-processing':
55
+ failUfoExperience(id, {
56
+ fileAttributes: fileAttributes,
57
+ failReason: 'failed-processing',
58
+ ssrReliability: ssrReliability
59
+ });
60
+ break;
61
+
62
+ case 'error':
63
+ error && failUfoExperience(id, _objectSpread(_objectSpread({
64
+ fileAttributes: fileAttributes
65
+ }, (0, _analytics.extractErrorInfo)(error)), {}, {
66
+ request: (0, _analytics.getRenderErrorRequestMetadata)(error),
67
+ ssrReliability: ssrReliability
68
+ }));
69
+ break;
70
+ }
71
+ };
72
+
73
+ exports.completeUfoExperience = completeUfoExperience;
74
+
75
+ var succeedUfoExperience = function succeedUfoExperience(id, properties) {
76
+ getExperience(id).success({
77
+ metadata: _objectSpread(_objectSpread({}, properties), {}, {
78
+ packageName: _version.name,
79
+ packageVersion: _version.version
80
+ })
81
+ });
82
+ };
83
+
84
+ var failUfoExperience = function failUfoExperience(id, properties) {
85
+ getExperience(id).failure({
86
+ metadata: _objectSpread(_objectSpread({}, properties), {}, {
87
+ packageName: _version.name,
88
+ packageVersion: _version.version
89
+ })
90
+ });
91
+ };
@@ -35,7 +35,7 @@ var ViewportAnchor = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
35
35
  ref: ref,
36
36
  className: "media-card-viewport-anchor",
37
37
  style: {
38
- position: 'relative',
38
+ position: 'absolute',
39
39
  top: "".concat(props.offsetTop, "px"),
40
40
  maxHeight: 0,
41
41
  pointerEvents: 'none'
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/media-card",
3
- "version": "73.4.1",
3
+ "version": "73.5.1",
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,13 @@
1
+ import { filterFeatureFlagNames } 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 getRelevantFeatureFlagNames = () => filterFeatureFlagNames({
4
+ newCardExperience: true,
5
+ captions: true,
6
+ timestampOnVideo: true,
7
+ observedWidth: true,
8
+ mediaInline: false,
9
+ folderUploads: false
10
+ });
3
11
  export const fireOperationalEvent = (createAnalyticsEvent, status, fileAttributes, performanceAttributes, ssrReliability, error) => {
4
12
  const fireEvent = payload => fireMediaCardEvent(payload, createAnalyticsEvent);
5
13
 
@@ -16,19 +16,25 @@ 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, 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
 
34
40
  _defineProperty(this, "viewportPreAnchorRef", /*#__PURE__*/createRef());
@@ -183,7 +189,7 @@ export class CardBase extends Component {
183
189
  if (isSSRClientPreview(cardPreview)) {
184
190
  this.ssrReliability.client = failedSSRObject;
185
191
  }
186
- /*
192
+ /*
187
193
  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
194
  */
189
195
 
@@ -240,7 +246,7 @@ export class CardBase extends Component {
240
246
  status: 'success'
241
247
  };
242
248
  }
243
- /*
249
+ /*
244
250
  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
251
  */
246
252
 
@@ -902,6 +908,7 @@ export class CardBase extends Component {
902
908
  createAnalyticsEvent
903
909
  } = this.props;
904
910
  createAnalyticsEvent && fireOperationalEvent(createAnalyticsEvent, status, this.fileAttributes, this.getPerformanceAttributes(), this.ssrReliability, error);
911
+ completeUfoExperience(this.internalOccurrenceKey, status, this.fileAttributes, this.ssrReliability, error);
905
912
  }
906
913
 
907
914
  fireCommencedEvent() {
@@ -914,6 +921,7 @@ export class CardBase extends Component {
914
921
  durationSincePageStart: this.timeElapsedTillCommenced
915
922
  }
916
923
  });
924
+ startUfoExperience(this.internalOccurrenceKey);
917
925
  }
918
926
 
919
927
  get actions() {
@@ -971,7 +979,7 @@ export const Card = withMediaAnalyticsContext({
971
979
  componentName: 'mediaCard',
972
980
  component: 'mediaCard'
973
981
  }, {
974
- filterFeatureFlags: relevantFeatureFlagNames
982
+ filterFeatureFlags: getRelevantFeatureFlagNames()
975
983
  })(withAnalyticsEvents()(injectIntl(CardBase, {
976
984
  enforceContext: false
977
985
  })));
@@ -0,0 +1,3 @@
1
+ export const generateUniqueId = () => {
2
+ return (performance.now().toString(36) + Math.random().toString(36)).replace(/\./g, '');
3
+ };
@@ -0,0 +1,68 @@
1
+ import { ConcurrentExperience, ExperiencePerformanceTypes, ExperienceTypes } from '@atlaskit/ufo';
2
+ import { name as packageName, version as packageVersion } from '../version.json';
3
+ import { extractErrorInfo, getRenderErrorRequestMetadata } from './analytics';
4
+ let concurrentExperience;
5
+
6
+ const getExperience = id => {
7
+ if (!concurrentExperience) {
8
+ const inlineExperience = {
9
+ platform: {
10
+ component: 'media-card'
11
+ },
12
+ type: ExperienceTypes.Experience,
13
+ performanceType: ExperiencePerformanceTypes.InlineResult
14
+ };
15
+ concurrentExperience = new ConcurrentExperience('media-card-render', inlineExperience);
16
+ }
17
+
18
+ return concurrentExperience.getInstance(id);
19
+ };
20
+
21
+ export const startUfoExperience = id => {
22
+ getExperience(id).start();
23
+ };
24
+ export const completeUfoExperience = (id, status, fileAttributes, ssrReliability, error) => {
25
+ switch (status) {
26
+ case 'complete':
27
+ succeedUfoExperience(id, {
28
+ fileAttributes,
29
+ ssrReliability
30
+ });
31
+ break;
32
+
33
+ case 'failed-processing':
34
+ failUfoExperience(id, {
35
+ fileAttributes,
36
+ failReason: 'failed-processing',
37
+ ssrReliability
38
+ });
39
+ break;
40
+
41
+ case 'error':
42
+ error && failUfoExperience(id, {
43
+ fileAttributes,
44
+ ...extractErrorInfo(error),
45
+ request: getRenderErrorRequestMetadata(error),
46
+ ssrReliability
47
+ });
48
+ break;
49
+ }
50
+ };
51
+
52
+ const succeedUfoExperience = (id, properties) => {
53
+ getExperience(id).success({
54
+ metadata: { ...properties,
55
+ packageName,
56
+ packageVersion
57
+ }
58
+ });
59
+ };
60
+
61
+ const failUfoExperience = (id, properties) => {
62
+ getExperience(id).failure({
63
+ metadata: { ...properties,
64
+ packageName,
65
+ packageVersion
66
+ }
67
+ });
68
+ };
@@ -15,7 +15,7 @@ export const ViewportAnchor = /*#__PURE__*/forwardRef((props, ref) => {
15
15
  ref: ref,
16
16
  className: "media-card-viewport-anchor",
17
17
  style: {
18
- position: 'relative',
18
+ position: 'absolute',
19
19
  top: `${props.offsetTop}px`,
20
20
  maxHeight: 0,
21
21
  pointerEvents: 'none'
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/media-card",
3
- "version": "73.4.1",
3
+ "version": "73.5.1",
4
4
  "sideEffects": false
5
5
  }
@@ -0,0 +1 @@
1
+ export { fileCardImageViewSelector, fileCardImageViewSelectedSelector } from './files/cardImageView/classnames';
@@ -0,0 +1,2 @@
1
+ export var fileCardImageViewSelector = 'media-file-card-view';
2
+ export var fileCardImageViewSelectedSelector = 'media-file-card-view-selected';
@@ -20,8 +20,7 @@ import { CardLoading } from '../../utils/lightCards/cardLoading';
20
20
  import { shouldDisplayImageThumbnail } from '../../utils/shouldDisplayImageThumbnail';
21
21
  import { ProgressBar } from '../../utils/progressBar';
22
22
  import CardActions from '../../utils/cardActions';
23
- export var fileCardImageViewSelector = 'media-file-card-view';
24
- export var fileCardImageViewSelectedSelector = 'media-file-card-view-selected';
23
+ import { fileCardImageViewSelectedSelector, fileCardImageViewSelector } from './classnames';
25
24
  export var FileCardImageView = /*#__PURE__*/function (_Component) {
26
25
  _inherits(FileCardImageView, _Component);
27
26
 
package/dist/esm/index.js CHANGED
@@ -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 } from '@atlaskit/media-common';
1
2
  import { fireMediaCardEvent, getRenderSucceededEventPayload, getRenderErrorEventPayload, getRenderFailedFileStatusPayload, getCopiedFilePayload, getRenderCommencedEventPayload, getRenderPreviewableCardPayload } from '../../utils/analytics';
2
- export var relevantFeatureFlagNames = ['newCardExperience', 'captions', 'timestampOnVideo'];
3
+ export var getRelevantFeatureFlagNames = function getRelevantFeatureFlagNames() {
4
+ return filterFeatureFlagNames({
5
+ newCardExperience: true,
6
+ captions: true,
7
+ timestampOnVideo: true,
8
+ observedWidth: true,
9
+ mediaInline: false,
10
+ folderUploads: false
11
+ });
12
+ };
3
13
  export var fireOperationalEvent = function fireOperationalEvent(createAnalyticsEvent, status, fileAttributes, performanceAttributes, ssrReliability, error) {
4
14
  var fireEvent = function fireEvent(payload) {
5
15
  return fireMediaCardEvent(payload, createAnalyticsEvent);