@atlaskit/smart-card 20.0.3 → 20.0.6

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 (41) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/cjs/extractors/block/index.js +2 -0
  3. package/dist/cjs/state/analytics/useSmartLinkAnalytics.js +26 -6
  4. package/dist/cjs/version.json +1 -1
  5. package/dist/cjs/view/CardWithUrl/loader.js +5 -9
  6. package/dist/cjs/view/FlexibleCard/components/blocks/element-group/index.js +2 -2
  7. package/dist/cjs/view/HoverCard/components/HoverCardComponent.js +143 -0
  8. package/dist/cjs/view/HoverCard/components/{hover-card-content.js → HoverCardContent.js} +21 -25
  9. package/dist/cjs/view/HoverCard/index.js +25 -126
  10. package/dist/cjs/view/HoverCard/styled.js +11 -1
  11. package/dist/cjs/view/HoverCard/utils.js +3 -3
  12. package/dist/es2019/extractors/block/index.js +2 -0
  13. package/dist/es2019/state/analytics/useSmartLinkAnalytics.js +24 -7
  14. package/dist/es2019/version.json +1 -1
  15. package/dist/es2019/view/CardWithUrl/loader.js +6 -10
  16. package/dist/es2019/view/FlexibleCard/components/blocks/element-group/index.js +4 -0
  17. package/dist/es2019/view/HoverCard/components/HoverCardComponent.js +102 -0
  18. package/dist/es2019/view/HoverCard/components/{hover-card-content.js → HoverCardContent.js} +12 -21
  19. package/dist/es2019/view/HoverCard/index.js +26 -97
  20. package/dist/es2019/view/HoverCard/styled.js +8 -0
  21. package/dist/es2019/view/HoverCard/utils.js +1 -1
  22. package/dist/esm/extractors/block/index.js +2 -0
  23. package/dist/esm/state/analytics/useSmartLinkAnalytics.js +27 -7
  24. package/dist/esm/version.json +1 -1
  25. package/dist/esm/view/CardWithUrl/loader.js +6 -10
  26. package/dist/esm/view/FlexibleCard/components/blocks/element-group/index.js +2 -2
  27. package/dist/esm/view/HoverCard/components/HoverCardComponent.js +114 -0
  28. package/dist/esm/view/HoverCard/components/{hover-card-content.js → HoverCardContent.js} +12 -21
  29. package/dist/esm/view/HoverCard/index.js +24 -109
  30. package/dist/esm/view/HoverCard/styled.js +8 -0
  31. package/dist/esm/view/HoverCard/utils.js +1 -1
  32. package/dist/types/state/analytics/useSmartLinkAnalytics.d.ts +9 -0
  33. package/dist/types/state/hooks/useSmartLink.d.ts +2 -0
  34. package/dist/types/view/HoverCard/components/HoverCardComponent.d.ts +4 -0
  35. package/dist/types/view/HoverCard/components/HoverCardContent.d.ts +9 -0
  36. package/dist/types/view/HoverCard/index.d.ts +2 -4
  37. package/dist/types/view/HoverCard/styled.d.ts +2 -0
  38. package/dist/types/view/HoverCard/types.d.ts +7 -0
  39. package/dist/types/view/HoverCard/utils.d.ts +1 -1
  40. package/package.json +1 -1
  41. package/dist/types/view/HoverCard/components/hover-card-content.d.ts +0 -4
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @atlaskit/smart-card
2
2
 
