@atlaskit/media-card 74.3.2 → 74.4.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 (58) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cjs/card/card.js +27 -18
  3. package/dist/cjs/card/cardAnalytics.js +16 -5
  4. package/dist/cjs/card/cardLoader.js +12 -3
  5. package/dist/cjs/card/cardState.js +11 -13
  6. package/dist/cjs/card/media-card-analytics-error-boundary.js +129 -0
  7. package/dist/cjs/card/ui/unhandledErrorCard/index.js +114 -0
  8. package/dist/cjs/card/ui/unhandledErrorCard/types.js +5 -0
  9. package/dist/cjs/errors.js +12 -3
  10. package/dist/cjs/inline/loader.js +4 -4
  11. package/dist/cjs/inline/mediaInlineAnalyticsErrorBoundary.js +113 -0
  12. package/dist/cjs/utils/analytics.js +41 -10
  13. package/dist/cjs/utils/ufoExperiences.js +1 -1
  14. package/dist/cjs/version.json +1 -1
  15. package/dist/es2019/card/card.js +29 -17
  16. package/dist/es2019/card/cardAnalytics.js +9 -5
  17. package/dist/es2019/card/cardLoader.js +12 -3
  18. package/dist/es2019/card/cardState.js +12 -7
  19. package/dist/es2019/card/media-card-analytics-error-boundary.js +90 -0
  20. package/dist/es2019/card/ui/unhandledErrorCard/index.js +80 -0
  21. package/dist/es2019/card/ui/unhandledErrorCard/types.js +1 -0
  22. package/dist/es2019/errors.js +13 -2
  23. package/dist/es2019/inline/loader.js +4 -4
  24. package/dist/es2019/inline/mediaInlineAnalyticsErrorBoundary.js +75 -0
  25. package/dist/es2019/utils/analytics.js +32 -9
  26. package/dist/es2019/utils/ufoExperiences.js +1 -1
  27. package/dist/es2019/version.json +1 -1
  28. package/dist/esm/card/card.js +28 -19
  29. package/dist/esm/card/cardAnalytics.js +12 -4
  30. package/dist/esm/card/cardLoader.js +12 -3
  31. package/dist/esm/card/cardState.js +12 -11
  32. package/dist/esm/card/media-card-analytics-error-boundary.js +115 -0
  33. package/dist/esm/card/ui/unhandledErrorCard/index.js +94 -0
  34. package/dist/esm/card/ui/unhandledErrorCard/types.js +1 -0
  35. package/dist/esm/errors.js +12 -3
  36. package/dist/esm/inline/loader.js +5 -5
  37. package/dist/esm/inline/mediaInlineAnalyticsErrorBoundary.js +99 -0
  38. package/dist/esm/utils/analytics.js +34 -9
  39. package/dist/esm/utils/ufoExperiences.js +1 -1
  40. package/dist/esm/version.json +1 -1
  41. package/dist/types/card/card.d.ts +1 -1
  42. package/dist/types/card/cardAnalytics.d.ts +2 -1
  43. package/dist/types/card/cardState.d.ts +6 -1
  44. package/dist/types/card/getCardPreview/index.d.ts +1 -1
  45. package/dist/types/card/media-card-analytics-error-boundary.d.ts +14 -0
  46. package/dist/types/card/ui/unhandledErrorCard/index.d.ts +7 -0
  47. package/dist/types/card/ui/unhandledErrorCard/types.d.ts +6 -0
  48. package/dist/types/errors.d.ts +2 -2
  49. package/dist/types/inline/mediaInlineAnalyticsErrorBoundary.d.ts +11 -0
  50. package/dist/types/types.d.ts +3 -0
  51. package/dist/types/utils/analytics.d.ts +26 -6
  52. package/example-helpers/styles.ts +13 -0
  53. package/package.json +9 -8
  54. package/report.api.md +2 -2
  55. package/dist/cjs/utils/media-card-analytics-error-boundary.js +0 -59
  56. package/dist/es2019/utils/media-card-analytics-error-boundary.js +0 -19
  57. package/dist/esm/utils/media-card-analytics-error-boundary.js +0 -46
  58. package/dist/types/utils/media-card-analytics-error-boundary.d.ts +0 -10
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @atlaskit/media-card
2
2
 
