@atlaskit/smart-card 20.0.4 → 20.0.5
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.
- package/CHANGELOG.md +6 -0
- package/dist/cjs/state/analytics/useSmartLinkAnalytics.js +26 -6
- package/dist/cjs/version.json +1 -1
- package/dist/cjs/view/CardWithUrl/loader.js +5 -9
- package/dist/cjs/view/HoverCard/components/HoverCardComponent.js +143 -0
- package/dist/cjs/view/HoverCard/components/{hover-card-content.js → HoverCardContent.js} +21 -25
- package/dist/cjs/view/HoverCard/index.js +25 -126
- package/dist/cjs/view/HoverCard/styled.js +11 -1
- package/dist/cjs/view/HoverCard/utils.js +3 -3
- package/dist/es2019/state/analytics/useSmartLinkAnalytics.js +24 -7
- package/dist/es2019/version.json +1 -1
- package/dist/es2019/view/CardWithUrl/loader.js +6 -10
- package/dist/es2019/view/HoverCard/components/HoverCardComponent.js +102 -0
- package/dist/es2019/view/HoverCard/components/{hover-card-content.js → HoverCardContent.js} +12 -21
- package/dist/es2019/view/HoverCard/index.js +26 -97
- package/dist/es2019/view/HoverCard/styled.js +8 -0
- package/dist/es2019/view/HoverCard/utils.js +1 -1
- package/dist/esm/state/analytics/useSmartLinkAnalytics.js +27 -7
- package/dist/esm/version.json +1 -1
- package/dist/esm/view/CardWithUrl/loader.js +6 -10
- package/dist/esm/view/HoverCard/components/HoverCardComponent.js +114 -0
- package/dist/esm/view/HoverCard/components/{hover-card-content.js → HoverCardContent.js} +12 -21
- package/dist/esm/view/HoverCard/index.js +24 -109
- package/dist/esm/view/HoverCard/styled.js +8 -0
- package/dist/esm/view/HoverCard/utils.js +1 -1
- package/dist/types/state/analytics/useSmartLinkAnalytics.d.ts +9 -0
- package/dist/types/state/hooks/useSmartLink.d.ts +2 -0
- package/dist/types/view/HoverCard/components/HoverCardComponent.d.ts +4 -0
- package/dist/types/view/HoverCard/components/HoverCardContent.d.ts +9 -0
- package/dist/types/view/HoverCard/index.d.ts +2 -4
- package/dist/types/view/HoverCard/styled.d.ts +2 -0
- package/dist/types/view/HoverCard/types.d.ts +7 -0
- package/dist/types/view/HoverCard/utils.d.ts +1 -1
- package/package.json +1 -1
- package/dist/types/view/HoverCard/components/hover-card-content.d.ts +0 -4
package/CHANGELOG.md
CHANGED
|
@@ -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
|
|
37
|
-
var
|
|
38
|
-
var
|
|
39
|
-
var
|
|
40
|
-
var
|
|
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.
|
package/dist/cjs/version.json
CHANGED
|
@@ -21,7 +21,7 @@ var _performance = require("../../utils/performance");
|
|
|
21
21
|
|
|
22
22
|
var _reactErrorBoundary = require("react-error-boundary");
|
|
23
23
|
|
|
24
|
-
var
|
|
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
|
-
};
|
|
97
|
-
|
|
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
|
-
}, [
|
|
100
|
+
}, [analytics.ui, appearance, id]);
|
|
105
101
|
|
|
106
102
|
if (!url) {
|
|
107
103
|
throw new Error('@atlaskit/smart-card: url property is missing.');
|
|
@@ -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
|
|
13
|
-
|
|
14
|
-
var _extractMetadata2 = require("../../../extractors/hover/extractMetadata");
|
|
12
|
+
var _shortcut = _interopRequireDefault(require("@atlaskit/icon/glyph/shortcut"));
|
|
15
13
|
|
|
16
|
-
var
|
|
14
|
+
var _extractors = require("@atlaskit/linking-common/extractors");
|
|
17
15
|
|
|
18
|
-
var
|
|
16
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
19
17
|
|
|
20
18
|
var _constants = require("../../../constants");
|
|
21
19
|
|
|
22
|
-
var
|
|
20
|
+
var _extractPreview = _interopRequireDefault(require("../../../extractors/flexible/extract-preview"));
|
|
23
21
|
|
|
24
|
-
var
|
|
22
|
+
var _extractMetadata2 = require("../../../extractors/hover/extractMetadata");
|
|
25
23
|
|
|
26
|
-
var
|
|
24
|
+
var _helpers = require("../../../state/helpers");
|
|
27
25
|
|
|
28
|
-
var
|
|
26
|
+
var _utils = require("../../../utils");
|
|
29
27
|
|
|
30
|
-
var
|
|
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
|
|
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(
|
|
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,
|
|
106
|
-
analytics.ui.cardClickedEvent(undefined,
|
|
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,
|
|
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.
|
|
8
|
+
exports.HoverCard = void 0;
|
|
11
9
|
|
|
12
10
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
13
11
|
|
|
14
|
-
var
|
|
12
|
+
var _analyticsNext = require("@atlaskit/analytics-next");
|
|
15
13
|
|
|
16
14
|
var _core = require("@emotion/core");
|
|
17
15
|
|
|
18
|
-
var _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
|
|
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
|
|
20
|
+
var _analytics = require("../../state/analytics");
|
|
33
21
|
|
|
34
|
-
var
|
|
22
|
+
var _analytics2 = require("../../utils/analytics");
|
|
35
23
|
|
|
36
|
-
var
|
|
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
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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,
|
|
35
|
+
(0, _analytics2.fireSmartLinkEvent)(analyticsPayload, createAnalyticsEvent);
|
|
55
36
|
}, [createAnalyticsEvent]);
|
|
56
|
-
var
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
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)()(
|
|
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.
|
|
6
|
+
exports.getSimulatedMetadata = exports.SMART_CARD_ANALYTICS_DISPLAY = void 0;
|
|
7
7
|
|
|
8
8
|
var _constants = require("../../constants");
|
|
9
9
|
|
|
10
|
-
var
|
|
11
|
-
exports.
|
|
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] : '';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useMemo } from 'react';
|
|
2
2
|
import { getUrl } from '@atlaskit/linking-common';
|
|
3
|
-
import { uiAuthEvent, uiAuthAlternateAccountEvent, uiCardClickedEvent, uiActionClickedEvent, uiClosedAuthEvent, uiRenderSuccessEvent, uiHoverCardViewedEvent, uiHoverCardDismissedEvent, uiHoverCardOpenLinkClickedEvent, invokeSucceededEvent, invokeFailedEvent, connectSucceededEvent, connectFailedEvent, trackAppAccountConnected, screenAuthPopupEvent, instrumentEvent } from '../../utils/analytics';
|
|
3
|
+
import { uiAuthEvent, uiAuthAlternateAccountEvent, uiCardClickedEvent, uiActionClickedEvent, uiClosedAuthEvent, uiRenderSuccessEvent, uiRenderFailedEvent, uiHoverCardViewedEvent, uiHoverCardDismissedEvent, uiHoverCardOpenLinkClickedEvent, invokeSucceededEvent, invokeFailedEvent, connectSucceededEvent, connectFailedEvent, trackAppAccountConnected, screenAuthPopupEvent, instrumentEvent } from '../../utils/analytics';
|
|
4
4
|
import { failUfoExperience, startUfoExperience, succeedUfoExperience } from './ufoExperiences';
|
|
5
5
|
import { getDefinitionId, getExtensionKey, getResourceType, getSubproduct, getProduct } from '../helpers';
|
|
6
6
|
import { useSmartLinkContext } from '@atlaskit/link-provider';
|
|
@@ -20,12 +20,13 @@ export const useSmartLinkAnalytics = (url, dispatchAnalytics, id, defaultLocatio
|
|
|
20
20
|
const {
|
|
21
21
|
store
|
|
22
22
|
} = useSmartLinkContext();
|
|
23
|
-
const state = getUrl(store, url);
|
|
24
|
-
const
|
|
25
|
-
const
|
|
26
|
-
const
|
|
27
|
-
const
|
|
28
|
-
const
|
|
23
|
+
const state = store ? getUrl(store, url) : undefined;
|
|
24
|
+
const details = state ? state.details : undefined;
|
|
25
|
+
const extractedDefinitionId = getDefinitionId(details);
|
|
26
|
+
const extractedExtensionKey = getExtensionKey(details);
|
|
27
|
+
const extractedResourceType = getResourceType(details);
|
|
28
|
+
const extractedSubproduct = getSubproduct(details);
|
|
29
|
+
const extractedProduct = getProduct(details);
|
|
29
30
|
/** Contains all ui analytics events */
|
|
30
31
|
|
|
31
32
|
const ui = useMemo(() => ({
|
|
@@ -124,6 +125,22 @@ export const useSmartLinkAnalytics = (url, dispatchAnalytics, id, defaultLocatio
|
|
|
124
125
|
dispatchAnalytics(uiRenderSuccessEvent(display, status, definitionId, extensionKey));
|
|
125
126
|
},
|
|
126
127
|
|
|
128
|
+
/**
|
|
129
|
+
* This fires an event that represents when a Smart Link renders unsuccessfuly.
|
|
130
|
+
* @param display Whether the card was an Inline, Block, Embed or Flexible UI.
|
|
131
|
+
* @param id The unique ID for this Smart Link.
|
|
132
|
+
* @param error: An error representing why the Smart Link render failed.
|
|
133
|
+
* @param errorInfo: Additional details about the error including the stack trace.
|
|
134
|
+
*/
|
|
135
|
+
renderFailedEvent: (display, id = defaultId, error, errorInfo) => {
|
|
136
|
+
// Start and fail the smart-link-rendered experience. If it has already
|
|
137
|
+
// been started nothing happens.
|
|
138
|
+
startUfoExperience('smart-link-rendered', id);
|
|
139
|
+
failUfoExperience('smart-link-rendered', id);
|
|
140
|
+
failUfoExperience('smart-link-authenticated', id);
|
|
141
|
+
dispatchAnalytics(uiRenderFailedEvent(display, error, errorInfo));
|
|
142
|
+
},
|
|
143
|
+
|
|
127
144
|
/**
|
|
128
145
|
* This fires an event that represents a hover preview being opened.
|
|
129
146
|
* @param hoverDisplay Whether the hover preview was displayed as a card or embed.
|
package/dist/es2019/version.json
CHANGED