3
+ ## 20.0.6
4
+
5
+ ### Patch Changes
6
+
7
+ - [`afb579e5778`](https://bitbucket.org/atlassian/atlassian-frontend/commits/afb579e5778) - Flexible UI: Fix styling on MetadataBlock and FooterBlock in Firefox and Safari browser
8
+
9
+ ## 20.0.5
10
+
11
+ ### Patch Changes
12
+
13
+ - [`6e4810f82c3`](https://bitbucket.org/atlassian/atlassian-frontend/commits/6e4810f82c3) - wrap hover preview in error boundary and emit failure event
14
+
15
+ ## 20.0.4
16
+
17
+ ### Patch Changes
18
+
19
+ - [`2a5cc0d4297`](https://bitbucket.org/atlassian/atlassian-frontend/commits/2a5cc0d4297) - Block: Update pull request link avatar to author (attributedTo)
20
+
3
21
  ## 20.0.3
4
22
 
5
23
  ### Patch Changes
@@ -84,6 +84,8 @@ var extractBlockUsers = function extractBlockUsers(jsonLd) {
84
84
  if (assignedMembers) {
85
85
  return [assignedMembers];
86
86
  }
87
+ } else if (jsonLd['@type'] === 'atlassian:SourceCodePullRequest') {
88
+ return (0, _extractors.extractPersonCreatedBy)(jsonLd);
87
89
  } else {
88
90
  var updatedBy = (0, _extractors.extractPersonUpdatedBy)(jsonLd);
89
91
  var updatedByMembers;
@@ -32,12 +32,13 @@ var useSmartLinkAnalytics = function useSmartLinkAnalytics(url, dispatchAnalytic
32
32
  var _useSmartLinkContext = (0, _linkProvider.useSmartLinkContext)(),
33
33
  store = _useSmartLinkContext.store;
34
34
 
35
- var state = (0, _linkingCommon.getUrl)(store, url);
36
- var extractedDefinitionId = (0, _helpers.getDefinitionId)(state.details);
37
- var extractedExtensionKey = (0, _helpers.getExtensionKey)(state.details);
38
- var extractedResourceType = (0, _helpers.getResourceType)(state.details);
39
- var extractedSubproduct = (0, _helpers.getSubproduct)(state.details);
40
- var extractedProduct = (0, _helpers.getProduct)(state.details);
35
+ var state = store ? (0, _linkingCommon.getUrl)(store, url) : undefined;
36
+ var details = state ? state.details : undefined;
37
+ var extractedDefinitionId = (0, _helpers.getDefinitionId)(details);
38
+ var extractedExtensionKey = (0, _helpers.getExtensionKey)(details);
39
+ var extractedResourceType = (0, _helpers.getResourceType)(details);
40
+ var extractedSubproduct = (0, _helpers.getSubproduct)(details);
41
+ var extractedProduct = (0, _helpers.getProduct)(details);
41
42
  /** Contains all ui analytics events */
42
43
 
43
44
  var ui = (0, _react.useMemo)(function () {
@@ -172,6 +173,25 @@ var useSmartLinkAnalytics = function useSmartLinkAnalytics(url, dispatchAnalytic
172
173
  dispatchAnalytics((0, _analytics.uiRenderSuccessEvent)(display, status, definitionId, extensionKey));
173
174
  },
174
175
 
176
+ /**
177
+ * This fires an event that represents when a Smart Link renders unsuccessfuly.
178
+ * @param display Whether the card was an Inline, Block, Embed or Flexible UI.
179
+ * @param id The unique ID for this Smart Link.
180
+ * @param error: An error representing why the Smart Link render failed.
181
+ * @param errorInfo: Additional details about the error including the stack trace.
182
+ */
183
+ renderFailedEvent: function renderFailedEvent(display) {
184
+ var id = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultId;
185
+ var error = arguments.length > 2 ? arguments[2] : undefined;
186
+ var errorInfo = arguments.length > 3 ? arguments[3] : undefined;
187
+ // Start and fail the smart-link-rendered experience. If it has already
188
+ // been started nothing happens.
189
+ (0, _ufoExperiences.startUfoExperience)('smart-link-rendered', id);
190
+ (0, _ufoExperiences.failUfoExperience)('smart-link-rendered', id);
191
+ (0, _ufoExperiences.failUfoExperience)('smart-link-authenticated', id);
192
+ dispatchAnalytics((0, _analytics.uiRenderFailedEvent)(display, error, errorInfo));
193
+ },
194
+
175
195
  /**
176
196
  * This fires an event that represents a hover preview being opened.
177
197
  * @param hoverDisplay Whether the hover preview was displayed as a card or embed.
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/smart-card",
3
- "version": "20.0.3",
3
+ "version": "20.0.6",
4
4
  "sideEffects": false
5
5
  }
@@ -21,7 +21,7 @@ var _performance = require("../../utils/performance");
21
21
 
22
22
  var _reactErrorBoundary = require("react-error-boundary");
23
23
 
24
- var _ufoExperiences = require("../../state/analytics/ufoExperiences");
24
+ var _analytics2 = require("../../state/analytics");
25
25
 
26
26
  var _LazyFallback = require("./component-lazy/LazyFallback");
27
27
 
@@ -80,6 +80,7 @@ function CardWithURLRenderer(props) {
80
80
 
81
81
  (0, _analytics.fireSmartLinkEvent)(analyticsPayload, createAnalyticsEvent);
82
82
  }, [appearance, createAnalyticsEvent]);
83
+ var analytics = (0, _analytics2.useSmartLinkAnalytics)(url !== null && url !== void 0 ? url : '', dispatchAnalytics, id);
83
84
  var logError = (0, _react.useCallback)(function (error, info) {
84
85
  var componentStack = info.componentStack; // NB: APIErrors are thrown in response to Object Resolver Service.
85
86
  // In these cases, control is handed back to the Editor. We do not
@@ -93,15 +94,10 @@ function CardWithURLRenderer(props) {
93
94
  else {
94
95
  var errorInfo = {
95
96
  componentStack: componentStack
96
- }; // Start and fail the smart-link-rendered experience. If it has already
97
- // been started nothing happens.
98
-
99
- (0, _ufoExperiences.startUfoExperience)('smart-link-rendered', id);
100
- (0, _ufoExperiences.failUfoExperience)('smart-link-rendered', id);
101
- (0, _ufoExperiences.failUfoExperience)('smart-link-authenticated', id);
102
- dispatchAnalytics((0, _analytics.uiRenderFailedEvent)(appearance, error, errorInfo));
97
+ };
98
+ analytics.ui.renderFailedEvent(appearance, id, error, errorInfo);
103
99
  }
104
- }, [appearance, dispatchAnalytics, id]);
100
+ }, [analytics.ui, appearance, id]);
105
101
 
106
102
  if (!url) {
107
103
  throw new Error('@atlaskit/smart-card: url property is missing.');
@@ -24,11 +24,11 @@ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _temp
24
24
  var getAlignmentStyles = function getAlignmentStyles(align) {
25
25
  switch (align) {
26
26
  case _constants.SmartLinkAlignment.Right:
27
- return (0, _core.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n justify-content: flex-end;\n text-align: right;\n "])));
27
+ return (0, _core.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n -webkit-box-align: end;\n -ms-flex-align: end;\n justify-content: flex-end;\n text-align: right;\n "])));
28
28
 
29
29
  case _constants.SmartLinkAlignment.Left:
30
30
  default:
31
- return (0, _core.css)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n justify-content: flex-start;\n text-align: left;\n "])));
31
+ return (0, _core.css)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n -webkit-box-align: start;\n -ms-flex-align: start;\n justify-content: flex-start;\n text-align: left;\n "])));
32
32
  }
33
33
  };
34
34
 
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.hoverCardClassName = exports.HoverCardComponent = void 0;
11
+
12
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
+
14
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
+
16
+ var _popup = _interopRequireDefault(require("@atlaskit/popup"));
17
+
18
+ var _core = require("@emotion/core");
19
+
20
+ var _react = _interopRequireWildcard(require("react"));
21
+
22
+ var _useSmartLinkActions = require("../../../state/hooks-external/useSmartLinkActions");
23
+
24
+ var _renderers = require("../../../state/renderers");
25
+
26
+ var _store = require("../../../state/store");
27
+
28
+ var _HoverCardContent = _interopRequireDefault(require("../components/HoverCardContent"));
29
+
30
+ var _styled = require("../styled");
31
+
32
+ var _utils = require("../utils");
33
+
34
+ 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); }
35
+
36
+ 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; }
37
+
38
+ /** @jsx jsx */
39
+ var hoverCardClassName = 'smart-links-hover-preview';
40
+ exports.hoverCardClassName = hoverCardClassName;
41
+
42
+ var HoverCardComponent = function HoverCardComponent(_ref) {
43
+ var children = _ref.children,
44
+ url = _ref.url,
45
+ analyticsHandler = _ref.analyticsHandler,
46
+ analytics = _ref.analytics;
47
+ var delay = 300;
48
+
49
+ var _React$useState = _react.default.useState(false),
50
+ _React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
51
+ isOpen = _React$useState2[0],
52
+ setIsOpen = _React$useState2[1];
53
+
54
+ var fadeOutTimeoutId = (0, _react.useRef)();
55
+ var fadeInTimeoutId = (0, _react.useRef)();
56
+ var cardOpenTime = (0, _react.useRef)();
57
+ var renderers = (0, _renderers.useSmartLinkRenderers)();
58
+ var linkState = (0, _store.useSmartCardState)(url);
59
+ var hoverDisplay = 'card';
60
+ var invokeMethod = 'mouse_hover';
61
+ var hideCard = (0, _react.useCallback)(function () {
62
+ //Check its previously open to avoid firing events when moving between the child and hover card components
63
+ if (isOpen === true && cardOpenTime.current) {
64
+ var hoverTime = Date.now() - cardOpenTime.current;
65
+ analytics.ui.hoverCardDismissedEvent('card', hoverTime, 'mouse_hover');
66
+ }
67
+
68
+ setIsOpen(false);
69
+ }, [analytics.ui, isOpen]);
70
+ var initHideCard = (0, _react.useCallback)(function () {
71
+ if (fadeInTimeoutId.current) {
72
+ clearTimeout(fadeInTimeoutId.current);
73
+ }
74
+
75
+ fadeOutTimeoutId.current = setTimeout(function () {
76
+ return hideCard();
77
+ }, delay);
78
+ }, [hideCard]);
79
+ var initShowCard = (0, _react.useCallback)(function () {
80
+ if (fadeOutTimeoutId.current) {
81
+ clearTimeout(fadeOutTimeoutId.current);
82
+ }
83
+
84
+ fadeInTimeoutId.current = setTimeout(function () {
85
+ //Check if its previously closed to avoid firing events when moving between the child and hover card components
86
+ if (isOpen === false) {
87
+ cardOpenTime.current = Date.now();
88
+ analytics.ui.hoverCardViewedEvent(hoverDisplay, invokeMethod);
89
+ }
90
+
91
+ setIsOpen(true);
92
+ }, delay);
93
+ }, [delay, isOpen, analytics.ui]);
94
+ var linkActions = (0, _useSmartLinkActions.useSmartLinkActions)({
95
+ url: url,
96
+ appearance: _utils.SMART_CARD_ANALYTICS_DISPLAY,
97
+ analyticsHandler: analyticsHandler
98
+ });
99
+ var onActionClick = (0, _react.useCallback)(function (actionId) {
100
+ if (actionId === 'preview-content') {
101
+ hideCard();
102
+ }
103
+ }, [hideCard]); // Stop hover preview content to propagate event to parent.
104
+
105
+ var onClick = (0, _react.useCallback)(function (e) {
106
+ return e.stopPropagation();
107
+ }, []);
108
+ return (0, _core.jsx)(_popup.default, {
109
+ testId: "hover-card",
110
+ isOpen: isOpen,
111
+ onClose: hideCard,
112
+ placement: "bottom-start",
113
+ content: function content(_ref2) {
114
+ var update = _ref2.update;
115
+ return (0, _core.jsx)("div", {
116
+ onMouseEnter: initShowCard,
117
+ onMouseLeave: initHideCard,
118
+ onClick: onClick,
119
+ css: _styled.HoverCardContainer // class name for trello to exclude click events
120
+ ,
121
+ className: hoverCardClassName
122
+ }, (0, _core.jsx)(_HoverCardContent.default, {
123
+ analytics: analytics,
124
+ cardActions: linkActions,
125
+ cardState: linkState,
126
+ onActionClick: onActionClick,
127
+ onResolve: update,
128
+ renderers: renderers,
129
+ url: url
130
+ }));
131
+ },
132
+ trigger: function trigger(triggerProps) {
133
+ return (0, _core.jsx)("span", (0, _extends2.default)({}, triggerProps, {
134
+ onMouseEnter: initShowCard,
135
+ onMouseLeave: initHideCard
136
+ }), children);
137
+ },
138
+ zIndex: 511 // Temporary fix for Confluence inline comment on editor mod has z-index of 500, Jira issue view has z-index of 510
139
+
140
+ });
141
+ };
142
+
143
+ exports.HoverCardComponent = HoverCardComponent;
@@ -7,44 +7,36 @@ var _typeof = require("@babel/runtime/helpers/typeof");
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
10
- exports.default = void 0;
10
+ exports.toFooterActions = exports.getOpenAction = exports.default = void 0;
11
11
 
12
- var _react = _interopRequireWildcard(require("react"));
13
-
14
- var _extractMetadata2 = require("../../../extractors/hover/extractMetadata");
12
+ var _shortcut = _interopRequireDefault(require("@atlaskit/icon/glyph/shortcut"));
15
13
 
16
- var _utils = require("../utils");
14
+ var _extractors = require("@atlaskit/linking-common/extractors");
17
15
 
18
- var _extractPreview = _interopRequireDefault(require("../../../extractors/flexible/extract-preview"));
16
+ var _react = _interopRequireWildcard(require("react"));
19
17
 
20
18
  var _constants = require("../../../constants");
21
19
 
22
- var _FlexibleCard = _interopRequireDefault(require("../../FlexibleCard"));
20
+ var _extractPreview = _interopRequireDefault(require("../../../extractors/flexible/extract-preview"));
23
21
 
24
- var _blocks = require("../../FlexibleCard/components/blocks");
22
+ var _extractMetadata2 = require("../../../extractors/hover/extractMetadata");
25
23
 
26
- var _utils2 = require("../../../utils");
24
+ var _helpers = require("../../../state/helpers");
27
25
 
28
- var _shortcut = _interopRequireDefault(require("@atlaskit/icon/glyph/shortcut"));
26
+ var _utils = require("../../../utils");
29
27
 
30
- var _helpers = require("../../../state/helpers");
28
+ var _FlexibleCard = _interopRequireDefault(require("../../FlexibleCard"));
29
+
30
+ var _blocks = require("../../FlexibleCard/components/blocks");
31
31
 
32
32
  var _styled = require("../styled");
33
33
 
34
- var _extractors = require("@atlaskit/linking-common/extractors");
34
+ var _utils2 = require("../utils");
35
35
 
36
36
  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); }
37
37
 
38
38
  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; }
39
39
 
40
- var flexibleUiOptions = {
41
- hideElevation: true,
42
- size: _constants.SmartLinkSize.Medium,
43
- // eslint-disable-next-line @atlaskit/design-system/ensure-design-token-usage
44
- theme: _constants.SmartLinkTheme.Black,
45
- hidePadding: true
46
- };
47
-
48
40
  var getOpenAction = function getOpenAction(url, analytics, onActionClick) {
49
41
  return {
50
42
  name: _constants.ActionName.CustomAction,
@@ -65,6 +57,8 @@ var getOpenAction = function getOpenAction(url, analytics, onActionClick) {
65
57
  };
66
58
  };
67
59
 
60
+ exports.getOpenAction = getOpenAction;
61
+
68
62
  var toFooterActions = function toFooterActions(cardActions, onActionClick) {
69
63
  return cardActions.map(function (action) {
70
64
  return {
@@ -82,6 +76,8 @@ var toFooterActions = function toFooterActions(cardActions, onActionClick) {
82
76
  });
83
77
  };
84
78
 
79
+ exports.toFooterActions = toFooterActions;
80
+
85
81
  var HoverCardContent = function HoverCardContent(_ref) {
86
82
  var _cardState$details;
87
83
 
@@ -96,14 +92,14 @@ var HoverCardContent = function HoverCardContent(_ref) {
96
92
  (0, _react.useEffect)(function () {
97
93
  // Since hover preview only render on resolved status,
98
94
  // there is no need to check for statuses.
99
- analytics.ui.renderSuccessEvent(_utils.HOVER_CARD_ANALYTICS_DISPLAY, cardState.status);
95
+ analytics.ui.renderSuccessEvent(_utils2.SMART_CARD_ANALYTICS_DISPLAY, cardState.status);
100
96
  }, [analytics.ui, cardState.status]);
101
97
  var extensionKey = (0, _react.useMemo)(function () {
102
98
  return (0, _helpers.getExtensionKey)(cardState.details);
103
99
  }, [cardState.details]);
104
100
  var onClick = (0, _react.useCallback)(function (event) {
105
- var isModifierKeyPressed = (0, _utils2.isSpecialEvent)(event);
106
- analytics.ui.cardClickedEvent(undefined, _utils.HOVER_CARD_ANALYTICS_DISPLAY, cardState.status, undefined, undefined, isModifierKeyPressed, undefined, undefined, undefined, 'titleGoToLink');
101
+ var isModifierKeyPressed = (0, _utils.isSpecialEvent)(event);
102
+ analytics.ui.cardClickedEvent(undefined, _utils2.SMART_CARD_ANALYTICS_DISPLAY, cardState.status, undefined, undefined, isModifierKeyPressed, undefined, undefined, undefined, 'titleGoToLink');
107
103
  }, [cardState.status, analytics.ui]);
108
104
  var titleActions = (0, _react.useMemo)(function () {
109
105
  return [getOpenAction(url, analytics, onActionClick)];
@@ -114,7 +110,7 @@ var HoverCardContent = function HoverCardContent(_ref) {
114
110
  var data = (_cardState$details = cardState.details) === null || _cardState$details === void 0 ? void 0 : _cardState$details.data;
115
111
  var types = data ? (0, _extractors.extractType)(data) : undefined; //TODO: EDM-3224 deleted simulated and use real JsonLd
116
112
 
117
- var _extractMetadata = (0, _extractMetadata2.extractMetadata)((0, _utils.getSimulatedMetadata)(extensionKey, types)),
113
+ var _extractMetadata = (0, _extractMetadata2.extractMetadata)((0, _utils2.getSimulatedMetadata)(extensionKey, types)),
118
114
  primary = _extractMetadata.primary,
119
115
  secondary = _extractMetadata.secondary,
120
116
  subtitle = _extractMetadata.subtitle;
@@ -126,7 +122,7 @@ var HoverCardContent = function HoverCardContent(_ref) {
126
122
  onClick: onClick,
127
123
  onResolve: onResolve,
128
124
  renderers: renderers,
129
- ui: flexibleUiOptions,
125
+ ui: _styled.flexibleUiOptions,
130
126
  url: url
131
127
  }, /*#__PURE__*/_react.default.createElement(_blocks.TitleBlock, {
132
128
  actions: titleActions,
@@ -2,153 +2,52 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
- var _typeof = require("@babel/runtime/helpers/typeof");
6
-
7
5
  Object.defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
- exports.hoverCardClassName = exports.HoverCardComponent = exports.HoverCard = void 0;
8
+ exports.HoverCard = void 0;
11
9
 
12
10
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
11
 
14
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
+ var _analyticsNext = require("@atlaskit/analytics-next");
15
13
 
16
14
  var _core = require("@emotion/core");
17
15
 
18
- var _react = _interopRequireWildcard(require("react"));
19
-
20
- var _popup = _interopRequireDefault(require("@atlaskit/popup"));
21
-
22
- var _useSmartLinkActions = require("../../state/hooks-external/useSmartLinkActions");
23
-
24
- var _styled = require("./styled");
16
+ var _react = require("react");
25
17
 
26
- var _analyticsNext = require("@atlaskit/analytics-next");
27
-
28
- var _analytics = require("../../utils/analytics");
29
-
30
- var _store = require("../../state/store");
18
+ var _reactErrorBoundary = require("react-error-boundary");
31
19
 
32
- var _analytics2 = require("../../state/analytics");
20
+ var _analytics = require("../../state/analytics");
33
21
 
34
- var _renderers = require("../../state/renderers");
22
+ var _analytics2 = require("../../utils/analytics");
35
23
 
36
- var _hoverCardContent = _interopRequireDefault(require("./components/hover-card-content"));
24
+ var _HoverCardComponent = require("./components/HoverCardComponent");
37
25
 
38
26
  var _utils = require("./utils");
39
27
 
40
- 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); }
41
-
42
- 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; }
43
-
44
28
  /** @jsx jsx */
45
- var hoverCardClassName = 'smart-links-hover-preview';
46
- exports.hoverCardClassName = hoverCardClassName;
47
-
48
- var HoverCardComponent = function HoverCardComponent(_ref) {
49
- var children = _ref.children,
50
- id = _ref.id,
51
- url = _ref.url,
52
- createAnalyticsEvent = _ref.createAnalyticsEvent;
29
+ var HoverCardWithErrorBoundary = function HoverCardWithErrorBoundary(props) {
30
+ var url = props.url,
31
+ id = props.id,
32
+ children = props.children,
33
+ createAnalyticsEvent = props.createAnalyticsEvent;
53
34
  var analyticsHandler = (0, _react.useCallback)(function (analyticsPayload) {
54
- (0, _analytics.fireSmartLinkEvent)(analyticsPayload, createAnalyticsEvent);
35
+ (0, _analytics2.fireSmartLinkEvent)(analyticsPayload, createAnalyticsEvent);
55
36
  }, [createAnalyticsEvent]);
56
- var delay = 300;
57
-
58
- var _React$useState = _react.default.useState(false),
59
- _React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
60
- isOpen = _React$useState2[0],
61
- setIsOpen = _React$useState2[1];
62
-
63
- var fadeOutTimeoutId = (0, _react.useRef)();
64
- var fadeInTimeoutId = (0, _react.useRef)();
65
- var cardOpenTime = (0, _react.useRef)();
66
- var renderers = (0, _renderers.useSmartLinkRenderers)();
67
- var linkState = (0, _store.useSmartCardState)(url);
68
- var analytics = (0, _analytics2.useSmartLinkAnalytics)(url, analyticsHandler, id);
69
- var hideCard = (0, _react.useCallback)(function () {
70
- //Check its previously open to avoid firing events when moving between the child and hover card components
71
- if (isOpen === true && cardOpenTime.current) {
72
- var hoverTime = Date.now() - cardOpenTime.current;
73
- analytics.ui.hoverCardDismissedEvent('card', hoverTime, 'mouse_hover');
74
- }
75
-
76
- setIsOpen(false);
77
- }, [analytics.ui, isOpen]);
78
- var initHideCard = (0, _react.useCallback)(function () {
79
- if (fadeInTimeoutId.current) {
80
- clearTimeout(fadeInTimeoutId.current);
81
- }
82
-
83
- fadeOutTimeoutId.current = setTimeout(function () {
84
- return hideCard();
85
- }, delay);
86
- }, [hideCard]);
87
- var initShowCard = (0, _react.useCallback)(function () {
88
- if (fadeOutTimeoutId.current) {
89
- clearTimeout(fadeOutTimeoutId.current);
90
- }
91
-
92
- fadeInTimeoutId.current = setTimeout(function () {
93
- //Check if its previously closed to avoid firing events when moving between the child and hover card components
94
- if (isOpen === false) {
95
- cardOpenTime.current = Date.now();
96
- analytics.ui.hoverCardViewedEvent('card', 'mouse_hover');
97
- }
98
-
99
- setIsOpen(true);
100
- }, delay);
101
- }, [delay, isOpen, analytics.ui]);
102
- var linkActions = (0, _useSmartLinkActions.useSmartLinkActions)({
103
- url: url,
104
- appearance: _utils.HOVER_CARD_ANALYTICS_DISPLAY,
105
- analyticsHandler: analyticsHandler
106
- });
107
- var onActionClick = (0, _react.useCallback)(function (actionId) {
108
- if (actionId === 'preview-content') {
109
- hideCard();
110
- }
111
- }, [hideCard]); // Stop hover preview content to propagate event to parent.
112
-
113
- var onClick = (0, _react.useCallback)(function (e) {
114
- return e.stopPropagation();
115
- }, []);
116
- return (0, _core.jsx)(_popup.default, {
117
- testId: "hover-card",
118
- isOpen: isOpen,
119
- onClose: hideCard,
120
- placement: "bottom-start",
121
- content: function content(_ref2) {
122
- var update = _ref2.update;
123
- return (0, _core.jsx)("div", {
124
- onMouseEnter: initShowCard,
125
- onMouseLeave: initHideCard,
126
- className: hoverCardClassName,
127
- css: _styled.HoverCardContainer,
128
- onClick: onClick
129
- }, (0, _core.jsx)(_hoverCardContent.default, {
130
- analytics: analytics,
131
- cardActions: linkActions,
132
- cardState: linkState,
133
- onActionClick: onActionClick,
134
- onResolve: update,
135
- renderers: renderers,
136
- url: url
137
- }));
138
- },
139
- trigger: function trigger(triggerProps) {
140
- return (0, _core.jsx)("span", (0, _extends2.default)({}, triggerProps, {
141
- onMouseEnter: initShowCard,
142
- onMouseLeave: initHideCard
143
- }), children);
144
- },
145
- zIndex: 511 // Temporary fix for Confluence inline comment on editor mod has z-index of 500, Jira issue view has z-index of 510
146
-
147
- });
37
+ var analytics = (0, _analytics.useSmartLinkAnalytics)(url, analyticsHandler, id);
38
+ var onError = (0, _react.useCallback)(function (error, info) {
39
+ analytics.ui.renderFailedEvent(_utils.SMART_CARD_ANALYTICS_DISPLAY, id, error, info);
40
+ }, [analytics.ui, id]);
41
+ return (0, _core.jsx)(_reactErrorBoundary.ErrorBoundary, {
42
+ fallback: children,
43
+ onError: onError
44
+ }, (0, _core.jsx)(_HoverCardComponent.HoverCardComponent, (0, _extends2.default)({}, props, {
45
+ analyticsHandler: analyticsHandler,
46
+ analytics: analytics
47
+ }), children));
148
48
  };
149
49
 
150
- exports.HoverCardComponent = HoverCardComponent;
151
50
  var HoverCard = (0, _analyticsNext.withAnalyticsContext)({
152
51
  source: 'smartLinkPreviewHoverCard'
153
- })((0, _analyticsNext.withAnalyticsEvents)()(HoverCardComponent));
52
+ })((0, _analyticsNext.withAnalyticsEvents)()(HoverCardWithErrorBoundary));
154
53
  exports.HoverCard = HoverCard;
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.titleBlockCss = exports.metadataBlockCss = exports.footerBlockCss = exports.HoverCardContainer = void 0;
8
+ exports.titleBlockCss = exports.metadataBlockCss = exports.footerBlockCss = exports.flexibleUiOptions = exports.HoverCardContainer = void 0;
9
9
 
10
10
  var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
11
11
 
@@ -13,8 +13,18 @@ var _core = require("@emotion/core");
13
13
 
14
14
  var _index = require("../../index");
15
15
 
16
+ var _constants = require("../../constants");
17
+
16
18
  var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
17
19
 
20
+ var flexibleUiOptions = {
21
+ hideElevation: true,
22
+ size: _constants.SmartLinkSize.Medium,
23
+ // eslint-disable-next-line @atlaskit/design-system/ensure-design-token-usage
24
+ theme: _constants.SmartLinkTheme.Black,
25
+ hidePadding: true
26
+ };
27
+ exports.flexibleUiOptions = flexibleUiOptions;
18
28
  var blockGap = '0.5rem';
19
29
  var elementGap = '0.5rem';
20
30
  var separatorCss = (0, _core.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n [data-separator] + [data-separator]:before {\n margin-right: ", ";\n }\n"])), elementGap);
@@ -3,12 +3,12 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getSimulatedMetadata = exports.HOVER_CARD_ANALYTICS_DISPLAY = void 0;
6
+ exports.getSimulatedMetadata = exports.SMART_CARD_ANALYTICS_DISPLAY = void 0;
7
7
 
8
8
  var _constants = require("../../constants");
9
9
 
10
- var HOVER_CARD_ANALYTICS_DISPLAY = 'flexible';
11
- exports.HOVER_CARD_ANALYTICS_DISPLAY = HOVER_CARD_ANALYTICS_DISPLAY;
10
+ var SMART_CARD_ANALYTICS_DISPLAY = 'flexible';
11
+ exports.SMART_CARD_ANALYTICS_DISPLAY = SMART_CARD_ANALYTICS_DISPLAY;
12
12
 
13
13
  var getSimulatedMetadata = function getSimulatedMetadata() {
14
14
  var extensionKey = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
@@ -55,6 +55,8 @@ export const extractBlockUsers = jsonLd => {
55
55
  if (assignedMembers) {
56
56
  return [assignedMembers];
57
57
  }
58
+ } else if (jsonLd['@type'] === 'atlassian:SourceCodePullRequest') {
59
+ return extractPersonCreatedBy(jsonLd);
58
60
  } else {
59
61
  const updatedBy = extractPersonUpdatedBy(jsonLd);
60
62
  let updatedByMembers;