3
+ ## 74.4.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`81573c1dfa7`](https://bitbucket.org/atlassian/atlassian-frontend/commits/81573c1dfa7) - Media Card logs metadata trace Id
8
+ - [`0bccac57db6`](https://bitbucket.org/atlassian/atlassian-frontend/commits/0bccac57db6) - remove mediaUploadApiV2 Feature flag
9
+
10
+ ### Patch Changes
11
+
12
+ - [`5f36954436c`](https://bitbucket.org/atlassian/atlassian-frontend/commits/5f36954436c) - Ensure all secondary errors from backend responses are logged in media card
13
+ - [`2b5f5a740d3`](https://bitbucket.org/atlassian/atlassian-frontend/commits/2b5f5a740d3) - [ux] catch unexpected error in media card error boundary with a fallback error component and fire analytics event
14
+ - [`8b373447406`](https://bitbucket.org/atlassian/atlassian-frontend/commits/8b373447406) - Updated names for Media card examples and updated their references.
15
+ - [`f36a3d972cf`](https://bitbucket.org/atlassian/atlassian-frontend/commits/f36a3d972cf) - Updated Media-Card documentation with new tab structure and simpler usage example
16
+ - [`3d40d5e9b37`](https://bitbucket.org/atlassian/atlassian-frontend/commits/3d40d5e9b37) - Adopt updated version of getRandomHex function for generating traceId
17
+ - Updated dependencies
18
+
3
19
  ## 74.3.2
4
20
 
5
21
  ### Patch Changes
@@ -90,7 +90,7 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
90
90
  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; } }
91
91
 
92
92
  var packageName = "@atlaskit/media-card";
93
- var packageVersion = "74.3.2";
93
+ var packageVersion = "74.4.0";
94
94
 
95
95
  var CardBase = /*#__PURE__*/function (_Component) {
96
96
  (0, _inherits2.default)(CardBase, _Component);
@@ -123,7 +123,7 @@ var CardBase = /*#__PURE__*/function (_Component) {
123
123
  });
124
124
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "timeElapsedTillCommenced", performance.now());
125
125
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "traceContext", {
126
- traceId: (0, _mediaCommon.getRandomHex)(16)
126
+ traceId: (0, _mediaCommon.getRandomHex)(8)
127
127
  });
128
128
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "getImageURLParams", function (_ref) {
129
129
  var collection = _ref.collectionName;
@@ -170,7 +170,7 @@ var CardBase = /*#__PURE__*/function (_Component) {
170
170
  mediaClient: mediaClient,
171
171
  id: id,
172
172
  dimensions: dimensions,
173
- onLocalPreviewError: _this.fireLocalPreviewErrorEvent,
173
+ onLocalPreviewError: _this.fireNonCriticalErrorEvent,
174
174
  filePreview: isBannedLocalPreview ? undefined : (0, _getCardPreview.getFilePreviewFromFileState)(fileState),
175
175
  isRemotePreviewReady: (0, _mediaClient2.isImageRepresentationReady)(fileState),
176
176
  imageUrlParams: _this.getImageURLParams(identifier),
@@ -193,7 +193,7 @@ var CardBase = /*#__PURE__*/function (_Component) {
193
193
  });
194
194
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "refetchSSRPreview", /*#__PURE__*/function () {
195
195
  var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(identifier) {
196
- var _this$props4, mediaClient, _this$props4$dimensio, dimensions, cardPreview;
196
+ var _this$props4, mediaClient, _this$props4$dimensio, dimensions, cardPreview, wrappedError;
197
197
 
198
198
  return _regenerator.default.wrap(function _callee$(_context) {
199
199
  while (1) {
@@ -211,14 +211,17 @@ var CardBase = /*#__PURE__*/function (_Component) {
211
211
  cardPreview: cardPreview
212
212
  });
213
213
 
214
- _context.next = 10;
214
+ _context.next = 12;
215
215
  break;
216
216
 
217
217
  case 8:
218
218
  _context.prev = 8;
219
219
  _context.t0 = _context["catch"](1);
220
+ wrappedError = (0, _errors.ensureMediaCardError)('remote-preview-fetch-ssr', _context.t0, true);
220
221
 
221
- case 10:
222
+ _this.fireNonCriticalErrorEvent(wrappedError);
223
+
224
+ case 12:
222
225
  case "end":
223
226
  return _context.stop();
224
227
  }
@@ -261,6 +264,7 @@ var CardBase = /*#__PURE__*/function (_Component) {
261
264
  // If it's any other error we set status 'error'
262
265
 
263
266
  if ((0, _errors.isLocalPreviewError)(wrappedError)) {
267
+ // This error should already been logged inside the getCardPreview. No need to log it here.
264
268
  _this.safeSetState({
265
269
  isBannedLocalPreview: true
266
270
  });
@@ -337,7 +341,7 @@ var CardBase = /*#__PURE__*/function (_Component) {
337
341
  if (isLocal) {
338
342
  updateState.isBannedLocalPreview = true;
339
343
 
340
- _this.fireLocalPreviewErrorEvent(error);
344
+ _this.fireNonCriticalErrorEvent(error);
341
345
  }
342
346
 
343
347
  var _this$props5 = _this.props,
@@ -395,17 +399,21 @@ var CardBase = /*#__PURE__*/function (_Component) {
395
399
  var createAnalyticsEvent = _this.props.createAnalyticsEvent;
396
400
  createAnalyticsEvent && (0, _cardAnalytics.fireScreenEvent)(createAnalyticsEvent, _this.fileAttributes);
397
401
  });
398
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "fireLocalPreviewErrorEvent", function (error) {// TODO: track local preview success rate
399
- // https://product-fabric.atlassian.net/browse/MEX-774
402
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "fireNonCriticalErrorEvent", function (error) {
403
+ var createAnalyticsEvent = _this.props.createAnalyticsEvent;
404
+ var fileState = _this.state.fileState;
405
+ createAnalyticsEvent && (0, _cardAnalytics.fireNonCriticalErrorEvent)(createAnalyticsEvent, _this.state.status, _this.fileAttributes, _this.ssrReliability, error, _this.traceContext, fileState === null || fileState === void 0 ? void 0 : fileState.metadataTraceContext);
400
406
  });
401
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "safeSetState", function (state) {
407
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "safeSetState", function (newState) {
402
408
  if (_this.hasBeenMounted) {
403
- // If it's setting the status, we need to use a state updater function,
404
- // which ensures that no non-final status overrides a final status.
405
- // If no status is set, we don't need a sate updater
406
- var updater = !!state.status ? (0, _cardState.createStateUpdater)(state) : state;
407
-
408
- _this.setState(updater);
409
+ /**
410
+ * createStateUpdater helper returns a callback to be passed to setState.
411
+ * It decides wether to update the 'status' depending on the current state vs the input state.
412
+ * From docs: "Both state and props received by the updater function are guaranteed to be up-to-date."
413
+ * If the input state brings an error and it won't be updating the state, the error will be logged as non-critical inside the helper.
414
+ * If the error persists int the state, it means it is a critical error and should be logged as a failed event for Card
415
+ */
416
+ _this.setState((0, _cardState.createStateUpdater)(newState, _this.fireNonCriticalErrorEvent));
409
417
  }
410
418
  });
411
419
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "unsubscribe", function () {
@@ -992,9 +1000,10 @@ var CardBase = /*#__PURE__*/function (_Component) {
992
1000
  value: function fireOperationalEvent() {
993
1001
  var _this$state7 = this.state,
994
1002
  status = _this$state7.status,
995
- error = _this$state7.error;
1003
+ error = _this$state7.error,
1004
+ fileState = _this$state7.fileState;
996
1005
  var createAnalyticsEvent = this.props.createAnalyticsEvent;
997
- createAnalyticsEvent && (0, _cardAnalytics.fireOperationalEvent)(createAnalyticsEvent, status, this.fileAttributes, this.getPerformanceAttributes(), this.ssrReliability, error, this.traceContext);
1006
+ createAnalyticsEvent && (0, _cardAnalytics.fireOperationalEvent)(createAnalyticsEvent, status, this.fileAttributes, this.getPerformanceAttributes(), this.ssrReliability, error, this.traceContext, fileState === null || fileState === void 0 ? void 0 : fileState.metadataTraceContext);
998
1007
  (0, _ufoExperiences.completeUfoExperience)(this.internalOccurrenceKey, status, this.fileAttributes, this.fileStateFlags, this.ssrReliability, error);
999
1008
  }
1000
1009
  }, {
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.fireScreenEvent = exports.fireOperationalEvent = exports.fireCopiedEvent = exports.fireCommencedEvent = void 0;
6
+ exports.fireScreenEvent = exports.fireOperationalEvent = exports.fireNonCriticalErrorEvent = exports.fireCopiedEvent = exports.fireCommencedEvent = void 0;
7
7
 
8
8
  var _analytics = require("../utils/analytics");
9
9
 
@@ -12,6 +12,7 @@ var _errors = require("../errors");
12
12
  var fireOperationalEvent = function fireOperationalEvent(createAnalyticsEvent, status, fileAttributes, performanceAttributes, ssrReliability) {
13
13
  var error = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : new _errors.MediaCardError('missing-error-data');
14
14
  var traceContext = arguments.length > 6 ? arguments[6] : undefined;
15
+ var metadataTraceContext = arguments.length > 7 ? arguments[7] : undefined;
15
16
 
16
17
  var fireEvent = function fireEvent(payload) {
17
18
  return (0, _analytics.fireMediaCardEvent)(payload, createAnalyticsEvent);
@@ -19,15 +20,15 @@ var fireOperationalEvent = function fireOperationalEvent(createAnalyticsEvent, s
19
20
 
20
21
  switch (status) {
21
22
  case 'complete':
22
- fireEvent((0, _analytics.getRenderSucceededEventPayload)(fileAttributes, performanceAttributes, ssrReliability, traceContext));
23
+ fireEvent((0, _analytics.getRenderSucceededEventPayload)(fileAttributes, performanceAttributes, ssrReliability, traceContext, metadataTraceContext));
23
24
  break;
24
25
 
25
26
  case 'failed-processing':
26
- fireEvent((0, _analytics.getRenderFailedFileStatusPayload)(fileAttributes, performanceAttributes, ssrReliability, traceContext));
27
+ fireEvent((0, _analytics.getRenderFailedFileStatusPayload)(fileAttributes, performanceAttributes, ssrReliability, traceContext, metadataTraceContext));
27
28
  break;
28
29
 
29
30
  case 'error':
30
- fireEvent((0, _analytics.getRenderErrorEventPayload)(fileAttributes, performanceAttributes, error, ssrReliability, traceContext));
31
+ fireEvent((0, _analytics.getRenderErrorEventPayload)(fileAttributes, performanceAttributes, error, ssrReliability, traceContext, metadataTraceContext));
31
32
  break;
32
33
  }
33
34
  };
@@ -58,4 +59,14 @@ var fireScreenEvent = function fireScreenEvent(createAnalyticsEvent, fileAttribu
58
59
  (0, _analytics.fireMediaCardEvent)((0, _analytics.getRenderPreviewableCardPayload)(fileAttributes), createAnalyticsEvent);
59
60
  };
60
61
 
61
- exports.fireScreenEvent = fireScreenEvent;
62
+ exports.fireScreenEvent = fireScreenEvent;
63
+
64
+ var fireNonCriticalErrorEvent = function fireNonCriticalErrorEvent(createAnalyticsEvent, cardStatus, fileAttributes, ssrReliability) {
65
+ var error = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : new _errors.MediaCardError('missing-error-data');
66
+ var traceContext = arguments.length > 5 ? arguments[5] : undefined;
67
+ var metadataTraceContext = arguments.length > 6 ? arguments[6] : undefined;
68
+ var errorPayload = (0, _analytics.getErrorEventPayload)(cardStatus, fileAttributes, error, ssrReliability, traceContext, metadataTraceContext);
69
+ (0, _analytics.fireMediaCardEvent)(errorPayload, createAnalyticsEvent);
70
+ };
71
+
72
+ exports.fireNonCriticalErrorEvent = fireNonCriticalErrorEvent;
@@ -45,7 +45,7 @@ var MediaCard = (0, _reactLoadable.default)({
45
45
  var MediaCardErrorBoundary = (0, _reactLoadable.default)({
46
46
  loader: function loader() {
47
47
  return Promise.resolve().then(function () {
48
- return _interopRequireWildcard(require('../utils/media-card-analytics-error-boundary'));
48
+ return _interopRequireWildcard(require('./media-card-analytics-error-boundary'));
49
49
  }).then(function (mod) {
50
50
  return mod.default;
51
51
  });
@@ -72,14 +72,23 @@ var MediaCardWithMediaClient = (0, _reactLoadable.default)({
72
72
 
73
73
  var CardWithMediaClient = function CardWithMediaClient(props) {
74
74
  var withMediaClient = props.withMediaClient,
75
- featureFlags = props.featureFlags;
75
+ dimensions = props.dimensions,
76
+ featureFlags = props.featureFlags,
77
+ onClick = props.onClick;
76
78
  var memoizedFeatureFlags = (0, _mediaCommon.useMemoizeFeatureFlags)(featureFlags);
77
79
 
78
80
  var Card = _react.default.useMemo(function () {
79
81
  return withMediaClient(MediaCard, memoizedFeatureFlags);
80
82
  }, [withMediaClient, memoizedFeatureFlags]);
81
83
 
82
- return /*#__PURE__*/_react.default.createElement(MediaCardErrorBoundary, null, /*#__PURE__*/_react.default.createElement(Card, props));
84
+ return (
85
+ /*#__PURE__*/
86
+ // onClick is passed into MediaCardErrorBoundary so MediaGroup items can get the toolbar menu in Editor
87
+ _react.default.createElement(MediaCardErrorBoundary, {
88
+ dimensions: dimensions,
89
+ onClick: onClick
90
+ }, /*#__PURE__*/_react.default.createElement(Card, props))
91
+ );
83
92
  };
84
93
 
85
94
  var CardLoader = function CardLoader(props) {
@@ -1,14 +1,10 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
3
  Object.defineProperty(exports, "__esModule", {
6
4
  value: true
7
5
  });
8
6
  exports.getCardStateFromFileState = exports.createStateUpdater = void 0;
9
7
 
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
-
12
8
  var _mediaClient = require("@atlaskit/media-client");
13
9
 
14
10
  var _errors = require("../errors");
@@ -17,19 +13,21 @@ var _getCardStatus = require("./getCardStatus");
17
13
 
18
14
  var _getCardPreview = require("./getCardPreview");
19
15
 
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 createStateUpdater = function createStateUpdater(newState) {
16
+ /**
17
+ * From docs: "Both state and props received by the updater function are guaranteed to be up-to-date.
18
+ * The output of the updater is shallowly merged with state."
19
+ */
20
+ var createStateUpdater = function createStateUpdater(newState, fireErrorEvent) {
25
21
  return function (prevState) {
26
- // Only override if previous status is non-final
27
- // or new status is 'complete'
28
- if ((0, _getCardStatus.isFinalCardStatus)(prevState.status) && newState.status !== 'complete') {
22
+ // Only override if previous status is non-final or new status is 'complete'
23
+ if (!!newState.status && (0, _getCardStatus.isFinalCardStatus)(prevState.status) && newState.status !== 'complete') {
24
+ // Log the error if the new state is not going to store it.
25
+ // i.e. this is a non critical error
26
+ !!newState.error && fireErrorEvent(newState.error);
29
27
  return prevState;
30
28
  }
31
29
 
32
- return _objectSpread(_objectSpread({}, prevState), newState);
30
+ return newState;
33
31
  };
34
32
  };
35
33
 
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
+
12
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
+
14
+ var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
15
+
16
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
17
+
18
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
19
+
20
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
21
+
22
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
23
+
24
+ var _react = _interopRequireDefault(require("react"));
25
+
26
+ var _mediaCommon = require("@atlaskit/media-common");
27
+
28
+ var _unhandledErrorCard = require("./ui/unhandledErrorCard");
29
+
30
+ var _analyticsNext = require("@atlaskit/analytics-next");
31
+
32
+ var _analytics = require("../utils/analytics");
33
+
34
+ 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; }
35
+
36
+ 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; }
37
+
38
+ 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); }; }
39
+
40
+ 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; } }
41
+
42
+ var WrappedMediaCardAnalyticsErrorBoundary = /*#__PURE__*/function (_React$Component) {
43
+ (0, _inherits2.default)(WrappedMediaCardAnalyticsErrorBoundary, _React$Component);
44
+
45
+ var _super = _createSuper(WrappedMediaCardAnalyticsErrorBoundary);
46
+
47
+ function WrappedMediaCardAnalyticsErrorBoundary(props) {
48
+ var _this;
49
+
50
+ (0, _classCallCheck2.default)(this, WrappedMediaCardAnalyticsErrorBoundary);
51
+ _this = _super.call(this, props);
52
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "fireOperationalEvent", function (error, info) {
53
+ var _window, _window$navigator;
54
+
55
+ var _this$props = _this.props,
56
+ _this$props$data = _this$props.data,
57
+ data = _this$props$data === void 0 ? {} : _this$props$data,
58
+ createAnalyticsEvent = _this$props.createAnalyticsEvent;
59
+ var payload = {
60
+ eventType: 'operational',
61
+ action: 'failed',
62
+ actionSubject: 'mediaCardRender',
63
+ attributes: _objectSpread({
64
+ browserInfo: (_window = window) !== null && _window !== void 0 && (_window$navigator = _window.navigator) !== null && _window$navigator !== void 0 && _window$navigator.userAgent ? window.navigator.userAgent : 'unknown',
65
+ error: error,
66
+ info: info,
67
+ failReason: 'unexpected-error'
68
+ }, data)
69
+ };
70
+ (0, _analytics.fireMediaCardEvent)(payload, createAnalyticsEvent);
71
+ });
72
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "handleOnClick", function (event) {
73
+ try {
74
+ var _this$props$onClick, _this$props2;
75
+
76
+ (_this$props$onClick = (_this$props2 = _this.props).onClick) === null || _this$props$onClick === void 0 ? void 0 : _this$props$onClick.call(_this$props2, {
77
+ event: event
78
+ });
79
+ } catch (e) {}
80
+ });
81
+ _this.state = {
82
+ hasError: false
83
+ };
84
+ return _this;
85
+ }
86
+
87
+ (0, _createClass2.default)(WrappedMediaCardAnalyticsErrorBoundary, [{
88
+ key: "componentDidCatch",
89
+ value: function componentDidCatch(error, info) {
90
+ try {
91
+ this.fireOperationalEvent(error, info);
92
+ } catch (e) {}
93
+
94
+ this.setState({
95
+ hasError: true
96
+ });
97
+ }
98
+ }, {
99
+ key: "render",
100
+ value: function render() {
101
+ var hasError = this.state.hasError;
102
+ var _this$props3 = this.props,
103
+ dimensions = _this$props3.dimensions,
104
+ children = _this$props3.children;
105
+
106
+ if (hasError) {
107
+ return /*#__PURE__*/_react.default.createElement(_unhandledErrorCard.UnhandledErrorCard, {
108
+ dimensions: dimensions,
109
+ onClick: this.handleOnClick
110
+ });
111
+ }
112
+
113
+ return children;
114
+ }
115
+ }]);
116
+ return WrappedMediaCardAnalyticsErrorBoundary;
117
+ }(_react.default.Component);
118
+
119
+ (0, _defineProperty2.default)(WrappedMediaCardAnalyticsErrorBoundary, "displayName", 'MediaCardAnalyticsErrorBoundary');
120
+ var packageName = "@atlaskit/media-card";
121
+ var packageVersion = "74.4.0";
122
+ var MediaCardAnalyticsErrorBoundary = (0, _mediaCommon.withMediaAnalyticsContext)({
123
+ packageVersion: packageVersion,
124
+ packageName: packageName,
125
+ componentName: 'mediaCard',
126
+ component: 'mediaCard'
127
+ })((0, _analyticsNext.withAnalyticsEvents)()(WrappedMediaCardAnalyticsErrorBoundary));
128
+ var _default = MediaCardAnalyticsErrorBoundary;
129
+ exports.default = _default;
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.UnhandledErrorCard = void 0;
9
+
10
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
+
12
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
+
14
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
15
+
16
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
17
+
18
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
19
+
20
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
21
+
22
+ var _react = require("react");
23
+
24
+ var _react2 = require("@emotion/react");
25
+
26
+ var _tokens = require("@atlaskit/tokens");
27
+
28
+ var _warning = _interopRequireDefault(require("@atlaskit/icon/glyph/editor/warning"));
29
+
30
+ var _colors = require("@atlaskit/theme/colors");
31
+
32
+ var _constants = require("@atlaskit/theme/constants");
33
+
34
+ var _mediaUi = require("@atlaskit/media-ui");
35
+
36
+ var _utils = require("../../../utils");
37
+
38
+ var _templateObject;
39
+
40
+ 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); }; }
41
+
42
+ 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; } }
43
+
44
+ var isPercentage = function isPercentage(value) {
45
+ return /^\d+(\.\d+)?%$/.test(value);
46
+ };
47
+
48
+ var shouldShowText = function shouldShowText(_ref) {
49
+ var width = _ref.width,
50
+ height = _ref.height;
51
+
52
+ if (isPercentage(width) || isPercentage(height)) {
53
+ return false;
54
+ }
55
+
56
+ return parseInt(width, 10) >= 240 && parseInt(height, 10) >= 90;
57
+ };
58
+
59
+ var normalizeDimension = function normalizeDimension(value, defaultValue) {
60
+ var sValue = value.toString();
61
+ return isPercentage(sValue) ? sValue : isNaN(parseInt(sValue, 10)) ? defaultValue + 'px' : parseInt(sValue, 10) + 'px';
62
+ };
63
+
64
+ var getConvertedDimension = function getConvertedDimension(dimensions) {
65
+ var _dimensions$width = dimensions.width,
66
+ width = _dimensions$width === void 0 ? _utils.defaultImageCardDimensions.width : _dimensions$width,
67
+ _dimensions$height = dimensions.height,
68
+ height = _dimensions$height === void 0 ? _utils.defaultImageCardDimensions.height : _dimensions$height;
69
+ return {
70
+ width: normalizeDimension(width, _utils.defaultImageCardDimensions.width),
71
+ height: normalizeDimension(height, _utils.defaultImageCardDimensions.height)
72
+ };
73
+ };
74
+
75
+ var wrapperStyles = function wrapperStyles() {
76
+ var dimensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _utils.defaultImageCardDimensions;
77
+
78
+ try {
79
+ return (0, _react2.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n ", ";\n ", ";\n background: ", ";\n color: ", ";\n max-height: 100%;\n max-width: 100%;\n ", ";\n display: flex;\n flex-direction: column;\n\n p {\n font-size: ", "px;\n text-align: center;\n display: ", ";\n }\n "])), _mediaUi.center, _mediaUi.borderRadius, (0, _tokens.token)('color.background.neutral', _colors.N20), (0, _tokens.token)('color.text.subtle', _colors.N800), getConvertedDimension(dimensions), (0, _constants.fontSize)(), shouldShowText(getConvertedDimension(dimensions)) ? 'block' : 'none');
80
+ } catch (e) {
81
+ return null;
82
+ }
83
+ };
84
+
85
+ var UnhandledErrorCard = /*#__PURE__*/function (_Component) {
86
+ (0, _inherits2.default)(UnhandledErrorCard, _Component);
87
+
88
+ var _super = _createSuper(UnhandledErrorCard);
89
+
90
+ function UnhandledErrorCard() {
91
+ (0, _classCallCheck2.default)(this, UnhandledErrorCard);
92
+ return _super.apply(this, arguments);
93
+ }
94
+
95
+ (0, _createClass2.default)(UnhandledErrorCard, [{
96
+ key: "render",
97
+ value: function render() {
98
+ var _this$props = this.props,
99
+ dimensions = _this$props.dimensions,
100
+ onClick = _this$props.onClick;
101
+ return (0, _react2.jsx)("div", {
102
+ css: wrapperStyles(dimensions),
103
+ onClick: onClick
104
+ }, (0, _react2.jsx)(_warning.default, {
105
+ label: "Error",
106
+ primaryColor: (0, _tokens.token)('color.icon.warning', _colors.Y500),
107
+ size: "medium"
108
+ }), (0, _react2.jsx)("p", null, "We couldn't load this content"));
109
+ }
110
+ }]);
111
+ return UnhandledErrorCard;
112
+ }(_react.Component);
113
+
114
+ exports.UnhandledErrorCard = UnhandledErrorCard;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -184,12 +184,21 @@ exports.isUnsupportedLocalPreviewError = isUnsupportedLocalPreviewError;
184
184
 
185
185
  function isImageLoadError(err) {
186
186
  return err instanceof ImageLoadError;
187
- } // In a try/catch statement, the error caught is the type of any.
187
+ } // In a try/catch statement, the error caught is the type of unknown.
188
188
  // We can use this helper to ensure that the error handled is the type of MediaCardError if unsure
189
+ // If updatePrimaryReason is true, if it's a MediaCardError already, it will update it's primary reason
189
190
 
190
191
 
191
- var ensureMediaCardError = function ensureMediaCardError(primaryReason, error) {
192
- return isMediaCardError(error) ? error : new MediaCardError(primaryReason, error);
192
+ var ensureMediaCardError = function ensureMediaCardError(primaryReason, error, updatePrimaryReason) {
193
+ if (isMediaCardError(error)) {
194
+ if (updatePrimaryReason && error.primaryReason !== primaryReason) {
195
+ return new MediaCardError(primaryReason, error.secondaryError);
196
+ }
197
+
198
+ return error;
199
+ }
200
+
201
+ return new MediaCardError(primaryReason, error);
193
202
  };
194
203
 
195
204
  exports.ensureMediaCardError = ensureMediaCardError;
@@ -68,7 +68,7 @@ var MediaInlineCardLoader = /*#__PURE__*/function (_React$PureComponent) {
68
68
  key: "componentDidMount",
69
69
  value: function () {
70
70
  var _componentDidMount = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
71
- var _yield$Promise$all, _yield$Promise$all2, mediaClient, cardModule, mediaCardErrorBoundaryModule;
71
+ var _yield$Promise$all, _yield$Promise$all2, mediaClient, cardModule, mediaInlineErrorBoundaryModule;
72
72
 
73
73
  return _regenerator.default.wrap(function _callee$(_context) {
74
74
  while (1) {
@@ -88,7 +88,7 @@ var MediaInlineCardLoader = /*#__PURE__*/function (_React$PureComponent) {
88
88
  }), Promise.resolve().then(function () {
89
89
  return _interopRequireWildcard(require('./mediaInlineCard'));
90
90
  }), Promise.resolve().then(function () {
91
- return _interopRequireWildcard(require('../utils/media-card-analytics-error-boundary'));
91
+ return _interopRequireWildcard(require('./mediaInlineAnalyticsErrorBoundary'));
92
92
  })]);
93
93
 
94
94
  case 5:
@@ -96,9 +96,9 @@ var MediaInlineCardLoader = /*#__PURE__*/function (_React$PureComponent) {
96
96
  _yield$Promise$all2 = (0, _slicedToArray2.default)(_yield$Promise$all, 3);
97
97
  mediaClient = _yield$Promise$all2[0];
98
98
  cardModule = _yield$Promise$all2[1];
99
- mediaCardErrorBoundaryModule = _yield$Promise$all2[2];
99
+ mediaInlineErrorBoundaryModule = _yield$Promise$all2[2];
100
100
  MediaInlineCardLoader.MediaInlineCard = mediaClient.withMediaClient(cardModule.MediaInlineCard);
101
- MediaInlineCardLoader.ErrorBoundary = mediaCardErrorBoundaryModule.default;
101
+ MediaInlineCardLoader.ErrorBoundary = mediaInlineErrorBoundaryModule.default;
102
102
 
103
103
  if (this.isMounted) {
104
104
  this.setState({